1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.execution;
20
21 import java.util.Optional;
22
23 import org.apache.maven.lifecycle.LifecycleExecutionException;
24 import org.apache.maven.model.Dependency;
25 import org.apache.maven.project.MavenProject;
26 import org.junit.jupiter.api.BeforeEach;
27 import org.junit.jupiter.api.Test;
28
29 import static java.util.Arrays.asList;
30 import static java.util.Collections.singletonList;
31 import static org.hamcrest.MatcherAssert.assertThat;
32 import static org.hamcrest.Matchers.is;
33
34 class DefaultBuildResumptionAnalyzerTest {
35 private final DefaultBuildResumptionAnalyzer analyzer = new DefaultBuildResumptionAnalyzer();
36
37 private MavenExecutionResult executionResult;
38
39 @BeforeEach
40 void before() {
41 executionResult = new DefaultMavenExecutionResult();
42 }
43
44 @Test
45 void resumeFromGetsDetermined() {
46 MavenProject projectA = createSucceededMavenProject("A");
47 MavenProject projectB = createFailedMavenProject("B");
48 executionResult.setTopologicallySortedProjects(asList(projectA, projectB));
49
50 Optional<BuildResumptionData> result = analyzer.determineBuildResumptionData(executionResult);
51
52 assertThat(result.isPresent(), is(true));
53 assertThat(result.get().getRemainingProjects(), is(asList("test:B")));
54 }
55
56 @Test
57 void resumeFromIsIgnoredWhenFirstProjectFails() {
58 MavenProject projectA = createFailedMavenProject("A");
59 MavenProject projectB = createMavenProject("B");
60 executionResult.setTopologicallySortedProjects(asList(projectA, projectB));
61
62 Optional<BuildResumptionData> result = analyzer.determineBuildResumptionData(executionResult);
63
64 assertThat(result.isPresent(), is(false));
65 }
66
67 @Test
68 void projectsSucceedingAfterFailedProjectsAreExcluded() {
69 MavenProject projectA = createSucceededMavenProject("A");
70 MavenProject projectB = createFailedMavenProject("B");
71 MavenProject projectC = createSucceededMavenProject("C");
72 executionResult.setTopologicallySortedProjects(asList(projectA, projectB, projectC));
73
74 Optional<BuildResumptionData> result = analyzer.determineBuildResumptionData(executionResult);
75
76 assertThat(result.isPresent(), is(true));
77 assertThat(result.get().getRemainingProjects(), is(asList("test:B")));
78 }
79
80 @Test
81 void projectsDependingOnFailedProjectsAreNotExcluded() {
82 MavenProject projectA = createSucceededMavenProject("A");
83 MavenProject projectB = createFailedMavenProject("B");
84 MavenProject projectC = createSkippedMavenProject("C");
85 projectC.setDependencies(singletonList(toDependency(projectB)));
86 executionResult.setTopologicallySortedProjects(asList(projectA, projectB, projectC));
87
88 Optional<BuildResumptionData> result = analyzer.determineBuildResumptionData(executionResult);
89
90 assertThat(result.isPresent(), is(true));
91 assertThat(result.get().getRemainingProjects(), is(asList("test:B", "test:C")));
92 }
93
94 @Test
95 void projectsFailingAfterAnotherFailedProjectAreNotExcluded() {
96 MavenProject projectA = createSucceededMavenProject("A");
97 MavenProject projectB = createFailedMavenProject("B");
98 MavenProject projectC = createSucceededMavenProject("C");
99 MavenProject projectD = createFailedMavenProject("D");
100 executionResult.setTopologicallySortedProjects(asList(projectA, projectB, projectC, projectD));
101
102 Optional<BuildResumptionData> result = analyzer.determineBuildResumptionData(executionResult);
103
104 assertThat(result.isPresent(), is(true));
105 assertThat(result.get().getRemainingProjects(), is(asList("test:B", "test:D")));
106 }
107
108 private MavenProject createMavenProject(String artifactId) {
109 MavenProject project = new MavenProject();
110 project.setGroupId("test");
111 project.setArtifactId(artifactId);
112 return project;
113 }
114
115 private Dependency toDependency(MavenProject mavenProject) {
116 Dependency dependency = new Dependency();
117 dependency.setGroupId(mavenProject.getGroupId());
118 dependency.setArtifactId(mavenProject.getArtifactId());
119 dependency.setVersion(mavenProject.getVersion());
120 return dependency;
121 }
122
123 private MavenProject createSkippedMavenProject(String artifactId) {
124 return createMavenProject(artifactId);
125 }
126
127 private MavenProject createSucceededMavenProject(String artifactId) {
128 MavenProject project = createMavenProject(artifactId);
129 executionResult.addBuildSummary(new BuildSuccess(project, 0));
130 return project;
131 }
132
133 private MavenProject createFailedMavenProject(String artifactId) {
134 MavenProject project = createMavenProject(artifactId);
135 executionResult.addBuildSummary(new BuildFailure(project, 0, new Exception()));
136 executionResult.addException(new LifecycleExecutionException("", project));
137 return project;
138 }
139 }