apache / apache/maven-surefire

[SUREFIRE-1492] Failsafe doesn't fail when a TestEngine throws an Error

Open
#2,587 2 comments 0 reactions 0 assignees View on GitHub
bug priority:major
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.