From 39ce898635f160765889dce72c16cb784c521746 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 29 Dec 2025 09:03:05 +0000 Subject: [PATCH 1/2] Bump org.jenkins-ci.plugins:plugin from 5.26 to 5.2099.v68c2f5e27299 Bumps [org.jenkins-ci.plugins:plugin](https://github.com/jenkinsci/plugin-pom) from 5.26 to 5.2099.v68c2f5e27299. - [Release notes](https://github.com/jenkinsci/plugin-pom/releases) - [Changelog](https://github.com/jenkinsci/plugin-pom/blob/master/CHANGELOG.md) - [Commits](https://github.com/jenkinsci/plugin-pom/compare/plugin-5.26...5.2099.v68c2f5e27299) --- updated-dependencies: - dependency-name: org.jenkins-ci.plugins:plugin dependency-version: 5.2099.v68c2f5e27299 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index ca7fda87..7873300d 100644 --- a/pom.xml +++ b/pom.xml @@ -27,7 +27,7 @@ org.jenkins-ci.plugins plugin - 5.26 + 5.2099.v68c2f5e27299 org.jenkins-ci.plugins.workflow From 1811b56882d58629e98d8651681d16b103dd7fbe Mon Sep 17 00:00:00 2001 From: Jesse Glick Date: Tue, 30 Dec 2025 12:29:27 -0500 Subject: [PATCH 2/2] Spotless --- .../steps/ArtifactArchiverStepTest.java | 18 ++-- .../workflow/steps/CatchErrorStepTest.java | 66 +++++---------- .../plugins/workflow/steps/CoreStepTest.java | 30 +++---- .../workflow/steps/CoreWrapperStepTest.java | 18 ++-- .../workflow/steps/DeleteDirStepTest.java | 9 +- .../plugins/workflow/steps/EnvStepTest.java | 24 ++---- .../workflow/steps/ReadWriteFileStepTest.java | 30 +++---- .../plugins/workflow/steps/RetryStepTest.java | 36 +++----- .../workflow/steps/TimeoutStepTest.java | 84 +++++++------------ .../steps/WaitForConditionStepTest.java | 6 +- .../workflow/steps/WarnErrorStepTest.java | 36 +++----- .../support/steps/stash/StashTest.java | 18 ++-- 12 files changed, 125 insertions(+), 250 deletions(-) diff --git a/src/test/java/org/jenkinsci/plugins/workflow/steps/ArtifactArchiverStepTest.java b/src/test/java/org/jenkinsci/plugins/workflow/steps/ArtifactArchiverStepTest.java index 1706255d..5ac3d045 100644 --- a/src/test/java/org/jenkinsci/plugins/workflow/steps/ArtifactArchiverStepTest.java +++ b/src/test/java/org/jenkinsci/plugins/workflow/steps/ArtifactArchiverStepTest.java @@ -41,15 +41,13 @@ void beforeEach(JenkinsRule rule) { void archive() throws Exception { // job setup WorkflowJob foo = r.jenkins.createProject(WorkflowJob.class, "foo"); - foo.setDefinition(new CpsFlowDefinition( - """ + foo.setDefinition(new CpsFlowDefinition(""" node { writeFile text: 'hello world', file: 'msg' archive 'm*' unarchive(mapping:['msg':'msg.out']) archive 'msg.out' - }""", - true)); + }""", true)); // get the build going, and wait until workflow pauses WorkflowRun b = r.assertBuildStatusSuccess(foo.scheduleBuild2(0).get()); @@ -78,8 +76,7 @@ void nonexistent() throws Exception { @Test void unarchiveDir() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" node { writeFile text: 'one', file: 'a/1'; writeFile text: 'two', file: 'a/b/2' archive 'a/' @@ -88,8 +85,7 @@ void unarchiveDir() throws Exception { echo "${readFile 'a/1'}/${readFile 'a/b/2'}" } } - """, - true)); + """, true)); WorkflowRun b = r.assertBuildStatusSuccess(p.scheduleBuild2(0).get()); VirtualFile archivedFile = b.getArtifactManager().root().child("a/b/2"); assertTrue(archivedFile.exists()); @@ -106,8 +102,7 @@ void directDownload() throws Exception { r.createSlave("remote1", null, null); r.createSlave("remote2", null, null); WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" node('remote1') { writeFile file: 'x', text: 'contents' archiveArtifacts 'x' @@ -116,8 +111,7 @@ void directDownload() throws Exception { unarchive mapping: [x: 'x'] echo "loaded ${readFile('x')}" } - """, - true)); + """, true)); DirectArtifactManagerFactory.whileBlockingOpen(() -> { r.assertLogContains("loaded contents", r.buildAndAssertSuccess(p)); return null; diff --git a/src/test/java/org/jenkinsci/plugins/workflow/steps/CatchErrorStepTest.java b/src/test/java/org/jenkinsci/plugins/workflow/steps/CatchErrorStepTest.java index 19208fab..7bfd9f63 100644 --- a/src/test/java/org/jenkinsci/plugins/workflow/steps/CatchErrorStepTest.java +++ b/src/test/java/org/jenkinsci/plugins/workflow/steps/CatchErrorStepTest.java @@ -67,13 +67,11 @@ void beforeEach(JenkinsRule rule) { void specialStatus() throws Exception { User.getById("smrt", true); WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" catchError { semaphore 'specialStatus' } - """, - true)); + """, true)); SemaphoreStep.failure( "specialStatus/1", new FlowInterruptedException(Result.UNSTABLE, new CauseOfInterruption.UserInterruption("smrt"))); @@ -133,13 +131,11 @@ void serialFormWhenTypeOfBuildResultFieldWasResult() throws Exception { @Test void customBuildResult() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" catchError(message: 'caught error', buildResult: 'unstable') { error 'oops' } - """, - true)); + """, true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); assertCatchError(r, b, Result.UNSTABLE, null, true); r.assertLogContains("Setting overall build result to UNSTABLE", b); @@ -148,13 +144,11 @@ void customBuildResult() throws Exception { @Test void invalidBuildResult() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" catchError(buildResult: 'typo') { error 'oops' } - """, - true)); + """, true)); WorkflowRun b = r.assertBuildStatus(Result.FAILURE, p.scheduleBuild2(0)); r.assertLogContains("buildResult is invalid: typo", b); } @@ -163,13 +157,11 @@ void invalidBuildResult() throws Exception { @Test void customStageResult() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" catchError(message: 'caught error', stageResult: 'failure') { error 'oops' } - """, - true)); + """, true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); assertCatchError(r, b, Result.FAILURE, Result.FAILURE, true); } @@ -177,13 +169,11 @@ void customStageResult() throws Exception { @Test void invalidStageResult() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" catchError(stageResult: 'typo') { error 'oops' } - """, - true)); + """, true)); WorkflowRun b = r.assertBuildStatus(Result.FAILURE, p.scheduleBuild2(0)); r.assertLogContains("stageResult is invalid: typo", b); } @@ -192,13 +182,11 @@ void invalidStageResult() throws Exception { @Test void stepResultOnly() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" catchError(message: 'caught error', buildResult: 'success', stageResult: 'unstable') { error 'oops' } - """, - true)); + """, true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); assertCatchError(r, b, Result.SUCCESS, Result.UNSTABLE, true); } @@ -206,15 +194,13 @@ void stepResultOnly() throws Exception { @Test void catchesInterruptionsByDefault() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" import jenkins.model.CauseOfInterruption import org.jenkinsci.plugins.workflow.steps.FlowInterruptedException catchError(message: 'caught error') { throw new FlowInterruptedException(Result.ABORTED, true, new CauseOfInterruption[0]) } - """, - false)); + """, false)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); assertCatchError(r, b, Result.ABORTED, Result.ABORTED, true); } @@ -222,15 +208,13 @@ void catchesInterruptionsByDefault() throws Exception { @Test void canAvoidCatchingInterruptionsWithOption() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" import jenkins.model.CauseOfInterruption import org.jenkinsci.plugins.workflow.steps.FlowInterruptedException catchError(message: 'caught error', catchInterruptions: false) { throw new FlowInterruptedException(Result.ABORTED, true, new CauseOfInterruption[0]) } - """, - false)); + """, false)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); assertCatchError(r, b, Result.ABORTED, null, false); } @@ -238,13 +222,11 @@ void canAvoidCatchingInterruptionsWithOption() throws Exception { @Test void catchesAttemptsToStopBuildByDefault() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" catchError(message: 'caught error') { semaphore 'ready' } - """, - true)); + """, true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); SemaphoreStep.waitForStart("ready/1", b); b.doStop(); @@ -254,13 +236,11 @@ void catchesAttemptsToStopBuildByDefault() throws Exception { @Test void canAvoidCatchingAttemptsToStopBuildWithOption() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" catchError(message: 'caught error', catchInterruptions: false) { semaphore 'ready' } - """, - true)); + """, true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); SemaphoreStep.waitForStart("ready/1", b); b.doStop(); @@ -273,14 +253,12 @@ void catchesDownstreamBuildFailureEvenWhenNotCatchingInterruptions() throws Exce WorkflowJob ds = r.createProject(WorkflowJob.class, "ds"); ds.setDefinition(new CpsFlowDefinition("error 'oops!'", true)); WorkflowJob us = r.createProject(WorkflowJob.class, "us"); - us.setDefinition(new CpsFlowDefinition( - """ + us.setDefinition(new CpsFlowDefinition(""" int count = 1 catchError(message: 'caught error', catchInterruptions: false) { build 'ds' } - """, - true)); + """, true)); WorkflowRun b = r.assertBuildStatus(Result.FAILURE, us.scheduleBuild2(0)); assertCatchError(r, b, Result.FAILURE, Result.FAILURE, true); } diff --git a/src/test/java/org/jenkinsci/plugins/workflow/steps/CoreStepTest.java b/src/test/java/org/jenkinsci/plugins/workflow/steps/CoreStepTest.java index 06360af5..70245a45 100644 --- a/src/test/java/org/jenkinsci/plugins/workflow/steps/CoreStepTest.java +++ b/src/test/java/org/jenkinsci/plugins/workflow/steps/CoreStepTest.java @@ -123,13 +123,11 @@ void fingerprinter() throws Exception { @Test void javadoc() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" node { writeFile text: 'hello world', file: 'docs/index.html' step([$class: 'JavadocArchiver', javadocDir: 'docs']) - }""", - true)); + }""", true)); WorkflowRun b = r.assertBuildStatusSuccess(p.scheduleBuild2(0)); assertEquals( "hello world", @@ -143,15 +141,13 @@ void javadoc() throws Exception { @Test void mailer() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" node { writeFile text: '''failed''', file: 'r.xml' junit 'r.xml' step([$class: 'Mailer', recipients: 'test@nowhere.net']) } - """, - true)); + """, true)); String recipient = "test@nowhere.net"; Mailbox inbox = Mailbox.get(new InternetAddress(recipient)); inbox.clear(); @@ -159,39 +155,33 @@ void mailer() throws Exception { assertEquals(1, inbox.size()); var subj = Messages.MailSender_UnstableMail_Subject(); // MailSender.createUnstableMail/getSubject assertEquals(subj + " " + b.getFullDisplayName(), inbox.get(0).getSubject()); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" node { catchError {error 'oops'} step([$class: 'Mailer', recipients: 'test@nowhere.net']) } - """, - true)); + """, true)); inbox.clear(); b = r.assertBuildStatus(Result.FAILURE, p.scheduleBuild2(0).get()); assertEquals(1, inbox.size()); assertEquals( Messages.MailSender_FailureMail_Subject() + " " + b.getFullDisplayName(), inbox.get(0).getSubject()); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" node { catchError {echo 'ok'} step([$class: 'Mailer', recipients: 'test@nowhere.net']) } - """, - true)); + """, true)); inbox.clear(); b = r.assertBuildStatus(Result.SUCCESS, p.scheduleBuild2(0).get()); assertEquals(0, inbox.size()); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" node { try {error 'oops'} catch (e) {echo "caught ${e}"; currentBuild.result = 'FAILURE'} step([$class: 'Mailer', recipients: 'test@nowhere.net']) } - """, - true)); + """, true)); inbox.clear(); b = r.assertBuildStatus(Result.FAILURE, p.scheduleBuild2(0).get()); assertEquals(1, inbox.size()); diff --git a/src/test/java/org/jenkinsci/plugins/workflow/steps/CoreWrapperStepTest.java b/src/test/java/org/jenkinsci/plugins/workflow/steps/CoreWrapperStepTest.java index 4ba45d1d..633af38a 100644 --- a/src/test/java/org/jenkinsci/plugins/workflow/steps/CoreWrapperStepTest.java +++ b/src/test/java/org/jenkinsci/plugins/workflow/steps/CoreWrapperStepTest.java @@ -105,8 +105,7 @@ void useWrapper() throws Throwable { slaveEnv.put("HOME", "/home/jenkins"); createSpecialEnvSlave(j, "slave", "", slaveEnv); WorkflowJob p = j.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" node('slave') { mock { semaphore 'restarting' @@ -118,8 +117,7 @@ void useWrapper() throws Throwable { } } } - """, - true)); + """, true)); WorkflowRun b = p.scheduleBuild2(0).getStartCondition().get(); SemaphoreStep.waitForStart("restarting/1", b); }); @@ -190,8 +188,7 @@ public boolean isApplicable(AbstractProject item) { void envStickiness() throws Throwable { sessions.then(j -> { WorkflowJob p = j.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" def show(which) { echo "groovy ${which} ${env.TESTVAR}" if (isUnix()) { @@ -209,8 +206,7 @@ def show(which) { } show 'outside' } - """, - true)); + """, true)); WorkflowRun b = j.buildAndAssertSuccess(p); j.assertLogContains("received initial", b); j.assertLogContains("groovy before wrapped", b); @@ -334,12 +330,10 @@ public boolean isApplicable(AbstractProject item) { void argumentsToString() throws Throwable { sessions.then(j -> { WorkflowJob p = j.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" node { wrap([$class: 'AnsiColorBuildWrapper', colorMapName: 'xterm']) {} - }""", - true)); + }""", true)); WorkflowRun b = j.buildAndAssertSuccess(p); List coreStepNodes = new DepthFirstScanner() .filteredNodes( diff --git a/src/test/java/org/jenkinsci/plugins/workflow/steps/DeleteDirStepTest.java b/src/test/java/org/jenkinsci/plugins/workflow/steps/DeleteDirStepTest.java index 21fda190..265a6a1e 100644 --- a/src/test/java/org/jenkinsci/plugins/workflow/steps/DeleteDirStepTest.java +++ b/src/test/java/org/jenkinsci/plugins/workflow/steps/DeleteDirStepTest.java @@ -47,8 +47,7 @@ void beforeEach(JenkinsRule rule) { @Test void testDeleteEmptyWorkspace() throws Exception { - String workspace = runAndGetWorkspaceDir( - """ + String workspace = runAndGetWorkspaceDir(""" node { deleteDir() }"""); @@ -58,8 +57,7 @@ void testDeleteEmptyWorkspace() throws Exception { @Test void testDeleteTopLevelDir() throws Exception { - String workspace = runAndGetWorkspaceDir( - """ + String workspace = runAndGetWorkspaceDir(""" node { writeFile file: 'f1', text: 'some text' writeFile file: 'f2', text: 'some text' @@ -76,8 +74,7 @@ void testDeleteTopLevelDir() throws Exception { @Test void testDeleteSubFolder() throws Exception { - String workspace = runAndGetWorkspaceDir( - """ + String workspace = runAndGetWorkspaceDir(""" node { writeFile file: 'f1', text: 'some text' writeFile file: 'f2', text: 'some text' diff --git a/src/test/java/org/jenkinsci/plugins/workflow/steps/EnvStepTest.java b/src/test/java/org/jenkinsci/plugins/workflow/steps/EnvStepTest.java index af2a2c7c..7b8fc745 100644 --- a/src/test/java/org/jenkinsci/plugins/workflow/steps/EnvStepTest.java +++ b/src/test/java/org/jenkinsci/plugins/workflow/steps/EnvStepTest.java @@ -61,8 +61,7 @@ public class EnvStepTest { void overriding() throws Throwable { sessions.then(j -> { WorkflowJob p = j.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" env.CUSTOM = 'initial' env.FOOPATH = node {isUnix() ? '/opt/foos' : 'C:\\\\foos'} env.NULLED = 'outside' @@ -72,8 +71,7 @@ void overriding() throws Throwable { echo "groovy NULLED=${env.NULLED}" } isUnix() ? sh('echo outside CUSTOM=$CUSTOM NOVEL=$NOVEL NULLED=outside') : bat('echo outside CUSTOM=%CUSTOM% NOVEL=%NOVEL% NULLED=outside') - }""", - true)); + }""", true)); WorkflowRun b = j.buildAndAssertSuccess(p); j.assertLogContains( Functions.isWindows() @@ -99,14 +97,12 @@ void overriding() throws Throwable { void parallel() throws Throwable { sessions.then(j -> { WorkflowJob p = j.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" parallel a: { node {withEnv(['TOOL=aloc']) {semaphore 'a'; isUnix() ? sh('echo a TOOL=$TOOL') : bat('echo a TOOL=%TOOL%')}} }, b: { node {withEnv(['TOOL=bloc']) {semaphore 'b'; isUnix() ? sh('echo b TOOL=$TOOL') : bat('echo b TOOL=%TOOL%')}} - }""", - true)); + }""", true)); WorkflowRun b = p.scheduleBuild2(0).getStartCondition().get(); SemaphoreStep.waitForStart("a/1", b); SemaphoreStep.waitForStart("b/1", b); @@ -122,8 +118,7 @@ void parallel() throws Throwable { void restarting() throws Throwable { sessions.then(j -> { WorkflowJob p = j.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" def show(which) { echo "groovy ${which} ${env.TESTVAR}:" isUnix() ? sh("echo shell ${which} \\$TESTVAR:") : bat("echo shell ${which} %TESTVAR%:") @@ -135,8 +130,7 @@ def show(which) { show 'after' } show 'outside' - }""", - true)); + }""", true)); WorkflowRun b = p.scheduleBuild2(0).getStartCondition().get(); SemaphoreStep.waitForStart("restarting/1", b); }); @@ -157,16 +151,14 @@ def show(which) { void nested() throws Throwable { sessions.then(j -> { WorkflowJob p = j.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" node { withEnv(['A=one']) { withEnv(['B=two']) { isUnix() ? sh('echo A=$A B=$B') : bat('echo A=%A% B=%B%') } } - }""", - true)); + }""", true)); WorkflowRun b = j.buildAndAssertSuccess(p); j.assertLogContains("A=one B=two", b); }); diff --git a/src/test/java/org/jenkinsci/plugins/workflow/steps/ReadWriteFileStepTest.java b/src/test/java/org/jenkinsci/plugins/workflow/steps/ReadWriteFileStepTest.java index ac9674d8..01b02dc1 100644 --- a/src/test/java/org/jenkinsci/plugins/workflow/steps/ReadWriteFileStepTest.java +++ b/src/test/java/org/jenkinsci/plugins/workflow/steps/ReadWriteFileStepTest.java @@ -62,8 +62,7 @@ void beforeEach(JenkinsRule rule) { @Test void basics() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" node { if (isUnix()) { sh 'echo hello > f1' @@ -79,8 +78,7 @@ void basics() throws Exception { bat 'type f2' } } - """, - true)); + """, true)); WorkflowRun b = r.assertBuildStatusSuccess(p.scheduleBuild2(0)); r.assertLogContains("HELLO", b); List coreStepNodes = @@ -92,14 +90,12 @@ void basics() throws Exception { @Test void shouldTestFileExistsStep() throws Exception { final WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" node { echo "test.txt - FileExists: ${fileExists('test.txt')}"\s writeFile file: 'test2.txt', text:'content of file'\s echo "test2.txt - FileExists: ${fileExists('test2.txt')}"\s - }""", - true)); + }""", true)); WorkflowRun run = p.scheduleBuild2(0).get(); r.assertLogContains("test.txt - FileExists: false", run); @@ -111,15 +107,13 @@ void shouldTestFileExistsStep() throws Exception { @Test void readAndWriteFileUsesCorrectEncoding() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" node { def text = 'HELLO' writeFile file: 'f1', text: text, encoding: 'utf-32le' def text2 = readFile file: 'f1', encoding: 'utf-32le' echo text2 - }""", - true)); + }""", true)); r.assertLogContains("HELLO", r.assertBuildStatusSuccess(p.scheduleBuild2(0))); } @@ -127,15 +121,13 @@ void readAndWriteFileUsesCorrectEncoding() throws Exception { @Test void testKnownCharsetRoundtrip() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" node { def text = 'HELLO' writeFile file: 'f1', text: '¤', encoding: 'iso-8859-1' def text2 = readFile file: 'f1', encoding: 'iso-8859-15' echo text2 - }""", - true)); + }""", true)); r.assertLogContains("€", r.assertBuildStatusSuccess(p.scheduleBuild2(0))); } @@ -143,8 +135,7 @@ void testKnownCharsetRoundtrip() throws Exception { @Test void testBinaryFileRoundtrip() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" node { semaphore 'file-created' def utf8Text = readFile file: 'binary-file', encoding: 'UTF-8' @@ -152,8 +143,7 @@ void testBinaryFileRoundtrip() throws Exception { def base64Text = readFile file: 'binary-file', encoding: 'Base64' writeFile file: 'round-trip-base64', text: base64Text, encoding: 'Base64' semaphore 'bytes-checked' - }""", - true)); + }""", true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); SemaphoreStep.waitForStart("file-created/1", b); byte[] bytes = {0x48, 0x45, 0x4c, 0x4c, 0x4f, (byte) 0x80, (byte) 0xec, (byte) 0xf4, 0x00, 0x0d, 0x1b}; diff --git a/src/test/java/org/jenkinsci/plugins/workflow/steps/RetryStepTest.java b/src/test/java/org/jenkinsci/plugins/workflow/steps/RetryStepTest.java index fffe951c..5eb651c1 100644 --- a/src/test/java/org/jenkinsci/plugins/workflow/steps/RetryStepTest.java +++ b/src/test/java/org/jenkinsci/plugins/workflow/steps/RetryStepTest.java @@ -53,16 +53,14 @@ void beforeEach(JenkinsRule rule) { @Test void smokes() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" int i = 0; retry(3) { println 'Trying!' if (i++ < 2) error('oops'); println 'Done!' } - println 'Over!'""", - true)); + println 'Over!'""", true)); QueueTaskFuture f = p.scheduleBuild2(0); WorkflowRun b = r.assertBuildStatusSuccess(f); @@ -119,15 +117,13 @@ void abortShouldNotRetry() throws Exception { @Test void inputAbortShouldNotRetry() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" int count = 0 retry(3) { echo 'trying '+(count++) input id: 'InputX', message: 'OK?', ok: 'Yes' } - """, - true)); + """, true)); QueueTaskFuture queueTaskFuture = p.scheduleBuild2(0); WorkflowRun run = queueTaskFuture.getStartCondition().get(); @@ -156,8 +152,7 @@ void inputAbortShouldNotRetry() throws Exception { @Test void stackTraceOnError() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" def count = 0 retry(2) { count += 1 @@ -167,8 +162,7 @@ void stackTraceOnError() throws Exception { } echo 'Done!' } - """, - true)); + """, true)); WorkflowRun run = r.buildAndAssertSuccess(p); r.assertLogContains("Try #1", run); @@ -185,15 +179,13 @@ void downstreamBuildFailureShouldRetry() throws Exception { WorkflowJob ds = r.createProject(WorkflowJob.class, "ds"); ds.setDefinition(new CpsFlowDefinition("error 'oops!'", true)); WorkflowJob us = r.createProject(WorkflowJob.class, "us"); - us.setDefinition(new CpsFlowDefinition( - """ + us.setDefinition(new CpsFlowDefinition(""" int count = 1 retry(3) { echo "trying ${count++}" build 'ds' } - """, - true)); + """, true)); WorkflowRun b = r.assertBuildStatus(Result.FAILURE, us.scheduleBuild2(0)); r.assertLogContains("trying 1", b); r.assertLogContains("trying 2", b); @@ -204,8 +196,7 @@ void downstreamBuildFailureShouldRetry() throws Exception { @Test void shouldNotRetryAfterOuterTimeout() throws Exception { WorkflowJob p = r.createProject(WorkflowJob.class); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" int count = 0 timeout(time: 5, unit: 'SECONDS') { retry(3) { @@ -214,8 +205,7 @@ void shouldNotRetryAfterOuterTimeout() throws Exception { error 'failure' } } - """, - true)); + """, true)); WorkflowRun run = r.buildAndAssertStatus(Result.ABORTED, p); r.assertLogContains("Timeout has been exceeded", run); @@ -228,8 +218,7 @@ void shouldNotRetryAfterOuterTimeout() throws Exception { @Test void shouldRetryAfterInnerTimeout() throws Exception { WorkflowJob p = r.createProject(WorkflowJob.class); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" int count = 0 retry(3) { timeout(time: 5, unit: 'SECONDS') { @@ -238,8 +227,7 @@ void shouldRetryAfterInnerTimeout() throws Exception { error 'failure' } } - """, - true)); + """, true)); WorkflowRun run = r.buildAndAssertStatus(Result.ABORTED, p); r.assertLogContains("Timeout has been exceeded", run); diff --git a/src/test/java/org/jenkinsci/plugins/workflow/steps/TimeoutStepTest.java b/src/test/java/org/jenkinsci/plugins/workflow/steps/TimeoutStepTest.java index ff7b8fb4..fc43bdee 100644 --- a/src/test/java/org/jenkinsci/plugins/workflow/steps/TimeoutStepTest.java +++ b/src/test/java/org/jenkinsci/plugins/workflow/steps/TimeoutStepTest.java @@ -120,8 +120,7 @@ void basicWithBlock() throws Throwable { void killingParallel() throws Throwable { sessions.then(j -> { WorkflowJob p = j.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" node { timeout(time:5, unit:'SECONDS') { parallel( @@ -132,8 +131,7 @@ void killingParallel() throws Throwable { } echo 'NotHere' } - """, - true)); + """, true)); WorkflowRun b = j.buildAndAssertStatus(Result.ABORTED, p); // make sure things that are supposed to run do, and things that are NOT supposed to run do not. @@ -160,8 +158,7 @@ void activity() throws Throwable { assumeTrue(System.getenv("CI") == null, "TODO consistently failing in ci.jenkins.io yet passing locally"); sessions.then(j -> { WorkflowJob p = j.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" node { timeout(time:5, unit:'SECONDS', activity: true) { echo 'NotHere'; @@ -173,8 +170,7 @@ void activity() throws Throwable { echo 'ShouldNot!'; } } - """, - true)); + """, true)); WorkflowRun b = j.buildAndAssertStatus(Result.ABORTED, p); j.assertLogContains("JustHere!", b); j.assertLogNotContains("ShouldNot!", b); @@ -187,8 +183,7 @@ void activityInParallel() throws Throwable { assumeTrue(System.getenv("CI") == null, "TODO also flaky in ci.jenkins.io"); sessions.then(j -> { WorkflowJob p = j.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" node { parallel( a: { @@ -209,8 +204,7 @@ void activityInParallel() throws Throwable { } }) } - """, - true)); + """, true)); WorkflowRun b = j.buildAndAssertStatus(Result.ABORTED, p); j.assertLogContains("JustHere!", b); j.assertLogNotContains("ShouldNot!", b); @@ -223,8 +217,7 @@ void activityRestart() throws Throwable { assumeTrue(System.getenv("CI") == null, "TODO also flaky in ci.jenkins.io"); sessions.then(j -> { WorkflowJob p = j.createProject(WorkflowJob.class, "restarted"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" node { timeout(time:15, unit:'SECONDS', activity: true) { echo 'NotHere'; @@ -238,8 +231,7 @@ void activityRestart() throws Throwable { echo 'ShouldNot!'; } } - """, - true)); + """, true)); WorkflowRun b = p.scheduleBuild2(0).getStartCondition().get(); SemaphoreStep.waitForStart("restarted/1", b); }); @@ -259,8 +251,7 @@ void activityRemote() throws Throwable { sessions.then(j -> { j.createSlave(); WorkflowJob p = j.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" node('!master') { timeout(time:5, unit:'SECONDS', activity: true) { if (isUnix()) { @@ -270,8 +261,7 @@ void activityRemote() throws Throwable { } } } - """, - true)); + """, true)); WorkflowRun b = j.assertBuildStatus(Result.ABORTED, p.scheduleBuild2(0)); j.assertLogContains("JustHere", b); j.assertLogNotContains("ShouldNot", b); @@ -288,15 +278,13 @@ void activityGit() throws Throwable { git.git("commit", "--all", "--message=init"); WorkflowJob p = j.createProject(WorkflowJob.class, "p"); p.addProperty(new ParametersDefinitionProperty(new StringParameterDefinition("GIT", git.toString()))); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" node('!master') { timeout(time: 5, unit: 'MINUTES', activity: true) { git GIT } } - """, - true)); + """, true)); j.buildAndAssertSuccess(p); }); } @@ -306,16 +294,14 @@ void activityGit() throws Throwable { void restarted() throws Throwable { sessions.then(j -> { WorkflowJob p = j.createProject(WorkflowJob.class, "restarted"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" node { timeout(time: 15, unit: 'SECONDS') { semaphore 'restarted' sleep 999 } } - """, - true)); + """, true)); WorkflowRun b = p.scheduleBuild2(0).getStartCondition().get(); SemaphoreStep.waitForStart("restarted/1", b); }); @@ -332,8 +318,7 @@ void restarted() throws Throwable { void timeIsConsumed() throws Throwable { sessions.then(j -> { WorkflowJob p = j.createProject(WorkflowJob.class, "timeIsConsumed"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" node { timeout(time: 20, unit: 'SECONDS') { sleep 10 @@ -341,8 +326,7 @@ void timeIsConsumed() throws Throwable { sleep 10 } } - """, - true)); + """, true)); WorkflowRun b = p.scheduleBuild2(0).getStartCondition().get(); SemaphoreStep.waitForStart("timeIsConsumed/1", b); }); @@ -486,38 +470,33 @@ void nestingDetection() throws Throwable { WorkflowJob p = j.createProject(WorkflowJob.class); // Inside - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" timeout(time: 5, unit: 'SECONDS') { try { sleep 10 } catch (e) { echo e.isActualInterruption() ? 'GOOD' : 'BAD' } - }""", - true)); + }""", true)); WorkflowRun b = j.buildAndAssertSuccess(p); j.assertLogContains("GOOD", b); j.assertLogNotContains("BAD", b); // Outside - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" try { timeout(time: 5, unit: 'SECONDS') { sleep 10 } } catch (e) { echo e.isActualInterruption() ? 'BAD' : 'GOOD' - }""", - true)); + }""", true)); b = j.buildAndAssertSuccess(p); j.assertLogContains("GOOD", b); j.assertLogNotContains("BAD", b); // Between - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" timeout(time: 5, unit: 'SECONDS') { try { timeout(time: 20, unit: 'SECONDS') { @@ -526,45 +505,39 @@ void nestingDetection() throws Throwable { } catch (e) { echo e.isActualInterruption() ? 'GOOD' : 'BAD' } - }""", - true)); + }""", true)); b = j.buildAndAssertSuccess(p); j.assertLogContains("GOOD", b); j.assertLogNotContains("BAD", b); // Inside (unkillable) - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" timeout(time: 5, unit: 'SECONDS') { try { unkillable() } catch (e) { echo e.isActualInterruption() ? 'GOOD' : 'BAD' } - }""", - true)); + }""", true)); b = p.scheduleBuild2(0).get(); j.assertLogContains("GOOD", b); j.assertLogNotContains("BAD", b); // Outside (unkillable) - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" try { timeout(time: 5, unit: 'SECONDS') { unkillable() } } catch (e) { echo e.isActualInterruption() ? 'BAD' : 'GOOD'\ - }""", - true)); + }""", true)); b = j.buildAndAssertSuccess(p); j.assertLogContains("GOOD", b); j.assertLogNotContains("BAD", b); // Between (unkillable) - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" timeout(time: 5, unit: 'SECONDS') { try { timeout(time: 20, unit: 'SECONDS') { @@ -573,8 +546,7 @@ void nestingDetection() throws Throwable { } catch (e) { echo e.isActualInterruption() ? 'GOOD' : 'BAD' } - }""", - true)); + }""", true)); b = j.buildAndAssertSuccess(p); j.assertLogContains("GOOD", b); j.assertLogNotContains("BAD", b); diff --git a/src/test/java/org/jenkinsci/plugins/workflow/steps/WaitForConditionStepTest.java b/src/test/java/org/jenkinsci/plugins/workflow/steps/WaitForConditionStepTest.java index 7ec8f265..e28a7962 100644 --- a/src/test/java/org/jenkinsci/plugins/workflow/steps/WaitForConditionStepTest.java +++ b/src/test/java/org/jenkinsci/plugins/workflow/steps/WaitForConditionStepTest.java @@ -117,8 +117,7 @@ void failure() throws Throwable { void catchErrors() throws Throwable { sessions.then(j -> { WorkflowJob p = j.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" node { waitUntil { try { @@ -133,8 +132,7 @@ void catchErrors() throws Throwable { } } echo 'finished waiting' - """, - true)); + """, true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); SemaphoreStep.waitForStart("wait/1", b); j.jenkins.getWorkspaceFor(p).child("flag").write("", null); diff --git a/src/test/java/org/jenkinsci/plugins/workflow/steps/WarnErrorStepTest.java b/src/test/java/org/jenkinsci/plugins/workflow/steps/WarnErrorStepTest.java index 7d49aea9..71347770 100644 --- a/src/test/java/org/jenkinsci/plugins/workflow/steps/WarnErrorStepTest.java +++ b/src/test/java/org/jenkinsci/plugins/workflow/steps/WarnErrorStepTest.java @@ -57,12 +57,10 @@ void beforeEach(JenkinsRule rule) { @Test void smokes() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" warnError('caught error') { error 'oops' - }""", - true)); + }""", true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); assertCatchError(r, b, Result.UNSTABLE, Result.UNSTABLE, true); } @@ -70,12 +68,10 @@ void smokes() throws Exception { @Test void requiresMessage() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" warnError() { error 'oops' - }""", - true)); + }""", true)); WorkflowRun b = r.assertBuildStatus(Result.FAILURE, p.scheduleBuild2(0)); r.assertLogContains("A non-empty message is required", b); } @@ -83,14 +79,12 @@ void requiresMessage() throws Exception { @Test void catchesTimeoutsByDefault() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" timeout(time: 1, unit: 'SECONDS') { warnError('caught error') { sleep 5 } - }""", - true)); + }""", true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); assertCatchError(r, b, Result.ABORTED, Result.ABORTED, true); } @@ -98,14 +92,12 @@ void catchesTimeoutsByDefault() throws Exception { @Test void canAvoidCatchingTimeoutsWithOption() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" timeout(time: 1, unit: 'SECONDS') { warnError(message: 'caught error', catchInterruptions: false) { sleep 5 } - }""", - true)); + }""", true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); assertCatchError(r, b, Result.ABORTED, null, false); } @@ -113,12 +105,10 @@ void canAvoidCatchingTimeoutsWithOption() throws Exception { @Test void catchesAttemptsToStopBuildByDefault() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" warnError('caught error') { semaphore 'ready' - }""", - true)); + }""", true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); SemaphoreStep.waitForStart("ready/1", b); b.doStop(); @@ -128,12 +118,10 @@ void catchesAttemptsToStopBuildByDefault() throws Exception { @Test void canAvoidCatchingAttemptsToStopBuildWithOption() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" warnError(message: 'caught error', catchInterruptions: false) { semaphore 'ready' - }""", - true)); + }""", true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); SemaphoreStep.waitForStart("ready/1", b); b.doStop(); diff --git a/src/test/java/org/jenkinsci/plugins/workflow/support/steps/stash/StashTest.java b/src/test/java/org/jenkinsci/plugins/workflow/support/steps/stash/StashTest.java index ebcdb3b4..57729607 100644 --- a/src/test/java/org/jenkinsci/plugins/workflow/support/steps/stash/StashTest.java +++ b/src/test/java/org/jenkinsci/plugins/workflow/support/steps/stash/StashTest.java @@ -66,8 +66,7 @@ void beforeEach(JenkinsRule rule) { @Test void smokes() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" node { writeFile file: 'subdir/fname', text: 'whatever' writeFile file: 'subdir/other', text: 'more' @@ -81,8 +80,7 @@ void smokes() throws Exception { writeFile file: 'at-top', text: 'ignored' stash name: 'from-top', includes: 'elsewhere/', excludes: '**/other' semaphore 'ending' - }""", - true)); + }""", true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); SemaphoreStep.waitForStart("ending/1", b); assertEquals( @@ -99,8 +97,7 @@ void smokes() throws Exception { @Test void testDefaultExcludes() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" node { writeFile file: 'subdir/.gitignore', text: 'whatever' writeFile file: 'subdir/otherfile', text: 'whatever' @@ -114,8 +111,7 @@ void testDefaultExcludes() throws Exception { unstash('no-gitignore') echo "gitignore does not exist? ${fileExists '.gitignore'}" } - }""", - true)); + }""", true)); WorkflowRun b = r.assertBuildStatusSuccess(p.scheduleBuild2(0)); r.assertLogContains("gitignore exists? true", b); r.assertLogContains("gitignore does not exist? false", b); @@ -125,14 +121,12 @@ void testDefaultExcludes() throws Exception { @Test void testAllowEmpty() throws Exception { WorkflowJob p = r.jenkins.createProject(WorkflowJob.class, "p"); - p.setDefinition(new CpsFlowDefinition( - """ + p.setDefinition(new CpsFlowDefinition(""" node { stash name: 'whatever', allowEmpty: true semaphore 'ending' } - """, - true)); + """, true)); WorkflowRun b = p.scheduleBuild2(0).waitForStart(); SemaphoreStep.waitForStart("ending/1", b); assertEquals("{whatever={}}", StashManager.stashesOf(b).toString());