1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.maven.surefire.its.jiras;
20
21 import org.apache.maven.it.VerificationException;
22 import org.apache.maven.surefire.its.fixture.OutputValidator;
23 import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
24 import org.apache.maven.surefire.its.fixture.SurefireLauncher;
25 import org.apache.maven.surefire.its.fixture.TestFile;
26 import org.junit.Test;
27
28 import static java.nio.charset.StandardCharsets.UTF_8;
29 import static org.assertj.core.api.Assertions.assertThat;
30 import static org.hamcrest.CoreMatchers.anyOf;
31 import static org.hamcrest.CoreMatchers.containsString;
32 import static org.hamcrest.CoreMatchers.is;
33
34
35
36
37 public class Surefire1535TestNGParallelSuitesIT extends SurefireJUnit4IntegrationTestCase {
38 private static final String TEST_RESULT_1 = platformEncoding("Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, ");
39 private static final String TEST_RESULT_2 = platformEncoding("Tests run: 2, Failures: 0, Errors: 0, Skipped: 0");
40 private static final String SUITE1 = platformEncoding("Suite1");
41 private static final String SUITE2 = platformEncoding("Suite2");
42 private static final String TEST1 = platformEncoding("test 1");
43 private static final String TEST2 = platformEncoding("test 2");
44 private static final String TEST_SUITE = platformEncoding("Running TestSuite");
45
46 @Test
47 public void forks2() throws VerificationException {
48 OutputValidator validator = unpack().activateProfile("forked-reports-directory")
49 .forkCount(2)
50 .executeTest();
51
52 TestFile testFile = validator.getSurefireReportsFile("../surefire-reports-1/TEST-TestSuite.xml", UTF_8);
53 testFile.assertFileExists();
54 testFile.assertContainsText("<testcase name=\"test\" classname=\"it.ParallelTest");
55 String xml = testFile.readFileToString();
56 boolean parallelTest11 = xml.contains("<testcase name=\"test\" classname=\"it.ParallelTest1\"");
57 boolean parallelTest12 = xml.contains("<testcase name=\"test\" classname=\"it.ParallelTest2\"");
58 assertThat(parallelTest11 ^ parallelTest12).isTrue();
59
60 testFile = validator.getSurefireReportsFile("../surefire-reports-2/TEST-TestSuite.xml", UTF_8);
61 testFile.assertFileExists();
62 testFile.assertContainsText("<testcase name=\"test\" classname=\"it.ParallelTest");
63 xml = testFile.readFileToString();
64 boolean parallelTest21 = xml.contains("<testcase name=\"test\" classname=\"it.ParallelTest1\"");
65 boolean parallelTest22 = xml.contains("<testcase name=\"test\" classname=\"it.ParallelTest2\"");
66 assertThat(parallelTest21 ^ parallelTest22).isTrue();
67
68 assertThat(parallelTest11 && parallelTest22 || parallelTest12 && parallelTest21)
69 .isTrue();
70
71 validator
72 .assertThatLogLine(containsString(TEST_RESULT_2), is(1))
73 .assertThatLogLine(containsString(TEST_RESULT_1), is(2))
74 .assertThatLogLine(containsString(SUITE1), is(1))
75 .assertThatLogLine(containsString(SUITE2), is(1))
76 .assertThatLogLine(containsString(TEST1), is(1))
77 .assertThatLogLine(containsString(TEST2), is(1))
78 .assertThatLogLine(containsString(TEST_SUITE), is(2));
79 }
80
81 @Test
82 public void forks2Redirected() throws VerificationException {
83 OutputValidator validator = unpack().activateProfile("forked-reports-directory")
84 .forkCount(2)
85 .redirectToFile(true)
86 .executeTest();
87
88 TestFile testFile = validator.getSurefireReportsFile("../surefire-reports-1/TEST-TestSuite.xml", UTF_8);
89 testFile.assertFileExists();
90 testFile.assertContainsText("<testcase name=\"test\" classname=\"it.ParallelTest");
91 String xml = testFile.readFileToString();
92 boolean parallelTest11 = xml.contains("<testcase name=\"test\" classname=\"it.ParallelTest1\"");
93 boolean parallelTest12 = xml.contains("<testcase name=\"test\" classname=\"it.ParallelTest2\"");
94 assertThat(parallelTest11 ^ parallelTest12).isTrue();
95 String log = validator
96 .getSurefireReportsFile("../surefire-reports-1/TestSuite-output.txt", UTF_8)
97 .readFileToString();
98 assertThat(log.contains(TEST1)).isEqualTo(parallelTest11);
99 assertThat(log.contains(SUITE1)).isEqualTo(parallelTest11);
100 assertThat(log.contains(TEST2)).isEqualTo(parallelTest12);
101 assertThat(log.contains(SUITE2)).isEqualTo(parallelTest12);
102
103 testFile = validator.getSurefireReportsFile("../surefire-reports-2/TEST-TestSuite.xml", UTF_8);
104 testFile.assertFileExists();
105 testFile.assertContainsText("<testcase name=\"test\" classname=\"it.ParallelTest");
106 xml = testFile.readFileToString();
107 boolean parallelTest21 = xml.contains("<testcase name=\"test\" classname=\"it.ParallelTest1\"");
108 boolean parallelTest22 = xml.contains("<testcase name=\"test\" classname=\"it.ParallelTest2\"");
109 assertThat(parallelTest21 ^ parallelTest22).isTrue();
110 log = validator
111 .getSurefireReportsFile("../surefire-reports-2/TestSuite-output.txt", UTF_8)
112 .readFileToString();
113 assertThat(log.contains(TEST1)).isEqualTo(parallelTest21);
114 assertThat(log.contains(SUITE1)).isEqualTo(parallelTest21);
115 assertThat(log.contains(TEST2)).isEqualTo(parallelTest22);
116 assertThat(log.contains(SUITE2)).isEqualTo(parallelTest22);
117
118 assertThat(parallelTest11 && parallelTest22 || parallelTest12 && parallelTest21)
119 .isTrue();
120
121 validator
122 .assertThatLogLine(containsString(TEST_RESULT_2), is(1))
123 .assertThatLogLine(containsString(TEST_RESULT_1), is(2))
124 .assertThatLogLine(containsString(TEST_SUITE), is(2));
125
126 TestFile outFile = validator.getSurefireReportsFile("../surefire-reports-1/TestSuite-output.txt");
127 outFile.assertFileExists();
128 outFile.assertContainsText(anyOf(containsString(SUITE1), containsString(SUITE2)));
129 outFile.assertContainsText(anyOf(containsString(TEST1), containsString(TEST2)));
130
131 outFile = validator.getSurefireReportsFile("../surefire-reports-2/TestSuite-output.txt");
132 outFile.assertFileExists();
133 outFile.assertContainsText(anyOf(containsString(SUITE1), containsString(SUITE2)));
134 outFile.assertContainsText(anyOf(containsString(TEST1), containsString(TEST2)));
135 }
136
137 @Test
138 public void forks0() throws VerificationException {
139 OutputValidator validator = unpack().forkCount(0).executeTest();
140
141 TestFile testFile = validator.getSurefireReportsFile("TEST-TestSuite.xml");
142 testFile.assertFileExists();
143 testFile.assertContainsText("<testcase name=\"test\" classname=\"it.ParallelTest1\"");
144 testFile.assertContainsText("<testcase name=\"test\" classname=\"it.ParallelTest2\"");
145
146 validator
147 .assertThatLogLine(containsString(SUITE1), is(1))
148 .assertThatLogLine(containsString(SUITE2), is(1))
149 .assertThatLogLine(containsString(TEST1), is(1))
150 .assertThatLogLine(containsString(TEST2), is(1))
151 .assertThatLogLine(containsString(TEST_SUITE), is(1));
152 }
153
154 @Test
155 public void forks0Redirected() throws VerificationException {
156 OutputValidator validator = unpack().forkCount(0).redirectToFile(true).executeTest();
157
158 TestFile testFile = validator.getSurefireReportsXmlFile("TEST-TestSuite.xml");
159 testFile.assertFileExists();
160 testFile.assertContainsText("<testcase name=\"test\" classname=\"it.ParallelTest1\"");
161 testFile.assertContainsText("<testcase name=\"test\" classname=\"it.ParallelTest2\"");
162
163 validator.assertThatLogLine(containsString(TEST_SUITE), is(1));
164
165 TestFile outFile = validator.getSurefireReportsFile("TestSuite-output.txt");
166 outFile.assertFileExists();
167 outFile.assertContainsText(SUITE1);
168 outFile.assertContainsText(SUITE2);
169 outFile.assertContainsText(TEST1);
170 outFile.assertContainsText(TEST2);
171 }
172
173 private SurefireLauncher unpack() {
174 return unpack("/surefire-1535-parallel-testng");
175 }
176
177 private static String platformEncoding(String text) {
178 return new String(text.getBytes(UTF_8));
179 }
180 }