You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@maven.apache.org by "Alexander Kriegisch (Jira)" <ji...@apache.org> on 2020/05/02 10:32:00 UTC

[jira] [Commented] (SUREFIRE-1614) JUnit Runner that writes to System.out corrupts Surefire's STDOUT when using JUnit's Vintage Engine

    [ https://issues.apache.org/jira/browse/SUREFIRE-1614?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17097904#comment-17097904 ] 

Alexander Kriegisch commented on SUREFIRE-1614:
-----------------------------------------------

For me this is not fixed, I also tried 3.0.0-M4 in Failsafe. Besides, I am not using JUnit 5 Jupiter but plain old JUnit 4.

My situation is that I use a Java agent via

{code:xml}
<reuseForks>false</reuseForks>
<argLine>-javaagent:path/to/my-agent.jar</argLine>
{code}

where the agent prints to `System.out` because instrumenting agents should not pull a lot of dependencies before maybe wishing to instrument their bytecode later. But still they want to print some diagnostic output for debugging purposes or because of error conditions. This has been bugging me for a long time. I cannot understand why this does not get fixed.

> JUnit Runner that writes to System.out corrupts Surefire's STDOUT when using JUnit's Vintage Engine
> ---------------------------------------------------------------------------------------------------
>
>                 Key: SUREFIRE-1614
>                 URL: https://issues.apache.org/jira/browse/SUREFIRE-1614
>             Project: Maven Surefire
>          Issue Type: Bug
>          Components: JUnit 5.x support
>    Affects Versions: 2.22.1, 3.0.0-M2
>            Reporter: Andy Wilkinson
>            Assignee: Christian Stein
>            Priority: Major
>             Fix For: 2.22.2, 3.0.0-M3
>
>         Attachments: surefire-stream-corruption-bug.zip
>
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> When JUnit Jupiter's Vintage Engine is used to run tests written using the JUnit 4 API, output to the console from a {{TestRunner}} results in Surefire's STDOUT being corrupted:
> {noformat}
> [WARNING] Corrupted STDOUT by directly writing to native stream in forked JVM 1. See FAQ web page and the dump file […]{noformat}
> Note that the test runner is simply calling {{System.out}}. This is to simulate the real world setup where the runner performs some logging that ultimately results in a console appender calling {{System.out}}. The same arrangement does not cause a problem when run using JUnit 4. An initial investigation suggests that the Vintage Engine calls the custom {{TestRunner}} earlier and, it would appear, at a time when Surefire cannot tolerate output to {{System.out}}.
> I have attached a minimal project that reproduces the problem. Running {{./mvnw -Pjunit5 test}} will reproduce the corruption. Running {{./mvnw -Pjunit4 test}} will not.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)