From 2f51583c8b890cbe9bd7aa5a093e5ec2d53cd4a5 Mon Sep 17 00:00:00 2001 From: Wadeck Follonier Date: Fri, 7 Feb 2020 14:40:08 +0100 Subject: [PATCH] [JENKINS-60867] Prevent creation of duplicated SetupWizard singleton instances on Jenkins startup (#4456) * [JENKINS-60867] Blank page after SetupWizard: root cause * Correct a test that was a bit too greedy --- core/src/main/java/jenkins/model/Jenkins.java | 2 +- test/src/test/java/jenkins/ExtensionFilterTest.java | 13 ++++++++++--- 2 files changed, 11 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/jenkins/model/Jenkins.java b/core/src/main/java/jenkins/model/Jenkins.java index dc7342bf8e..b7a51f00ef 100644 --- a/core/src/main/java/jenkins/model/Jenkins.java +++ b/core/src/main/java/jenkins/model/Jenkins.java @@ -3292,7 +3292,7 @@ public class Jenkins extends AbstractCIBase implements DirectlyModifiableTopLeve for (Action a : getExtensionList(RootAction.class)) if (!actions.contains(a)) actions.add(a); - setupWizard = new SetupWizard(); + setupWizard = ExtensionList.lookupSingleton(SetupWizard.class); getInstallState().initializeState(); } }); diff --git a/test/src/test/java/jenkins/ExtensionFilterTest.java b/test/src/test/java/jenkins/ExtensionFilterTest.java index 54ae39b750..abc0a66b6a 100644 --- a/test/src/test/java/jenkins/ExtensionFilterTest.java +++ b/test/src/test/java/jenkins/ExtensionFilterTest.java @@ -1,10 +1,14 @@ package jenkins; +import static org.hamcrest.Matchers.hasSize; +import static org.junit.Assert.assertThat; import static org.junit.Assert.assertTrue; import hudson.ExtensionComponent; import hudson.console.ConsoleAnnotatorFactory; import hudson.model.PageDecorator; +import jenkins.install.SetupWizard; +import org.hamcrest.Matchers; import org.junit.Rule; import org.junit.Test; import org.jvnet.hudson.test.JenkinsRule; @@ -20,7 +24,7 @@ public class ExtensionFilterTest { @Test public void filter() { - assertTrue(PageDecorator.all().isEmpty()); + assertThat(PageDecorator.all(), hasSize(1)); assertTrue(ConsoleAnnotatorFactory.all().isEmpty()); } @@ -28,10 +32,13 @@ public class ExtensionFilterTest { public static class Impl extends ExtensionFilter { @Override public boolean allows(Class type, ExtensionComponent component) { - if (type==ConsoleAnnotatorFactory.class) + if (type == ConsoleAnnotatorFactory.class) { return false; - if (component.isDescriptorOf(PageDecorator.class)) + } + // SetupWizard is required during startup + if (component.isDescriptorOf(PageDecorator.class) && !component.isDescriptorOf(SetupWizard.class)) { return false; + } return true; } }