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();