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

Reply via email to