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/12 19:21:12 UTC

svn commit: r1685137 - /tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_5_3.java

Author: markt
Date: Fri Jun 12 17:21:12 2015
New Revision: 1685137

URL: http://svn.apache.org/r1685137
Log:
Test for priority

Added:
    tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_5_3.java   (with props)

Added: tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_5_3.java
URL: http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_5_3.java?rev=1685137&view=auto
==============================================================================
--- tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_5_3.java (added)
+++ tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_5_3.java Fri Jun 12 17:21:12 2015
@@ -0,0 +1,119 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+package org.apache.coyote.http2;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * Unit tests for Section 5.3 of
+ * <a href="https://tools.ietf.org/html/rfc7540">RFC 7540</a>.
+ * <br>
+ * The order of tests in this class is aligned with the order of the
+ * requirements in the RFC.
+ *
+ * Note: Unit tests for the examples described by each of the figures may be
+ * found in {@link TestAbstractStream}.
+ */
+public class TestHttp2Section_5_3 extends Http2TestBase {
+
+    // Section 5.3.2
+
+    @Test
+    public void testWeighting() throws Exception {
+        http2Connect();
+
+        // Default connection window size is 64k - 1. Initial request will have
+        // used 8k (56k -1). Increase it to 57k
+        sendWindowUpdate(0, 1 + 1024);
+
+        // Use up 56k of the connection window
+        for (int i = 3; i < 17; i += 2) {
+            sendSimpleRequest(i);
+            readSimpleResponse();
+        }
+
+        // Set the default window size to 1024 bytes
+        sendSetting(4, 1024);
+        // Wait for the ack
+        parser.readFrame(true);
+        output.clearTrace();
+
+        // At this point the connection window should be 1k and any new stream
+        // should have a window of 1k as well
+
+        // Set up streams A=17, B=19, C=21
+        sendPriority(17,  0, 15);
+        sendPriority(19, 17,  3);
+        sendPriority(21, 17, 11);
+
+        // Send a simple request on each stream
+        sendSimpleRequest(17);
+        sendSimpleRequest(19);
+        sendSimpleRequest(21);
+
+        // Open up the flow control windows for stream 19 & 21 to more than the
+        // size of a simple request (8k)
+        sendWindowUpdate(19, 16*1024);
+        sendWindowUpdate(21, 16*1024);
+
+        // Read some frames
+        // 17-headers, 17-1k-body, 19-headers, 21-headers
+
+        for (int i = 0; i < 4; i++) {
+            parser.readFrame(true);
+        }
+        output.clearTrace();
+
+        // Stream 17 should have used up its own 1k window and the connection 1k
+        // window. At this point 17 is blocked because the stream window is zero
+        // small and 19 & 21 are blocked because the connection window is zero.
+
+        // This should release a single byte from each of 19 and 21 (the update
+        // is allocated by weight and then rounded up).
+        sendWindowUpdate(0, 1);
+        parser.readFrame(true);
+        parser.readFrame(true);
+
+        String trace = output.getTrace();
+        Assert.assertTrue(trace, trace.contains("19-Body-1"));
+        Assert.assertTrue(trace, trace.contains("21-Body-1"));
+        output.clearTrace();
+
+        // This should address the 'overrun' of the connection flow control
+        // window above.
+        sendWindowUpdate(0, 1);
+
+        sendWindowUpdate(0, 1024);
+        parser.readFrame(true);
+        parser.readFrame(true);
+
+        trace = output.getTrace();
+        Assert.assertTrue(trace, trace.contains("19-Body-256"));
+        Assert.assertTrue(trace, trace.contains("21-Body-768"));
+
+        // Release everything and read all the remaining data
+        sendWindowUpdate(0, 1024 * 1024);
+        sendWindowUpdate(17, 1024 * 1024);
+
+        // Read remaining frames
+        // 17-7k-body, 19~8k-body, 21~8k-body
+        for (int i = 0; i < 3; i++) {
+            parser.readFrame(true);
+        }
+    }
+}

Propchange: tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_5_3.java
------------------------------------------------------------------------------
    svn:eol-style = native



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@tomcat.apache.org
For additional commands, e-mail: dev-help@tomcat.apache.org