You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by ma...@apache.org on 2015/06/04 15:31:15 UTC
svn commit: r1683546 - in /tomcat/trunk/test/org/apache/coyote/http2:
Http2TestBase.java TestHttp2Section_4_1.java TestHttp2Section_4_3.java
Author: markt
Date: Thu Jun 4 13:31:14 2015
New Revision: 1683546
URL: http://svn.apache.org/r1683546
Log:
Add unit tests to check headers and any associated continuation frames are contiguous.
Modified:
tomcat/trunk/test/org/apache/coyote/http2/Http2TestBase.java
tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_4_1.java
tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_4_3.java
Modified: tomcat/trunk/test/org/apache/coyote/http2/Http2TestBase.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/coyote/http2/Http2TestBase.java?rev=1683546&r1=1683545&r2=1683546&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/coyote/http2/Http2TestBase.java (original)
+++ tomcat/trunk/test/org/apache/coyote/http2/Http2TestBase.java Thu Jun 4 13:31:14 2015
@@ -111,7 +111,7 @@ public abstract class Http2TestBase exte
ByteBuffer headersPayload = ByteBuffer.allocate(128);
buildSimpleRequest(frameHeader, headersPayload, streamId);
- writeSimpleRequest(frameHeader, headersPayload);
+ writeFrame(frameHeader, headersPayload);
}
@@ -134,10 +134,47 @@ public abstract class Http2TestBase exte
}
- protected void writeSimpleRequest(byte[] frameHeader, ByteBuffer headersPayload)
+ protected void buildSimpleRequestPart1(byte[] frameHeader, ByteBuffer headersPayload,
+ int streamId) {
+ MimeHeaders headers = new MimeHeaders();
+ headers.addValue(":method").setString("GET");
+ headers.addValue(":path").setString("/any");
+ hpackEncoder.encode(headers, headersPayload);
+
+ headersPayload.flip();
+
+ ByteUtil.setThreeBytes(frameHeader, 0, headersPayload.limit());
+ // Header frame is type 0x01
+ frameHeader[3] = 0x01;
+ // Flags. end of stream (0x01)
+ frameHeader[4] = 0x01;
+ // Stream id
+ ByteUtil.set31Bits(frameHeader, 5, streamId);
+ }
+
+
+ protected void buildSimpleRequestPart2(byte[] frameHeader, ByteBuffer headersPayload,
+ int streamId) {
+ MimeHeaders headers = new MimeHeaders();
+ headers.addValue(":authority").setString("localhost:" + getPort());
+ hpackEncoder.encode(headers, headersPayload);
+
+ headersPayload.flip();
+
+ ByteUtil.setThreeBytes(frameHeader, 0, headersPayload.limit());
+ // Continuation frame is type 0x09
+ frameHeader[3] = 0x09;
+ // Flags. end of headers (0x04)
+ frameHeader[4] = 0x04;
+ // Stream id
+ ByteUtil.set31Bits(frameHeader, 5, streamId);
+ }
+
+
+ protected void writeFrame(byte[] header, ByteBuffer payload)
throws IOException {
- os.write(frameHeader);
- os.write(headersPayload.array(), headersPayload.arrayOffset(), headersPayload.limit());
+ os.write(header);
+ os.write(payload.array(), payload.arrayOffset(), payload.limit());
os.flush();
}
Modified: tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_4_1.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_4_1.java?rev=1683546&r1=1683545&r2=1683546&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_4_1.java (original)
+++ tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_4_1.java Thu Jun 4 13:31:14 2015
@@ -68,7 +68,7 @@ public class TestHttp2Section_4_1 extend
frameHeader[5] = (byte) (frameHeader[5] | 0x80);
// Process the request
- writeSimpleRequest(frameHeader, headersPayload);
+ writeFrame(frameHeader, headersPayload);
readSimpleResponse();
Assert.assertEquals(getSimpleResponseTrace(3), output.getTrace());
Modified: tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_4_3.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_4_3.java?rev=1683546&r1=1683545&r2=1683546&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_4_3.java (original)
+++ tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_4_3.java Thu Jun 4 13:31:14 2015
@@ -46,7 +46,7 @@ public class TestHttp2Section_4_3 extend
headersPayload.put(0, (byte) (headersPayload.get(0) + 128));
// Process the request
- writeSimpleRequest(frameHeader, headersPayload);
+ writeFrame(frameHeader, headersPayload);
// Read GOAWAY frame
parser.readFrame(true);
@@ -57,5 +57,57 @@ public class TestHttp2Section_4_3 extend
}
- // TODO: Header frames must be a contiguous sequence
+ @Test
+ public void testHeaderContinuationContiguous() throws Exception {
+ hpackEncoder = new HpackEncoder(ConnectionSettings.DEFAULT_HEADER_TABLE_SIZE);
+
+ // HTTP2 upgrade
+ http2Connect();
+
+ // Part 1
+ byte[] frameHeader = new byte[9];
+ ByteBuffer headersPayload = ByteBuffer.allocate(128);
+ buildSimpleRequestPart1(frameHeader, headersPayload, 3);
+ writeFrame(frameHeader, headersPayload);
+
+ // Part 2
+ headersPayload.clear();
+ buildSimpleRequestPart2(frameHeader, headersPayload, 3);
+ writeFrame(frameHeader, headersPayload);
+
+ // headers, body
+ parser.readFrame(true);
+ parser.readFrame(true);
+
+ Assert.assertEquals(getSimpleResponseTrace(3), output.getTrace());
+ }
+
+
+ @Test
+ public void testHeaderContinuationNonContiguous() throws Exception {
+ hpackEncoder = new HpackEncoder(ConnectionSettings.DEFAULT_HEADER_TABLE_SIZE);
+
+ // HTTP2 upgrade
+ http2Connect();
+
+ // Part 1
+ byte[] frameHeader = new byte[9];
+ ByteBuffer headersPayload = ByteBuffer.allocate(128);
+ buildSimpleRequestPart1(frameHeader, headersPayload, 3);
+ writeFrame(frameHeader, headersPayload);
+
+ sendPing();
+
+ // Part 2
+ headersPayload.clear();
+ buildSimpleRequestPart2(frameHeader, headersPayload, 3);
+ writeFrame(frameHeader, headersPayload);
+
+ // Read GOAWAY frame
+ parser.readFrame(true);
+
+ Assert.assertTrue(output.getTrace(),
+ output.getTrace().startsWith("0-Goaway-[2147483647]-[" +
+ ErrorCode.COMPRESSION_ERROR.getErrorCode() + "]-["));
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org