Uploaded image for project: 'Maven Surefire'
  1. Maven Surefire
  2. SUREFIRE-2058

Corrupted STDOUT by directly writing to native stream in forked JVM 1 with UTF-8 console logging

    XMLWordPrintableJSON

Details

    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

          Activity

            People

              tibordigana Tibor Digana
              zoltan.meze Zoltan Meze
              Votes:
              1 Vote for this issue
              Watchers:
              7 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: