You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2012/02/26 19:51:42 UTC

svn commit: r1293911 - in /httpcomponents/httpcore/trunk/httpcore-nio/src: main/java/org/apache/http/nio/protocol/ test/java/org/apache/http/nio/integration/ test/java/org/apache/http/nio/protocol/

Author: olegk
Date: Sun Feb 26 18:51:41 2012
New Revision: 1293911

URL: http://svn.apache.org/viewvc?rev=1293911&view=rev
Log:
Ensure the execution handler gets closed in case the underlying connection is not in a valid state

Modified:
    httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/HttpAsyncRequestExecutor.java
    httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/integration/TestPipelining.java   (contents, props changed)
    httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestHttpAsyncRequestExecutor.java

Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/HttpAsyncRequestExecutor.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/HttpAsyncRequestExecutor.java?rev=1293911&r1=1293910&r2=1293911&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/HttpAsyncRequestExecutor.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/protocol/HttpAsyncRequestExecutor.java Sun Feb 26 18:51:41 2012
@@ -103,6 +103,9 @@ public class HttpAsyncRequestExecutor im
     public void closed(final NHttpClientConnection conn) {
         State state = getState(conn);
         if (state != null) {
+            if (!state.isValid()) {
+                closeHandler(state);
+            }
             state.reset();
         }
     }
@@ -268,6 +271,7 @@ public class HttpAsyncRequestExecutor im
                 state.setRequestState(MessageState.BODY_STREAM);
                 return;
             } else {
+                state.invalidate();
                 closeHandler(state, new SocketTimeoutException());
             }
         }

Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/integration/TestPipelining.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/integration/TestPipelining.java?rev=1293911&r1=1293910&r2=1293911&view=diff
==============================================================================
    (empty)

Propchange: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/integration/TestPipelining.java
            ('svn:executable' removed)

Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestHttpAsyncRequestExecutor.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestHttpAsyncRequestExecutor.java?rev=1293911&r1=1293910&r2=1293911&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestHttpAsyncRequestExecutor.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/protocol/TestHttpAsyncRequestExecutor.java Sun Feb 26 18:51:41 2012
@@ -127,6 +127,22 @@ public class TestHttpAsyncRequestExecuto
     }
 
     @Test
+    public void testClosedInvalidState() throws Exception {
+        State state = new HttpAsyncRequestExecutor.State();
+        state.setRequestState(MessageState.COMPLETED);
+        state.setResponseState(MessageState.COMPLETED);
+        state.invalidate();
+        state.setHandler(this.exchangeHandler);
+        this.connContext.setAttribute(HttpAsyncRequestExecutor.HTTP_EXCHANGE_STATE, state);
+
+        this.protocolHandler.closed(this.conn);
+
+        Assert.assertEquals(MessageState.READY, state.getRequestState());
+        Assert.assertEquals(MessageState.READY, state.getResponseState());
+        Mockito.verify(this.exchangeHandler).close();
+    }
+
+    @Test
     public void testHttpExceptionHandling() throws Exception {
         State state = new HttpAsyncRequestExecutor.State();
         state.setRequestState(MessageState.COMPLETED);
@@ -549,6 +565,7 @@ public class TestHttpAsyncRequestExecuto
         this.protocolHandler.timeout(this.conn);
 
         Assert.assertEquals(MessageState.BODY_STREAM, state.getRequestState());
+        Assert.assertTrue(state.isValid());
         Mockito.verify(this.conn).setSocketTimeout(1000);
         Mockito.verify(this.conn).requestOutput();
     }
@@ -564,6 +581,7 @@ public class TestHttpAsyncRequestExecuto
         this.protocolHandler.timeout(this.conn);
 
         Assert.assertEquals(MessageState.BODY_STREAM, state.getRequestState());
+        Assert.assertFalse(state.isValid());
         Mockito.verify(this.exchangeHandler).failed(Mockito.any(SocketTimeoutException.class));
         Mockito.verify(this.exchangeHandler).close();
         Mockito.verify(this.conn).close();
@@ -581,6 +599,7 @@ public class TestHttpAsyncRequestExecuto
         this.protocolHandler.timeout(this.conn);
 
         Assert.assertEquals(MessageState.BODY_STREAM, state.getRequestState());
+        Assert.assertFalse(state.isValid());
         Mockito.verify(this.exchangeHandler).failed(Mockito.any(SocketTimeoutException.class));
         Mockito.verify(this.exchangeHandler).close();
         Mockito.verify(this.conn).close();
@@ -598,6 +617,7 @@ public class TestHttpAsyncRequestExecuto
         this.protocolHandler.timeout(this.conn);
 
         Assert.assertEquals(MessageState.BODY_STREAM, state.getRequestState());
+        Assert.assertFalse(state.isValid());
         Mockito.verify(this.exchangeHandler).failed(Mockito.any(SocketTimeoutException.class));
         Mockito.verify(this.exchangeHandler).close();
         Mockito.verify(this.conn).shutdown();