Details
-
Bug
-
Status: Closed
-
Blocker
-
Resolution: Fixed
-
3.0.0-M6
-
None
Description
With 3.0.0-M6 surefire and slf4j + logback, most test runs end up with:
[WARNING] Corrupted channel by directly writing to native stream in forked JVM 1.
This only affects 3.0.0-M6 (3.0.0-M5 version is working fine in test project).
After some digging, there are two different scenarios (most likely caused by the same issue):
- 2-byte character at position 1023 (or N * 1024 - 1) in log message is causing the following warning
[WARNING] Corrupted channel by directly writing to native stream in forked JVM 1.
To reproduce this issue logback (with slf4j) should be used.
Not able to reproduce with System.out.println.
- 4-byte character at position 1023 (or N * 1024 - 1) in log message.
Can be reproduced with System.out.println (logback not required in this case).
This blocks surefire entirely at (from jstack):"fork-1-event-thread" #30 daemon prio=5 os_prio=0 cpu=32350.09ms elapsed=32.94s tid=0x00007ff8292d7800 nid=0x3caef runnable [0x00007ff7876f6000] java.lang.Thread.State: RUNNABLE at org.apache.maven.surefire.api.stream.AbstractStreamDecoder.decodeString(AbstractStreamDecoder.java:350) at org.apache.maven.surefire.api.stream.AbstractStreamDecoder.readString(AbstractStreamDecoder.java:322) at org.apache.maven.surefire.api.stream.AbstractStreamDecoder.readString(AbstractStreamDecoder.java:196) at org.apache.maven.surefire.stream.EventDecoder.decode(EventDecoder.java:176) at org.apache.maven.plugin.surefire.extensions.EventConsumerThread.run(EventConsumerThread.java:73)
Project with reproducible tests (for both scenarios, more in README):
https://github.com/zoltanmeze/surefire-corrupted-channel
One workaround on M6 for now is to use different charset (instead of default UTF-8) or limit message size.
Attachments
Issue Links
- is related to
-
SUREFIRE-1659 Log4j logger in TestExecutionListener corrupts Surefire's STDOUT.
-
- Closed
-
-
SUREFIRE-1881 Java agent printing to native console makes build block when using SurefireForkNodeFactory
-
- Closed
-
-
SUREFIRE-2061 BLOCKED in surefire-forkedjvm-stream-flusher
-
- Closed
-
- relates to
-
SUREFIRE-2079 exception with long message removes test from result instead of failing it
-
- Closed
-
- links to