From c67dddccafdbeae89e4c3ded351f7fd7fb04d5b0 Mon Sep 17 00:00:00 2001 From: Kirill Merkushev Date: Mon, 12 Feb 2018 21:22:33 +0300 Subject: [PATCH 1/4] move all init logic to special rule @ConfiguredWithCode --- .../plugins/casc/ActiveDirectoryTest.java | 20 +++++++++--- .../plugins/casc/AgentProtocolsTest.java | 12 ++++--- .../casc/DataBoundConfiguratorTest.java | 5 ++- .../plugins/casc/DockerCloudTest.java | 20 ++++++------ .../plugins/casc/GitToolInstallationTest.java | 10 ++++-- .../casc/GithubOrganisationFolderTest.java | 13 ++++---- .../plugins/casc/GlobalLibrariesTest.java | 18 +++++------ .../plugins/casc/JenkinsConfiguratorTest.java | 21 +++++++++---- .../JobDslGlobaSecurityConfigurationTest.java | 26 ++++++++++++---- .../plugins/casc/LDAPSecurityRealmTest.java | 21 +++++++++---- .../jenkinsci/plugins/casc/MailerTest.java | 12 ++++--- .../casc/PrimitiveConfiguratorTest.java | 7 +++-- .../jenkinsci/plugins/casc/SeedJobTest.java | 10 ++++-- .../plugins/casc/SystemCredentialsTest.java | 26 +++++++++++----- .../AdminWhitelistRuleConfiguratorTest.java | 13 +++++--- ...nPrivateSecurityRealmConfiguratorTest.java | 17 ++++++---- ...AuthorizationStrategyConfiguratorTest.java | 15 ++++++--- .../GlobalMatrixAuthorizationTest.java | 8 ++++- .../rolebasedauth/RoleStrategyTest.java | 17 +++++----- .../casc/misc/CodeConfiguratorRunner.java | 31 +++++++++++++++++++ .../plugins/casc/misc/ConfiguredWithCode.java | 20 ++++++++++++ .../plugins/casc/misc/TestConfiguration.java | 30 ++++++++++++++++++ 22 files changed, 274 insertions(+), 98 deletions(-) create mode 100644 src/test/java/org/jenkinsci/plugins/casc/misc/CodeConfiguratorRunner.java create mode 100644 src/test/java/org/jenkinsci/plugins/casc/misc/ConfiguredWithCode.java create mode 100644 src/test/java/org/jenkinsci/plugins/casc/misc/TestConfiguration.java diff --git a/src/test/java/org/jenkinsci/plugins/casc/ActiveDirectoryTest.java b/src/test/java/org/jenkinsci/plugins/casc/ActiveDirectoryTest.java index b124206e..720936c9 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/ActiveDirectoryTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/ActiveDirectoryTest.java @@ -3,8 +3,12 @@ package org.jenkinsci.plugins.casc; import hudson.plugins.active_directory.ActiveDirectoryDomain; import hudson.plugins.active_directory.ActiveDirectorySecurityRealm; import jenkins.model.Jenkins; +import org.jenkinsci.plugins.casc.misc.CodeConfiguratorRunner; +import org.jenkinsci.plugins.casc.misc.ConfiguredWithCode; import org.junit.Rule; import org.junit.Test; +import org.junit.rules.ExternalResource; +import org.junit.rules.RuleChain; import org.jvnet.hudson.test.JenkinsRule; import static org.junit.Assert.assertEquals; @@ -15,16 +19,22 @@ import static org.junit.Assert.assertTrue; */ public class ActiveDirectoryTest { + public JenkinsRule j = new JenkinsRule(); + public CodeConfiguratorRunner config = new CodeConfiguratorRunner(); @Rule - public JenkinsRule j = new JenkinsRule(); + public RuleChain chain = RuleChain.outerRule(j) + .around(new ExternalResource() { + @Override + protected void before() { + System.setProperty("BIND_PASSWORD", "ADMIN123"); + } + }) + .around(config); @Test + @ConfiguredWithCode(value = "ActiveDirectoryTest.yml") public void configure_active_directory() throws Exception { - System.setProperty("BIND_PASSWORD", "ADMIN123"); - - ConfigurationAsCode.configure(getClass().getResourceAsStream("ActiveDirectoryTest.yml")); - final Jenkins jenkins = Jenkins.getInstance(); final ActiveDirectorySecurityRealm realm = (ActiveDirectorySecurityRealm) jenkins.getSecurityRealm(); assertEquals(1, realm.domains.size()); diff --git a/src/test/java/org/jenkinsci/plugins/casc/AgentProtocolsTest.java b/src/test/java/org/jenkinsci/plugins/casc/AgentProtocolsTest.java index dc82d895..5141c215 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/AgentProtocolsTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/AgentProtocolsTest.java @@ -1,12 +1,14 @@ package org.jenkinsci.plugins.casc; import jenkins.model.Jenkins; +import org.jenkinsci.plugins.casc.misc.CodeConfiguratorRunner; +import org.jenkinsci.plugins.casc.misc.ConfiguredWithCode; import org.junit.Rule; import org.junit.Test; +import org.junit.rules.RuleChain; import org.jvnet.hudson.test.JenkinsRule; import java.util.Arrays; -import java.util.HashSet; import java.util.Set; import java.util.stream.Collectors; @@ -17,13 +19,15 @@ import static org.junit.Assert.assertEquals; */ public class AgentProtocolsTest { - @Rule public JenkinsRule j = new JenkinsRule(); + public CodeConfiguratorRunner config = new CodeConfiguratorRunner(); + + @Rule + public RuleChain chain = RuleChain.outerRule(j).around(config); @Test + @ConfiguredWithCode(value = "AgentProtocolsTest.yml") public void configure_agent_protocols() throws Exception { - ConfigurationAsCode.configure(getClass().getResourceAsStream("AgentProtocolsTest.yml")); - final Jenkins jenkins = Jenkins.getInstance(); final Set agentProtocols = Arrays.stream(new String[]{"JNLP4-connect", "Ping"}).collect(Collectors.toSet()); diff --git a/src/test/java/org/jenkinsci/plugins/casc/DataBoundConfiguratorTest.java b/src/test/java/org/jenkinsci/plugins/casc/DataBoundConfiguratorTest.java index 519c24e7..bd3f77b0 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/DataBoundConfiguratorTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/DataBoundConfiguratorTest.java @@ -1,6 +1,5 @@ package org.jenkinsci.plugins.casc; -import hudson.model.AbstractDescribableImpl; import org.junit.Rule; import org.junit.Test; import org.jvnet.hudson.test.JenkinsRule; @@ -9,7 +8,7 @@ import org.kohsuke.stapler.DataBoundConstructor; import java.util.HashMap; import java.util.Map; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; /** * @author Nicolas De Loof @@ -46,4 +45,4 @@ public class DataBoundConfiguratorTest { } } -} \ No newline at end of file +} diff --git a/src/test/java/org/jenkinsci/plugins/casc/DockerCloudTest.java b/src/test/java/org/jenkinsci/plugins/casc/DockerCloudTest.java index 65dad478..25a708e6 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/DockerCloudTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/DockerCloudTest.java @@ -4,8 +4,12 @@ import com.nirima.jenkins.plugins.docker.DockerCloud; import com.nirima.jenkins.plugins.docker.DockerTemplate; import hudson.model.Label; import io.jenkins.docker.connector.DockerComputerAttachConnector; +import org.jenkinsci.plugins.casc.misc.CodeConfiguratorRunner; +import org.jenkinsci.plugins.casc.misc.ConfiguredWithCode; +import org.jenkinsci.plugins.casc.misc.TestConfiguration; import org.junit.Rule; import org.junit.Test; +import org.junit.rules.RuleChain; import org.jvnet.hudson.test.JenkinsRule; import static org.junit.Assert.assertEquals; @@ -16,14 +20,15 @@ import static org.junit.Assert.assertNotNull; */ public class DockerCloudTest { + public JenkinsRule j = new JenkinsRule(); + public CodeConfiguratorRunner config = new CodeConfiguratorRunner(); @Rule - public JenkinsRule j = new JenkinsRule(); + public RuleChain chain = RuleChain.outerRule(j).around(config); @Test + @ConfiguredWithCode("DockerCloudTest.yml") public void configure_docker_cloud() throws Exception { - ConfigurationAsCode.configure(getClass().getResourceAsStream("DockerCloudTest.yml")); - final DockerCloud docker = DockerCloud.getCloudByName("docker"); assertNotNull(docker); assertNotNull(docker.getDockerApi()); @@ -34,10 +39,8 @@ public class DockerCloudTest { } @Test + @ConfiguredWithCode("DockerCloudTest/update_docker_cloud/DockerCloudTest1.yml") public void update_docker_cloud() throws Exception { - ConfigurationAsCode.configure(getClass().getResourceAsStream( - "DockerCloudTest/update_docker_cloud/DockerCloudTest1.yml")); - DockerCloud docker = DockerCloud.getCloudByName("docker"); assertNotNull(docker); assertNotNull(docker.getDockerApi()); @@ -47,8 +50,7 @@ public class DockerCloudTest { DockerTemplate template = docker.getTemplate(Label.get("docker-agent")); checkTemplate(template, "docker-agent", "jenkins", "/home/jenkins/agent", "10"); - ConfigurationAsCode.configure(getClass().getResourceAsStream( - "DockerCloudTest/update_docker_cloud/DockerCloudTest2.yml")); + new TestConfiguration("DockerCloudTest/update_docker_cloud/DockerCloudTest2.yml").configure(getClass()); docker = DockerCloud.getCloudByName("docker"); assertNotNull(docker); @@ -65,7 +67,7 @@ public class DockerCloudTest { } private void checkTemplate(DockerTemplate template, String labelString, String user, String remoteFs, - String instanceCapStr){ + String instanceCapStr) { assertNotNull(template); assertEquals(labelString, template.getLabelString()); assertEquals(user, ((DockerComputerAttachConnector) template.getConnector()).getUser()); diff --git a/src/test/java/org/jenkinsci/plugins/casc/GitToolInstallationTest.java b/src/test/java/org/jenkinsci/plugins/casc/GitToolInstallationTest.java index 561a6500..012b8d15 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/GitToolInstallationTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/GitToolInstallationTest.java @@ -2,8 +2,11 @@ package org.jenkinsci.plugins.casc; import hudson.plugins.git.GitTool; import jenkins.model.Jenkins; +import org.jenkinsci.plugins.casc.misc.CodeConfiguratorRunner; +import org.jenkinsci.plugins.casc.misc.ConfiguredWithCode; import org.junit.Rule; import org.junit.Test; +import org.junit.rules.RuleChain; import org.jvnet.hudson.test.JenkinsRule; import static org.junit.Assert.assertEquals; @@ -13,14 +16,15 @@ import static org.junit.Assert.assertEquals; */ public class GitToolInstallationTest { + public JenkinsRule j = new JenkinsRule(); + public CodeConfiguratorRunner config = new CodeConfiguratorRunner(); @Rule - public JenkinsRule j = new JenkinsRule(); + public RuleChain chain = RuleChain.outerRule(j).around(config); @Test + @ConfiguredWithCode("GitToolInstallationTest.yml") public void configure_git_installations() throws Exception { - ConfigurationAsCode.configure(getClass().getResourceAsStream("GitToolInstallationTest.yml")); - final Jenkins jenkins = Jenkins.getInstance(); final GitTool.DescriptorImpl descriptor = (GitTool.DescriptorImpl) jenkins.getDescriptor(GitTool.class); assertEquals(2, descriptor.getInstallations().length); diff --git a/src/test/java/org/jenkinsci/plugins/casc/GithubOrganisationFolderTest.java b/src/test/java/org/jenkinsci/plugins/casc/GithubOrganisationFolderTest.java index 4c44831d..e2c3fa51 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/GithubOrganisationFolderTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/GithubOrganisationFolderTest.java @@ -1,13 +1,13 @@ package org.jenkinsci.plugins.casc; -import com.nirima.jenkins.plugins.docker.DockerCloud; -import com.nirima.jenkins.plugins.docker.DockerTemplate; import hudson.model.TopLevelItem; import jenkins.branch.OrganizationFolder; import jenkins.model.Jenkins; +import org.jenkinsci.plugins.casc.misc.CodeConfiguratorRunner; +import org.jenkinsci.plugins.casc.misc.ConfiguredWithCode; import org.jenkinsci.plugins.github_branch_source.GitHubSCMNavigator; import org.junit.Rule; -import org.junit.Test; +import org.junit.rules.RuleChain; import org.jvnet.hudson.test.JenkinsRule; import static org.junit.Assert.assertEquals; @@ -19,15 +19,16 @@ import static org.junit.Assert.assertTrue; */ public class GithubOrganisationFolderTest { + public JenkinsRule j = new JenkinsRule(); + public CodeConfiguratorRunner config = new CodeConfiguratorRunner(); @Rule - public JenkinsRule j = new JenkinsRule(); + public RuleChain chain = RuleChain.outerRule(j).around(config); // @Test // Fails as Items do override submit() with manual data-binding implementation + @ConfiguredWithCode("GithubOrganisationFolderTest.yml") public void configure_github_organisation_folder_seed_job() throws Exception { - ConfigurationAsCode.configure(getClass().getResourceAsStream("GithubOrganisationFolderTest.yml")); - final TopLevelItem job = Jenkins.getInstance().getItem("ndeloof"); assertNotNull(job); assertTrue(job instanceof OrganizationFolder); diff --git a/src/test/java/org/jenkinsci/plugins/casc/GlobalLibrariesTest.java b/src/test/java/org/jenkinsci/plugins/casc/GlobalLibrariesTest.java index 361471e0..6fe53db7 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/GlobalLibrariesTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/GlobalLibrariesTest.java @@ -1,20 +1,17 @@ package org.jenkinsci.plugins.casc; -import com.nirima.jenkins.plugins.docker.DockerCloud; -import com.nirima.jenkins.plugins.docker.DockerTemplate; -import io.jenkins.docker.connector.DockerComputerAttachConnector; import jenkins.plugins.git.GitSCMSource; -import jenkins.scm.api.SCMSource; +import org.jenkinsci.plugins.casc.misc.CodeConfiguratorRunner; +import org.jenkinsci.plugins.casc.misc.ConfiguredWithCode; import org.jenkinsci.plugins.workflow.libs.GlobalLibraries; import org.jenkinsci.plugins.workflow.libs.LibraryConfiguration; -import org.jenkinsci.plugins.workflow.libs.LibraryRetriever; import org.jenkinsci.plugins.workflow.libs.SCMSourceRetriever; import org.junit.Rule; import org.junit.Test; +import org.junit.rules.RuleChain; import org.jvnet.hudson.test.JenkinsRule; import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; /** * @author Nicolas De Loof @@ -22,13 +19,16 @@ import static org.junit.Assert.assertNotNull; public class GlobalLibrariesTest { - @Rule public JenkinsRule j = new JenkinsRule(); + public CodeConfiguratorRunner config = new CodeConfiguratorRunner(); + + @Rule + public RuleChain chain = RuleChain.outerRule(j).around(config); + @Test + @ConfiguredWithCode("GlobalLibrariesTest.yml") public void configure_global_library() throws Exception { - ConfigurationAsCode.configure(getClass().getResourceAsStream("GlobalLibrariesTest.yml")); - assertEquals(1, GlobalLibraries.get().getLibraries().size()); final LibraryConfiguration library = GlobalLibraries.get().getLibraries().get(0); assertEquals("awesome-lib", library.getName()); diff --git a/src/test/java/org/jenkinsci/plugins/casc/JenkinsConfiguratorTest.java b/src/test/java/org/jenkinsci/plugins/casc/JenkinsConfiguratorTest.java index f1b0577e..35e91346 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/JenkinsConfiguratorTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/JenkinsConfiguratorTest.java @@ -5,34 +5,43 @@ import hudson.security.FullControlOnceLoggedInAuthorizationStrategy; import hudson.security.HudsonPrivateSecurityRealm; import jenkins.model.Jenkins; import org.hamcrest.CoreMatchers; +import org.jenkinsci.plugins.casc.misc.CodeConfiguratorRunner; +import org.jenkinsci.plugins.casc.misc.ConfiguredWithCode; import org.junit.Rule; import org.junit.Test; +import org.junit.rules.RuleChain; import org.jvnet.hudson.test.Issue; import org.jvnet.hudson.test.JenkinsRule; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertThat; +import static org.junit.Assert.assertTrue; /** * @author Nicolas De Loof */ public class JenkinsConfiguratorTest { - @Rule public JenkinsRule j = new JenkinsRule(); + public CodeConfiguratorRunner config = new CodeConfiguratorRunner(); + + @Rule + public RuleChain chain = RuleChain.outerRule(j).around(config); + @Test + @ConfiguredWithCode("Primitives.yml") public void jenkins_primitive_attributes() throws Exception { - ConfigurationAsCode.configure(getClass().getResourceAsStream("Primitives.yml")); - final Jenkins jenkins = Jenkins.getInstance(); assertEquals(6666, jenkins.getSlaveAgentPort()); assertEquals(false, jenkins.isUsageStatisticsCollected()); } @Test + @ConfiguredWithCode("HeteroDescribable.yml") public void jenkins_abstract_describable_attributes() throws Exception { - ConfigurationAsCode.configure(getClass().getResourceAsStream("HeteroDescribable.yml")); - final Jenkins jenkins = Jenkins.getInstance(); assertTrue(jenkins.getSecurityRealm() instanceof HudsonPrivateSecurityRealm); assertTrue(jenkins.getAuthorizationStrategy() instanceof FullControlOnceLoggedInAuthorizationStrategy); diff --git a/src/test/java/org/jenkinsci/plugins/casc/JobDslGlobaSecurityConfigurationTest.java b/src/test/java/org/jenkinsci/plugins/casc/JobDslGlobaSecurityConfigurationTest.java index 0f9248e6..83c78d06 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/JobDslGlobaSecurityConfigurationTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/JobDslGlobaSecurityConfigurationTest.java @@ -2,8 +2,12 @@ package org.jenkinsci.plugins.casc; import javaposse.jobdsl.plugin.GlobalJobDslSecurityConfiguration; import jenkins.model.GlobalConfiguration; +import org.jenkinsci.plugins.casc.misc.CodeConfiguratorRunner; +import org.jenkinsci.plugins.casc.misc.ConfiguredWithCode; import org.junit.Rule; import org.junit.Test; +import org.junit.rules.ExternalResource; +import org.junit.rules.RuleChain; import org.jvnet.hudson.test.JenkinsRule; import static org.junit.Assert.assertFalse; @@ -14,19 +18,29 @@ import static org.junit.Assert.assertTrue; */ public class JobDslGlobaSecurityConfigurationTest { - @Rule public JenkinsRule j = new JenkinsRule(); + public CodeConfiguratorRunner config = new CodeConfiguratorRunner(); + + @Rule + public RuleChain chain = RuleChain.outerRule(j) + .around(new ExternalResource() { + @Override + protected void before() throws Throwable { + final GlobalJobDslSecurityConfiguration dslSecurity = + GlobalConfiguration.all().get(GlobalJobDslSecurityConfiguration.class); + + dslSecurity.setUseScriptSecurity(true); + assertTrue(dslSecurity.isUseScriptSecurity()); + } + }) + .around(config); @Test + @ConfiguredWithCode("JobDslGlobaSecurityConfigurationTest.yml") public void global_dsl_security() throws Exception { final GlobalJobDslSecurityConfiguration dslSecurity = GlobalConfiguration.all().get(GlobalJobDslSecurityConfiguration.class); - dslSecurity.setUseScriptSecurity(true); - assertTrue(dslSecurity.isUseScriptSecurity()); - - ConfigurationAsCode.configure(getClass().getResourceAsStream("JobDslGlobaSecurityConfigurationTest.yml")); - assertFalse(dslSecurity.isUseScriptSecurity()); } diff --git a/src/test/java/org/jenkinsci/plugins/casc/LDAPSecurityRealmTest.java b/src/test/java/org/jenkinsci/plugins/casc/LDAPSecurityRealmTest.java index 5f84d637..57e95e3a 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/LDAPSecurityRealmTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/LDAPSecurityRealmTest.java @@ -1,13 +1,15 @@ package org.jenkinsci.plugins.casc; import hudson.security.LDAPSecurityRealm; -import hudson.security.SecurityRealm; -import hudson.tasks.Mailer; import jenkins.model.IdStrategy; import jenkins.model.Jenkins; import jenkins.security.plugins.ldap.LDAPConfiguration; +import org.jenkinsci.plugins.casc.misc.CodeConfiguratorRunner; +import org.jenkinsci.plugins.casc.misc.ConfiguredWithCode; import org.junit.Rule; import org.junit.Test; +import org.junit.rules.ExternalResource; +import org.junit.rules.RuleChain; import org.jvnet.hudson.test.JenkinsRule; import static org.junit.Assert.assertEquals; @@ -18,15 +20,22 @@ import static org.junit.Assert.assertTrue; */ public class LDAPSecurityRealmTest { + public JenkinsRule j = new JenkinsRule(); + public CodeConfiguratorRunner config = new CodeConfiguratorRunner(); @Rule - public JenkinsRule j = new JenkinsRule(); + public RuleChain chain = RuleChain.outerRule(j) + .around(new ExternalResource() { + @Override + protected void before() throws Throwable { + System.setProperty("LDAP_PASSWORD", "SECRET"); + } + }) + .around(config); @Test + @ConfiguredWithCode("LDAPSecurityRealmTest.yml") public void configure_securityRealm() throws Exception { - System.setProperty("LDAP_PASSWORD", "SECRET"); - ConfigurationAsCode.configure(getClass().getResourceAsStream("LDAPSecurityRealmTest.yml")); - final Jenkins jenkins = Jenkins.getInstance(); final LDAPSecurityRealm securityRealm = (LDAPSecurityRealm) jenkins.getSecurityRealm(); assertEquals(1, securityRealm.getConfigurations().size()); diff --git a/src/test/java/org/jenkinsci/plugins/casc/MailerTest.java b/src/test/java/org/jenkinsci/plugins/casc/MailerTest.java index 7566b505..d80554a7 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/MailerTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/MailerTest.java @@ -1,10 +1,12 @@ package org.jenkinsci.plugins.casc; -import hudson.plugins.git.GitTool; import hudson.tasks.Mailer; import jenkins.model.Jenkins; +import org.jenkinsci.plugins.casc.misc.CodeConfiguratorRunner; +import org.jenkinsci.plugins.casc.misc.ConfiguredWithCode; import org.junit.Rule; import org.junit.Test; +import org.junit.rules.RuleChain; import org.jvnet.hudson.test.JenkinsRule; import static org.junit.Assert.assertEquals; @@ -14,14 +16,16 @@ import static org.junit.Assert.assertEquals; */ public class MailerTest { + public JenkinsRule j = new JenkinsRule(); + public CodeConfiguratorRunner config = new CodeConfiguratorRunner(); @Rule - public JenkinsRule j = new JenkinsRule(); + public RuleChain chain = RuleChain.outerRule(j).around(config); + @Test + @ConfiguredWithCode("MailerTest.yml") public void configure_mailer() throws Exception { - ConfigurationAsCode.configure(getClass().getResourceAsStream("MailerTest.yml")); - final Jenkins jenkins = Jenkins.getInstance(); final Mailer.DescriptorImpl descriptor = (Mailer.DescriptorImpl) jenkins.getDescriptor(Mailer.class); assertEquals("4441", descriptor.getSmtpPort()); diff --git a/src/test/java/org/jenkinsci/plugins/casc/PrimitiveConfiguratorTest.java b/src/test/java/org/jenkinsci/plugins/casc/PrimitiveConfiguratorTest.java index 09cbf365..12424200 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/PrimitiveConfiguratorTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/PrimitiveConfiguratorTest.java @@ -5,7 +5,8 @@ import org.junit.Test; import org.junit.contrib.java.lang.system.EnvironmentVariables; import org.jvnet.hudson.test.JenkinsRule; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; /** * @author Nicolas De Loof @@ -55,10 +56,10 @@ public class PrimitiveConfiguratorTest { } @Test - public void _string_env() throws Exception { + public void _string_env() throws Exception { environment.set("ENV_FOR_TEST", "abc"); Configurator c = Configurator.lookup(String.class); final Object value = c.configure("${ENV_FOR_TEST}"); assertEquals("abc", value); } -} \ No newline at end of file +} diff --git a/src/test/java/org/jenkinsci/plugins/casc/SeedJobTest.java b/src/test/java/org/jenkinsci/plugins/casc/SeedJobTest.java index a0f313f7..f898a53a 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/SeedJobTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/SeedJobTest.java @@ -2,9 +2,12 @@ package org.jenkinsci.plugins.casc; import hudson.model.TopLevelItem; import jenkins.model.Jenkins; +import org.jenkinsci.plugins.casc.misc.CodeConfiguratorRunner; +import org.jenkinsci.plugins.casc.misc.ConfiguredWithCode; import org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject; import org.junit.Rule; import org.junit.Test; +import org.junit.rules.RuleChain; import org.jvnet.hudson.test.JenkinsRule; import static org.junit.Assert.assertNotNull; @@ -15,12 +18,15 @@ import static org.junit.Assert.assertTrue; */ public class SeedJobTest { - @Rule public JenkinsRule j = new JenkinsRule(); + public CodeConfiguratorRunner config = new CodeConfiguratorRunner(); + + @Rule + public RuleChain chain = RuleChain.outerRule(j).around(config); @Test + @ConfiguredWithCode("SeedJobTest.yml") public void configure_seed_job() throws Exception { - ConfigurationAsCode.configure(getClass().getResourceAsStream("SeedJobTest.yml")); final Jenkins jenkins = Jenkins.getInstance(); final TopLevelItem test = jenkins.getItem("configuration-as-code"); assertNotNull(test); diff --git a/src/test/java/org/jenkinsci/plugins/casc/SystemCredentialsTest.java b/src/test/java/org/jenkinsci/plugins/casc/SystemCredentialsTest.java index c6ffc7cc..f8d3b2c4 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/SystemCredentialsTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/SystemCredentialsTest.java @@ -4,8 +4,12 @@ import com.cloudbees.plugins.credentials.CredentialsProvider; import com.cloudbees.plugins.credentials.common.CertificateCredentials; import com.cloudbees.plugins.credentials.common.UsernamePasswordCredentials; import hudson.security.ACL; +import org.jenkinsci.plugins.casc.misc.CodeConfiguratorRunner; +import org.jenkinsci.plugins.casc.misc.ConfiguredWithCode; import org.junit.Rule; import org.junit.Test; +import org.junit.rules.ExternalResource; +import org.junit.rules.RuleChain; import org.jvnet.hudson.test.JenkinsRule; import java.util.Collections; @@ -18,23 +22,29 @@ import static org.junit.Assert.assertEquals; */ public class SystemCredentialsTest { + public JenkinsRule j = new JenkinsRule(); + public CodeConfiguratorRunner config = new CodeConfiguratorRunner(); @Rule - public JenkinsRule j = new JenkinsRule(); + public RuleChain chain = RuleChain.outerRule(j) + .around(new ExternalResource() { + @Override + protected void before() { + System.setProperty("SUDO_PASSWORD", "1234"); + System.setProperty("SSH_KEY_PASSWORD", "ABCD"); + } + }) + .around(config); @Test + @ConfiguredWithCode("SystemCredentialsTest.yml") public void configure_system_credentials() throws Exception { - System.setProperty("SUDO_PASSWORD", "1234"); - System.setProperty("SSH_KEY_PASSWORD", "ABCD"); - - ConfigurationAsCode.configure(getClass().getResourceAsStream("SystemCredentialsTest.yml")); - - List ups = CredentialsProvider.lookupCredentials(UsernamePasswordCredentials.class, j.jenkins, ACL.SYSTEM, Collections.EMPTY_LIST); + List ups = CredentialsProvider.lookupCredentials(UsernamePasswordCredentials.class, j.jenkins, ACL.SYSTEM, Collections.emptyList()); assertEquals(1, ups.size()); final UsernamePasswordCredentials up = ups.get(0); assertEquals("1234", up.getPassword().getPlainText()); - List certs = CredentialsProvider.lookupCredentials(CertificateCredentials.class, j.jenkins, ACL.SYSTEM, Collections.EMPTY_LIST); + List certs = CredentialsProvider.lookupCredentials(CertificateCredentials.class, j.jenkins, ACL.SYSTEM, Collections.emptyList()); assertEquals(1, certs.size()); final CertificateCredentials cert = certs.get(0); assertEquals("ABCD", cert.getPassword().getPlainText()); diff --git a/src/test/java/org/jenkinsci/plugins/casc/core/AdminWhitelistRuleConfiguratorTest.java b/src/test/java/org/jenkinsci/plugins/casc/core/AdminWhitelistRuleConfiguratorTest.java index 1b5f7efd..f528481c 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/core/AdminWhitelistRuleConfiguratorTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/core/AdminWhitelistRuleConfiguratorTest.java @@ -22,9 +22,11 @@ package org.jenkinsci.plugins.casc.core; import jenkins.model.Jenkins; import jenkins.security.s2m.AdminWhitelistRule; -import org.jenkinsci.plugins.casc.ConfigurationAsCode; +import org.jenkinsci.plugins.casc.misc.CodeConfiguratorRunner; +import org.jenkinsci.plugins.casc.misc.ConfiguredWithCode; import org.junit.Assert; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.jvnet.hudson.test.For; import org.jvnet.hudson.test.Issue; @@ -36,11 +38,13 @@ public class AdminWhitelistRuleConfiguratorTest { @ClassRule public static JenkinsRule j = new JenkinsRule(); + @Rule + public CodeConfiguratorRunner config = new CodeConfiguratorRunner(); + @Test @Issue("Issue #28") + @ConfiguredWithCode("AdminWhitelistRuleConfigurator/Slave2MasterSecurityKillSwitch_enabled.yml") public void checkM2SSecurityKillSwitch_enabled() throws Exception { - ConfigurationAsCode.configure(getClass().getResourceAsStream("AdminWhitelistRuleConfigurator/Slave2MasterSecurityKillSwitch_enabled.yml")); - final Jenkins jenkins = Jenkins.getInstance(); AdminWhitelistRule rule = jenkins.getInjector().getInstance(AdminWhitelistRule.class); Assert.assertTrue("MasterToSlave Security should be enabled", rule.getMasterKillSwitch()); @@ -48,9 +52,8 @@ public class AdminWhitelistRuleConfiguratorTest { @Test @Issue("Issue #28") + @ConfiguredWithCode("AdminWhitelistRuleConfigurator/Slave2MasterSecurityKillSwitch_disabled.yml") public void checkM2SSecurityKillSwitch_disabled() throws Exception { - ConfigurationAsCode.configure(getClass().getResourceAsStream("AdminWhitelistRuleConfigurator/Slave2MasterSecurityKillSwitch_disabled.yml")); - final Jenkins jenkins = Jenkins.getInstance(); AdminWhitelistRule rule = jenkins.getInjector().getInstance(AdminWhitelistRule.class); Assert.assertFalse("MasterToSlave Security should be disabled", rule.getMasterKillSwitch()); diff --git a/src/test/java/org/jenkinsci/plugins/casc/core/HudsonPrivateSecurityRealmConfiguratorTest.java b/src/test/java/org/jenkinsci/plugins/casc/core/HudsonPrivateSecurityRealmConfiguratorTest.java index 00e678c7..75d9e900 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/core/HudsonPrivateSecurityRealmConfiguratorTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/core/HudsonPrivateSecurityRealmConfiguratorTest.java @@ -1,29 +1,34 @@ package org.jenkinsci.plugins.casc.core; import hudson.model.User; -import hudson.security.AuthorizationStrategy; import hudson.security.FullControlOnceLoggedInAuthorizationStrategy; import hudson.security.HudsonPrivateSecurityRealm; import jenkins.model.Jenkins; -import org.jenkinsci.plugins.casc.ConfigurationAsCode; +import org.jenkinsci.plugins.casc.misc.CodeConfiguratorRunner; +import org.jenkinsci.plugins.casc.misc.ConfiguredWithCode; import org.junit.Rule; import org.junit.Test; +import org.junit.rules.RuleChain; import org.jvnet.hudson.test.JenkinsRule; -import static org.junit.Assert.*; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; /** * @author Nicolas De Loof */ public class HudsonPrivateSecurityRealmConfiguratorTest { - @Rule public JenkinsRule j = new JenkinsRule(); + public CodeConfiguratorRunner config = new CodeConfiguratorRunner(); + + @Rule + public RuleChain chain = RuleChain.outerRule(j).around(config); @Test + @ConfiguredWithCode("HudsonPrivateSecurityRealmConfiguratorTest.yml") public void configure_local_security_and_admin_user() throws Exception { - ConfigurationAsCode.configure(getClass().getResourceAsStream("HudsonPrivateSecurityRealmConfiguratorTest.yml")); - final Jenkins jenkins = Jenkins.getInstance(); final HudsonPrivateSecurityRealm securityRealm = (HudsonPrivateSecurityRealm) jenkins.getSecurityRealm(); assertFalse(securityRealm.allowsSignup()); diff --git a/src/test/java/org/jenkinsci/plugins/casc/core/UnsecuredAuthorizationStrategyConfiguratorTest.java b/src/test/java/org/jenkinsci/plugins/casc/core/UnsecuredAuthorizationStrategyConfiguratorTest.java index 664d3395..42b7d06d 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/core/UnsecuredAuthorizationStrategyConfiguratorTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/core/UnsecuredAuthorizationStrategyConfiguratorTest.java @@ -1,23 +1,28 @@ package org.jenkinsci.plugins.casc.core; import hudson.security.AuthorizationStrategy; -import org.jenkinsci.plugins.casc.ConfigurationAsCode; +import org.jenkinsci.plugins.casc.misc.CodeConfiguratorRunner; +import org.jenkinsci.plugins.casc.misc.ConfiguredWithCode; import org.junit.Rule; import org.junit.Test; +import org.junit.rules.RuleChain; import org.jvnet.hudson.test.JenkinsRule; -import static org.junit.Assert.*; +import static org.junit.Assert.assertSame; /** * @author Kohsuke Kawaguchi */ public class UnsecuredAuthorizationStrategyConfiguratorTest { - @Rule public JenkinsRule j = new JenkinsRule(); + public CodeConfiguratorRunner config = new CodeConfiguratorRunner(); + + @Rule + public RuleChain chain = RuleChain.outerRule(j).around(config); @Test + @ConfiguredWithCode("UnsecuredAuthorizationStrategyConfiguratorTest.yml") public void unsecured() throws Exception { - ConfigurationAsCode.configure(getClass().getResourceAsStream("UnsecuredAuthorizationStrategyConfiguratorTest.yml")); assertSame(AuthorizationStrategy.UNSECURED, j.jenkins.getAuthorizationStrategy()); } -} \ No newline at end of file +} diff --git a/src/test/java/org/jenkinsci/plugins/casc/integrations/globalmatrixauth/GlobalMatrixAuthorizationTest.java b/src/test/java/org/jenkinsci/plugins/casc/integrations/globalmatrixauth/GlobalMatrixAuthorizationTest.java index f05d7c4e..b7c465e0 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/integrations/globalmatrixauth/GlobalMatrixAuthorizationTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/integrations/globalmatrixauth/GlobalMatrixAuthorizationTest.java @@ -5,7 +5,10 @@ import hudson.security.GlobalMatrixAuthorizationStrategy; import jenkins.model.Jenkins; import org.jenkinsci.plugins.casc.ConfigurationAsCode; import org.jenkinsci.plugins.casc.Configurator; +import org.jenkinsci.plugins.casc.misc.CodeConfiguratorRunner; +import org.jenkinsci.plugins.casc.misc.ConfiguredWithCode; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.jvnet.hudson.test.JenkinsRule; @@ -24,6 +27,9 @@ public class GlobalMatrixAuthorizationTest { @ClassRule public static JenkinsRule j = new JenkinsRule(); + @Rule + public CodeConfiguratorRunner config = new CodeConfiguratorRunner(); + @Test public void shouldReturnCustomConfigurator() { Configurator configurator = Configurator.lookup(GlobalMatrixAuthorizationStrategy.class); @@ -40,8 +46,8 @@ public class GlobalMatrixAuthorizationTest { } @Test + @ConfiguredWithCode("GlobalMatrixStrategy.yml") public void checkCorrectlyConfiguredPermissions() throws Exception { - ConfigurationAsCode.configure(getClass().getResourceAsStream("GlobalMatrixStrategy.yml")); assertEquals("The configured instance must use the Global Matrix Authentication Strategy", GlobalMatrixAuthorizationStrategy.class, Jenkins.getInstance().getAuthorizationStrategy().getClass()); GlobalMatrixAuthorizationStrategy gms = (GlobalMatrixAuthorizationStrategy)Jenkins.getInstance().getAuthorizationStrategy(); diff --git a/src/test/java/org/jenkinsci/plugins/casc/integrations/rolebasedauth/RoleStrategyTest.java b/src/test/java/org/jenkinsci/plugins/casc/integrations/rolebasedauth/RoleStrategyTest.java index bc1b03d9..85b60256 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/integrations/rolebasedauth/RoleStrategyTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/integrations/rolebasedauth/RoleStrategyTest.java @@ -3,13 +3,12 @@ package org.jenkinsci.plugins.casc.integrations.rolebasedauth; import com.michelin.cio.hudson.plugins.rolestrategy.Role; import com.michelin.cio.hudson.plugins.rolestrategy.RoleBasedAuthorizationStrategy; import hudson.security.AuthorizationStrategy; -import hudson.security.Permission; import jenkins.model.Jenkins; -import static org.hamcrest.CoreMatchers.*; -import org.jenkinsci.plugins.casc.ConfigurationAsCode; import org.jenkinsci.plugins.casc.Configurator; -import org.jenkinsci.plugins.casc.integrations.rolebasedauth.RoleBasedAuthorizationStrategyConfigurator; +import org.jenkinsci.plugins.casc.misc.CodeConfiguratorRunner; +import org.jenkinsci.plugins.casc.misc.ConfiguredWithCode; import org.junit.ClassRule; +import org.junit.Rule; import org.junit.Test; import org.jvnet.hudson.test.Issue; import org.jvnet.hudson.test.JenkinsRule; @@ -17,6 +16,8 @@ import org.jvnet.hudson.test.JenkinsRule; import java.util.Map; import java.util.Set; +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.instanceOf; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertThat; @@ -30,6 +31,9 @@ public class RoleStrategyTest { @ClassRule public static JenkinsRule j = new JenkinsRule(); + @Rule + public CodeConfiguratorRunner config = new CodeConfiguratorRunner(); + @Test public void shouldReturnCustomConfigurator() { Configurator c = Configurator.lookup(RoleBasedAuthorizationStrategy.class); @@ -49,15 +53,14 @@ public class RoleStrategyTest { @Test @Issue("Issue #48") + @ConfiguredWithCode("RoleStrategy1.yml") public void shouldReadRolesCorrectly() throws Exception { - ConfigurationAsCode.configure(getClass().getResourceAsStream("RoleStrategy1.yml")); - final Jenkins jenkins = Jenkins.getInstance(); AuthorizationStrategy s = jenkins.getAuthorizationStrategy(); assertThat("Authorization Strategy has been read incorrectly", s, instanceOf(RoleBasedAuthorizationStrategy.class)); - RoleBasedAuthorizationStrategy rbas = (RoleBasedAuthorizationStrategy)s; + RoleBasedAuthorizationStrategy rbas = (RoleBasedAuthorizationStrategy) s; Map> globalRoles = rbas.getGrantedRoles(RoleBasedAuthorizationStrategy.GLOBAL); assertThat(globalRoles.size(), equalTo(2)); diff --git a/src/test/java/org/jenkinsci/plugins/casc/misc/CodeConfiguratorRunner.java b/src/test/java/org/jenkinsci/plugins/casc/misc/CodeConfiguratorRunner.java new file mode 100644 index 00000000..280acb4a --- /dev/null +++ b/src/test/java/org/jenkinsci/plugins/casc/misc/CodeConfiguratorRunner.java @@ -0,0 +1,31 @@ +package org.jenkinsci.plugins.casc.misc; + +import org.junit.rules.TestRule; +import org.junit.runner.Description; +import org.junit.runners.model.Statement; + +import java.util.Objects; + +/** + * Reads value of {@link ConfiguredWithCode} and evaluates config same way as plugin. + * Requires Jenkins instance already up and running + * + * @see ConfiguredWithCode + */ +public class CodeConfiguratorRunner implements TestRule { + @Override + public Statement apply(Statement base, Description description) { + return new Statement() { + @Override + public void evaluate() throws Throwable { + ConfiguredWithCode configuredWithCode = description.getAnnotation(ConfiguredWithCode.class); + + if (Objects.nonNull(configuredWithCode)) { + new TestConfiguration(configuredWithCode.value()).configure(description.getTestClass()); + } + + base.evaluate(); + } + }; + } +} diff --git a/src/test/java/org/jenkinsci/plugins/casc/misc/ConfiguredWithCode.java b/src/test/java/org/jenkinsci/plugins/casc/misc/ConfiguredWithCode.java new file mode 100644 index 00000000..bfd996cf --- /dev/null +++ b/src/test/java/org/jenkinsci/plugins/casc/misc/ConfiguredWithCode.java @@ -0,0 +1,20 @@ +package org.jenkinsci.plugins.casc.misc; + +import java.lang.annotation.Retention; +import java.lang.annotation.Target; + +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +/** + * To load specified config with plugin + */ +@Target(METHOD) +@Retention(RUNTIME) +public @interface ConfiguredWithCode { + + /** + * resource path in classpath + */ + String value(); +} diff --git a/src/test/java/org/jenkinsci/plugins/casc/misc/TestConfiguration.java b/src/test/java/org/jenkinsci/plugins/casc/misc/TestConfiguration.java new file mode 100644 index 00000000..ff126c66 --- /dev/null +++ b/src/test/java/org/jenkinsci/plugins/casc/misc/TestConfiguration.java @@ -0,0 +1,30 @@ +package org.jenkinsci.plugins.casc.misc; + +import org.jenkinsci.plugins.casc.ConfigurationAsCode; +import org.yaml.snakeyaml.Yaml; + +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.Reader; +import java.util.Map; + +import static java.nio.charset.StandardCharsets.UTF_8; + +/** + * Loads resource as configuration-as-code + */ +public class TestConfiguration { + private final String resource; + + public TestConfiguration(String resource) { + this.resource = resource; + } + + public void configure(Class clazz) { + try { + ConfigurationAsCode.configure(clazz.getResourceAsStream(resource)); + } catch (Exception e) { + throw new IllegalStateException("Can't configure test with " + resource, e); + } + } +} From 30067406d2269b4458e5fc017415a5048e38cfa7 Mon Sep 17 00:00:00 2001 From: Kirill Merkushev Date: Wed, 14 Feb 2018 16:35:20 +0300 Subject: [PATCH 2/4] created JenkinsConfiguredWithCodeRule which extends JenkinsRule --- .../plugins/casc/ActiveDirectoryTest.java | 19 +++----- .../plugins/casc/AgentProtocolsTest.java | 9 +--- .../plugins/casc/DockerCloudTest.java | 11 ++--- .../plugins/casc/GitToolInstallationTest.java | 9 +--- .../casc/GithubOrganisationFolderTest.java | 10 ++--- .../plugins/casc/GlobalLibrariesTest.java | 11 +---- .../plugins/casc/JenkinsConfiguratorTest.java | 10 +---- .../JobDslGlobaSecurityConfigurationTest.java | 36 +++++---------- .../plugins/casc/LDAPSecurityRealmTest.java | 21 +++------ .../jenkinsci/plugins/casc/MailerTest.java | 10 +---- .../jenkinsci/plugins/casc/SeedJobTest.java | 9 +--- .../plugins/casc/SystemCredentialsTest.java | 45 +++++++++---------- .../AdminWhitelistRuleConfiguratorTest.java | 9 +--- ...nPrivateSecurityRealmConfiguratorTest.java | 9 +--- ...AuthorizationStrategyConfiguratorTest.java | 9 +--- .../GlobalMatrixAuthorizationTest.java | 13 ++---- .../rolebasedauth/RoleStrategyTest.java | 9 +--- .../casc/misc/CodeConfiguratorRunner.java | 31 ------------- .../plugins/casc/misc/EnvVarsRule.java | 13 ++++++ .../misc/JenkinsConfiguredWithCodeRule.java | 20 +++++++++ .../plugins/casc/misc/TestConfiguration.java | 14 +++--- 21 files changed, 111 insertions(+), 216 deletions(-) delete mode 100644 src/test/java/org/jenkinsci/plugins/casc/misc/CodeConfiguratorRunner.java create mode 100644 src/test/java/org/jenkinsci/plugins/casc/misc/EnvVarsRule.java create mode 100644 src/test/java/org/jenkinsci/plugins/casc/misc/JenkinsConfiguredWithCodeRule.java diff --git a/src/test/java/org/jenkinsci/plugins/casc/ActiveDirectoryTest.java b/src/test/java/org/jenkinsci/plugins/casc/ActiveDirectoryTest.java index 720936c9..e25cd157 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/ActiveDirectoryTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/ActiveDirectoryTest.java @@ -3,13 +3,12 @@ package org.jenkinsci.plugins.casc; import hudson.plugins.active_directory.ActiveDirectoryDomain; import hudson.plugins.active_directory.ActiveDirectorySecurityRealm; import jenkins.model.Jenkins; -import org.jenkinsci.plugins.casc.misc.CodeConfiguratorRunner; import org.jenkinsci.plugins.casc.misc.ConfiguredWithCode; +import org.jenkinsci.plugins.casc.misc.EnvVarsRule; +import org.jenkinsci.plugins.casc.misc.JenkinsConfiguredWithCodeRule; import org.junit.Rule; import org.junit.Test; -import org.junit.rules.ExternalResource; import org.junit.rules.RuleChain; -import org.jvnet.hudson.test.JenkinsRule; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -19,18 +18,10 @@ import static org.junit.Assert.assertTrue; */ public class ActiveDirectoryTest { - public JenkinsRule j = new JenkinsRule(); - public CodeConfiguratorRunner config = new CodeConfiguratorRunner(); - @Rule - public RuleChain chain = RuleChain.outerRule(j) - .around(new ExternalResource() { - @Override - protected void before() { - System.setProperty("BIND_PASSWORD", "ADMIN123"); - } - }) - .around(config); + public RuleChain chain = RuleChain.outerRule(new EnvVarsRule() + .env("BIND_PASSWORD", "ADMIN123")) + .around(new JenkinsConfiguredWithCodeRule()); @Test @ConfiguredWithCode(value = "ActiveDirectoryTest.yml") diff --git a/src/test/java/org/jenkinsci/plugins/casc/AgentProtocolsTest.java b/src/test/java/org/jenkinsci/plugins/casc/AgentProtocolsTest.java index 5141c215..857bdd50 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/AgentProtocolsTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/AgentProtocolsTest.java @@ -1,12 +1,10 @@ package org.jenkinsci.plugins.casc; import jenkins.model.Jenkins; -import org.jenkinsci.plugins.casc.misc.CodeConfiguratorRunner; import org.jenkinsci.plugins.casc.misc.ConfiguredWithCode; +import org.jenkinsci.plugins.casc.misc.JenkinsConfiguredWithCodeRule; import org.junit.Rule; import org.junit.Test; -import org.junit.rules.RuleChain; -import org.jvnet.hudson.test.JenkinsRule; import java.util.Arrays; import java.util.Set; @@ -19,11 +17,8 @@ import static org.junit.Assert.assertEquals; */ public class AgentProtocolsTest { - public JenkinsRule j = new JenkinsRule(); - public CodeConfiguratorRunner config = new CodeConfiguratorRunner(); - @Rule - public RuleChain chain = RuleChain.outerRule(j).around(config); + public JenkinsConfiguredWithCodeRule j = new JenkinsConfiguredWithCodeRule(); @Test @ConfiguredWithCode(value = "AgentProtocolsTest.yml") diff --git a/src/test/java/org/jenkinsci/plugins/casc/DockerCloudTest.java b/src/test/java/org/jenkinsci/plugins/casc/DockerCloudTest.java index 25a708e6..918016bb 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/DockerCloudTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/DockerCloudTest.java @@ -4,13 +4,11 @@ import com.nirima.jenkins.plugins.docker.DockerCloud; import com.nirima.jenkins.plugins.docker.DockerTemplate; import hudson.model.Label; import io.jenkins.docker.connector.DockerComputerAttachConnector; -import org.jenkinsci.plugins.casc.misc.CodeConfiguratorRunner; import org.jenkinsci.plugins.casc.misc.ConfiguredWithCode; +import org.jenkinsci.plugins.casc.misc.JenkinsConfiguredWithCodeRule; import org.jenkinsci.plugins.casc.misc.TestConfiguration; import org.junit.Rule; import org.junit.Test; -import org.junit.rules.RuleChain; -import org.jvnet.hudson.test.JenkinsRule; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -20,11 +18,8 @@ import static org.junit.Assert.assertNotNull; */ public class DockerCloudTest { - public JenkinsRule j = new JenkinsRule(); - public CodeConfiguratorRunner config = new CodeConfiguratorRunner(); - @Rule - public RuleChain chain = RuleChain.outerRule(j).around(config); + public JenkinsConfiguredWithCodeRule j = new JenkinsConfiguredWithCodeRule(); @Test @ConfiguredWithCode("DockerCloudTest.yml") @@ -50,7 +45,7 @@ public class DockerCloudTest { DockerTemplate template = docker.getTemplate(Label.get("docker-agent")); checkTemplate(template, "docker-agent", "jenkins", "/home/jenkins/agent", "10"); - new TestConfiguration("DockerCloudTest/update_docker_cloud/DockerCloudTest2.yml").configure(getClass()); + TestConfiguration.withCode("DockerCloudTest/update_docker_cloud/DockerCloudTest2.yml").configure(getClass()); docker = DockerCloud.getCloudByName("docker"); assertNotNull(docker); diff --git a/src/test/java/org/jenkinsci/plugins/casc/GitToolInstallationTest.java b/src/test/java/org/jenkinsci/plugins/casc/GitToolInstallationTest.java index 012b8d15..4b94190e 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/GitToolInstallationTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/GitToolInstallationTest.java @@ -2,12 +2,10 @@ package org.jenkinsci.plugins.casc; import hudson.plugins.git.GitTool; import jenkins.model.Jenkins; -import org.jenkinsci.plugins.casc.misc.CodeConfiguratorRunner; import org.jenkinsci.plugins.casc.misc.ConfiguredWithCode; +import org.jenkinsci.plugins.casc.misc.JenkinsConfiguredWithCodeRule; import org.junit.Rule; import org.junit.Test; -import org.junit.rules.RuleChain; -import org.jvnet.hudson.test.JenkinsRule; import static org.junit.Assert.assertEquals; @@ -16,11 +14,8 @@ import static org.junit.Assert.assertEquals; */ public class GitToolInstallationTest { - public JenkinsRule j = new JenkinsRule(); - public CodeConfiguratorRunner config = new CodeConfiguratorRunner(); - @Rule - public RuleChain chain = RuleChain.outerRule(j).around(config); + public JenkinsConfiguredWithCodeRule j = new JenkinsConfiguredWithCodeRule(); @Test @ConfiguredWithCode("GitToolInstallationTest.yml") diff --git a/src/test/java/org/jenkinsci/plugins/casc/GithubOrganisationFolderTest.java b/src/test/java/org/jenkinsci/plugins/casc/GithubOrganisationFolderTest.java index e2c3fa51..eb0eed97 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/GithubOrganisationFolderTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/GithubOrganisationFolderTest.java @@ -3,12 +3,10 @@ package org.jenkinsci.plugins.casc; import hudson.model.TopLevelItem; import jenkins.branch.OrganizationFolder; import jenkins.model.Jenkins; -import org.jenkinsci.plugins.casc.misc.CodeConfiguratorRunner; import org.jenkinsci.plugins.casc.misc.ConfiguredWithCode; +import org.jenkinsci.plugins.casc.misc.JenkinsConfiguredWithCodeRule; import org.jenkinsci.plugins.github_branch_source.GitHubSCMNavigator; import org.junit.Rule; -import org.junit.rules.RuleChain; -import org.jvnet.hudson.test.JenkinsRule; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; @@ -19,11 +17,9 @@ import static org.junit.Assert.assertTrue; */ public class GithubOrganisationFolderTest { - public JenkinsRule j = new JenkinsRule(); - public CodeConfiguratorRunner config = new CodeConfiguratorRunner(); - @Rule - public RuleChain chain = RuleChain.outerRule(j).around(config); + public JenkinsConfiguredWithCodeRule j = new JenkinsConfiguredWithCodeRule(); + // @Test // Fails as Items do override submit() with manual data-binding implementation diff --git a/src/test/java/org/jenkinsci/plugins/casc/GlobalLibrariesTest.java b/src/test/java/org/jenkinsci/plugins/casc/GlobalLibrariesTest.java index 6fe53db7..9bfc34db 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/GlobalLibrariesTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/GlobalLibrariesTest.java @@ -1,15 +1,13 @@ package org.jenkinsci.plugins.casc; import jenkins.plugins.git.GitSCMSource; -import org.jenkinsci.plugins.casc.misc.CodeConfiguratorRunner; import org.jenkinsci.plugins.casc.misc.ConfiguredWithCode; +import org.jenkinsci.plugins.casc.misc.JenkinsConfiguredWithCodeRule; import org.jenkinsci.plugins.workflow.libs.GlobalLibraries; import org.jenkinsci.plugins.workflow.libs.LibraryConfiguration; import org.jenkinsci.plugins.workflow.libs.SCMSourceRetriever; import org.junit.Rule; import org.junit.Test; -import org.junit.rules.RuleChain; -import org.jvnet.hudson.test.JenkinsRule; import static org.junit.Assert.assertEquals; @@ -18,13 +16,8 @@ import static org.junit.Assert.assertEquals; */ public class GlobalLibrariesTest { - - public JenkinsRule j = new JenkinsRule(); - public CodeConfiguratorRunner config = new CodeConfiguratorRunner(); - @Rule - public RuleChain chain = RuleChain.outerRule(j).around(config); - + public JenkinsConfiguredWithCodeRule j = new JenkinsConfiguredWithCodeRule(); @Test @ConfiguredWithCode("GlobalLibrariesTest.yml") diff --git a/src/test/java/org/jenkinsci/plugins/casc/JenkinsConfiguratorTest.java b/src/test/java/org/jenkinsci/plugins/casc/JenkinsConfiguratorTest.java index 35e91346..0fd0da99 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/JenkinsConfiguratorTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/JenkinsConfiguratorTest.java @@ -5,13 +5,11 @@ import hudson.security.FullControlOnceLoggedInAuthorizationStrategy; import hudson.security.HudsonPrivateSecurityRealm; import jenkins.model.Jenkins; import org.hamcrest.CoreMatchers; -import org.jenkinsci.plugins.casc.misc.CodeConfiguratorRunner; import org.jenkinsci.plugins.casc.misc.ConfiguredWithCode; +import org.jenkinsci.plugins.casc.misc.JenkinsConfiguredWithCodeRule; import org.junit.Rule; import org.junit.Test; -import org.junit.rules.RuleChain; import org.jvnet.hudson.test.Issue; -import org.jvnet.hudson.test.JenkinsRule; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; @@ -24,12 +22,8 @@ import static org.junit.Assert.assertTrue; */ public class JenkinsConfiguratorTest { - public JenkinsRule j = new JenkinsRule(); - public CodeConfiguratorRunner config = new CodeConfiguratorRunner(); - @Rule - public RuleChain chain = RuleChain.outerRule(j).around(config); - + public JenkinsConfiguredWithCodeRule j = new JenkinsConfiguredWithCodeRule(); @Test @ConfiguredWithCode("Primitives.yml") diff --git a/src/test/java/org/jenkinsci/plugins/casc/JobDslGlobaSecurityConfigurationTest.java b/src/test/java/org/jenkinsci/plugins/casc/JobDslGlobaSecurityConfigurationTest.java index 83c78d06..6db9a5a3 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/JobDslGlobaSecurityConfigurationTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/JobDslGlobaSecurityConfigurationTest.java @@ -2,46 +2,32 @@ package org.jenkinsci.plugins.casc; import javaposse.jobdsl.plugin.GlobalJobDslSecurityConfiguration; import jenkins.model.GlobalConfiguration; -import org.jenkinsci.plugins.casc.misc.CodeConfiguratorRunner; -import org.jenkinsci.plugins.casc.misc.ConfiguredWithCode; +import org.jenkinsci.plugins.casc.misc.TestConfiguration; import org.junit.Rule; import org.junit.Test; -import org.junit.rules.ExternalResource; -import org.junit.rules.RuleChain; import org.jvnet.hudson.test.JenkinsRule; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; /** * Created by odavid on 23/12/2017. */ public class JobDslGlobaSecurityConfigurationTest { - public JenkinsRule j = new JenkinsRule(); - public CodeConfiguratorRunner config = new CodeConfiguratorRunner(); - @Rule - public RuleChain chain = RuleChain.outerRule(j) - .around(new ExternalResource() { - @Override - protected void before() throws Throwable { - final GlobalJobDslSecurityConfiguration dslSecurity = - GlobalConfiguration.all().get(GlobalJobDslSecurityConfiguration.class); - - dslSecurity.setUseScriptSecurity(true); - assertTrue(dslSecurity.isUseScriptSecurity()); - } - }) - .around(config); + public JenkinsRule j = new JenkinsRule(); @Test - @ConfiguredWithCode("JobDslGlobaSecurityConfigurationTest.yml") public void global_dsl_security() throws Exception { - final GlobalJobDslSecurityConfiguration dslSecurity = - GlobalConfiguration.all().get(GlobalJobDslSecurityConfiguration.class); + final GlobalJobDslSecurityConfiguration dslSecurity = GlobalConfiguration.all() + .get(GlobalJobDslSecurityConfiguration.class); - assertFalse(dslSecurity.isUseScriptSecurity()); + dslSecurity.setUseScriptSecurity(true); + assertThat("ScriptSecurity", dslSecurity.isUseScriptSecurity(), is(true)); + + TestConfiguration.withCode("JobDslGlobaSecurityConfigurationTest.yml").configure(getClass()); + assertThat("ScriptSecurity", dslSecurity.isUseScriptSecurity(), is(false)); } } diff --git a/src/test/java/org/jenkinsci/plugins/casc/LDAPSecurityRealmTest.java b/src/test/java/org/jenkinsci/plugins/casc/LDAPSecurityRealmTest.java index 57e95e3a..5d981648 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/LDAPSecurityRealmTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/LDAPSecurityRealmTest.java @@ -4,13 +4,12 @@ import hudson.security.LDAPSecurityRealm; import jenkins.model.IdStrategy; import jenkins.model.Jenkins; import jenkins.security.plugins.ldap.LDAPConfiguration; -import org.jenkinsci.plugins.casc.misc.CodeConfiguratorRunner; import org.jenkinsci.plugins.casc.misc.ConfiguredWithCode; +import org.jenkinsci.plugins.casc.misc.EnvVarsRule; +import org.jenkinsci.plugins.casc.misc.JenkinsConfiguredWithCodeRule; import org.junit.Rule; import org.junit.Test; -import org.junit.rules.ExternalResource; import org.junit.rules.RuleChain; -import org.jvnet.hudson.test.JenkinsRule; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; @@ -20,22 +19,14 @@ import static org.junit.Assert.assertTrue; */ public class LDAPSecurityRealmTest { - public JenkinsRule j = new JenkinsRule(); - public CodeConfiguratorRunner config = new CodeConfiguratorRunner(); - @Rule - public RuleChain chain = RuleChain.outerRule(j) - .around(new ExternalResource() { - @Override - protected void before() throws Throwable { - System.setProperty("LDAP_PASSWORD", "SECRET"); - } - }) - .around(config); + public RuleChain chain = RuleChain.outerRule(new EnvVarsRule() + .env("LDAP_PASSWORD", "SECRET")) + .around(new JenkinsConfiguredWithCodeRule()); @Test @ConfiguredWithCode("LDAPSecurityRealmTest.yml") - public void configure_securityRealm() throws Exception { + public void configure_securityRealm() { final Jenkins jenkins = Jenkins.getInstance(); final LDAPSecurityRealm securityRealm = (LDAPSecurityRealm) jenkins.getSecurityRealm(); assertEquals(1, securityRealm.getConfigurations().size()); diff --git a/src/test/java/org/jenkinsci/plugins/casc/MailerTest.java b/src/test/java/org/jenkinsci/plugins/casc/MailerTest.java index d80554a7..7101951b 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/MailerTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/MailerTest.java @@ -2,12 +2,10 @@ package org.jenkinsci.plugins.casc; import hudson.tasks.Mailer; import jenkins.model.Jenkins; -import org.jenkinsci.plugins.casc.misc.CodeConfiguratorRunner; import org.jenkinsci.plugins.casc.misc.ConfiguredWithCode; +import org.jenkinsci.plugins.casc.misc.JenkinsConfiguredWithCodeRule; import org.junit.Rule; import org.junit.Test; -import org.junit.rules.RuleChain; -import org.jvnet.hudson.test.JenkinsRule; import static org.junit.Assert.assertEquals; @@ -16,12 +14,8 @@ import static org.junit.Assert.assertEquals; */ public class MailerTest { - public JenkinsRule j = new JenkinsRule(); - public CodeConfiguratorRunner config = new CodeConfiguratorRunner(); - @Rule - public RuleChain chain = RuleChain.outerRule(j).around(config); - + public JenkinsConfiguredWithCodeRule j = new JenkinsConfiguredWithCodeRule(); @Test @ConfiguredWithCode("MailerTest.yml") diff --git a/src/test/java/org/jenkinsci/plugins/casc/SeedJobTest.java b/src/test/java/org/jenkinsci/plugins/casc/SeedJobTest.java index f898a53a..4b1ab933 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/SeedJobTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/SeedJobTest.java @@ -2,13 +2,11 @@ package org.jenkinsci.plugins.casc; import hudson.model.TopLevelItem; import jenkins.model.Jenkins; -import org.jenkinsci.plugins.casc.misc.CodeConfiguratorRunner; import org.jenkinsci.plugins.casc.misc.ConfiguredWithCode; +import org.jenkinsci.plugins.casc.misc.JenkinsConfiguredWithCodeRule; import org.jenkinsci.plugins.workflow.multibranch.WorkflowMultiBranchProject; import org.junit.Rule; import org.junit.Test; -import org.junit.rules.RuleChain; -import org.jvnet.hudson.test.JenkinsRule; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; @@ -18,11 +16,8 @@ import static org.junit.Assert.assertTrue; */ public class SeedJobTest { - public JenkinsRule j = new JenkinsRule(); - public CodeConfiguratorRunner config = new CodeConfiguratorRunner(); - @Rule - public RuleChain chain = RuleChain.outerRule(j).around(config); + public JenkinsConfiguredWithCodeRule j = new JenkinsConfiguredWithCodeRule(); @Test @ConfiguredWithCode("SeedJobTest.yml") diff --git a/src/test/java/org/jenkinsci/plugins/casc/SystemCredentialsTest.java b/src/test/java/org/jenkinsci/plugins/casc/SystemCredentialsTest.java index f8d3b2c4..6538b839 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/SystemCredentialsTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/SystemCredentialsTest.java @@ -4,50 +4,47 @@ import com.cloudbees.plugins.credentials.CredentialsProvider; import com.cloudbees.plugins.credentials.common.CertificateCredentials; import com.cloudbees.plugins.credentials.common.UsernamePasswordCredentials; import hudson.security.ACL; -import org.jenkinsci.plugins.casc.misc.CodeConfiguratorRunner; +import jenkins.model.Jenkins; import org.jenkinsci.plugins.casc.misc.ConfiguredWithCode; +import org.jenkinsci.plugins.casc.misc.EnvVarsRule; +import org.jenkinsci.plugins.casc.misc.JenkinsConfiguredWithCodeRule; import org.junit.Rule; import org.junit.Test; -import org.junit.rules.ExternalResource; import org.junit.rules.RuleChain; -import org.jvnet.hudson.test.JenkinsRule; import java.util.Collections; import java.util.List; -import static org.junit.Assert.assertEquals; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.hasSize; +import static org.junit.Assert.assertThat; /** * @author Nicolas De Loof */ public class SystemCredentialsTest { - public JenkinsRule j = new JenkinsRule(); - public CodeConfiguratorRunner config = new CodeConfiguratorRunner(); - @Rule - public RuleChain chain = RuleChain.outerRule(j) - .around(new ExternalResource() { - @Override - protected void before() { - System.setProperty("SUDO_PASSWORD", "1234"); - System.setProperty("SSH_KEY_PASSWORD", "ABCD"); - } - }) - .around(config); + public RuleChain chain = RuleChain.outerRule(new EnvVarsRule() + .env("SUDO_PASSWORD", "1234") + .env("SSH_KEY_PASSWORD", "ABCD")) + .around(new JenkinsConfiguredWithCodeRule()); @Test @ConfiguredWithCode("SystemCredentialsTest.yml") public void configure_system_credentials() throws Exception { - List ups = CredentialsProvider.lookupCredentials(UsernamePasswordCredentials.class, j.jenkins, ACL.SYSTEM, Collections.emptyList()); - assertEquals(1, ups.size()); - final UsernamePasswordCredentials up = ups.get(0); - assertEquals("1234", up.getPassword().getPlainText()); + Jenkins jenkins = Jenkins.getInstance(); + List ups = CredentialsProvider.lookupCredentials( + UsernamePasswordCredentials.class, jenkins, ACL.SYSTEM, Collections.emptyList() + ); + assertThat(ups, hasSize(1)); + assertThat(ups.get(0).getPassword().getPlainText(), equalTo("1234")); - List certs = CredentialsProvider.lookupCredentials(CertificateCredentials.class, j.jenkins, ACL.SYSTEM, Collections.emptyList()); - assertEquals(1, certs.size()); - final CertificateCredentials cert = certs.get(0); - assertEquals("ABCD", cert.getPassword().getPlainText()); + List certs = CredentialsProvider.lookupCredentials( + CertificateCredentials.class, jenkins, ACL.SYSTEM, Collections.emptyList() + ); + assertThat(certs, hasSize(1)); + assertThat(certs.get(0).getPassword().getPlainText(), equalTo("ABCD")); } } diff --git a/src/test/java/org/jenkinsci/plugins/casc/core/AdminWhitelistRuleConfiguratorTest.java b/src/test/java/org/jenkinsci/plugins/casc/core/AdminWhitelistRuleConfiguratorTest.java index f528481c..67994f81 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/core/AdminWhitelistRuleConfiguratorTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/core/AdminWhitelistRuleConfiguratorTest.java @@ -22,24 +22,19 @@ package org.jenkinsci.plugins.casc.core; import jenkins.model.Jenkins; import jenkins.security.s2m.AdminWhitelistRule; -import org.jenkinsci.plugins.casc.misc.CodeConfiguratorRunner; import org.jenkinsci.plugins.casc.misc.ConfiguredWithCode; +import org.jenkinsci.plugins.casc.misc.JenkinsConfiguredWithCodeRule; import org.junit.Assert; -import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; import org.jvnet.hudson.test.For; import org.jvnet.hudson.test.Issue; -import org.jvnet.hudson.test.JenkinsRule; @For(AdminWhitelistRule.class) public class AdminWhitelistRuleConfiguratorTest { - @ClassRule - public static JenkinsRule j = new JenkinsRule(); - @Rule - public CodeConfiguratorRunner config = new CodeConfiguratorRunner(); + public JenkinsConfiguredWithCodeRule config = new JenkinsConfiguredWithCodeRule(); @Test @Issue("Issue #28") diff --git a/src/test/java/org/jenkinsci/plugins/casc/core/HudsonPrivateSecurityRealmConfiguratorTest.java b/src/test/java/org/jenkinsci/plugins/casc/core/HudsonPrivateSecurityRealmConfiguratorTest.java index 75d9e900..1144a74f 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/core/HudsonPrivateSecurityRealmConfiguratorTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/core/HudsonPrivateSecurityRealmConfiguratorTest.java @@ -4,12 +4,10 @@ import hudson.model.User; import hudson.security.FullControlOnceLoggedInAuthorizationStrategy; import hudson.security.HudsonPrivateSecurityRealm; import jenkins.model.Jenkins; -import org.jenkinsci.plugins.casc.misc.CodeConfiguratorRunner; import org.jenkinsci.plugins.casc.misc.ConfiguredWithCode; +import org.jenkinsci.plugins.casc.misc.JenkinsConfiguredWithCodeRule; import org.junit.Rule; import org.junit.Test; -import org.junit.rules.RuleChain; -import org.jvnet.hudson.test.JenkinsRule; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; @@ -20,11 +18,8 @@ import static org.junit.Assert.assertTrue; */ public class HudsonPrivateSecurityRealmConfiguratorTest { - public JenkinsRule j = new JenkinsRule(); - public CodeConfiguratorRunner config = new CodeConfiguratorRunner(); - @Rule - public RuleChain chain = RuleChain.outerRule(j).around(config); + public JenkinsConfiguredWithCodeRule j = new JenkinsConfiguredWithCodeRule(); @Test @ConfiguredWithCode("HudsonPrivateSecurityRealmConfiguratorTest.yml") diff --git a/src/test/java/org/jenkinsci/plugins/casc/core/UnsecuredAuthorizationStrategyConfiguratorTest.java b/src/test/java/org/jenkinsci/plugins/casc/core/UnsecuredAuthorizationStrategyConfiguratorTest.java index 42b7d06d..86e654be 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/core/UnsecuredAuthorizationStrategyConfiguratorTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/core/UnsecuredAuthorizationStrategyConfiguratorTest.java @@ -1,12 +1,10 @@ package org.jenkinsci.plugins.casc.core; import hudson.security.AuthorizationStrategy; -import org.jenkinsci.plugins.casc.misc.CodeConfiguratorRunner; import org.jenkinsci.plugins.casc.misc.ConfiguredWithCode; +import org.jenkinsci.plugins.casc.misc.JenkinsConfiguredWithCodeRule; import org.junit.Rule; import org.junit.Test; -import org.junit.rules.RuleChain; -import org.jvnet.hudson.test.JenkinsRule; import static org.junit.Assert.assertSame; @@ -14,11 +12,8 @@ import static org.junit.Assert.assertSame; * @author Kohsuke Kawaguchi */ public class UnsecuredAuthorizationStrategyConfiguratorTest { - public JenkinsRule j = new JenkinsRule(); - public CodeConfiguratorRunner config = new CodeConfiguratorRunner(); - @Rule - public RuleChain chain = RuleChain.outerRule(j).around(config); + public JenkinsConfiguredWithCodeRule j = new JenkinsConfiguredWithCodeRule(); @Test @ConfiguredWithCode("UnsecuredAuthorizationStrategyConfiguratorTest.yml") diff --git a/src/test/java/org/jenkinsci/plugins/casc/integrations/globalmatrixauth/GlobalMatrixAuthorizationTest.java b/src/test/java/org/jenkinsci/plugins/casc/integrations/globalmatrixauth/GlobalMatrixAuthorizationTest.java index b7c465e0..2a4b9124 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/integrations/globalmatrixauth/GlobalMatrixAuthorizationTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/integrations/globalmatrixauth/GlobalMatrixAuthorizationTest.java @@ -3,14 +3,11 @@ package org.jenkinsci.plugins.casc.integrations.globalmatrixauth; import hudson.security.AuthorizationStrategy; import hudson.security.GlobalMatrixAuthorizationStrategy; import jenkins.model.Jenkins; -import org.jenkinsci.plugins.casc.ConfigurationAsCode; import org.jenkinsci.plugins.casc.Configurator; -import org.jenkinsci.plugins.casc.misc.CodeConfiguratorRunner; import org.jenkinsci.plugins.casc.misc.ConfiguredWithCode; -import org.junit.ClassRule; +import org.jenkinsci.plugins.casc.misc.JenkinsConfiguredWithCodeRule; import org.junit.Rule; import org.junit.Test; -import org.jvnet.hudson.test.JenkinsRule; import java.util.ArrayList; import java.util.List; @@ -24,11 +21,9 @@ import static org.junit.Assert.assertNotNull; */ public class GlobalMatrixAuthorizationTest { - @ClassRule - public static JenkinsRule j = new JenkinsRule(); - @Rule - public CodeConfiguratorRunner config = new CodeConfiguratorRunner(); + public JenkinsConfiguredWithCodeRule j = new JenkinsConfiguredWithCodeRule(); + @Test public void shouldReturnCustomConfigurator() { @@ -49,7 +44,7 @@ public class GlobalMatrixAuthorizationTest { @ConfiguredWithCode("GlobalMatrixStrategy.yml") public void checkCorrectlyConfiguredPermissions() throws Exception { assertEquals("The configured instance must use the Global Matrix Authentication Strategy", GlobalMatrixAuthorizationStrategy.class, Jenkins.getInstance().getAuthorizationStrategy().getClass()); - GlobalMatrixAuthorizationStrategy gms = (GlobalMatrixAuthorizationStrategy)Jenkins.getInstance().getAuthorizationStrategy(); + GlobalMatrixAuthorizationStrategy gms = (GlobalMatrixAuthorizationStrategy) Jenkins.getInstance().getAuthorizationStrategy(); List adminPermission = new ArrayList<>(gms.getGrantedPermissions().get(Jenkins.ADMINISTER)); assertEquals("authenticated", adminPermission.get(0)); diff --git a/src/test/java/org/jenkinsci/plugins/casc/integrations/rolebasedauth/RoleStrategyTest.java b/src/test/java/org/jenkinsci/plugins/casc/integrations/rolebasedauth/RoleStrategyTest.java index 85b60256..d6a487b9 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/integrations/rolebasedauth/RoleStrategyTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/integrations/rolebasedauth/RoleStrategyTest.java @@ -5,13 +5,11 @@ import com.michelin.cio.hudson.plugins.rolestrategy.RoleBasedAuthorizationStrate import hudson.security.AuthorizationStrategy; import jenkins.model.Jenkins; import org.jenkinsci.plugins.casc.Configurator; -import org.jenkinsci.plugins.casc.misc.CodeConfiguratorRunner; import org.jenkinsci.plugins.casc.misc.ConfiguredWithCode; -import org.junit.ClassRule; +import org.jenkinsci.plugins.casc.misc.JenkinsConfiguredWithCodeRule; import org.junit.Rule; import org.junit.Test; import org.jvnet.hudson.test.Issue; -import org.jvnet.hudson.test.JenkinsRule; import java.util.Map; import java.util.Set; @@ -28,11 +26,8 @@ import static org.junit.Assert.assertThat; */ public class RoleStrategyTest { - @ClassRule - public static JenkinsRule j = new JenkinsRule(); - @Rule - public CodeConfiguratorRunner config = new CodeConfiguratorRunner(); + public JenkinsConfiguredWithCodeRule j = new JenkinsConfiguredWithCodeRule(); @Test public void shouldReturnCustomConfigurator() { diff --git a/src/test/java/org/jenkinsci/plugins/casc/misc/CodeConfiguratorRunner.java b/src/test/java/org/jenkinsci/plugins/casc/misc/CodeConfiguratorRunner.java deleted file mode 100644 index 280acb4a..00000000 --- a/src/test/java/org/jenkinsci/plugins/casc/misc/CodeConfiguratorRunner.java +++ /dev/null @@ -1,31 +0,0 @@ -package org.jenkinsci.plugins.casc.misc; - -import org.junit.rules.TestRule; -import org.junit.runner.Description; -import org.junit.runners.model.Statement; - -import java.util.Objects; - -/** - * Reads value of {@link ConfiguredWithCode} and evaluates config same way as plugin. - * Requires Jenkins instance already up and running - * - * @see ConfiguredWithCode - */ -public class CodeConfiguratorRunner implements TestRule { - @Override - public Statement apply(Statement base, Description description) { - return new Statement() { - @Override - public void evaluate() throws Throwable { - ConfiguredWithCode configuredWithCode = description.getAnnotation(ConfiguredWithCode.class); - - if (Objects.nonNull(configuredWithCode)) { - new TestConfiguration(configuredWithCode.value()).configure(description.getTestClass()); - } - - base.evaluate(); - } - }; - } -} diff --git a/src/test/java/org/jenkinsci/plugins/casc/misc/EnvVarsRule.java b/src/test/java/org/jenkinsci/plugins/casc/misc/EnvVarsRule.java new file mode 100644 index 00000000..a1727665 --- /dev/null +++ b/src/test/java/org/jenkinsci/plugins/casc/misc/EnvVarsRule.java @@ -0,0 +1,13 @@ +package org.jenkinsci.plugins.casc.misc; + +import org.junit.contrib.java.lang.system.EnvironmentVariables; + +/** + * @author lanwen (Kirill Merkushev) + */ +public class EnvVarsRule extends EnvironmentVariables { + public EnvVarsRule env(String name, String value) { + set(name, value); + return this; + } +} diff --git a/src/test/java/org/jenkinsci/plugins/casc/misc/JenkinsConfiguredWithCodeRule.java b/src/test/java/org/jenkinsci/plugins/casc/misc/JenkinsConfiguredWithCodeRule.java new file mode 100644 index 00000000..0a7bf47a --- /dev/null +++ b/src/test/java/org/jenkinsci/plugins/casc/misc/JenkinsConfiguredWithCodeRule.java @@ -0,0 +1,20 @@ +package org.jenkinsci.plugins.casc.misc; + +import org.jvnet.hudson.test.JenkinsRule; + +import java.util.Objects; + +/** + * @author lanwen (Kirill Merkushev) + */ +public class JenkinsConfiguredWithCodeRule extends JenkinsRule { + @Override + public void before() throws Throwable { + super.before(); + ConfiguredWithCode configuredWithCode = env.description().getAnnotation(ConfiguredWithCode.class); + + if (Objects.nonNull(configuredWithCode)) { + TestConfiguration.withCode(configuredWithCode.value()).configure(env.description().getTestClass()); + } + } +} diff --git a/src/test/java/org/jenkinsci/plugins/casc/misc/TestConfiguration.java b/src/test/java/org/jenkinsci/plugins/casc/misc/TestConfiguration.java index ff126c66..36082ff0 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/misc/TestConfiguration.java +++ b/src/test/java/org/jenkinsci/plugins/casc/misc/TestConfiguration.java @@ -1,14 +1,6 @@ package org.jenkinsci.plugins.casc.misc; import org.jenkinsci.plugins.casc.ConfigurationAsCode; -import org.yaml.snakeyaml.Yaml; - -import java.io.IOException; -import java.io.InputStreamReader; -import java.io.Reader; -import java.util.Map; - -import static java.nio.charset.StandardCharsets.UTF_8; /** * Loads resource as configuration-as-code @@ -16,10 +8,14 @@ import static java.nio.charset.StandardCharsets.UTF_8; public class TestConfiguration { private final String resource; - public TestConfiguration(String resource) { + private TestConfiguration(String resource) { this.resource = resource; } + public static TestConfiguration withCode(String resource) { + return new TestConfiguration(resource); + } + public void configure(Class clazz) { try { ConfigurationAsCode.configure(clazz.getResourceAsStream(resource)); From 2e566e1572bdb977bfc17321ea8abf94792a261a Mon Sep 17 00:00:00 2001 From: Kirill Merkushev Date: Thu, 15 Feb 2018 01:56:56 +0300 Subject: [PATCH 3/4] fix merge with master --- .../org/jenkinsci/plugins/casc/SystemCredentialsTest.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/test/java/org/jenkinsci/plugins/casc/SystemCredentialsTest.java b/src/test/java/org/jenkinsci/plugins/casc/SystemCredentialsTest.java index abda3b1d..d89e0527 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/SystemCredentialsTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/SystemCredentialsTest.java @@ -48,7 +48,9 @@ public class SystemCredentialsTest { assertThat(certs, hasSize(1)); assertThat(certs.get(0).getPassword().getPlainText(), equalTo("ABCD")); - List sshPrivateKeys = CredentialsProvider.lookupCredentials(BasicSSHUserPrivateKey.class, j.jenkins, ACL.SYSTEM, Collections.EMPTY_LIST); + List sshPrivateKeys = CredentialsProvider.lookupCredentials( + BasicSSHUserPrivateKey.class, jenkins, ACL.SYSTEM, Collections.emptyList() + ); assertThat(sshPrivateKeys, hasSize(2)); assertThat(sshPrivateKeys.get(0).getPassphrase().getPlainText(), equalTo("ABCD")); } From 3c188f68b184daf350caa00496e347c131914781 Mon Sep 17 00:00:00 2001 From: Kirill Merkushev Date: Fri, 16 Feb 2018 12:47:02 +0300 Subject: [PATCH 4/4] fix merge with master (DataBoundConfTest) --- .../org/jenkinsci/plugins/casc/DataBoundConfiguratorTest.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/test/java/org/jenkinsci/plugins/casc/DataBoundConfiguratorTest.java b/src/test/java/org/jenkinsci/plugins/casc/DataBoundConfiguratorTest.java index 750bd2ac..066b8aa4 100644 --- a/src/test/java/org/jenkinsci/plugins/casc/DataBoundConfiguratorTest.java +++ b/src/test/java/org/jenkinsci/plugins/casc/DataBoundConfiguratorTest.java @@ -10,7 +10,9 @@ import javax.annotation.PostConstruct; import java.util.HashMap; import java.util.Map; +import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; /** * @author Nicolas De Loof @@ -32,7 +34,7 @@ public class DataBoundConfiguratorTest { assertEquals(true, configured.bar); assertEquals(123, configured.qix); assertEquals("DataBoundSetter", configured.zot); - assertTrue( configured.intialized); + assertThat(configured.intialized, is(true)); }