/blueocean-pipeline-api-impl/src/test/java/io/jenkins/blueocean/rest/impl/pipeline/LinkResolverTest.java

https://gitlab.com/vectorci/blueocean-plugin · Java · 135 lines · 112 code · 20 blank · 3 comment · 0 complexity · 4139b117cfdfeac0a8f1fa7d9f152ef0 MD5 · raw file

  1. package io.jenkins.blueocean.rest.impl.pipeline;
  2. import hudson.model.FreeStyleProject;
  3. import hudson.model.Project;
  4. import io.jenkins.blueocean.rest.hal.LinkResolver;
  5. import org.jenkinsci.plugins.workflow.cps.CpsFlowDefinition;
  6. import org.jenkinsci.plugins.workflow.graph.FlowNode;
  7. import org.jenkinsci.plugins.workflow.job.WorkflowJob;
  8. import org.jenkinsci.plugins.workflow.job.WorkflowRun;
  9. import org.jenkinsci.plugins.workflow.support.visualization.table.FlowGraphTable;
  10. import org.junit.Assert;
  11. import org.junit.Test;
  12. import org.jvnet.hudson.test.MockFolder;
  13. import java.io.IOException;
  14. import java.util.List;
  15. /**
  16. * @author Vivek Pandey
  17. */
  18. public class LinkResolverTest extends PipelineBaseTest {
  19. @Override
  20. public void setup() throws Exception {
  21. super.setup();
  22. }
  23. @Test
  24. public void nestedFolderJobLinkResolveTest() throws IOException {
  25. Project f = j.createFreeStyleProject("fstyle1");
  26. MockFolder folder1 = j.createFolder("folder1");
  27. Project p1 = folder1.createProject(FreeStyleProject.class, "test1");
  28. MockFolder folder2 = folder1.createProject(MockFolder.class, "folder2");
  29. MockFolder folder3 = folder2.createProject(MockFolder.class, "folder3");
  30. Project p2 = folder2.createProject(FreeStyleProject.class, "test2");
  31. Project p3 = folder3.createProject(FreeStyleProject.class, "test3");
  32. WorkflowJob pipelineJob1 = j.jenkins.createProject(WorkflowJob.class, "pipeline1");
  33. pipelineJob1.setDefinition(new CpsFlowDefinition("stage \"Build\"\n" +
  34. " node {\n" +
  35. " sh \"echo here\"\n" +
  36. " }\n" +
  37. "\n"));
  38. WorkflowJob pipelineJob2 = folder2.createProject(WorkflowJob.class, "pipeline2");
  39. pipelineJob2.setDefinition(new CpsFlowDefinition("stage \"Build\"\n" +
  40. " node {\n" +
  41. " sh \"echo here\"\n" +
  42. " }\n" +
  43. "\n"));
  44. Assert.assertEquals("/blue/rest/organizations/jenkins/pipelines/pipeline1/",LinkResolver.resolveLink(pipelineJob1).getHref());
  45. Assert.assertEquals("/blue/rest/organizations/jenkins/pipelines/folder1/pipelines/folder2/pipelines/pipeline2/",LinkResolver.resolveLink(pipelineJob2).getHref());
  46. Assert.assertEquals("/blue/rest/organizations/jenkins/pipelines/fstyle1/",LinkResolver.resolveLink(f).getHref());
  47. Assert.assertEquals("/blue/rest/organizations/jenkins/pipelines/folder1/",LinkResolver.resolveLink(folder1).getHref());
  48. Assert.assertEquals("/blue/rest/organizations/jenkins/pipelines/folder1/pipelines/test1/",LinkResolver.resolveLink(p1).getHref());
  49. Assert.assertEquals("/blue/rest/organizations/jenkins/pipelines/folder1/pipelines/folder2/",LinkResolver.resolveLink(folder2).getHref());
  50. Assert.assertEquals("/blue/rest/organizations/jenkins/pipelines/folder1/pipelines/folder2/pipelines/test2/",LinkResolver.resolveLink(p2).getHref());
  51. Assert.assertEquals("/blue/rest/organizations/jenkins/pipelines/folder1/pipelines/folder2/pipelines/folder3/",LinkResolver.resolveLink(folder3).getHref());
  52. Assert.assertEquals("/blue/rest/organizations/jenkins/pipelines/folder1/pipelines/folder2/pipelines/folder3/pipelines/test3/",LinkResolver.resolveLink(p3).getHref());
  53. }
  54. @Test
  55. public void resolveNodeLink() throws Exception {
  56. {
  57. WorkflowJob job1 = j.jenkins.createProject(WorkflowJob.class, "pipeline1");
  58. job1.setDefinition(new CpsFlowDefinition("stage \"Build\"\n" +
  59. " node {\n" +
  60. " sh \"echo here\"\n" +
  61. " }\n" +
  62. "\n" +
  63. "stage \"Test\"\n" +
  64. " parallel (\n" +
  65. " \"Firefox\" : {\n" +
  66. " node {\n" +
  67. " sh \"echo ffox\"\n" +
  68. " }\n" +
  69. " },\n" +
  70. " \"Chrome\" : {\n" +
  71. " node {\n" +
  72. " sh \"echo chrome\"\n" +
  73. " }\n" +
  74. " }\n" +
  75. " )\n" +
  76. "\n" +
  77. "stage \"CrashyMcgee\"\n" +
  78. " parallel (\n" +
  79. " \"SlowButSuccess\" : {\n" +
  80. " node {\n" +
  81. " echo 'This is time well spent.'\n" +
  82. " }\n" +
  83. " },\n" +
  84. " \"DelayThenFail\" : {\n" +
  85. " node {\n" +
  86. " echo 'Not yet.'\n" +
  87. " }\n" +
  88. " }\n" +
  89. " )\n" +
  90. "\n" +
  91. "\n" +
  92. "stage \"Deploy\"\n" +
  93. " node {\n" +
  94. " sh \"echo deploying\"\n" +
  95. " }"));
  96. WorkflowRun b1 = job1.scheduleBuild2(0).get();
  97. j.assertBuildStatusSuccess(b1);
  98. FlowGraphTable nodeGraphTable = new FlowGraphTable(b1.getExecution());
  99. nodeGraphTable.build();
  100. List<FlowNode> nodes = getStages(nodeGraphTable);
  101. List<FlowNode> parallelNodes = getParallelNodes(nodeGraphTable);
  102. Assert.assertEquals(String.format("/blue/rest/organizations/jenkins/pipelines/pipeline1/runs/%s/nodes/%s/",
  103. b1.getId(),nodes.get(0).getId()),
  104. LinkResolver.resolveLink(nodes.get(0)).getHref());
  105. Assert.assertEquals(String.format("/blue/rest/organizations/jenkins/pipelines/pipeline1/runs/%s/nodes/%s/",
  106. b1.getId(),parallelNodes.get(0).getId()),
  107. LinkResolver.resolveLink(parallelNodes.get(0)).getHref());
  108. PipelineNodeGraphBuilder graphBuilder = new PipelineNodeGraphBuilder(b1);
  109. List<FlowNode> steps = graphBuilder.getAllSteps();
  110. Assert.assertEquals(String.format("/blue/rest/organizations/jenkins/pipelines/pipeline1/runs/%s/steps/%s/",
  111. b1.getId(),steps.get(0).getId()),
  112. LinkResolver.resolveLink(steps.get(0)).getHref());
  113. }
  114. }
  115. }