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: dev-unsubscr...@tomcat.apache.org For additional commands, e-mail: dev-h...@tomcat.apache.org