Author: markt
Date: Tue Jun  9 13:43:15 2015
New Revision: 1684421

URL: http://svn.apache.org/r1684421
Log:
Enable ignored test now handling for stream errors has been implemented.
More clarifications around sub-states for closed streams (these need some unit 
tests)

Modified:
    tomcat/trunk/java/org/apache/coyote/http2/Http2Parser.java
    tomcat/trunk/java/org/apache/coyote/http2/StreamStateMachine.java
    tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_5_1.java

Modified: tomcat/trunk/java/org/apache/coyote/http2/Http2Parser.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/Http2Parser.java?rev=1684421&r1=1684420&r2=1684421&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/Http2Parser.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/Http2Parser.java Tue Jun  9 
13:43:15 2015
@@ -236,6 +236,8 @@ class Http2Parser {
 
         long errorCode = ByteUtil.getFourBytes(payload, 0);
         output.reset(streamId, errorCode);
+        headersCurrentStream = -1;
+        headersEndStream = false;
     }
 
 
@@ -427,7 +429,9 @@ class Http2Parser {
                         connectionId, Integer.toString(headersCurrentStream),
                         Integer.toString(streamId)), Error.COMPRESSION_ERROR);
             }
-            if (frameType != FrameType.CONTINUATION) {
+            if (frameType == FrameType.RST) {
+                // NO-OP: RST is OK here
+            } else if (frameType != FrameType.CONTINUATION) {
                 throw new 
ConnectionError(sm.getString("http2Parser.headers.wrongFrameType",
                         connectionId, Integer.toString(headersCurrentStream),
                         frameType), Error.COMPRESSION_ERROR);

Modified: tomcat/trunk/java/org/apache/coyote/http2/StreamStateMachine.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/coyote/http2/StreamStateMachine.java?rev=1684421&r1=1684420&r2=1684421&view=diff
==============================================================================
--- tomcat/trunk/java/org/apache/coyote/http2/StreamStateMachine.java (original)
+++ tomcat/trunk/java/org/apache/coyote/http2/StreamStateMachine.java Tue Jun  
9 13:43:15 2015
@@ -83,12 +83,12 @@ public class StreamStateMachine {
 
 
     public synchronized void sendReset() {
-        stateChange(state, State.CLOSED_TX);
+        stateChange(state, State.CLOSED_RST_TX);
     }
 
 
     public synchronized void receiveReset() {
-        stateChange(state, State.CLOSED_RST);
+        stateChange(state, State.CLOSED_RST_RX);
     }
 
 
@@ -140,9 +140,13 @@ public class StreamStateMachine {
         HALF_CLOSED_REMOTE (true,  Error.STREAM_CLOSED, FrameType.PRIORITY, 
FrameType.RST,
                                     FrameType.WINDOW_UPDATE),
         CLOSED_RX          (true,  Error.STREAM_CLOSED, FrameType.PRIORITY),
-        CLOSED_RST         (false, Error.STREAM_CLOSED, FrameType.PRIORITY),
         CLOSED_TX          (true,  Error.STREAM_CLOSED, FrameType.PRIORITY, 
FrameType.RST,
-                                    FrameType.WINDOW_UPDATE);
+                                    FrameType.WINDOW_UPDATE),
+        CLOSED_RST_RX      (false, Error.STREAM_CLOSED, FrameType.PRIORITY),
+        CLOSED_RST_TX      (false, Error.STREAM_CLOSED, FrameType.DATA, 
FrameType.HEADERS,
+                                    FrameType.PRIORITY, FrameType.RST, 
FrameType.PUSH_PROMISE,
+                                    FrameType.WINDOW_UPDATE),
+        CLOSED_FINAL       (true,  Error.PROTOCOL_ERROR, FrameType.PRIORITY);
 
         private final boolean connectionErrorForInvalidFrame;
         private final Error errorCodeForInvalidFrame;

Modified: tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_5_1.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_5_1.java?rev=1684421&r1=1684420&r2=1684421&view=diff
==============================================================================
--- tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_5_1.java 
(original)
+++ tomcat/trunk/test/org/apache/coyote/http2/TestHttp2Section_5_1.java Tue Jun 
 9 13:43:15 2015
@@ -19,7 +19,6 @@ package org.apache.coyote.http2;
 import java.nio.ByteBuffer;
 
 import org.junit.Assert;
-import org.junit.Ignore;
 import org.junit.Test;
 
 /**
@@ -85,7 +84,6 @@ public class TestHttp2Section_5_1 extend
 
 
     @Test
-    @Ignore // Need to handle stream closes
     public void testClosedInvalidFrame01() throws Exception {
         hpackEncoder = new 
HpackEncoder(ConnectionSettings.DEFAULT_HEADER_TABLE_SIZE);
 
@@ -111,8 +109,7 @@ public class TestHttp2Section_5_1 extend
         parser.readFrame(true);
 
         Assert.assertTrue(output.getTrace(),
-                output.getTrace().startsWith("0-Goaway-[2147483647]-[" +
-                        Error.STREAM_CLOSED.getCode() + "]-["));
+                output.getTrace().startsWith("3-RST-[" + 
Error.STREAM_CLOSED.getCode() + "]"));
     }
 
 



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to