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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]