Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion integrations/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -221,7 +221,7 @@
<dependency>
<groupId>org.jenkins-ci.plugins</groupId>
<artifactId>job-dsl</artifactId>
<version>1.66</version>
<version>1.72</version>
<optional>true</optional>
<exclusions>
<exclusion>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@

import javaposse.jobdsl.plugin.GlobalJobDslSecurityConfiguration;
import jenkins.model.GlobalConfiguration;
import org.junit.Ignore;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runners.model.Statement;
import org.jvnet.hudson.test.Issue;
import org.jvnet.hudson.test.RestartableJenkinsRule;

import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;

/**
Expand All @@ -21,55 +21,56 @@ public class JobDslGlobalSecurityConfigurationTest {
public RestartableJenkinsRule j = new RestartableJenkinsRule();

@Test
public void global_dsl_security() throws Exception {
j.addStep(new Statement() {
@Override
public void evaluate() throws Throwable {
final GlobalJobDslSecurityConfiguration dslSecurity = GlobalConfiguration.all()
.get(GlobalJobDslSecurityConfiguration.class);
public void test_global_dsl_security_can_be_applied() {
j.addStep(validateGlobalDSLSecurity);
}

dslSecurity.setUseScriptSecurity(true);
assertThat("ScriptSecurity", dslSecurity.isUseScriptSecurity(), is(true));
@Test
@Issue("#253")
public void test_global_dsl_security_can_be_reapplied_after_restart() {
j.addStep(validateGlobalDSLSecurity);
j.addStep(validateGlobalDSLSecurityAfterRestart, true);
}

ConfigurationAsCode.get().configure(getClass().getResource("JobDslGlobalSecurityConfigurationTest.yml").toExternalForm());
private GlobalJobDslSecurityConfiguration getGlobalJobDslSecurityConfiguration() {
final GlobalJobDslSecurityConfiguration dslSecurity = GlobalConfiguration.all()
.get(GlobalJobDslSecurityConfiguration.class);
assertNotNull(dslSecurity);
return dslSecurity;
}

assertThat("ScriptSecurity", dslSecurity.isUseScriptSecurity(), is(false));
}
});
private void configure() throws ConfiguratorException {
ConfigurationAsCode.get().configure(getClass().getResource("JobDslGlobalSecurityConfigurationTest.yml").toExternalForm());
}

@Test @Issue("#253") @Ignore
public void global_dsl_security_can_be_reapplied_after_restart() {
j.addStep(new Statement() {
@Override
public void evaluate() throws Throwable {
final GlobalJobDslSecurityConfiguration dslSecurity = GlobalConfiguration.all()
.get(GlobalJobDslSecurityConfiguration.class);
private Statement validateGlobalDSLSecurity = new Statement() {

dslSecurity.setUseScriptSecurity(true);
assertThat("ScriptSecurity", dslSecurity.isUseScriptSecurity(), is(true));
@Override
public void evaluate() throws Throwable {
final GlobalJobDslSecurityConfiguration dslSecurity = getGlobalJobDslSecurityConfiguration();

ConfigurationAsCode.get().configure(getClass().getResource("JobDslGlobalSecurityConfigurationTest.yml").toExternalForm());
dslSecurity.setUseScriptSecurity(true);
assertThat("ScriptSecurity", dslSecurity.isUseScriptSecurity(), is(true));

assertThat("ScriptSecurity", dslSecurity.isUseScriptSecurity(), is(false));
}
});
configure();

j.addStep(new Statement() {
@Override
public void evaluate() throws Throwable {
final GlobalJobDslSecurityConfiguration dslSecurity = GlobalConfiguration.all()
.get(GlobalJobDslSecurityConfiguration.class);
assertThat("ScriptSecurity", dslSecurity.isUseScriptSecurity(), is(false));
}
};

// step 1 configuration still applies
assertThat("ScriptSecurity", dslSecurity.isUseScriptSecurity(), is(false));
private Statement validateGlobalDSLSecurityAfterRestart = new Statement() {

// this breaks
ConfigurationAsCode.get().configure(getClass().getResource("JobDslGlobalSecurityConfigurationTest.yml").toExternalForm());
@Override
public void evaluate() throws Throwable {
final GlobalJobDslSecurityConfiguration dslSecurity = getGlobalJobDslSecurityConfiguration();

assertThat("ScriptSecurity", dslSecurity.isUseScriptSecurity(), is(false));
}
}, true);
}
// step 1 configuration still applies
assertThat("ScriptSecurity", dslSecurity.isUseScriptSecurity(), is(false));

configure();

assertThat("ScriptSecurity", dslSecurity.isUseScriptSecurity(), is(false));
}
};

}
Original file line number Diff line number Diff line change
@@ -1,25 +1,37 @@
package io.jenkins.plugins.casc;

import static org.hamcrest.Matchers.is;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;

import hudson.model.FreeStyleBuild;
import hudson.model.FreeStyleProject;
import io.jenkins.plugins.casc.misc.ConfiguredWithCode;
import io.jenkins.plugins.casc.misc.Env;
import io.jenkins.plugins.casc.misc.EnvVarsRule;
import io.jenkins.plugins.casc.misc.Envs;
import io.jenkins.plugins.casc.misc.JenkinsConfiguredWithCodeRule;
import javaposse.jobdsl.plugin.GlobalJobDslSecurityConfiguration;
import jenkins.model.GlobalConfiguration;
import jenkins.model.Jenkins;
import org.junit.Rule;
import org.junit.Test;
import org.junit.contrib.java.lang.system.EnvironmentVariables;
import org.junit.rules.RuleChain;
import org.jvnet.hudson.test.JenkinsRule;

/**
* @author <a href="mailto:nicolas.deloof@gmail.com">Nicolas De Loof</a>
*/
public class SeedJobTest {

private JenkinsRule j;

@Rule
public RuleChain rc = RuleChain.outerRule(new EnvironmentVariables()
public RuleChain rc = RuleChain.outerRule(new EnvVarsRule()
.set("SEED_JOB_PATH", "./src/test/resources/io/jenkins/plugins/casc/testJob2.groovy")
.set("REPO_URL", "git://github.com/jenkinsci/configuration-as-code-plugin.git"))
.around(new JenkinsConfiguredWithCodeRule());
.around(j = new JenkinsConfiguredWithCodeRule());

@Test
@ConfiguredWithCode("SeedJobTest.yml")
Expand All @@ -42,4 +54,27 @@ public void configure_seed_job_with_env_vars() throws Exception {
final Jenkins jenkins = Jenkins.get();
assertNotNull(jenkins.getItem("seedJobWithEnvVars"));
}

@Test
@ConfiguredWithCode("SeedJobTest_withSecurityConfig.yml")
@Envs(
@Env(name = "SEED_JOB_FOLDER_FILE_PATH", value = ".")
)
public void configure_seed_job_with_security_config() throws Exception {
final Jenkins jenkins = Jenkins.get();

final GlobalJobDslSecurityConfiguration dslSecurity = GlobalConfiguration.all()
.get(GlobalJobDslSecurityConfiguration.class);
assertNotNull(dslSecurity);
assertThat("ScriptSecurity", dslSecurity.isUseScriptSecurity(), is(false));

FreeStyleProject seedJobWithSecurityConfig = (FreeStyleProject) jenkins.getItem("seedJobWithSecurityConfig");
assertNotNull(seedJobWithSecurityConfig);

assertTrue(seedJobWithSecurityConfig.isInQueue());
FreeStyleBuild freeStyleBuild = j.buildAndAssertSuccess(seedJobWithSecurityConfig);
j.assertLogContains("Processing DSL script testJob2.groovy", freeStyleBuild);
j.assertLogContains("Added items:", freeStyleBuild);
j.assertLogContains("GeneratedJob{name='testJob2'}", freeStyleBuild);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
security:
GlobalJobDslSecurityConfiguration:
useScriptSecurity: false

jobs:
- file: ./src/test/resources/io/jenkins/plugins/casc/testJob2.groovy
- script: >
freeStyleJob('seedJobWithSecurityConfig') {
steps {
customWorkspace("$SEED_JOB_FOLDER_FILE_PATH")
dsl(['testJob2.groovy'], 'DISABLE')
}
}
- script: queue("seedJobWithSecurityConfig")
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
package io.jenkins.plugins.casc

job('testJob2') {
scm {
git('git://github.com/quidryan/aws-sdk-test.git')
}
triggers {
scm('H/15 * * * *')
}
steps {
maven('-e clean test')
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package io.jenkins.plugins.casc.misc;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.nio.file.Paths;
Expand All @@ -14,9 +15,20 @@

public class EnvVarsRule extends EnvironmentVariables {

private Class<?> clazz;

private void setValue(Env env) {
String value = env.value();
if (env.name().endsWith("FILE_PATH")) {
value = new File(clazz.getResource(value).getPath()).getAbsolutePath();
}
set(env.name(), value);
}

@Override
public Statement apply(Statement base, Description description) {
EnvsFromFile configuredWithEnvsFromFile = description.getAnnotation(EnvsFromFile.class);
clazz = description.getTestClass();
if (Objects.nonNull(configuredWithEnvsFromFile)) {

final String[] resource = configuredWithEnvsFromFile.value();
Expand All @@ -38,7 +50,7 @@ public Statement apply(Statement base, Description description) {
Envs configuredWithEnvs = description.getAnnotation(Envs.class);
if (Objects.nonNull(configuredWithEnvs)) {
List<Env> envs = Arrays.asList(configuredWithEnvs.value());
envs.forEach(env -> set(env.name(), env.value()));
envs.forEach(this::setValue);
}
return super.apply(base, description);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@
/**
* @author <a href="mailto:nicolas.deloof@gmail.com">Nicolas De Loof</a>
*/
@Extension(optional = true)
@Extension(optional = true, ordinal = -100) // Ordinal -100 Ensure it is loaded after GlobalJobDslSecurityConfiguration
@Restricted(NoExternalUse.class)
public class SeedJobConfigurator implements RootElementConfigurator<GeneratedItems[]> {

Expand Down