Artem Yak created SUREFIRE-2232:
-----------------------------------

             Summary: StatelessXmlReporter fails to process failed result 
without a throwable
                 Key: SUREFIRE-2232
                 URL: https://issues.apache.org/jira/browse/SUREFIRE-2232
             Project: Maven Surefire
          Issue Type: Bug
          Components: Maven Surefire Plugin
    Affects Versions: 3.2.3, 3.0.0-M6
            Reporter: Artem Yak


 

A regression bug appeared in 3.0.0-M6:

A testNG test class has a listener which updates results from SUCCESS to 
FAILURE:

 
{noformat}
@Override
public void onTestSuccess(ITestResult result) {
    result.setStatus(ITestResult.FAILURE);
    result.getTestContext().getPassedTests().removeResult(result);
    result.getTestContext().getFailedTests().addResult(result);
}{noformat}
 

Surefire fails to process a failed test result without a throwable and reports 
0 total tests. 
{code:java}
ForkStarter IOException: java.util.NoSuchElementException.
org.apache.maven.plugin.surefire.booterclient.output.MultipleFailureException: 
java.util.NoSuchElementException
        at 
org.apache.maven.plugin.surefire.booterclient.output.ThreadedStreamConsumer$Pumper.<init>(ThreadedStreamConsumer.java:59)
        at 
org.apache.maven.plugin.surefire.booterclient.output.ThreadedStreamConsumer.<init>(ThreadedStreamConsumer.java:107)
        at 
org.apache.maven.plugin.surefire.booterclient.ForkStarter.fork(ForkStarter.java:546)
        at 
org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:285)
        at 
org.apache.maven.plugin.surefire.booterclient.ForkStarter.run(ForkStarter.java:250)
 {code}
 

Reproducible unit test.
{code:java}


package org.apache.maven.plugin.surefire.report;

import java.io.File;
import java.util.HashMap;
import java.util.concurrent.atomic.AtomicInteger;
import junit.framework.TestCase;
import 
org.apache.maven.plugin.surefire.booterclient.output.DeserializedStacktraceWriter;
import org.apache.maven.surefire.api.report.SimpleReportEntry;
import org.apache.maven.surefire.api.report.StackTraceWriter;

import static org.apache.maven.plugin.surefire.report.ReportEntryType.ERROR;
import static org.apache.maven.surefire.api.report.RunMode.NORMAL_RUN;

@SuppressWarnings({"ResultOfMethodCallIgnored", "checkstyle:magicnumber"})
public class StatelessXmlReporter2Test extends TestCase {
    private static final String XSD =
        
"https://maven.apache.org/surefire/maven-surefire-plugin/xsd/surefire-test-report-3.0.xsd";;
    private static final AtomicInteger FOLDER_POSTFIX = new AtomicInteger();

    private File reportDir;

    @Override
    protected void setUp() throws Exception {
        File basedir = new File(".");
        File target = new File(basedir.getCanonicalFile(), "target");
        target.mkdir();
        String reportRelDir = getClass().getSimpleName() + "-" + 
FOLDER_POSTFIX.incrementAndGet();
        reportDir = new File(target, reportRelDir);
        reportDir.mkdir();
    }

    @Override
    protected void tearDown() {
    }

    public void testOutputFailedTestWithoutThrowable() {
        StackTraceWriter stackTraceWriterOne = new 
DeserializedStacktraceWriter(null, null, "");

        WrappedReportEntry testReport = new WrappedReportEntry(
            new SimpleReportEntry(
                NORMAL_RUN, 1L, getClass().getName(), null, "a test name", 
null, stackTraceWriterOne, 5),
            ERROR,
            5,
            null,
            null);

        TestSetStats testSetStats = new TestSetStats(false, false);
        testSetStats.testError(testReport);

        StatelessXmlReporter reporter = new StatelessXmlReporter(
            reportDir, null, false, 1, new HashMap<>(), XSD, "3.0", false, 
false, false, false);

        reporter.testSetCompleted(testReport, testSetStats);
    }

}  {code}
 

 

 
{code:java}
java.util.NoSuchElementException
    at java.base/java.util.StringTokenizer.nextToken(StringTokenizer.java:349)
    at 
org.apache.maven.plugin.surefire.report.StatelessXmlReporter.getTestProblems(StatelessXmlReporter.java:454)
    at 
org.apache.maven.plugin.surefire.report.StatelessXmlReporter.serializeTestClassWithRerun(StatelessXmlReporter.java:256)
    at 
org.apache.maven.plugin.surefire.report.StatelessXmlReporter.serializeTestClass(StatelessXmlReporter.java:207)
    at 
org.apache.maven.plugin.surefire.report.StatelessXmlReporter.testSetCompleted(StatelessXmlReporter.java:161)
    at 
org.apache.maven.plugin.surefire.report.StatelessXmlReporter2Test.testOutputFailedTestWithoutThrowable(StatelessXmlReporter2Test.java:72){code}
 

 

 



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to