@Override public CauseOfBlockage getCauseOfBlockage() { if (isLogUpdated() && !isConcurrentBuild()) { WorkflowRun lastBuild = getLastBuild(); if (lastBuild != null) { return new BlockedBecauseOfBuildInProgress(lastBuild); } // else race condition, cf. AbstractProject } return null; }
@Override public void evaluate() throws Throwable { Thread.sleep(2000L); // Just to allow time for basic async processes to finish. verifyFailedCleanly(story.j.jenkins, story.j.jenkins.getItemByFullName(jobName, WorkflowJob.class).getLastBuild()); } });
@Override public void evaluate() throws Throwable { WorkflowRun run = story.j.jenkins.getItemByFullName(jobName, WorkflowJob.class).getLastBuild(); verifySafelyResumed(story.j, run, false, logStart[0]); } });
@Override public void evaluate() throws Throwable { WorkflowRun run = story.j.jenkins.getItemByFullName(jobName, WorkflowJob.class).getLastBuild(); verifySafelyResumed(story.j, run, true, logStart[0]); } });
@Override public void evaluate() throws Throwable { WorkflowRun run = story.j.jenkins.getItemByFullName(jobName, WorkflowJob.class).getLastBuild(); verifyFailedCleanly(story.j.jenkins, run); assertIncludesNodes(nodesOut, run); } });
@Override public void evaluate() throws Throwable { WorkflowRun run = story.j.jenkins.getItemByFullName(jobName, WorkflowJob.class).getLastBuild(); verifyFailedCleanly(story.j.jenkins, run); assertIncludesNodes(nodesOut, run); } });
@Override public void evaluate() throws Throwable { WorkflowRun run = story.j.jenkins.getItemByFullName("durableAgainstClean", WorkflowJob.class).getLastBuild(); verifyFailedCleanly(story.j.jenkins, run); story.j.assertLogContains(logStart[0], run); } });
@Override public void evaluate() throws Throwable { WorkflowRun run = story.j.jenkins.getItemByFullName("durableAgainstClean", WorkflowJob.class).getLastBuild(); verifyFailedCleanly(story.j.jenkins, run); story.j.assertLogContains(logStart[0], run); } });
@Override public void evaluate() throws Throwable { WorkflowRun run = story.j.jenkins.getItemByFullName(jobName, WorkflowJob.class).getLastBuild(); assert run.isBuilding(); assert run.getResult() != Result.FAILURE; Thread.sleep(35000); // Step completes if (run.getExecution() instanceof CpsFlowExecution) { CpsFlowExecution exec = (CpsFlowExecution)run.getExecution(); assert exec.persistedClean == null; } } });
@Override public void evaluate() throws Throwable { WorkflowJob p = story.j.jenkins.getItemByFullName("p", WorkflowJob.class); WorkflowRun b = p.getLastBuild(); SemaphoreStep.success("wait/1", null); story.j.assertBuildStatusSuccess(story.j.waitForCompletion(b)); assertThat(logger.getRecords(), Matchers.hasSize(Matchers.equalTo(1))); assertEquals(CpsFlowExecution.TimingKind.values().length, ((CpsFlowExecution) b.getExecution()).timings.keySet().size()); } });
@Override public void evaluate() throws Throwable { WorkflowRun run = story.j.jenkins.getItemByFullName("durableAgainstClean", WorkflowJob.class).getLastBuild(); verifyFailedCleanly(story.j.jenkins, run); story.j.assertLogContains(logStart[0], run); assertIncludesNodes(nodesOut, run); } });
@Override public void evaluate() throws Throwable { WorkflowJob p = story.j.jenkins.getItemByFullName("p", WorkflowJob.class); WorkflowRun b = p.getLastBuild(); story.j.assertLogContains("I am done", story.j.assertBuildStatusSuccess(story.j.waitForCompletion(b))); } });
@Override public void evaluate() throws Throwable { SemaphoreStep.success("wait/1", null); WorkflowJob p = story.j.jenkins.getItemByFullName("p", WorkflowJob.class); WorkflowRun b = p.getLastBuild(); story.j.assertLogContains("subsequently two", story.j.waitForCompletion(b)); } });
@Override public void evaluate() throws Throwable { WorkflowRun b = rr.j.jenkins.getItemByFullName("p", WorkflowJob.class).getLastBuild(); SemaphoreStep.success("new-one/1", null); SemaphoreStep.success("new-two/1", null); rr.j.waitForCompletion(b); rr.j.assertBuildStatusSuccess(b); rr.j.assertLogContains("running new-style loop on two", b); } });
@Override public void evaluate() throws Throwable { WorkflowRun b = rr.j.jenkins.getItemByFullName("p", WorkflowJob.class).getLastBuild(); SemaphoreStep.success("new-one/1", null); SemaphoreStep.success("new-two/1", null); rr.j.waitForCompletion(b); rr.j.assertBuildStatusSuccess(b); rr.j.assertLogContains("running new-style loop on two -> 2", b); } });
@Override public void evaluate() throws Throwable { WorkflowRun b = rr.j.jenkins.getItemByFullName("p", WorkflowJob.class).getLastBuild(); SemaphoreStep.success("C-one/1", null); SemaphoreStep.success("C-two/1", null); rr.j.waitForMessage("running flattened loop on two -> 2", b); SemaphoreStep.waitForStart("new-one/1", b); rr.j.waitForMessage("running new-style loop on one -> 1", b); } });
@Override public void evaluate() throws Throwable { WorkflowRun b = rr.j.jenkins.getItemByFullName("p", WorkflowJob.class).getLastBuild(); SemaphoreStep.success("new-one/1", null); SemaphoreStep.success("new-two/1", null); rr.j.waitForCompletion(b); rr.j.assertBuildStatusSuccess(b); rr.j.assertLogContains("running new-style loop on two -> 2", b); } });
@Override public void evaluate() throws Throwable { WorkflowRun run = story.j.jenkins.getItemByFullName(jobName, WorkflowJob.class).getLastBuild(); Assert.assertEquals(FlowDurabilityHint.PERFORMANCE_OPTIMIZED, run.getExecution().getDurabilityHint()); assertBaseStorageType(run.getExecution(), BulkFlowNodeStorage.class); verifySafelyResumed(story.j, run, true, logStart[0]); } });
@Override public void evaluate() throws Throwable { WorkflowJob p = story.j.jenkins.getItemByFullName("p/dev%2Fmain", WorkflowJob.class); assertNotNull(p); sampleRepo.git("commit", "--all", "--message=Flow"); sampleRepo.notifyCommit(story.j); WorkflowRun b2 = p.getLastBuild(); assertEquals(2, b2.getNumber()); story.j.assertLogContains("Branch=dev/main", b2); story.j.assertLogContains("workspace=dev_main", b2); verifyProject(p); } });
@Override public void evaluate() throws Throwable { WorkflowJob p = story.j.jenkins.getItemByFullName("p", WorkflowJob.class); WorkflowRun b3 = p.getLastBuild(); assertEquals(3, b3.getNumber()); // Resume #3, and verify that the build completes with the expected replacements. SemaphoreStep.success("wait/3", null); story.j.waitForCompletion(b3); story.j.assertLogNotContains("trying edits", b3); story.j.assertLogContains("new first part", b3); story.j.assertLogContains("newer second part", b3); } });