@Test public void takeWhile() throws Exception { WorkflowJob j = r.createProject(WorkflowJob.class, "takeWhile"); j.setDefinition(new CpsFlowDefinition("assert 'Groovy'.takeWhile {\n" + " it != 'v'\n" + "} == 'Groo'\n", true)); r.buildAndAssertSuccess(j); } }
@Test public void find() throws Exception { WorkflowJob j = r.createProject(WorkflowJob.class, "find"); j.setDefinition(new CpsFlowDefinition("assert 'foobar'.find('foo') { it.reverse() } == 'oof'", true)); r.buildAndAssertSuccess(j); }
@Test public void findAll() throws Exception { WorkflowJob j = r.createProject(WorkflowJob.class, "findAll"); j.setDefinition(new CpsFlowDefinition("assert 'foobarfoobarfoo'.findAll('foo') {\n" + " it.reverse()\n" + "} == ['oof', 'oof', 'oof']\n", true)); r.buildAndAssertSuccess(j); }
@Test public void replaceAll() throws Exception { WorkflowJob j = r.createProject(WorkflowJob.class, "replaceAll"); j.setDefinition(new CpsFlowDefinition("assert 'foobarfoobarfoo'.replaceAll('foo') {\n" + " it.reverse()\n" + "} == 'oofbaroofbaroof'\n", true)); r.buildAndAssertSuccess(j); }
@Override public void evaluate() throws Throwable { WorkflowJob p = rr.j.createProject(WorkflowJob.class, "p"); p.setDefinition(new CpsFlowDefinition("for (x in 'a;b'.split(';')) {sleep 1; echo(/running in $x/)}", true)); rr.j.assertLogContains("running in b", rr.j.buildAndAssertSuccess(p)); } });
@Test public void eachMatch() throws Exception { WorkflowJob j = r.createProject(WorkflowJob.class, "eachMatch"); j.setDefinition(new CpsFlowDefinition("int c = 0\n" + "'foobarfoooobar'.eachMatch('foo') { c++ }\n" + "assert c == 2\n", true)); r.buildAndAssertSuccess(j); }
@Issue({"JENKINS-34599", "JENKINS-45629"}) @Test public void fieldInitializers() throws Exception { WorkflowJob p = jenkins.jenkins.createProject(WorkflowJob.class, "p"); p.setDefinition(new CpsFlowDefinition("class X {final String val; X(String _val) {val = _val}}; echo(/hello ${new X('world').val}/)", true)); jenkins.assertLogContains("hello world", jenkins.buildAndAssertSuccess(p)); p.setDefinition(new CpsFlowDefinition("class X {String world = 'world'; String message = 'hello ' + world}; echo(new X().message)", true)); jenkins.assertLogContains("hello world", jenkins.buildAndAssertSuccess(p)); }
@Override public void evaluate() throws Throwable { WorkflowJob p = story.j.jenkins.createProject(WorkflowJob.class, "p"); p.setDefinition(new CpsFlowDefinition("echo(/before VAR=$VAR/); " + EnvAdder.class.getCanonicalName() + ".value = 'after'; echo(/after VAR=$VAR/)", false)); WorkflowRun b = story.j.buildAndAssertSuccess(p); story.j.assertLogContains("buildEnvironmentFor #1", b); story.j.assertLogContains("before VAR=before", b); story.j.assertLogContains("buildEnvironmentFor #2", b); story.j.assertLogContains("after VAR=after", b); } });
@Issue("JENKINS-45575") @Test public void multipleAssignmentOutsideSandbox() throws Exception { WorkflowJob job = jenkins.jenkins.createProject(WorkflowJob.class, "p"); job.setDefinition(new CpsFlowDefinition("def (a, b) = ['first', 'second']\n" + "def c, d\n" + "(c, d) = ['third', 'fourth']\n" + "assert a+b+c+d == 'firstsecondthirdfourth'\n", false)); jenkins.buildAndAssertSuccess(job); }
@Issue("JENKINS-45575") @Test public void multipleAssignmentInSandbox() throws Exception { WorkflowJob job = jenkins.jenkins.createProject(WorkflowJob.class, "p"); job.setDefinition(new CpsFlowDefinition("def (a, b) = ['first', 'second']\n" + "def c, d\n" + "(c, d) = ['third', 'fourth']\n" + "assert a+b+c+d == 'firstsecondthirdfourth'\n", true)); jenkins.buildAndAssertSuccess(job); }
@Issue("JENKINS-47064") @Test public void booleanClosureWrapperFromDGM() throws Exception { WorkflowJob job = jenkins.jenkins.createProject(WorkflowJob.class, "p"); job.setDefinition(new CpsFlowDefinition("assert ['a', 'b'].every { sleep 1; return it != null }\n", true)); jenkins.buildAndAssertSuccess(job); }
@Issue("JENKINS-48501") @Test public void variableDecl() throws Exception { WorkflowJob p = jenkins.jenkins.createProject(WorkflowJob.class, "p"); p.setDefinition(new CpsFlowDefinition("String foo", true)); jenkins.buildAndAssertSuccess(p); }
@Override public void evaluate() throws Throwable { WorkflowJob p = rr.j.jenkins.getItemByFullName("p", WorkflowJob.class); WorkflowRun b = p.getBuildByNumber(1); SemaphoreStep.success("wait/1", null); rr.j.assertBuildStatusSuccess(rr.j.waitForCompletion(b)); SemaphoreStep.success("wait/2", null); rr.j.buildAndAssertSuccess(p); } });
@Issue("JENKINS-28321") @Test public void whitelistedMethodPointer() throws Exception { WorkflowJob job = jenkins.createProject(WorkflowJob.class, "p"); job.setDefinition(new CpsFlowDefinition("def foo = 'lowercase'\n" + "def bar = foo.&toUpperCase\n" + "echo bar.call()\n", true)); WorkflowRun b = jenkins.buildAndAssertSuccess(job); jenkins.assertLogContains("LOWERCASE", b); }
@Override public void evaluate() throws Throwable { WorkflowJob p = rr.j.jenkins.getItemByFullName("p", WorkflowJob.class); assertNotNull(p); WorkflowRun b = p.getBuildByNumber(1); SemaphoreStep.success("wait/1", null); rr.j.assertBuildStatusSuccess(rr.j.waitForCompletion(b)); SemaphoreStep.success("wait/2", null); rr.j.buildAndAssertSuccess(p); } });
/** Create and run a basic build before we mangle its persisted contents. Stores job number to jobIdNumber index 0. */ private static WorkflowRun runBasicBuild(JenkinsRule j, String jobName, int[] jobIdNumber, FlowDurabilityHint hint) throws Exception { WorkflowJob job = j.jenkins.createProject(WorkflowJob.class, jobName); job.setDefinition(new CpsFlowDefinition("echo 'doSomething'", true)); job.addProperty(new DurabilityHintJobProperty(hint)); WorkflowRun run = j.buildAndAssertSuccess(job); jobIdNumber[0] = run.getNumber(); assertCompletedCleanly(run); return run; }
@Test public void given_folderCredential_when_builtAsSystem_then_credentialFound() throws Exception { Folder f = createFolder(); CredentialsStore folderStore = getFolderStore(f); folderStore.addCredentials(Domain.global(), new UsernamePasswordCredentialsImpl(CredentialsScope.GLOBAL, "foo-manchu", "Dr. Fu Manchu", "foo", "manchu")); FreeStyleProject prj = f.createProject(FreeStyleProject.class, "job"); prj.getBuildersList().add(new HasCredentialBuilder("foo-manchu")); r.buildAndAssertSuccess(prj); }
@Issue("JENKINS-46252") @Test public void declarativeJobAction() throws Exception { WorkflowRun r1 = expect("simplePipeline").go(); WorkflowJob j1 = r1.getParent(); assertNotNull(j1.getAction(DeclarativeJobAction.class)); WorkflowJob j2 = j.createProject(WorkflowJob.class, "nonDeclarative"); j2.setDefinition(new CpsFlowDefinition("echo 'hi'", true)); j.buildAndAssertSuccess(j2); assertNull(j2.getAction(DeclarativeJobAction.class)); }
@Issue("JENKINS-44149") @Test public void propsRemoved() throws Exception { WorkflowRun b = getAndStartNonRepoBuild("simpleJobProperties"); j.assertBuildStatusSuccess(j.waitForCompletion(b)); WorkflowJob job = b.getParent(); assertNotNull(job.getProperty(BuildDiscarderProperty.class)); job.setDefinition(new CpsFlowDefinition(pipelineSourceFromResources("propsTriggersParamsRemoved"), true)); j.buildAndAssertSuccess(job); assertNull(job.getProperty(BuildDiscarderProperty.class)); }
@Issue("JENKINS-51227") @Test public void quietPeriodRemoved() throws Exception { WorkflowRun b = getAndStartNonRepoBuild("quietPeriod"); j.assertBuildStatusSuccess(j.waitForCompletion(b)); WorkflowJob job = b.getParent(); assertEquals(15, job.getQuietPeriod()); job.setDefinition(new CpsFlowDefinition(pipelineSourceFromResources("propsTriggersParamsRemoved"), true)); j.buildAndAssertSuccess(job); assertEquals(j.jenkins.getQuietPeriod(), job.getQuietPeriod()); }