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

markt pushed a commit to branch 8.5.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/8.5.x by this push:
     new d1f1023  Add debug for TestFlowControl as it appears to un unstable
d1f1023 is described below

commit d1f1023b9b10b026844c1909672e6e5e9d880cbf
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Tue Mar 16 20:49:49 2021 +0000

    Add debug for TestFlowControl as it appears to un unstable
---
 .../apache/coyote/http2/Http2UpgradeHandler.java   |   9 +-
 .../apache/coyote/http2/LocalStrings.properties    |   2 +
 java/org/apache/coyote/http2/Stream.java           |   3 +
 test/org/apache/coyote/http2/TestFlowControl.java  | 154 +++++++++++----------
 4 files changed, 93 insertions(+), 75 deletions(-)

diff --git a/java/org/apache/coyote/http2/Http2UpgradeHandler.java 
b/java/org/apache/coyote/http2/Http2UpgradeHandler.java
index 68fe75e..aa72fa0 100644
--- a/java/org/apache/coyote/http2/Http2UpgradeHandler.java
+++ b/java/org/apache/coyote/http2/Http2UpgradeHandler.java
@@ -1576,7 +1576,14 @@ class Http2UpgradeHandler extends AbstractStream 
implements InternalHttpUpgradeH
         AbstractNonZeroStream abstractNonZeroStream = 
getAbstractNonZeroStream(streamId, true);
         abstractNonZeroStream.checkState(FrameType.DATA);
         abstractNonZeroStream.receivedData(payloadSize);
-        return abstractNonZeroStream.getInputByteBuffer();
+        ByteBuffer result = abstractNonZeroStream.getInputByteBuffer();
+
+        if (log.isDebugEnabled()) {
+            
log.debug(sm.getString("upgradeHandler.startRequestBodyFrame.result",
+                    getConnectionId(), abstractNonZeroStream.getIdAsString(), 
result));
+        }
+
+        return result;
     }
 
 
diff --git a/java/org/apache/coyote/http2/LocalStrings.properties 
b/java/org/apache/coyote/http2/LocalStrings.properties
index 1a006ae..3bd153f 100644
--- a/java/org/apache/coyote/http2/LocalStrings.properties
+++ b/java/org/apache/coyote/http2/LocalStrings.properties
@@ -95,6 +95,7 @@ stream.inputBuffer.empty=The Stream input buffer is empty. 
Waiting for more data
 stream.inputBuffer.readTimeout=Timeout waiting to read data from client
 stream.inputBuffer.reset=Stream reset
 stream.inputBuffer.signal=Data added to inBuffer when read thread is waiting. 
Signalling that thread to continue
+stream.inputBuffer.swallowUnread=Swallowing [{0}] bytes previous read into 
input stream buffer
 stream.notWritable=Connection [{0}], Stream [{1}], This stream is not writable
 stream.outputBuffer.flush.debug=Connection [{0}], Stream [{1}], flushing 
output with buffer at position [{2}], writeInProgress [{3}] and closed [{4}]
 stream.recycle=Connection [{0}], Stream [{1}] has been recycled
@@ -137,6 +138,7 @@ upgradeHandler.releaseBacklog=Connection [{0}], Stream 
[{1}] released from backl
 upgradeHandler.rst.debug=Connection [{0}], Stream [{1}], Error [{2}], Message 
[{3}],  RST (closing stream)
 upgradeHandler.sendPrefaceFail=Connection [{0}], Failed to send preface to 
client
 upgradeHandler.socketCloseFailed=Error closing socket
+upgradeHandler.startRequestBodyFrame.result=Connection [{0}], Stream [{1}] 
startRequestBodyFrame returned [{2}]
 upgradeHandler.stream.closed=Stream [{0}] has been closed for some time
 upgradeHandler.stream.even=A new remote stream ID of [{0}] was requested but 
all remote streams must use odd identifiers
 upgradeHandler.stream.notWritable=Connection [{0}], Stream [{1}], This stream 
is not writable
diff --git a/java/org/apache/coyote/http2/Stream.java 
b/java/org/apache/coyote/http2/Stream.java
index a0110c0..6c2626e 100644
--- a/java/org/apache/coyote/http2/Stream.java
+++ b/java/org/apache/coyote/http2/Stream.java
@@ -1256,6 +1256,9 @@ class Stream extends AbstractNonZeroStream implements 
HeaderEmitter {
                 synchronized (inputBuffer) {
                     closed = true;
                     int unreadByteCount = inBuffer.position();
+                    if (log.isDebugEnabled()) {
+                        
log.debug(sm.getString("stream.inputBuffer.swallowUnread", 
Integer.valueOf(unreadByteCount)));
+                    }
                     if (unreadByteCount > 0) {
                         inBuffer.position(0);
                         inBuffer.limit(inBuffer.limit() - unreadByteCount);
diff --git a/test/org/apache/coyote/http2/TestFlowControl.java 
b/test/org/apache/coyote/http2/TestFlowControl.java
index 950a790..4d08781 100644
--- a/test/org/apache/coyote/http2/TestFlowControl.java
+++ b/test/org/apache/coyote/http2/TestFlowControl.java
@@ -18,6 +18,8 @@ package org.apache.coyote.http2;
 
 import java.io.IOException;
 import java.nio.ByteBuffer;
+import java.util.logging.Level;
+import java.util.logging.LogManager;
 
 import org.junit.Assert;
 import org.junit.Test;
@@ -32,90 +34,95 @@ public class TestFlowControl extends Http2TestBase {
     @Test
     public void testNotFound() throws Exception {
 
-        http2Connect();
+        
LogManager.getLogManager().getLogger("org.apache.coyote.http2").setLevel(Level.ALL);
+        try {
+            http2Connect();
 
-        // Connection and per-stream flow control default to 64k-1 bytes
+            // Connection and per-stream flow control default to 64k-1 bytes
 
-        // Set up a POST request to a non-existent end-point
-        // Generate headers
-        byte[] headersFrameHeader = new byte[9];
-        ByteBuffer headersPayload = ByteBuffer.allocate(128);
+            // Set up a POST request to a non-existent end-point
+            // Generate headers
+            byte[] headersFrameHeader = new byte[9];
+            ByteBuffer headersPayload = ByteBuffer.allocate(128);
 
-        MimeHeaders headers = new MimeHeaders();
-        headers.addValue(":method").setString("POST");
-        headers.addValue(":scheme").setString("http");
-        headers.addValue(":path").setString("/path-does-not-exist");
-        headers.addValue(":authority").setString("localhost:" + getPort());
-        headers.addValue("content-length").setLong(65536);
-        hpackEncoder.encode(headers, headersPayload);
+            MimeHeaders headers = new MimeHeaders();
+            headers.addValue(":method").setString("POST");
+            headers.addValue(":scheme").setString("http");
+            headers.addValue(":path").setString("/path-does-not-exist");
+            headers.addValue(":authority").setString("localhost:" + getPort());
+            headers.addValue("content-length").setLong(65536);
+            hpackEncoder.encode(headers, headersPayload);
 
-        headersPayload.flip();
+            headersPayload.flip();
 
-        ByteUtil.setThreeBytes(headersFrameHeader, 0, headersPayload.limit());
-        headersFrameHeader[3] = FrameType.HEADERS.getIdByte();
-        // Flags. end of headers (0x04)
-        headersFrameHeader[4] = 0x04;
-        // Stream id
-        ByteUtil.set31Bits(headersFrameHeader, 5, 3);
+            ByteUtil.setThreeBytes(headersFrameHeader, 0, 
headersPayload.limit());
+            headersFrameHeader[3] = FrameType.HEADERS.getIdByte();
+            // Flags. end of headers (0x04)
+            headersFrameHeader[4] = 0x04;
+            // Stream id
+            ByteUtil.set31Bits(headersFrameHeader, 5, 3);
 
-        writeFrame(headersFrameHeader, headersPayload);
+            writeFrame(headersFrameHeader, headersPayload);
 
-        // Generate body
-        // Max data payload is 16k
-        byte[] dataFrameHeader = new byte[9];
-        ByteBuffer dataPayload = ByteBuffer.allocate(16 * 1024);
+            // Generate body
+            // Max data payload is 16k
+            byte[] dataFrameHeader = new byte[9];
+            ByteBuffer dataPayload = ByteBuffer.allocate(16 * 1024);
 
-        while (dataPayload.hasRemaining()) {
-            dataPayload.put((byte) 'x');
-        }
-        dataPayload.flip();
-
-        // Size
-        ByteUtil.setThreeBytes(dataFrameHeader, 0, dataPayload.limit());
-        ByteUtil.set31Bits(dataFrameHeader, 5, 3);
-
-        // Read the 404 error page
-        // headers
-        parser.readFrame(true);
-        // body
-        parser.readFrame(true);
-        // reset (because the request body was not fully read)
-        parser.readFrame(true);
-
-        // Validate response
-        // Response size varies as error page is generated and includes version
-        // number
-        String trace = output.getTrace();
-        int start = trace.indexOf("[content-length]-[") + 18;
-        int end = trace.indexOf("]", start);
-        String contentLength = trace.substring(start, end);
-
-        Assert.assertEquals(
-                "3-HeadersStart\n" +
-                "3-Header-[:status]-[404]\n" +
-                "3-Header-[content-type]-[text/html;charset=utf-8]\n" +
-                "3-Header-[content-language]-[en]\n" +
-                "3-Header-[content-length]-[" + contentLength + "]\n" +
-                "3-Header-[date]-[Wed, 11 Nov 2015 19:18:42 GMT]\n" +
-                "3-HeadersEnd\n" +
-                "3-Body-" + contentLength + "\n" +
-                "3-EndOfStream\n" +
-                "3-RST-[8]\n", output.getTrace());
-        output.clearTrace();
-
-        // Write 3*16k=48k of request body
-        int count = 0;
-        while (count < 3) {
+            while (dataPayload.hasRemaining()) {
+                dataPayload.put((byte) 'x');
+            }
+            dataPayload.flip();
+
+            // Size
+            ByteUtil.setThreeBytes(dataFrameHeader, 0, dataPayload.limit());
+            ByteUtil.set31Bits(dataFrameHeader, 5, 3);
+
+            // Read the 404 error page
+            // headers
+            parser.readFrame(true);
+            // body
+            parser.readFrame(true);
+            // reset (because the request body was not fully read)
+            parser.readFrame(true);
+
+            // Validate response
+            // Response size varies as error page is generated and includes 
version
+            // number
+            String trace = output.getTrace();
+            int start = trace.indexOf("[content-length]-[") + 18;
+            int end = trace.indexOf("]", start);
+            String contentLength = trace.substring(start, end);
+
+            Assert.assertEquals(
+                    "3-HeadersStart\n" +
+                    "3-Header-[:status]-[404]\n" +
+                    "3-Header-[content-type]-[text/html;charset=utf-8]\n" +
+                    "3-Header-[content-language]-[en]\n" +
+                    "3-Header-[content-length]-[" + contentLength + "]\n" +
+                    "3-Header-[date]-[Wed, 11 Nov 2015 19:18:42 GMT]\n" +
+                    "3-HeadersEnd\n" +
+                    "3-Body-" + contentLength + "\n" +
+                    "3-EndOfStream\n" +
+                    "3-RST-[8]\n", output.getTrace());
+            output.clearTrace();
+
+            // Write 3*16k=48k of request body
+            int count = 0;
+            while (count < 3) {
+                writeFrame(dataFrameHeader, dataPayload);
+                waitForWindowSize(0);
+                dataPayload.position(0);
+                count++;
+            }
+
+            // EOS
+            dataFrameHeader[4] = 0x01;
             writeFrame(dataFrameHeader, dataPayload);
             waitForWindowSize(0);
-            dataPayload.position(0);
-            count++;
+        } finally {
+            
LogManager.getLogManager().getLogger("org.apache.coyote.http2").setLevel(Level.INFO);
         }
-
-        // EOS
-        dataFrameHeader[4] = 0x01;
-        writeFrame(dataFrameHeader, dataPayload);
-        waitForWindowSize(0);
     }
 
 
@@ -131,7 +138,6 @@ public class TestFlowControl extends Http2TestBase {
             parser.readFrame(true);
             trace = output.getTrace();
             output.clearTrace();
-            System.out.println(trace);
             found = trace.startsWith(prefix);
         } while (!found);
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to