You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by ol...@apache.org on 2026/05/18 21:01:53 UTC

(maven-surefire) branch surefire-3.5.x updated: Issue #2613 Debugging failsafe tests: Message 'Listening for transport dt_socket at address' is not displayed anymore when using maven.surefire.debug (#3353) (#3354)

This is an automated email from the ASF dual-hosted git repository.

olamy pushed a commit to branch surefire-3.5.x
in repository https://gitbox.apache.org/repos/asf/maven-surefire.git


The following commit(s) were added to refs/heads/surefire-3.5.x by this push:
     new dadd55b7a Issue #2613 Debugging failsafe tests: Message 'Listening for transport dt_socket at address' is not displayed anymore when using maven.surefire.debug (#3353) (#3354)
dadd55b7a is described below

commit dadd55b7a6a3a0336c253413f68c4f08092328c2
Author: Olivier Lamy <ol...@apache.org>
AuthorDate: Tue May 19 07:01:48 2026 +1000

    Issue #2613 Debugging failsafe tests: Message 'Listening for transport dt_socket at address' is not displayed anymore when using maven.surefire.debug (#3353) (#3354)
    
    Signed-off-by: Olivier Lamy <ol...@apache.org>
---
 .../surefire/api/stream/AbstractStreamDecoder.java | 25 +++++++++++++++++++---
 1 file changed, 22 insertions(+), 3 deletions(-)

diff --git a/surefire-api/src/main/java/org/apache/maven/surefire/api/stream/AbstractStreamDecoder.java b/surefire-api/src/main/java/org/apache/maven/surefire/api/stream/AbstractStreamDecoder.java
index f687a262d..7985cb214 100644
--- a/surefire-api/src/main/java/org/apache/maven/surefire/api/stream/AbstractStreamDecoder.java
+++ b/surefire-api/src/main/java/org/apache/maven/surefire/api/stream/AbstractStreamDecoder.java
@@ -112,9 +112,28 @@ protected void debugStream(byte[] array, int position, int remaining) {}
 
     protected MT readMessageType(@Nonnull Memento memento) throws IOException, MalformedFrameException {
         byte[] header = getEncodedMagicNumber();
-        int readCount = DELIMITER_LENGTH + header.length + DELIMITER_LENGTH + BYTE_LENGTH + DELIMITER_LENGTH;
-        read(memento, readCount);
-        checkHeader(memento);
+        // Read the header one byte at a time so that non-protocol output (e.g. the JDWP
+        // "Listening for transport dt_socket at address: ..." line) is flushed to the console
+        // before the decoder blocks. That line contains ':' which looks like a frame start;
+        // checking each magic-number byte individually lets us bail out immediately on a
+        // mismatch instead of stalling on a 24-byte read that never completes.
+        read(memento, DELIMITER_LENGTH);
+        ByteBuffer bb = memento.getByteBuffer();
+        if ((bb.array()[bb.arrayOffset() + bb.position()] & 0xff) != ':') {
+            checkHeader(memento); // not ':', immediately throws MalformedFrameException
+        }
+        checkDelimiter(memento); // consume the ':'
+        for (int i = 0; i < header.length; i++) {
+            read(memento, DELIMITER_LENGTH);
+            bb = memento.getByteBuffer();
+            if ((bb.array()[bb.arrayOffset() + bb.position()] & 0xff) != (header[i] & 0xff)) {
+                // Mismatch: report the ':' plus all bytes read so far in this frame attempt.
+                throw new MalformedFrameException(memento.getLine().getPositionByteBuffer(), bb.position() + 1);
+            }
+            bb.position(bb.position() + 1);
+        }
+        read(memento, DELIMITER_LENGTH);
+        checkDelimiter(memento);
         return messageTypes.get(readSegment(memento));
     }