org.jenkinsci.plugins.workflow.graphanalysis.DepthFirstScanner Java Examples

The following examples show how to use org.jenkinsci.plugins.workflow.graphanalysis.DepthFirstScanner. You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example #1
Source File: PipelineNodeGraphVisitor.java    From blueocean-plugin with MIT License 6 votes vote down vote up
@Override
public List<BluePipelineStep> getPipelineNodeSteps(final String nodeId, Link parent) {
    FlowExecution execution = run.getExecution();
    if (execution == null) {
        logger.debug(String.format("Pipeline %s, runid %s  has null execution", run.getParent().getName(), run.getId()));
        return Collections.emptyList();
    }
    DepthFirstScanner depthFirstScanner = new DepthFirstScanner();
    //If blocked scope, get the end node
    FlowNode n = depthFirstScanner
        .findFirstMatch(execution.getCurrentHeads(),
                        input -> (input != null
                            && input.getId().equals(nodeId)
                            && (PipelineNodeUtil.isStage(input) || PipelineNodeUtil.isParallelBranch(input))));

    if (n == null) { //if no node found or the node is not stage or parallel we return empty steps
        return Collections.emptyList();
    }
    PipelineStepVisitor visitor = new PipelineStepVisitor(run, n);
    ForkScanner.visitSimpleChunks(execution.getCurrentHeads(), visitor, new StageChunkFinder());
    return visitor.getSteps()
                  .stream()
                  .map(node -> new PipelineStepImpl(node, parent))
                  .collect(Collectors.toList());
}
 
Example #2
Source File: KubernetesDeclarativeAgentTest.java    From kubernetes-plugin with Apache License 2.0 6 votes vote down vote up
@Issue({"JENKINS-41758", "JENKINS-57827", "JENKINS-60886"})
@Test
public void declarative() throws Exception {
    assertNotNull(createJobThenScheduleRun());
    r.assertBuildStatusSuccess(r.waitForCompletion(b));
    r.assertLogContains("Apache Maven 3.3.9", b);
    r.assertLogContains("INSIDE_CONTAINER_ENV_VAR = " + CONTAINER_ENV_VAR_VALUE + "\n", b);
    r.assertLogContains("OUTSIDE_CONTAINER_ENV_VAR = " + CONTAINER_ENV_VAR_VALUE + "\n", b);
    FlowNode podTemplateNode = new DepthFirstScanner().findFirstMatch(b.getExecution(), Predicates.and(new NodeStepTypePredicate("podTemplate"), FlowScanningUtils.hasActionPredicate(ArgumentsAction.class)));
    assertNotNull("recorded arguments for podTemplate", podTemplateNode);
    Map<String, Object> arguments = podTemplateNode.getAction(ArgumentsAction.class).getArguments();
    @SuppressWarnings("unchecked")
    List<UninstantiatedDescribable> containers = (List<UninstantiatedDescribable>) arguments.get("containers");
    assertNotNull(containers);
    assertFalse("no junk in arguments: " + arguments, containers.get(0).getArguments().containsKey("alwaysPullImage"));
    FlowNode containerNode = new DepthFirstScanner().findFirstMatch(b.getExecution(), Predicates.and(new NodeStepTypePredicate("container"), FlowScanningUtils.hasActionPredicate(ArgumentsAction.class)));
    assertNotNull("recorded arguments for container", containerNode);
    // JENKINS-60886
    UninstantiatedDescribable podRetention = (UninstantiatedDescribable) arguments.get("podRetention");
    assertNotNull(podRetention);
    assertTrue(podRetention.getModel().getType().equals(OnFailure.class));
}
 
Example #3
Source File: StepsITest.java    From warnings-ng-plugin with MIT License 5 votes vote down vote up
/**
 * Verifies that when publishIssues marks the build as unstable it also marks the step with
 * WarningAction so that visualizations can display the step as unstable rather than just
 * the whole build.
 *
 * @see <a href="http://issues.jenkins-ci.org/browse/JENKINS-39203">Issue 39203</a>
 */
@Test @org.jvnet.hudson.test.Issue("JENKINS-39203")
public void publishIssuesShouldMarkStepWithWarningAction() {
    WorkflowJob job = createPipelineWithWorkspaceFiles("javac.txt");
    job.setDefinition(asStage(createScanForIssuesStep(new Java(), "java"),
            "publishIssues(issues:[java], qualityGates: [[threshold: 1, type: 'TOTAL', unstable: true]])"));
    WorkflowRun run = (WorkflowRun)buildWithResult(job, Result.UNSTABLE);
    FlowNode publishIssuesNode = new DepthFirstScanner().findFirstMatch(run.getExecution(),
            node -> "publishIssues".equals(Objects.requireNonNull(node).getDisplayFunctionName()));
    assertThat(publishIssuesNode).isNotNull();
    WarningAction warningAction = publishIssuesNode.getPersistentAction(WarningAction.class);
    assertThat(warningAction).isNotNull();
    assertThat(warningAction.getMessage()).isEqualTo("Some quality gates have been missed: overall result is UNSTABLE");
}
 
Example #4
Source File: StepsITest.java    From warnings-ng-plugin with MIT License 5 votes vote down vote up
/**
 * Verifies that when recordIssues marks the build as unstable it also marks the step with
 * WarningAction so that visualizations can display the step as unstable rather than just
 * the whole build.
 *
 * @see <a href="http://issues.jenkins-ci.org/browse/JENKINS-39203">Issue 39203</a>
 */
@Test @org.jvnet.hudson.test.Issue("JENKINS-39203")
public void recordIssuesShouldMarkStepWithWarningAction() {
    WorkflowJob job = createPipelineWithWorkspaceFiles("javac.txt");
    job.setDefinition(asStage("recordIssues(tool: java(pattern:'**/*issues.txt', reportEncoding:'UTF-8'),"
            + "qualityGates: [[threshold: 1, type: 'TOTAL', unstable: true]])"));
    WorkflowRun run = (WorkflowRun)buildWithResult(job, Result.UNSTABLE);
    FlowNode publishIssuesNode = new DepthFirstScanner().findFirstMatch(run.getExecution(),
            node -> "recordIssues".equals(Objects.requireNonNull(node).getDisplayFunctionName()));
    assertThat(publishIssuesNode).isNotNull();
    WarningAction warningAction = publishIssuesNode.getPersistentAction(WarningAction.class);
    assertThat(warningAction).isNotNull();
    assertThat(warningAction.getMessage()).isEqualTo("Some quality gates have been missed: overall result is UNSTABLE");
}
 
Example #5
Source File: GithubBuildStatusGraphListener.java    From github-autostatus-plugin with MIT License 5 votes vote down vote up
static Result resultForStage(FlowNode startNode, FlowNode endNode) {
    Result errorResult = Result.SUCCESS;
    DepthFirstScanner scanner = new DepthFirstScanner();
    if (scanner.setup(endNode, Collections.singletonList(startNode))) {
        WarningAction warningAction = StreamSupport.stream(scanner.spliterator(), false)
                .map(node -> node.getPersistentAction(WarningAction.class))
                .filter(Objects::nonNull)
                .max(Comparator.comparing(warning -> warning.getResult().ordinal))
                .orElse(null);
        if (warningAction != null) {
            errorResult = warningAction.getResult();
        }
    }
    return errorResult;
}
 
Example #6
Source File: CompareVersionsStepTest.java    From pipeline-utility-steps-plugin with MIT License 5 votes vote down vote up
private void testExpressions(List<TestDataBuilder.Data> testData, Result expectedResult) throws Exception {
    WorkflowJob job = j.createProject(WorkflowJob.class);
    StringBuilder str = new StringBuilder();
    for (TestDataBuilder.Data data : testData) {
        str.append(data.expression()).append('\n');
    }
    job.setDefinition(new CpsFlowDefinition(str.toString(), true));
    run = j.buildAndAssertStatus(expectedResult, job);

    DepthFirstScanner scanner = new DepthFirstScanner();
    assertThat(scanner.filteredNodes(run.getExecution(), new NodeStepTypePredicate("compareVersions")), hasSize(testData.size()));
}
 
Example #7
Source File: JUnitResultsStepTest.java    From junit-plugin with MIT License 5 votes vote down vote up
@Issue("JENKINS-48250")
@Test
public void emptyFails() throws Exception {
    WorkflowJob j = rule.jenkins.createProject(WorkflowJob.class, "emptyFails");
    j.setDefinition(new CpsFlowDefinition("stage('first') {\n" +
            "  node {\n" +
            (Functions.isWindows() ?
            "    bat 'echo hi'\n" :
            "    sh 'echo hi'\n") +
            "    junit('*.xml')\n" +
            "  }\n" +
            "}\n", true));

    WorkflowRun r = j.scheduleBuild2(0).waitForStart();
    rule.assertBuildStatus(Result.FAILURE, rule.waitForCompletion(r));
    rule.assertLogContains("ERROR: " + Messages.JUnitResultArchiver_NoTestReportFound(), r);
    FlowExecution execution = r.getExecution();
    DepthFirstScanner scanner = new DepthFirstScanner();
    FlowNode f = scanner.findFirstMatch(execution, new Predicate<FlowNode>() {
        @Override
        public boolean apply(@Nullable FlowNode input) {
            return input instanceof StepAtomNode &&
                    ((StepAtomNode) input).getDescriptor() instanceof JUnitResultsStep.DescriptorImpl;
        }
    });
    assertNotNull(f);
    LogAction logAction = f.getPersistentAction(LogAction.class);
    assertNotNull(logAction);
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    logAction.getLogText().writeRawLogTo(0, baos);
    String log = baos.toString();
    assertThat(log, CoreMatchers.containsString(Messages.JUnitResultArchiver_NoTestReportFound()));
}
 
Example #8
Source File: JUnitResultsStepTest.java    From junit-plugin with MIT License 5 votes vote down vote up
public static void assertBranchResults(WorkflowRun run, int suiteCount, int testCount, int failCount, String branchName, String stageName,
                                       String innerStageName) {
    FlowExecution execution = run.getExecution();
    DepthFirstScanner scanner = new DepthFirstScanner();
    BlockStartNode aBranch = (BlockStartNode)scanner.findFirstMatch(execution, branchForName(branchName));
    assertNotNull(aBranch);
    TestResult branchResult = assertBlockResults(run, suiteCount, testCount, failCount, aBranch);
    String namePrefix = stageName + " / " + branchName;
    if (innerStageName != null) {
        namePrefix += " / " + innerStageName;
    }
    for (CaseResult c : branchResult.getPassedTests()) {
        assertEquals(namePrefix + " / " + c.getTransformedTestName(), c.getDisplayName());
    }
}
 
Example #9
Source File: JUnitResultsStepTest.java    From junit-plugin with MIT License 5 votes vote down vote up
public static void assertStageResults(WorkflowRun run, int suiteCount, int testCount, int failCount, String stageName) {
    FlowExecution execution = run.getExecution();
    DepthFirstScanner scanner = new DepthFirstScanner();
    BlockStartNode aStage = (BlockStartNode)scanner.findFirstMatch(execution, stageForName(stageName));
    assertNotNull(aStage);
    assertBlockResults(run, suiteCount, testCount, failCount, aStage);
}
 
Example #10
Source File: JUnitResultsStepTest.java    From junit-plugin with MIT License 5 votes vote down vote up
private static List<FlowNode> findJUnitSteps(BlockStartNode blockStart) {
    return new DepthFirstScanner().filteredNodes(
            Collections.singletonList(blockStart.getEndNode()),
            Collections.singletonList(blockStart),
            node -> node instanceof StepAtomNode &&
                    ((StepAtomNode) node).getDescriptor() instanceof JUnitResultsStep.DescriptorImpl
    );
}