Author: markt
Date: Wed Jun 3 14:08:53 2015
New Revision: 1683339
URL: http://svn.apache.org/r1683339
Log:
Add test to confirm that the server ignores the reserved bit if set
Modified:
tomcat/trunk/test/org/apache/coyote/http2/Http2TestBase.java
tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_4_1.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=1683339&r1=1683338&r2=1683339&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/coyote/http2/Http2TestBase.java (original)
+++ tomcat/trunk/test/org/apache/coyote/http2/Http2TestBase.java Wed Jun 3
14:08:53 2015
@@ -107,25 +107,37 @@ public abstract class Http2TestBase exte
protected void sendSimpleRequest(int streamId) throws IOException {
+ byte[] frameHeader = new byte[9];
+ ByteBuffer headersPayload = ByteBuffer.allocate(128);
+
+ buildSimpleRequest(frameHeader, headersPayload, streamId);
+ writeSimpleRequest(frameHeader, headersPayload);
+ }
+
+
+ protected void buildSimpleRequest(byte[] frameHeader, ByteBuffer
headersPayload, int streamId) {
MimeHeaders headers = new MimeHeaders();
headers.addValue(":method").setString("GET");
headers.addValue(":path").setString("/any");
headers.addValue(":authority").setString("localhost:" + getPort());
- ByteBuffer buf = ByteBuffer.allocate(128);
- hpackEncoder.encode(headers, buf);
+ hpackEncoder.encode(headers, headersPayload);
- buf.flip();
- byte[] frameHeader = new byte[9];
+ headersPayload.flip();
- ByteUtil.setThreeBytes(frameHeader, 0, buf.limit());
+ ByteUtil.setThreeBytes(frameHeader, 0, headersPayload.limit());
// Header frame is type 0x01
frameHeader[3] = 0x01;
// Flags. end of headers (0x04). end of stream (0x01)
frameHeader[4] = 0x05;
// Stream id
ByteUtil.set31Bits(frameHeader, 5, streamId);
+ }
+
+
+ protected void writeSimpleRequest(byte[] frameHeader, ByteBuffer
headersPayload)
+ throws IOException {
os.write(frameHeader);
- os.write(buf.array(), buf.arrayOffset(), buf.limit());
+ os.write(headersPayload.array(), headersPayload.arrayOffset(),
headersPayload.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=1683339&r1=1683338&r2=1683339&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 Wed Jun
3 14:08:53 2015
@@ -16,6 +16,8 @@
*/
package org.apache.coyote.http2;
+import java.nio.ByteBuffer;
+
import org.junit.Assert;
import org.junit.Test;
@@ -33,6 +35,7 @@ public class TestHttp2Section_4_1 extend
// TODO: Tests for over-sized frames. Better located in tests for section
6?
+
@Test
public void testUnknownFrameType() throws Exception {
hpackEncoder = new
HpackEncoder(ConnectionSettings.DEFAULT_HEADER_TABLE_SIZE);
@@ -45,7 +48,29 @@ public class TestHttp2Section_4_1 extend
Assert.assertEquals(getSimpleResponseTrace(3), output.getTrace());
}
+
// TODO: Tests for unexpected flags. Better located in tests for section 6?
- // TODO: Test that set reserved bit is ignored.
+
+ @Test
+ public void testReservedBitIgnored() throws Exception {
+ hpackEncoder = new
HpackEncoder(ConnectionSettings.DEFAULT_HEADER_TABLE_SIZE);
+
+ // HTTP2 upgrade
+ http2Connect();
+
+ // Build the simple request
+ byte[] frameHeader = new byte[9];
+ ByteBuffer headersPayload = ByteBuffer.allocate(128);
+ buildSimpleRequest(frameHeader, headersPayload, 3);
+
+ // Tweak the header to set the reserved bit
+ frameHeader[5] = (byte) (frameHeader[5] | 0x80);
+
+ // Process the request
+ writeSimpleRequest(frameHeader, headersPayload);
+
+ readSimpleResponse();
+ Assert.assertEquals(getSimpleResponseTrace(3), output.getTrace());
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]