apache / apache/maven-surefire
[SUREFIRE-1492] Failsafe doesn't fail when a TestEngine throws an Error
- Dominant language
- Java
- Stars
- 461
- Forks
- 588
- Avg merge
- 1d 8h
- Merged PRs (30d)
- 19
Description
**[Mateusz Stefek](https://issues.apache.org/jira/secure/ViewProfile.jspa?name=matste)** opened **[SUREFIRE-1492](https://issues.apache.org/jira/browse/SUREFIRE-1492?redirect=false)** and commented
My Jupiter engine fails due to some classloader hell. The logs are below. But that's not the point.
In such case, `maven-failsafe-plugin` should fail, but it exits as if nothing happened. Even with `failIfNoTests>true` the plugin finishes and generates `failsafe-summary.xml` with `0`
```
Forking command line: cmd.exe /X /C ""C:\Program Files\Java\jdk1.8.0_91\jre\bin\java" -jar C:\Users\matste\uptime\uptime\ui\ui-demo\target\surefire\surefirebooter5276177102867119205.jar C:\Users\matste\uptime\uptime\ui\ui-demo\target\surefire\surefire268158133198646317tmp C:\Users\matste\uptime\uptime\ui\ui-demo\target\surefire\surefire_05629521514361875618tmp"
Mar 01, 2018 12:29:15 PM org.junit.platform.launcher.core.DefaultLauncher handleThrowable
WARNING: TestEngine with ID 'junit-jupiter' failed to discover tests
java.lang.BootstrapMethodError: java.lang.NoSuchMethodError: org.junit.platform.commons.util.ReflectionUtils.isNotPrivate(Ljava/lang/reflect/Member;)Z
at org.junit.jupiter.engine.discovery.JavaElementsResolver.resolveContainedMethods(JavaElementsResolver.java:189)
at org.junit.jupiter.engine.discovery.JavaElementsResolver.resolveChildren(JavaElementsResolver.java:177)
at java.lang.Iterable.forEach(Iterable.java:75)
at org.junit.jupiter.engine.discovery.JavaElementsResolver.resolveClass(JavaElementsResolver.java:61)
at org.junit.jupiter.engine.discovery.DiscoverySelectorResolver.lambda$resolve$3(DiscoverySelectorResolver.java:69)
at java.util.ArrayList.forEach(ArrayList.java:1249)
at org.junit.jupiter.engine.discovery.DiscoverySelectorResolver.resolve(DiscoverySelectorResolver.java:68)
at org.junit.jupiter.engine.discovery.DiscoverySelectorResolver.resolveSelectors(DiscoverySelectorResolver.java:50)
at org.junit.jupiter.engine.JupiterTestEngine.discover(JupiterTestEngine.java:61)
at org.junit.platform.launcher.core.DefaultLauncher.discoverEngineRoot(DefaultLauncher.java:130)
at org.junit.platform.launcher.core.DefaultLauncher.discoverRoot(DefaultLauncher.java:117)
at org.junit.platform.launcher.core.DefaultLauncher.discover(DefaultLauncher.java:82)
at org.junit.platform.surefire.provider.TestPlanScannerFilter.accept(TestPlanScannerFilter.java:50)
at org.apache.maven.surefire.util.DefaultScanResult.applyFilter(DefaultScanResult.java:98)
at org.junit.platform.surefire.provider.JUnitPlatformProvider.scanClasspath(JUnitPlatformProvider.java:121)
at org.junit.platform.surefire.provider.JUnitPlatformProvider.invoke(JUnitPlatformProvider.java:111)
at org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:290)
at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:242)
at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:121)
Caused by: java.lang.NoSuchMethodError: org.junit.platform.commons.util.ReflectionUtils.isNotPrivate(Ljava/lang/reflect/Member;)Z
at java.lang.invoke.MethodHandleNatives.resolve(Native Method)
at java.lang.invoke.MemberName$Factory.resolve(MemberName.java:977)
at java.lang.invoke.MemberName$Factory.resolveOrFail(MemberName.java:1002)
at java.lang.invoke.MethodHandles$Lookup.resolveOrFail(MethodHandles.java:1390)
at java.lang.invoke.MethodHandles$Lookup.linkMethodHandleConstant(MethodHandles.java:1746)
at java.lang.invoke.MethodHandleNatives.linkMethodHandleConstant(MethodHandleNatives.java:477)
... 19 more
Results :
Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
```
---
**Affects:** 2.19.1
Contributor guide
Research direction
Start at the Failsafe handling around ForkedBooter and the JUnitPlatformProvider discovery path, using the shown TestEngine BootstrapMethodError as the reproduction case. Check how the failure affects failsafe-summary.xml; done means a TestEngine Error causes the maven-failsafe-plugin build to fail instead of reporting completed=0 and success.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- build-system, testing
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100