You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by se...@apache.org on 2011/09/27 02:06:07 UTC
svn commit: r1176137 - in /httpcomponents/httpclient/trunk/httpclient/src:
main/java/org/apache/http/impl/client/DefaultHttpRequestRetryHandler.java
test/java/org/apache/http/impl/client/TestAbortHandling.java
Author: sebb
Date: Tue Sep 27 00:06:07 2011
New Revision: 1176137
URL: http://svn.apache.org/viewvc?rev=1176137&view=rev
Log:
HTTPCLIENT-1120 - DefaultHttpRequestRetryHandler#retryRequest should not retry aborted requests
Part two - still need to test connection abort (and fix if necessary)
Added:
httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/TestAbortHandling.java (with props)
Modified:
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/DefaultHttpRequestRetryHandler.java
Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/DefaultHttpRequestRetryHandler.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/DefaultHttpRequestRetryHandler.java?rev=1176137&r1=1176136&r2=1176137&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/DefaultHttpRequestRetryHandler.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/DefaultHttpRequestRetryHandler.java Tue Sep 27 00:06:07 2011
@@ -155,8 +155,15 @@ public class DefaultHttpRequestRetryHand
return !(request instanceof HttpEntityEnclosingRequest);
}
+ /**
+ * @since 4.2
+ */
protected boolean requestIsAborted(final HttpRequest request) {
- return (request instanceof HttpUriRequest && ((HttpUriRequest)request).isAborted());
+ HttpRequest req = request;
+ if (request instanceof RequestWrapper) { // does not forward request to original
+ req = ((RequestWrapper) request).getOriginal();
+ }
+ return (req instanceof HttpUriRequest && ((HttpUriRequest)req).isAborted());
}
}
Added: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/TestAbortHandling.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/TestAbortHandling.java?rev=1176137&view=auto
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/TestAbortHandling.java (added)
+++ httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/TestAbortHandling.java Tue Sep 27 00:06:07 2011
@@ -0,0 +1,108 @@
+/*
+ * ====================================================================
+ *
+ * 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.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ */
+
+package org.apache.http.impl.client;
+
+import java.io.IOException;
+import java.util.concurrent.CountDownLatch;
+
+import org.apache.http.HttpException;
+import org.apache.http.HttpRequest;
+import org.apache.http.HttpResponse;
+import org.apache.http.HttpStatus;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.entity.StringEntity;
+import org.apache.http.localserver.BasicServerTestBase;
+import org.apache.http.localserver.LocalTestServer;
+import org.apache.http.protocol.BasicHttpContext;
+import org.apache.http.protocol.ExecutionContext;
+import org.apache.http.protocol.HttpContext;
+import org.apache.http.protocol.HttpRequestHandler;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests for Abort handling.
+ */
+public class TestAbortHandling extends BasicServerTestBase {
+
+ @Before
+ public void setUp() throws Exception {
+ this.localServer = new LocalTestServer(null, null);
+ this.localServer.registerDefaultHandlers();
+ this.localServer.start();
+ this.httpclient = new DefaultHttpClient();
+ }
+
+ @Test
+ public void testAbortRetry_HTTPCLIENT_1120() throws Exception {
+ int port = this.localServer.getServiceAddress().getPort();
+ final CountDownLatch wait = new CountDownLatch(1);
+
+ this.localServer.register("*", new HttpRequestHandler(){
+ public void handle(HttpRequest request, HttpResponse response,
+ HttpContext context) throws HttpException, IOException {
+ try {
+ wait.countDown(); // trigger abort
+ Thread.sleep(2000); // allow time for abort to happen
+ response.setStatusCode(HttpStatus.SC_OK);
+ StringEntity entity = new StringEntity("Whatever");
+ response.setEntity(entity);
+ } catch (Exception e) {
+ response.setStatusCode(HttpStatus.SC_REQUEST_TIMEOUT);
+ }
+ }});
+
+ String s = "http://localhost:" + port + "/path";
+ final HttpGet httpget = new HttpGet(s);
+
+ Thread t = new Thread() {
+ @Override
+ public void run(){
+ try {
+ wait.await();
+ } catch (InterruptedException e) {
+ }
+ httpget.abort();
+ }
+ };
+
+ t.start();
+
+ HttpContext context = new BasicHttpContext();
+ try {
+ this.httpclient.execute(getServerHttp(), httpget, context);
+ } catch (IOException e) {
+ }
+
+ HttpRequest reqWrapper = (HttpRequest) context.getAttribute(ExecutionContext.HTTP_REQUEST);
+ Assert.assertNotNull("Request should exist",reqWrapper);
+ Assert.assertEquals(1,((RequestWrapper) reqWrapper).getExecCount());
+ }
+
+ // TODO add similar test for connection abort
+}
Propchange: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/TestAbortHandling.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/TestAbortHandling.java
------------------------------------------------------------------------------
svn:keywords = Author Date Id Revision