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;
20
21 import java.util.Iterator;
22
23 import org.apache.maven.surefire.its.fixture.OutputValidator;
24 import org.apache.maven.surefire.its.fixture.SurefireJUnit4IntegrationTestCase;
25 import org.apache.maven.surefire.its.fixture.SurefireLauncher;
26 import org.junit.Test;
27
28 import static org.assertj.core.api.Assertions.assertThat;
29
30
31
32
33
34
35
36 @SuppressWarnings("checkstyle:magicnumber")
37 public class JUnit47ParallelIT extends SurefireJUnit4IntegrationTestCase {
38
39 @Test
40 public void unknownThreadCountSuites() {
41 unpack().parallelSuites()
42 .setTestToRun("TestClass")
43 .failNever()
44 .executeTest()
45 .verifyTextInLog(
46 "Use threadCount or threadCountSuites > 0 or useUnlimitedThreads=true for parallel='suites'");
47 }
48
49 @Test
50 public void unknownThreadCountClasses() {
51 unpack().parallelClasses()
52 .setTestToRun("TestClass")
53 .failNever()
54 .executeTest()
55 .verifyTextInLog(
56 "Use threadCount or threadCountClasses > 0 or useUnlimitedThreads=true for parallel='classes'");
57 }
58
59 @Test
60 public void unknownThreadCountMethods() {
61 unpack().parallelMethods()
62 .setTestToRun("TestClass")
63 .failNever()
64 .executeTest()
65 .verifyTextInLog(
66 "Use threadCount or threadCountMethods > 0 or useUnlimitedThreads=true for parallel='methods'");
67 }
68
69 @Test
70 public void unknownThreadCountBoth() {
71 unpack().parallelBoth()
72 .setTestToRun("TestClass")
73 .failNever()
74 .executeTest()
75 .verifyTextInLog("Use useUnlimitedThreads=true, " + "or only threadCount > 0, "
76 + "or (threadCountClasses > 0 and "
77 + "threadCountMethods > 0), " + "or (threadCount > 0 and threadCountClasses > 0 and "
78 + "threadCountMethods > 0), " + "or (threadCount > 0 and threadCountClasses > 0 and "
79 + "threadCount > threadCountClasses) " + "for parallel='both' or "
80 + "parallel='classesAndMethods'");
81 }
82
83 @Test
84 public void unknownThreadCountAll() {
85 unpack().parallelAll()
86 .setTestToRun("TestClass")
87 .failNever()
88 .executeTest()
89 .verifyTextInLog("Use useUnlimitedThreads=true, " + "or only threadCount > 0, "
90 + "or (threadCountSuites > 0 and "
91 + "threadCountClasses > 0 and threadCountMethods > 0), " + "or every thread-count is "
92 + "specified, " + "or (threadCount > 0 and threadCountSuites > 0 and threadCountClasses > 0 "
93 + "and threadCount > threadCountSuites + threadCountClasses) " + "for parallel='all'");
94 }
95
96 @Test
97 public void unknownThreadCountSuitesAndClasses() {
98 unpack().parallelSuitesAndClasses()
99 .setTestToRun("TestClass")
100 .failNever()
101 .executeTest()
102 .verifyTextInLog("Use useUnlimitedThreads=true, " + "or only threadCount > 0, "
103 + "or (threadCountSuites > 0 and "
104 + "threadCountClasses > 0), " + "or (threadCount > 0 and threadCountSuites > 0 and "
105 + "threadCountClasses > 0) " + "or (threadCount > 0 and threadCountSuites > 0 and threadCount"
106 + " > threadCountSuites) " + "for parallel='suitesAndClasses' or 'both'");
107 }
108
109 @Test
110 public void unknownThreadCountSuitesAndMethods() {
111 unpack().parallelSuitesAndMethods()
112 .setTestToRun("TestClass")
113 .failNever()
114 .executeTest()
115 .verifyTextInLog("Use useUnlimitedThreads=true, " + "or only threadCount > 0, "
116 + "or (threadCountSuites > 0 and "
117 + "threadCountMethods > 0), " + "or (threadCount > 0 and threadCountSuites > 0 and "
118 + "threadCountMethods > 0), " + "or (threadCount > 0 and threadCountSuites > 0 and "
119 + "threadCount > threadCountSuites) " + "for parallel='suitesAndMethods'");
120 }
121
122 @Test
123 public void unknownThreadCountClassesAndMethods() {
124 unpack().parallelClassesAndMethods()
125 .setTestToRun("TestClass")
126 .failNever()
127 .executeTest()
128 .verifyTextInLog("Use useUnlimitedThreads=true, " + "or only threadCount > 0, "
129 + "or (threadCountClasses > 0 and "
130 + "threadCountMethods > 0), " + "or (threadCount > 0 and threadCountClasses > 0 and "
131 + "threadCountMethods > 0), " + "or (threadCount > 0 and threadCountClasses > 0 and "
132 + "threadCount > threadCountClasses) " + "for parallel='both' or "
133 + "parallel='classesAndMethods'");
134 }
135
136 @Test
137 public void serial() {
138
139 unpack().setTestToRun("Suite*Test").executeTest().verifyErrorFree(24);
140 }
141
142 @Test
143 public void unlimitedThreadsSuites1() {
144
145 unpack().parallelSuites()
146 .useUnlimitedThreads()
147 .setTestToRun("Suite*Test")
148 .executeTest()
149 .verifyErrorFree(24);
150 }
151
152 @Test
153 public void unlimitedThreadsSuites2() {
154
155 unpack().parallelSuites()
156 .useUnlimitedThreads()
157 .threadCountSuites(5)
158 .setTestToRun("Suite*Test")
159 .executeTest()
160 .verifyErrorFree(24);
161 }
162
163 @Test
164 public void unlimitedThreadsClasses1() {
165
166 unpack().parallelClasses()
167 .useUnlimitedThreads()
168 .setTestToRun("Suite*Test")
169 .executeTest()
170 .verifyErrorFree(24);
171 }
172
173 @Test
174 public void unlimitedThreadsClasses2() {
175
176 unpack().parallelClasses()
177 .useUnlimitedThreads()
178 .threadCountClasses(5)
179 .setTestToRun("Suite*Test")
180 .executeTest()
181 .verifyErrorFree(24);
182 }
183
184 @Test
185 public void unlimitedThreadsMethods1() {
186
187 unpack().parallelMethods()
188 .useUnlimitedThreads()
189 .setTestToRun("Suite*Test")
190 .executeTest()
191 .verifyErrorFree(24);
192 }
193
194 @Test
195 public void unlimitedThreadsMethods2() {
196
197 unpack().parallelMethods()
198 .useUnlimitedThreads()
199 .threadCountMethods(5)
200 .setTestToRun("Suite*Test")
201 .executeTest()
202 .verifyErrorFree(24);
203 }
204
205 @Test
206 public void unlimitedThreadsSuitesAndClasses1() {
207
208 unpack().parallelSuitesAndClasses()
209 .useUnlimitedThreads()
210 .setTestToRun("Suite*Test")
211 .executeTest()
212 .verifyErrorFree(24);
213 }
214
215 @Test
216 public void unlimitedThreadsSuitesAndClasses2() {
217
218
219 unpack().parallelSuitesAndClasses()
220 .useUnlimitedThreads()
221 .threadCountSuites(5)
222 .threadCountClasses(15)
223 .setTestToRun("Suite*Test")
224 .executeTest()
225 .verifyErrorFree(24);
226 }
227
228 @Test
229 public void unlimitedThreadsSuitesAndMethods1() {
230
231 unpack().parallelSuitesAndMethods()
232 .useUnlimitedThreads()
233 .setTestToRun("Suite*Test")
234 .executeTest()
235 .verifyErrorFree(24);
236 }
237
238 @Test
239 public void unlimitedThreadsSuitesAndMethods2() {
240
241 unpack().parallelSuitesAndMethods()
242 .useUnlimitedThreads()
243 .threadCountSuites(5)
244 .threadCountMethods(15)
245 .setTestToRun("Suite*Test")
246 .executeTest()
247 .verifyErrorFree(24);
248 }
249
250 @Test
251 public void unlimitedThreadsClassesAndMethods1() {
252
253 unpack().parallelClassesAndMethods()
254 .useUnlimitedThreads()
255 .setTestToRun("Suite*Test")
256 .executeTest()
257 .verifyErrorFree(24);
258 }
259
260 @Test
261 public void unlimitedThreadsClassesAndMethods2() {
262
263 unpack().parallelClassesAndMethods()
264 .useUnlimitedThreads()
265 .threadCountClasses(5)
266 .threadCountMethods(15)
267 .setTestToRun("Suite*Test")
268 .executeTest()
269 .verifyErrorFree(24);
270 }
271
272 @Test
273 public void unlimitedThreadsAll1() {
274
275 unpack().parallelAll()
276 .useUnlimitedThreads()
277 .setTestToRun("Suite*Test")
278 .executeTest()
279 .verifyErrorFree(24);
280 }
281
282 @Test
283 public void unlimitedThreadsAll2() {
284
285 unpack().parallelAll()
286 .useUnlimitedThreads()
287 .threadCountSuites(5)
288 .threadCountClasses(15)
289 .threadCountMethods(30)
290 .setTestToRun("Suite*Test")
291 .executeTest()
292 .verifyErrorFree(24);
293 }
294
295 @Test
296 public void threadCountSuites() {
297
298 unpack().parallelSuites()
299 .threadCount(3)
300 .setTestToRun("Suite*Test")
301 .executeTest()
302 .verifyErrorFree(24);
303 }
304
305 @Test
306 public void threadCountClasses() {
307
308
309 unpack().parallelClasses()
310 .threadCount(3)
311 .setTestToRun("Suite*Test")
312 .executeTest()
313 .verifyErrorFree(24);
314 }
315
316 @Test
317 public void threadCountMethods() {
318
319 unpack().parallelMethods()
320 .threadCount(3)
321 .setTestToRun("Suite*Test")
322 .executeTest()
323 .verifyErrorFree(24);
324 }
325
326 @Test
327 public void threadCountClassesAndMethodsOneCore() {
328
329 unpack().disablePerCoreThreadCount()
330 .disableParallelOptimization()
331 .parallelClassesAndMethods()
332 .threadCount(3)
333 .setTestToRun("Suite*Test")
334 .executeTest()
335 .verifyErrorFree(24);
336 }
337
338 @Test
339 public void threadCountClassesAndMethodsOneCoreOptimized() {
340
341 unpack().disablePerCoreThreadCount()
342 .parallelClassesAndMethods()
343 .threadCount(3)
344 .setTestToRun("Suite*Test")
345 .executeTest()
346 .verifyErrorFree(24);
347 }
348
349 @Test
350 public void threadCountClassesAndMethods() {
351
352 unpack().disableParallelOptimization()
353 .parallelClassesAndMethods()
354 .threadCount(3)
355 .setTestToRun("Suite*Test")
356 .executeTest()
357 .verifyErrorFree(24);
358 }
359
360 @Test
361 public void threadCountClassesAndMethodsOptimized() {
362
363 unpack().parallelClassesAndMethods()
364 .threadCount(3)
365 .setTestToRun("Suite*Test")
366 .executeTest()
367 .verifyErrorFree(24);
368 }
369
370 @Test
371 public void threadCountSuitesAndMethods() {
372
373
374 unpack().disableParallelOptimization()
375 .parallelSuitesAndMethods()
376 .threadCount(3)
377 .setTestToRun("Suite*Test")
378 .executeTest()
379 .verifyErrorFree(24);
380 }
381
382 @Test
383 public void threadCountSuitesAndMethodsOptimized() {
384
385 unpack().parallelSuitesAndMethods()
386 .threadCount(3)
387 .setTestToRun("Suite*Test")
388 .executeTest()
389 .verifyErrorFree(24);
390 }
391
392 @Test
393 public void threadCountSuitesAndClasses() {
394 unpack().disableParallelOptimization()
395 .parallelSuitesAndClasses()
396 .threadCount(3)
397 .setTestToRun("Suite*Test")
398 .executeTest()
399 .verifyErrorFree(24);
400 }
401
402 @Test
403 public void threadCountSuitesAndClassesOptimized() {
404
405 unpack().parallelSuitesAndClasses()
406 .threadCount(3)
407 .setTestToRun("Suite*Test")
408 .executeTest()
409 .verifyErrorFree(24);
410 }
411
412 @Test
413 public void threadCountAll() {
414 unpack().disableParallelOptimization()
415 .parallelAll()
416 .threadCount(3)
417 .setTestToRun("Suite*Test")
418 .executeTest()
419 .verifyErrorFree(24);
420 }
421
422 @Test
423 public void threadCountAllOptimized() {
424
425 unpack().parallelAll()
426 .threadCount(3)
427 .setTestToRun("Suite*Test")
428 .executeTest()
429 .verifyErrorFree(24);
430 }
431
432 @Test
433 public void everyThreadCountSuitesAndClasses() {
434
435 unpack().parallelSuitesAndClasses()
436 .threadCount(3)
437 .threadCountSuites(34)
438 .threadCountClasses(66)
439 .setTestToRun("Suite*Test")
440 .executeTest()
441 .verifyErrorFree(24);
442 }
443
444 @Test
445 public void everyThreadCountSuitesAndMethods() {
446
447 unpack().parallelSuitesAndMethods()
448 .threadCount(3)
449 .threadCountSuites(34)
450 .threadCountMethods(66)
451 .setTestToRun("Suite*Test")
452 .executeTest()
453 .verifyErrorFree(24);
454 }
455
456 @Test
457 public void everyThreadCountClassesAndMethods() {
458
459 unpack().parallelClassesAndMethods()
460 .threadCount(3)
461 .threadCountClasses(34)
462 .threadCountMethods(66)
463 .setTestToRun("Suite*Test")
464 .executeTest()
465 .verifyErrorFree(24);
466 }
467
468 @Test
469 public void everyThreadCountAll() {
470
471 unpack().parallelAll()
472 .threadCount(3)
473 .threadCountSuites(17)
474 .threadCountClasses(34)
475 .threadCountMethods(49)
476 .setTestToRun("Suite*Test")
477 .executeTest()
478 .verifyErrorFree(24);
479 }
480
481 @Test
482 public void reusableThreadCountSuitesAndClasses() {
483
484
485 unpack().disableParallelOptimization()
486 .parallelSuitesAndClasses()
487 .disablePerCoreThreadCount()
488 .threadCount(6)
489 .threadCountSuites(2)
490 .setTestToRun("Suite*Test")
491 .executeTest()
492 .verifyErrorFree(24);
493 }
494
495 @Test
496 public void reusableThreadCountSuitesAndClassesOptimized() {
497
498 unpack().parallelSuitesAndClasses()
499 .disablePerCoreThreadCount()
500 .threadCount(6)
501 .threadCountSuites(2)
502 .setTestToRun("Suite*Test")
503 .executeTest()
504 .verifyErrorFree(24);
505 }
506
507 @Test
508 public void reusableThreadCountSuitesAndMethods() {
509
510
511 unpack().disableParallelOptimization()
512 .parallelSuitesAndMethods()
513 .disablePerCoreThreadCount()
514 .threadCount(6)
515 .threadCountSuites(2)
516 .setTestToRun("Suite*Test")
517 .executeTest()
518 .verifyErrorFree(24);
519 }
520
521 @Test
522 public void reusableThreadCountSuitesAndMethodsOptimized() {
523
524 unpack().parallelSuitesAndMethods()
525 .disablePerCoreThreadCount()
526 .threadCount(6)
527 .threadCountSuites(2)
528 .setTestToRun("Suite*Test")
529 .executeTest()
530 .verifyErrorFree(24);
531 }
532
533 @Test
534 public void reusableThreadCountClassesAndMethods() {
535
536
537 unpack().disableParallelOptimization()
538 .parallelClassesAndMethods()
539 .disablePerCoreThreadCount()
540 .threadCount(6)
541 .threadCountClasses(2)
542 .setTestToRun("Suite*Test")
543 .executeTest()
544 .verifyErrorFree(24);
545 }
546
547 @Test
548 public void reusableThreadCountClassesAndMethodsOptimized() {
549
550 unpack().parallelClassesAndMethods()
551 .disablePerCoreThreadCount()
552 .threadCount(6)
553 .threadCountClasses(2)
554 .setTestToRun("Suite*Test")
555 .executeTest()
556 .verifyErrorFree(24);
557 }
558
559 @Test
560 public void reusableThreadCountAll() {
561
562
563 unpack().disableParallelOptimization()
564 .parallelAll()
565 .disablePerCoreThreadCount()
566 .threadCount(14)
567 .threadCountSuites(2)
568 .threadCountClasses(4)
569 .setTestToRun("Suite*Test")
570 .executeTest()
571 .verifyErrorFree(24);
572 }
573
574 @Test
575 public void reusableThreadCountAllOptimized() {
576
577 unpack().parallelAll()
578 .disablePerCoreThreadCount()
579 .threadCount(14)
580 .threadCountSuites(2)
581 .threadCountClasses(4)
582 .setTestToRun("Suite*Test")
583 .executeTest()
584 .verifyErrorFree(24);
585 }
586
587 @Test
588 public void suites() {
589
590 unpack().parallelSuites()
591 .threadCountSuites(5)
592 .setTestToRun("Suite*Test")
593 .executeTest()
594 .verifyErrorFree(24);
595 }
596
597 @Test
598 public void classes() {
599
600 unpack().parallelClasses()
601 .threadCountClasses(5)
602 .setTestToRun("Suite*Test")
603 .executeTest()
604 .verifyErrorFree(24);
605 }
606
607 @Test
608 public void methods() {
609
610
611 unpack().parallelMethods()
612 .threadCountMethods(5)
613 .setTestToRun("Suite*Test")
614 .executeTest()
615 .verifyErrorFree(24);
616 }
617
618 @Test
619 public void suitesAndClasses() {
620
621 unpack().parallelSuitesAndClasses()
622 .threadCountSuites(5)
623 .threadCountClasses(15)
624 .setTestToRun("Suite*Test")
625 .executeTest()
626 .verifyErrorFree(24);
627 }
628
629 @Test
630 public void suitesAndMethods() {
631
632 unpack().parallelSuitesAndMethods()
633 .threadCountSuites(5)
634 .threadCountMethods(15)
635 .setTestToRun("Suite*Test")
636 .executeTest()
637 .verifyErrorFree(24);
638 }
639
640 @Test
641 public void classesAndMethods() {
642
643 unpack().parallelClassesAndMethods()
644 .threadCountClasses(5)
645 .threadCountMethods(15)
646 .setTestToRun("Suite*Test")
647 .executeTest()
648 .verifyErrorFree(24);
649 }
650
651 @Test
652 public void all() {
653
654 unpack().parallelAll()
655 .threadCountSuites(5)
656 .threadCountClasses(15)
657 .threadCountMethods(30)
658 .setTestToRun("Suite*Test")
659 .executeTest()
660 .verifyErrorFree(24);
661 }
662
663 @Test
664 public void shutdown() {
665
666 unpack().parallelMethods()
667 .threadCountMethods(2)
668 .parallelTestsTimeoutInSeconds(2.5d)
669 .setTestToRun("TestClass")
670 .failNever()
671 .executeTest()
672 .verifyTextInLog("The test run has finished abruptly after timeout of 2.5 seconds.");
673 }
674
675 @Test
676 public void forcedShutdown() {
677
678 unpack().parallelMethods()
679 .threadCountMethods(2)
680 .parallelTestsTimeoutForcedInSeconds(2.5d)
681 .setTestToRun("TestClass")
682 .failNever()
683 .executeTest()
684 .verifyTextInLog("The test run has finished abruptly after timeout of 2.5 seconds.");
685 }
686
687 @Test
688 public void timeoutAndForcedShutdown() {
689
690 unpack().parallelMethods()
691 .threadCountMethods(2)
692 .parallelTestsTimeoutInSeconds(1)
693 .parallelTestsTimeoutForcedInSeconds(2.5d)
694 .setTestToRun("TestClass")
695 .failNever()
696 .executeTest()
697 .verifyTextInLog("The test run has finished abruptly after timeout of 1.0 seconds.");
698 }
699
700 @Test
701 public void forcedShutdownVerifyingLogs() throws Exception {
702
703 OutputValidator validator = unpack().parallelMethods()
704 .threadCountMethods(3)
705 .disablePerCoreThreadCount()
706 .parallelTestsTimeoutForcedInSeconds(1.05d)
707 .setTestToRun("Waiting*Test")
708 .failNever()
709 .executeTest()
710 .verifyTextInLog("The test run has finished abruptly after timeout of 1.05 seconds.")
711 .verifyTextInLog("These tests were executed in prior to the shutdown operation:");
712
713 for (Iterator<String> it = validator.loadLogLines().iterator(); it.hasNext(); ) {
714 String line = it.next();
715 if (line.contains("These tests are incomplete:")) {
716 assertThat(it.hasNext()).isTrue();
717 assertThat(it.next()).matches("^.*surefireparallel\\.Waiting(\\d{1,1})Test$");
718 }
719 }
720 }
721
722 private SurefireLauncher unpack() {
723 return unpack("junit47-parallel").showErrorStackTraces().forkOnce().redirectToFile(false);
724 }
725 }