move all init logic to special rule @ConfiguredWithCode

This commit is contained in:
Kirill Merkushev 2018-02-12 21:22:33 +03:00
parent 60c4063f15
commit c67dddccaf
22 changed files with 274 additions and 98 deletions

View File

@ -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());

View File

@ -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<String> agentProtocols =
Arrays.stream(new String[]{"JNLP4-connect", "Ping"}).collect(Collectors.toSet());

View File

@ -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 <a href="mailto:nicolas.deloof@gmail.com">Nicolas De Loof</a>
@ -46,4 +45,4 @@ public class DataBoundConfiguratorTest {
}
}
}
}

View File

@ -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());

View File

@ -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);

View File

@ -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);

View File

@ -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 <a href="mailto:nicolas.deloof@gmail.com">Nicolas De Loof</a>
@ -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());

View File

@ -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 <a href="mailto:nicolas.deloof@gmail.com">Nicolas De Loof</a>
*/
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);

View File

@ -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());
}

View File

@ -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());

View File

@ -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());

View File

@ -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 <a href="mailto:nicolas.deloof@gmail.com">Nicolas De Loof</a>
@ -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);
}
}
}

View File

@ -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);

View File

@ -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<UsernamePasswordCredentials> ups = CredentialsProvider.lookupCredentials(UsernamePasswordCredentials.class, j.jenkins, ACL.SYSTEM, Collections.EMPTY_LIST);
List<UsernamePasswordCredentials> 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<CertificateCredentials> certs = CredentialsProvider.lookupCredentials(CertificateCredentials.class, j.jenkins, ACL.SYSTEM, Collections.EMPTY_LIST);
List<CertificateCredentials> 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());

View File

@ -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());

View File

@ -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 <a href="mailto:nicolas.deloof@gmail.com">Nicolas De Loof</a>
*/
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());

View File

@ -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());
}
}
}

View File

@ -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();

View File

@ -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<Role, Set<String>> globalRoles = rbas.getGrantedRoles(RoleBasedAuthorizationStrategy.GLOBAL);
assertThat(globalRoles.size(), equalTo(2));

View File

@ -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();
}
};
}
}

View File

@ -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();
}

View File

@ -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);
}
}
}