From ebe163f10f5cf21f05675eb4767844d3a0a1f8ca Mon Sep 17 00:00:00 2001 From: Guillaume Smet Date: Tue, 12 Dec 2023 16:02:10 +0100 Subject: [PATCH 1/3] [SUREFIRE-1345] - Support flakyFailure and flakyError in TestSuiteXmlParser --- .../surefire/report/ReportTestCase.java | 127 ++++++ .../surefire/report/TestSuiteXmlParser.java | 56 +++ .../report/TestSuiteXmlParserTest.java | 106 +++++ .../TEST-org.acme.FlakyTest.xml | 363 ++++++++++++++++++ 4 files changed, 652 insertions(+) create mode 100644 surefire-report-parser/src/test/resources/fixture/testsuitexmlparser/TEST-org.acme.FlakyTest.xml diff --git a/surefire-report-parser/src/main/java/org/apache/maven/plugins/surefire/report/ReportTestCase.java b/surefire-report-parser/src/main/java/org/apache/maven/plugins/surefire/report/ReportTestCase.java index cb652bc96a..2552b06b3e 100644 --- a/surefire-report-parser/src/main/java/org/apache/maven/plugins/surefire/report/ReportTestCase.java +++ b/surefire-report-parser/src/main/java/org/apache/maven/plugins/surefire/report/ReportTestCase.java @@ -18,6 +18,9 @@ */ package org.apache.maven.plugins.surefire.report; +import java.util.ArrayList; +import java.util.List; + import static org.apache.maven.shared.utils.StringUtils.isNotBlank; /** @@ -48,6 +51,10 @@ public final class ReportTestCase { private boolean hasSkipped; + private List flakyErrors = new ArrayList<>(); + + private List flakyFailures = new ArrayList<>(); + public String getName() { return name; } @@ -161,6 +168,26 @@ public boolean hasSkipped() { return hasSkipped; } + public boolean hasFlake() { + return !flakyErrors.isEmpty() || !flakyFailures.isEmpty(); + } + + public void addFlakyError(FlakyError flakyError) { + flakyErrors.add(flakyError); + } + + public List getFlakyErrors() { + return flakyErrors; + } + + public void addFlakyFailure(FlakyFailure flakyFailure) { + flakyFailures.add(flakyFailure); + } + + public List getFlakyFailures() { + return flakyFailures; + } + /** * {@inheritDoc} */ @@ -173,4 +200,104 @@ private ReportTestCase setFailureType(String failureType) { this.failureType = failureType; return this; } + + public static class FlakyFailure { + + private String message; + + private String type; + + private String systemOut; + + private String systemErr; + + private String stackTrace; + + FlakyFailure(String message, String type) { + this.message = message; + this.type = type; + } + + public String getMessage() { + return message; + } + + public String getType() { + return type; + } + + public void setSystemOut(String systemOut) { + this.systemOut = systemOut; + } + + public String getSystemOut() { + return systemOut; + } + + public void setSystemErr(String systemErr) { + this.systemErr = systemErr; + } + + public String getSystemErr() { + return systemErr; + } + + public void setStackTrace(String stackTrace) { + this.stackTrace = stackTrace; + } + + public String getStackTrace() { + return stackTrace; + } + } + + public static class FlakyError { + + private String message; + + private String type; + + private String systemOut; + + private String systemErr; + + private String stackTrace; + + FlakyError(String message, String type) { + this.message = message; + this.type = type; + } + + public String getMessage() { + return message; + } + + public String getType() { + return type; + } + + public void setSystemOut(String systemOut) { + this.systemOut = systemOut; + } + + public String getSystemOut() { + return systemOut; + } + + public void setSystemErr(String systemErr) { + this.systemErr = systemErr; + } + + public String getSystemErr() { + return systemErr; + } + + public void setStackTrace(String stackTrace) { + this.stackTrace = stackTrace; + } + + public String getStackTrace() { + return stackTrace; + } + } } diff --git a/surefire-report-parser/src/main/java/org/apache/maven/plugins/surefire/report/TestSuiteXmlParser.java b/surefire-report-parser/src/main/java/org/apache/maven/plugins/surefire/report/TestSuiteXmlParser.java index d651b3e64c..8bb85efb19 100644 --- a/surefire-report-parser/src/main/java/org/apache/maven/plugins/surefire/report/TestSuiteXmlParser.java +++ b/surefire-report-parser/src/main/java/org/apache/maven/plugins/surefire/report/TestSuiteXmlParser.java @@ -58,6 +58,10 @@ public final class TestSuiteXmlParser extends DefaultHandler { private ReportTestCase testCase; + private ReportTestCase.FlakyFailure testCaseFlakyFailure; + + private ReportTestCase.FlakyError testCaseFlakyError; + private boolean valid; private boolean parseContent; @@ -131,6 +135,8 @@ public void startElement(String uri, String localName, String qName, Attributes currentElement = new StringBuilder(); testCase = new ReportTestCase().setName(attributes.getValue("name")); + testCaseFlakyFailure = null; + testCaseFlakyError = null; String fullClassName = attributes.getValue("classname"); @@ -177,9 +183,27 @@ public void startElement(String uri, String localName, String qName, Attributes currentSuite.incrementNumberOfSkipped(); break; case "flakyFailure": + testCaseFlakyFailure = new ReportTestCase.FlakyFailure( + attributes.getValue("message"), attributes.getValue("type")); + currentSuite.incrementNumberOfFlakes(); + break; case "flakyError": + testCaseFlakyError = new ReportTestCase.FlakyError( + attributes.getValue("message"), attributes.getValue("type")); currentSuite.incrementNumberOfFlakes(); break; + case "stackTrace": + currentElement = new StringBuilder(); + parseContent = true; + break; + case "system-out": + currentElement = new StringBuilder(); + parseContent = true; + break; + case "system-err": + currentElement = new StringBuilder(); + parseContent = true; + break; case "failsafe-summary": valid = false; break; @@ -217,6 +241,38 @@ public void endElement(String uri, String localName, String qName) throws SAXExc throw new SAXException("Failed to parse time value", e); } break; + case "flakyFailure": + testCase.addFlakyFailure(testCaseFlakyFailure); + testCaseFlakyFailure = null; + break; + case "flakyError": + testCase.addFlakyError(testCaseFlakyError); + testCaseFlakyError = null; + break; + case "stackTrace": + if (testCaseFlakyFailure != null) { + testCaseFlakyFailure.setStackTrace(currentElement.toString()); + } + if (testCaseFlakyError != null) { + testCaseFlakyError.setStackTrace(currentElement.toString()); + } + break; + case "system-out": + if (testCaseFlakyFailure != null) { + testCaseFlakyFailure.setSystemOut(currentElement.toString()); + } + if (testCaseFlakyError != null) { + testCaseFlakyError.setSystemOut(currentElement.toString()); + } + break; + case "system-err": + if (testCaseFlakyFailure != null) { + testCaseFlakyFailure.setSystemErr(currentElement.toString()); + } + if (testCaseFlakyError != null) { + testCaseFlakyError.setSystemErr(currentElement.toString()); + } + break; default: break; } diff --git a/surefire-report-parser/src/test/java/org/apache/maven/plugins/surefire/report/TestSuiteXmlParserTest.java b/surefire-report-parser/src/test/java/org/apache/maven/plugins/surefire/report/TestSuiteXmlParserTest.java index 01a1842139..436553d5cd 100644 --- a/surefire-report-parser/src/test/java/org/apache/maven/plugins/surefire/report/TestSuiteXmlParserTest.java +++ b/surefire-report-parser/src/test/java/org/apache/maven/plugins/surefire/report/TestSuiteXmlParserTest.java @@ -26,14 +26,18 @@ import java.util.List; import org.apache.maven.plugin.surefire.log.api.ConsoleLogger; +import org.apache.maven.plugins.surefire.report.ReportTestCase.FlakyError; +import org.apache.maven.plugins.surefire.report.ReportTestCase.FlakyFailure; import org.junit.After; import org.junit.Before; import org.junit.Test; import static java.nio.charset.StandardCharsets.UTF_8; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.empty; import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.startsWith; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; @@ -708,4 +712,106 @@ public void shouldParseLargeFile() throws Exception { // Delete test file Files.delete(tempFile); } + + @Test + public void shouldParseFlakes() throws Exception { + // Parse test file + TestSuiteXmlParser parser = new TestSuiteXmlParser(consoleLogger); + + List testSuites = + parser.parse("src/test/resources/fixture/testsuitexmlparser/TEST-org.acme.FlakyTest.xml"); + assertTrue(parser.isValid()); + assertThat(testSuites.size(), is(1)); + + assertThat(testSuites.size(), is(1)); + ReportTestSuite report = testSuites.get(0); + assertThat(report.getFullClassName(), is("org.acme.FlakyTest")); + assertThat(report.getName(), is("FlakyTest")); + assertThat(report.getPackageName(), is("org.acme")); + assertThat(report.getNumberOfTests(), is(2)); + assertThat(report.getNumberOfSkipped(), is(0)); + assertThat(report.getNumberOfErrors(), is(0)); + assertThat(report.getNumberOfFailures(), is(0)); + assertThat(report.getNumberOfFlakes(), is(4)); + assertThat(report.getTimeElapsed(), is(1.324f)); + assertThat(report.getTestCases().size(), is(2)); + + List tests = report.getTestCases(); + assertThat(tests.get(0).getFullClassName(), is("org.acme.FlakyTest")); + assertThat(tests.get(0).getName(), is("testFlaky")); + assertNull(tests.get(0).getFailureDetail()); + assertThat(tests.get(0).getClassName(), is("FlakyTest")); + assertThat(tests.get(0).getTime(), is(0.034f)); + assertThat(tests.get(0).getFullName(), is("org.acme.FlakyTest.testFlaky")); + assertThat(tests.get(0).hasError(), is(false)); + assertThat(tests.get(0).hasFlake(), is(true)); + + List flakyFailures = tests.get(0).getFlakyFailures(); + assertThat(flakyFailures.size(), is(3)); + + assertThat(flakyFailures.get(0).getMessage(), startsWith("expected: <1> but was: <0>")); + assertThat(flakyFailures.get(0).getType(), is("org.opentest4j.AssertionFailedError")); + assertThat( + flakyFailures.get(0).getStackTrace(), + containsString("at org.acme.FlakyTest.testFlaky(FlakyTest.java:18)")); + assertThat( + flakyFailures.get(0).getSystemOut(), + is( + "2023-06-23 17:27:31,351 INFO [io.quarkus] (main) code-with-quarkus 1.0.0-SNAPSHOT on JVM (powered by Quarkus 3.1.2.Final) started in 1.493s. Listening on: http://localhost:8081\n" + + "2023-06-23 17:27:31,353 INFO [io.quarkus] (main) Profile test activated. \n" + + "2023-06-23 17:27:31,353 INFO [io.quarkus] (main) Installed features: [cdi, resteasy-reactive, smallrye-context-propagation, vertx]\n")); + assertNull(flakyFailures.get(0).getSystemErr()); + + assertThat(flakyFailures.get(1).getMessage(), startsWith("expected: <1> but was: <3>")); + assertThat(flakyFailures.get(1).getType(), is("org.opentest4j.AssertionFailedError")); + assertThat( + flakyFailures.get(1).getStackTrace(), + containsString("at org.acme.FlakyTest.testFlaky(FlakyTest.java:18)")); + assertThat( + flakyFailures.get(1).getSystemOut(), + is( + "2023-06-23 17:27:31,695 INFO [io.quarkus] (main) code-with-quarkus stopped in 0.022s\n" + + "2023-06-23 17:27:33,059 INFO [io.quarkus] (main) code-with-quarkus 1.0.0-SNAPSHOT on JVM (powered by Quarkus 3.1.2.Final) started in 1.200s. Listening on: http://localhost:8081\n" + + "2023-06-23 17:27:33,059 INFO [io.quarkus] (main) Profile test activated. \n" + + "2023-06-23 17:27:33,059 INFO [io.quarkus] (main) Installed features: [cdi, resteasy-reactive, smallrye-context-propagation, vertx]\n")); + assertNull(flakyFailures.get(1).getSystemErr()); + + assertThat(flakyFailures.get(2).getMessage(), startsWith("expected: <1> but was: <4>")); + assertThat(flakyFailures.get(2).getType(), is("org.opentest4j.AssertionFailedError")); + assertThat( + flakyFailures.get(2).getStackTrace(), + containsString("at org.acme.FlakyTest.testFlaky(FlakyTest.java:18)")); + assertThat( + flakyFailures.get(2).getSystemOut(), + is( + "2023-06-23 17:27:33,117 INFO [io.quarkus] (main) code-with-quarkus stopped in 0.016s\n" + + "2023-06-23 17:27:34,404 INFO [io.quarkus] (main) code-with-quarkus 1.0.0-SNAPSHOT on JVM (powered by Quarkus 3.1.2.Final) started in 1.180s. Listening on: http://localhost:8081\n" + + "2023-06-23 17:27:34,404 INFO [io.quarkus] (main) Profile test activated. \n" + + "2023-06-23 17:27:34,404 INFO [io.quarkus] (main) Installed features: [cdi, resteasy-reactive, smallrye-context-propagation, vertx]\n")); + assertNull(flakyFailures.get(2).getSystemErr()); + + List flakyErrors = tests.get(0).getFlakyErrors(); + assertThat(flakyErrors.size(), is(1)); + assertThat(flakyErrors.get(0).getMessage(), startsWith("expected: <1> but was: <0>")); + assertThat(flakyErrors.get(0).getType(), is("org.opentest4j.AssertionFailedError")); + assertThat( + flakyErrors.get(0).getStackTrace(), + containsString("at org.acme.FlakyTest.testFlaky(FlakyTest.java:18)")); + assertThat( + flakyErrors.get(0).getSystemOut(), + is( + "2023-06-23 17:27:34,461 INFO [io.quarkus] (main) code-with-quarkus stopped in 0.014s\n" + + "2023-06-23 17:27:35,705 INFO [io.quarkus] (main) code-with-quarkus 1.0.0-SNAPSHOT on JVM (powered by Quarkus 3.1.2.Final) started in 1.159s. Listening on: http://localhost:8081\n" + + "2023-06-23 17:27:35,705 INFO [io.quarkus] (main) Profile test activated. \n" + + "2023-06-23 17:27:35,705 INFO [io.quarkus] (main) Installed features: [cdi, resteasy-reactive, smallrye-context-propagation, vertx]\n")); + assertThat(flakyErrors.get(0).getSystemErr(), is("Test system.err\n")); + + assertThat(tests.get(1).getFullClassName(), is("org.acme.FlakyTest")); + assertThat(tests.get(1).getName(), is("testStable")); + assertThat(tests.get(1).getClassName(), is("FlakyTest")); + assertThat(tests.get(1).getTime(), is(0.001f)); + assertThat(tests.get(1).getFullName(), is("org.acme.FlakyTest.testStable")); + assertThat(tests.get(1).hasError(), is(false)); + assertThat(tests.get(1).hasFlake(), is(false)); + } } diff --git a/surefire-report-parser/src/test/resources/fixture/testsuitexmlparser/TEST-org.acme.FlakyTest.xml b/surefire-report-parser/src/test/resources/fixture/testsuitexmlparser/TEST-org.acme.FlakyTest.xml new file mode 100644 index 0000000000..d333acfa3d --- /dev/null +++ b/surefire-report-parser/src/test/resources/fixture/testsuitexmlparser/TEST-org.acme.FlakyTest.xml @@ -0,0 +1,363 @@ + + + + + + + + but was: <0> + at org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151) + at org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132) + at org.junit.jupiter.api.AssertEquals.failNotEqual(AssertEquals.java:197) + at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:150) + at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:145) + at org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:528) + at org.acme.FlakyTest.testFlaky(FlakyTest.java:18) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at io.quarkus.test.junit.QuarkusTestExtension.runExtensionMethod(QuarkusTestExtension.java:1015) + at io.quarkus.test.junit.QuarkusTestExtension.interceptTestMethod(QuarkusTestExtension.java:829) + at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103) + at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) + at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156) + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147) + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86) + at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103) + at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) + at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92) + at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:217) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:213) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:138) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:147) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:127) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:90) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:55) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:102) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.apache.maven.surefire.junitplatform.LazyLauncher.execute(LazyLauncher.java:50) + at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.execute(JUnitPlatformProvider.java:184) + at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invokeAllTests(JUnitPlatformProvider.java:148) + at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invoke(JUnitPlatformProvider.java:122) + at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:385) + at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:162) + at org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:507) + at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:495) +]]> + + + + but was: <3> + at org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151) + at org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132) + at org.junit.jupiter.api.AssertEquals.failNotEqual(AssertEquals.java:197) + at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:150) + at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:145) + at org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:528) + at org.acme.FlakyTest.testFlaky(FlakyTest.java:18) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at io.quarkus.test.junit.QuarkusTestExtension.runExtensionMethod(QuarkusTestExtension.java:1015) + at io.quarkus.test.junit.QuarkusTestExtension.interceptTestMethod(QuarkusTestExtension.java:829) + at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103) + at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) + at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156) + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147) + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86) + at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103) + at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) + at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92) + at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:217) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:213) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:138) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:147) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:127) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:90) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:55) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:102) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.apache.maven.surefire.junitplatform.LazyLauncher.execute(LazyLauncher.java:50) + at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invokeAllTests(JUnitPlatformProvider.java:162) + at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invoke(JUnitPlatformProvider.java:122) + at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:385) + at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:162) + at org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:507) + at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:495) +]]> + + + + but was: <4> + at org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151) + at org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132) + at org.junit.jupiter.api.AssertEquals.failNotEqual(AssertEquals.java:197) + at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:150) + at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:145) + at org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:528) + at org.acme.FlakyTest.testFlaky(FlakyTest.java:18) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at io.quarkus.test.junit.QuarkusTestExtension.runExtensionMethod(QuarkusTestExtension.java:1015) + at io.quarkus.test.junit.QuarkusTestExtension.interceptTestMethod(QuarkusTestExtension.java:829) + at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103) + at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) + at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156) + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147) + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86) + at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103) + at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) + at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92) + at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:217) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:213) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:138) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:147) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:127) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:90) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:55) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:102) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.apache.maven.surefire.junitplatform.LazyLauncher.execute(LazyLauncher.java:50) + at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invokeAllTests(JUnitPlatformProvider.java:162) + at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invoke(JUnitPlatformProvider.java:122) + at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:385) + at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:162) + at org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:507) + at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:495) +]]> + + + + but was: <0> + at org.junit.jupiter.api.AssertionFailureBuilder.build(AssertionFailureBuilder.java:151) + at org.junit.jupiter.api.AssertionFailureBuilder.buildAndThrow(AssertionFailureBuilder.java:132) + at org.junit.jupiter.api.AssertEquals.failNotEqual(AssertEquals.java:197) + at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:150) + at org.junit.jupiter.api.AssertEquals.assertEquals(AssertEquals.java:145) + at org.junit.jupiter.api.Assertions.assertEquals(Assertions.java:528) + at org.acme.FlakyTest.testFlaky(FlakyTest.java:18) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) + at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) + at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) + at java.base/java.lang.reflect.Method.invoke(Method.java:566) + at io.quarkus.test.junit.QuarkusTestExtension.runExtensionMethod(QuarkusTestExtension.java:1015) + at io.quarkus.test.junit.QuarkusTestExtension.interceptTestMethod(QuarkusTestExtension.java:829) + at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103) + at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) + at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:156) + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:147) + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:86) + at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:103) + at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) + at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92) + at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:86) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$7(TestMethodTestDescriptor.java:217) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:213) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:138) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:68) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:151) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1541) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:147) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:127) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:90) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:55) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:102) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:54) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86) + at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86) + at org.apache.maven.surefire.junitplatform.LazyLauncher.execute(LazyLauncher.java:50) + at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invokeAllTests(JUnitPlatformProvider.java:162) + at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invoke(JUnitPlatformProvider.java:122) + at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:385) + at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:162) + at org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:507) + at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:495) +]]> + + + + + + \ No newline at end of file From 1e8696bf9a29a82e88e64f74faef038991fb9b38 Mon Sep 17 00:00:00 2001 From: Guillaume Smet Date: Sun, 17 Dec 2023 17:27:07 +0100 Subject: [PATCH 2/3] [SUREFIRE-1345] - Do not parse system out and system err --- .../surefire/report/ReportTestCase.java | 40 ------------------- .../surefire/report/TestSuiteXmlParser.java | 24 ----------- .../report/TestSuiteXmlParserTest.java | 31 -------------- 3 files changed, 95 deletions(-) diff --git a/surefire-report-parser/src/main/java/org/apache/maven/plugins/surefire/report/ReportTestCase.java b/surefire-report-parser/src/main/java/org/apache/maven/plugins/surefire/report/ReportTestCase.java index 2552b06b3e..659ff7b135 100644 --- a/surefire-report-parser/src/main/java/org/apache/maven/plugins/surefire/report/ReportTestCase.java +++ b/surefire-report-parser/src/main/java/org/apache/maven/plugins/surefire/report/ReportTestCase.java @@ -207,10 +207,6 @@ public static class FlakyFailure { private String type; - private String systemOut; - - private String systemErr; - private String stackTrace; FlakyFailure(String message, String type) { @@ -226,22 +222,6 @@ public String getType() { return type; } - public void setSystemOut(String systemOut) { - this.systemOut = systemOut; - } - - public String getSystemOut() { - return systemOut; - } - - public void setSystemErr(String systemErr) { - this.systemErr = systemErr; - } - - public String getSystemErr() { - return systemErr; - } - public void setStackTrace(String stackTrace) { this.stackTrace = stackTrace; } @@ -257,10 +237,6 @@ public static class FlakyError { private String type; - private String systemOut; - - private String systemErr; - private String stackTrace; FlakyError(String message, String type) { @@ -276,22 +252,6 @@ public String getType() { return type; } - public void setSystemOut(String systemOut) { - this.systemOut = systemOut; - } - - public String getSystemOut() { - return systemOut; - } - - public void setSystemErr(String systemErr) { - this.systemErr = systemErr; - } - - public String getSystemErr() { - return systemErr; - } - public void setStackTrace(String stackTrace) { this.stackTrace = stackTrace; } diff --git a/surefire-report-parser/src/main/java/org/apache/maven/plugins/surefire/report/TestSuiteXmlParser.java b/surefire-report-parser/src/main/java/org/apache/maven/plugins/surefire/report/TestSuiteXmlParser.java index 8bb85efb19..c0643fd92d 100644 --- a/surefire-report-parser/src/main/java/org/apache/maven/plugins/surefire/report/TestSuiteXmlParser.java +++ b/surefire-report-parser/src/main/java/org/apache/maven/plugins/surefire/report/TestSuiteXmlParser.java @@ -196,14 +196,6 @@ public void startElement(String uri, String localName, String qName, Attributes currentElement = new StringBuilder(); parseContent = true; break; - case "system-out": - currentElement = new StringBuilder(); - parseContent = true; - break; - case "system-err": - currentElement = new StringBuilder(); - parseContent = true; - break; case "failsafe-summary": valid = false; break; @@ -257,22 +249,6 @@ public void endElement(String uri, String localName, String qName) throws SAXExc testCaseFlakyError.setStackTrace(currentElement.toString()); } break; - case "system-out": - if (testCaseFlakyFailure != null) { - testCaseFlakyFailure.setSystemOut(currentElement.toString()); - } - if (testCaseFlakyError != null) { - testCaseFlakyError.setSystemOut(currentElement.toString()); - } - break; - case "system-err": - if (testCaseFlakyFailure != null) { - testCaseFlakyFailure.setSystemErr(currentElement.toString()); - } - if (testCaseFlakyError != null) { - testCaseFlakyError.setSystemErr(currentElement.toString()); - } - break; default: break; } diff --git a/surefire-report-parser/src/test/java/org/apache/maven/plugins/surefire/report/TestSuiteXmlParserTest.java b/surefire-report-parser/src/test/java/org/apache/maven/plugins/surefire/report/TestSuiteXmlParserTest.java index 436553d5cd..e67c0e1001 100644 --- a/surefire-report-parser/src/test/java/org/apache/maven/plugins/surefire/report/TestSuiteXmlParserTest.java +++ b/surefire-report-parser/src/test/java/org/apache/maven/plugins/surefire/report/TestSuiteXmlParserTest.java @@ -754,41 +754,18 @@ public void shouldParseFlakes() throws Exception { assertThat( flakyFailures.get(0).getStackTrace(), containsString("at org.acme.FlakyTest.testFlaky(FlakyTest.java:18)")); - assertThat( - flakyFailures.get(0).getSystemOut(), - is( - "2023-06-23 17:27:31,351 INFO [io.quarkus] (main) code-with-quarkus 1.0.0-SNAPSHOT on JVM (powered by Quarkus 3.1.2.Final) started in 1.493s. Listening on: http://localhost:8081\n" - + "2023-06-23 17:27:31,353 INFO [io.quarkus] (main) Profile test activated. \n" - + "2023-06-23 17:27:31,353 INFO [io.quarkus] (main) Installed features: [cdi, resteasy-reactive, smallrye-context-propagation, vertx]\n")); - assertNull(flakyFailures.get(0).getSystemErr()); assertThat(flakyFailures.get(1).getMessage(), startsWith("expected: <1> but was: <3>")); assertThat(flakyFailures.get(1).getType(), is("org.opentest4j.AssertionFailedError")); assertThat( flakyFailures.get(1).getStackTrace(), containsString("at org.acme.FlakyTest.testFlaky(FlakyTest.java:18)")); - assertThat( - flakyFailures.get(1).getSystemOut(), - is( - "2023-06-23 17:27:31,695 INFO [io.quarkus] (main) code-with-quarkus stopped in 0.022s\n" - + "2023-06-23 17:27:33,059 INFO [io.quarkus] (main) code-with-quarkus 1.0.0-SNAPSHOT on JVM (powered by Quarkus 3.1.2.Final) started in 1.200s. Listening on: http://localhost:8081\n" - + "2023-06-23 17:27:33,059 INFO [io.quarkus] (main) Profile test activated. \n" - + "2023-06-23 17:27:33,059 INFO [io.quarkus] (main) Installed features: [cdi, resteasy-reactive, smallrye-context-propagation, vertx]\n")); - assertNull(flakyFailures.get(1).getSystemErr()); assertThat(flakyFailures.get(2).getMessage(), startsWith("expected: <1> but was: <4>")); assertThat(flakyFailures.get(2).getType(), is("org.opentest4j.AssertionFailedError")); assertThat( flakyFailures.get(2).getStackTrace(), containsString("at org.acme.FlakyTest.testFlaky(FlakyTest.java:18)")); - assertThat( - flakyFailures.get(2).getSystemOut(), - is( - "2023-06-23 17:27:33,117 INFO [io.quarkus] (main) code-with-quarkus stopped in 0.016s\n" - + "2023-06-23 17:27:34,404 INFO [io.quarkus] (main) code-with-quarkus 1.0.0-SNAPSHOT on JVM (powered by Quarkus 3.1.2.Final) started in 1.180s. Listening on: http://localhost:8081\n" - + "2023-06-23 17:27:34,404 INFO [io.quarkus] (main) Profile test activated. \n" - + "2023-06-23 17:27:34,404 INFO [io.quarkus] (main) Installed features: [cdi, resteasy-reactive, smallrye-context-propagation, vertx]\n")); - assertNull(flakyFailures.get(2).getSystemErr()); List flakyErrors = tests.get(0).getFlakyErrors(); assertThat(flakyErrors.size(), is(1)); @@ -797,14 +774,6 @@ public void shouldParseFlakes() throws Exception { assertThat( flakyErrors.get(0).getStackTrace(), containsString("at org.acme.FlakyTest.testFlaky(FlakyTest.java:18)")); - assertThat( - flakyErrors.get(0).getSystemOut(), - is( - "2023-06-23 17:27:34,461 INFO [io.quarkus] (main) code-with-quarkus stopped in 0.014s\n" - + "2023-06-23 17:27:35,705 INFO [io.quarkus] (main) code-with-quarkus 1.0.0-SNAPSHOT on JVM (powered by Quarkus 3.1.2.Final) started in 1.159s. Listening on: http://localhost:8081\n" - + "2023-06-23 17:27:35,705 INFO [io.quarkus] (main) Profile test activated. \n" - + "2023-06-23 17:27:35,705 INFO [io.quarkus] (main) Installed features: [cdi, resteasy-reactive, smallrye-context-propagation, vertx]\n")); - assertThat(flakyErrors.get(0).getSystemErr(), is("Test system.err\n")); assertThat(tests.get(1).getFullClassName(), is("org.acme.FlakyTest")); assertThat(tests.get(1).getName(), is("testStable")); From b3faa7e59d50bfd7017d4ca0c7f707785eff56fa Mon Sep 17 00:00:00 2001 From: Guillaume Smet Date: Sun, 17 Dec 2023 18:00:32 +0100 Subject: [PATCH 3/3] [SUREFIRE-1345] - Rename to hasFlakes and make list immutable --- .../maven/plugins/surefire/report/ReportTestCase.java | 7 ++++--- .../plugins/surefire/report/TestSuiteXmlParserTest.java | 4 ++-- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/surefire-report-parser/src/main/java/org/apache/maven/plugins/surefire/report/ReportTestCase.java b/surefire-report-parser/src/main/java/org/apache/maven/plugins/surefire/report/ReportTestCase.java index 659ff7b135..c62e89b1f8 100644 --- a/surefire-report-parser/src/main/java/org/apache/maven/plugins/surefire/report/ReportTestCase.java +++ b/surefire-report-parser/src/main/java/org/apache/maven/plugins/surefire/report/ReportTestCase.java @@ -19,6 +19,7 @@ package org.apache.maven.plugins.surefire.report; import java.util.ArrayList; +import java.util.Collections; import java.util.List; import static org.apache.maven.shared.utils.StringUtils.isNotBlank; @@ -168,7 +169,7 @@ public boolean hasSkipped() { return hasSkipped; } - public boolean hasFlake() { + public boolean hasFlakes() { return !flakyErrors.isEmpty() || !flakyFailures.isEmpty(); } @@ -177,7 +178,7 @@ public void addFlakyError(FlakyError flakyError) { } public List getFlakyErrors() { - return flakyErrors; + return Collections.unmodifiableList(flakyErrors); } public void addFlakyFailure(FlakyFailure flakyFailure) { @@ -185,7 +186,7 @@ public void addFlakyFailure(FlakyFailure flakyFailure) { } public List getFlakyFailures() { - return flakyFailures; + return Collections.unmodifiableList(flakyFailures); } /** diff --git a/surefire-report-parser/src/test/java/org/apache/maven/plugins/surefire/report/TestSuiteXmlParserTest.java b/surefire-report-parser/src/test/java/org/apache/maven/plugins/surefire/report/TestSuiteXmlParserTest.java index e67c0e1001..fd5e68e7ae 100644 --- a/surefire-report-parser/src/test/java/org/apache/maven/plugins/surefire/report/TestSuiteXmlParserTest.java +++ b/surefire-report-parser/src/test/java/org/apache/maven/plugins/surefire/report/TestSuiteXmlParserTest.java @@ -744,7 +744,7 @@ public void shouldParseFlakes() throws Exception { assertThat(tests.get(0).getTime(), is(0.034f)); assertThat(tests.get(0).getFullName(), is("org.acme.FlakyTest.testFlaky")); assertThat(tests.get(0).hasError(), is(false)); - assertThat(tests.get(0).hasFlake(), is(true)); + assertThat(tests.get(0).hasFlakes(), is(true)); List flakyFailures = tests.get(0).getFlakyFailures(); assertThat(flakyFailures.size(), is(3)); @@ -781,6 +781,6 @@ public void shouldParseFlakes() throws Exception { assertThat(tests.get(1).getTime(), is(0.001f)); assertThat(tests.get(1).getFullName(), is("org.acme.FlakyTest.testStable")); assertThat(tests.get(1).hasError(), is(false)); - assertThat(tests.get(1).hasFlake(), is(false)); + assertThat(tests.get(1).hasFlakes(), is(false)); } }