Surefire swallows redirected test output if uncaught exceptions occur in forked 
SurefireBooter
----------------------------------------------------------------------------------------------

                 Key: SUREFIRE-432
                 URL: http://jira.codehaus.org/browse/SUREFIRE-432
             Project: Maven Surefire
          Issue Type: Bug
          Components: process forking
    Affects Versions: 2.4
         Environment: Maven 2.0.8, JDK 1.5.0_12, WinXP
            Reporter: Benjamin Bentmann
         Attachments: testng-execute-error.patch

If Surefire
- forks a test and
- is configured to redirect test output to a file and
- encounters an uncaught exception in its internals

the tests fail (as expected) but the user does not get any information about 
the error, i.e. the txt files under target/surefire-reports are of zero length. 
This can be quite fustrating.

Attached is an integration test which produces the following exception:

{noformat}
java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at 
org.apache.maven.surefire.booter.SurefireBooter.runSuitesInProcess(SurefireBooter.java:334)
        at 
org.apache.maven.surefire.booter.SurefireBooter.main(SurefireBooter.java:980)
Caused by: org.testng.TestNGException: 
Cyclic graph of methods
        at org.testng.internal.Graph.topologicalSort(Graph.java:117)
        at 
org.testng.internal.MethodHelper.topologicalSort(MethodHelper.java:494)
        at org.testng.internal.MethodHelper.sortMethods(MethodHelper.java:544)
        at 
org.testng.internal.MethodHelper.internalCollectAndOrderMethods(MethodHelper.java:77)
        at 
org.testng.internal.MethodHelper.collectAndOrderMethods(MethodHelper.java:49)
        at org.testng.TestRunner.initMethods(TestRunner.java:337)
        at org.testng.TestRunner.init(TestRunner.java:216)
        at org.testng.TestRunner.init(TestRunner.java:178)
        at org.testng.TestRunner.<init>(TestRunner.java:127)
        at 
org.testng.SuiteRunner$DefaultTestRunnerFactory.newTestRunner(SuiteRunner.java:454)
        at org.testng.SuiteRunner.privateRun(SuiteRunner.java:235)
        at org.testng.SuiteRunner.run(SuiteRunner.java:191)
        at org.testng.TestNG.createAndRunSuiteRunners(TestNG.java:808)
        at org.testng.TestNG.runSuitesLocally(TestNG.java:776)
        at org.testng.TestNG.run(TestNG.java:701)
        at 
org.apache.maven.surefire.testng.TestNGExecutor.run(TestNGExecutor.java:64)
        at 
org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.execute(TestNGDirectoryTestSuite.java:136)
        at org.apache.maven.surefire.Surefire.run(Surefire.java:177)
        ... 6 more
{noformat}

This uncaught exception causes abnormal completion of Surefire.run() such that 
reporterManager.runCompleted() never gets called. Without the call the 
runCompleted(), Reporter.writeFooter() gets never called, too. This means 
ForkingStreamConsumer.consumeLine() will never call 
OutputConsumer.testSetCompleted(). However, the later call would be required to 
properly flush the FileWriter employed by FileOutputConsumerProxy.

I think what is needed is a means in SurefireBooter.fork() to flush/close the 
StreamConsumers after the call to CommandLineUtils.executeCommandLine() 
returned.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to