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 2009/03/30 14:33:26 UTC

svn commit: r759942 - in /httpcomponents/httpclient/trunk/httpclient/src: main/java/org/apache/http/impl/client/DefaultRequestDirector.java test/java/org/apache/http/impl/client/TestClientAuthentication.java

Author: olegk
Date: Mon Mar 30 12:33:25 2009
New Revision: 759942

URL: http://svn.apache.org/viewvc?rev=759942&view=rev
Log:
Added a test case for handling of authentication failures with non-repeatable requests

Modified:
    httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/DefaultRequestDirector.java
    httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/TestClientAuthentication.java

Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/DefaultRequestDirector.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/DefaultRequestDirector.java?rev=759942&r1=759941&r2=759942&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/DefaultRequestDirector.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/DefaultRequestDirector.java Mon Mar 30 12:33:25 2009
@@ -399,7 +399,8 @@
                     // Increment exec count for this particular request
                     wrapper.incrementExecCount();
                     if (wrapper.getExecCount() > 1 && !wrapper.isRepeatable()) {
-                        if(retryReason != null) {
+                        this.log.debug("Cannot retry non-repeatable request");
+                        if (retryReason != null) {
                             throw new NonRepeatableRequestException("Cannot retry request " +
                                 "with a non-repeatable request entity.  The cause lists the " +
                                 "reason the original request failed.", retryReason);

Modified: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/TestClientAuthentication.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/TestClientAuthentication.java?rev=759942&r1=759941&r2=759942&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/TestClientAuthentication.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/TestClientAuthentication.java Mon Mar 30 12:33:25 2009
@@ -28,6 +28,7 @@
 
 package org.apache.http.impl.client;
 
+import java.io.ByteArrayInputStream;
 import java.io.IOException;
 
 import junit.framework.Test;
@@ -41,8 +42,12 @@
 import org.apache.http.auth.AuthScope;
 import org.apache.http.auth.Credentials;
 import org.apache.http.auth.UsernamePasswordCredentials;
+import org.apache.http.client.ClientProtocolException;
 import org.apache.http.client.CredentialsProvider;
+import org.apache.http.client.NonRepeatableRequestException;
 import org.apache.http.client.methods.HttpGet;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.entity.InputStreamEntity;
 import org.apache.http.entity.StringEntity;
 import org.apache.http.localserver.BasicServerTestBase;
 import org.apache.http.localserver.LocalTestServer;
@@ -198,4 +203,52 @@
         assertEquals("test realm", authscope.getRealm());
     }
 
+    public void testBasicAuthenticationSuccessOnRepeatablePost() throws Exception {
+        localServer.register("*", new AuthHandler());
+        localServer.start();
+        
+        TestCredentialsProvider credsProvider = new TestCredentialsProvider(
+                new UsernamePasswordCredentials("test", "test"));
+        
+        DefaultHttpClient httpclient = new DefaultHttpClient();
+        httpclient.setCredentialsProvider(credsProvider);
+        
+        HttpPost httppost = new HttpPost("/");
+        httppost.setEntity(new StringEntity("some important stuff", HTTP.ISO_8859_1));
+        
+        HttpResponse response = httpclient.execute(getServerHttp(), httppost);
+        HttpEntity entity = response.getEntity();
+        assertEquals(HttpStatus.SC_OK, response.getStatusLine().getStatusCode());
+        assertNotNull(entity);
+        entity.consumeContent();
+        AuthScope authscope = credsProvider.getAuthScope();
+        assertNotNull(authscope);
+        assertEquals("test realm", authscope.getRealm());
+    }
+
+    public void testBasicAuthenticationFailureOnNonRepeatablePost() throws Exception {
+        localServer.register("*", new AuthHandler());
+        localServer.start();
+        
+        TestCredentialsProvider credsProvider = new TestCredentialsProvider(
+                new UsernamePasswordCredentials("test", "test"));
+        
+        DefaultHttpClient httpclient = new DefaultHttpClient();
+        httpclient.setCredentialsProvider(credsProvider);
+        
+        HttpPost httppost = new HttpPost("/");
+        httppost.setEntity(new InputStreamEntity(
+                new ByteArrayInputStream(
+                        new byte[] { 0,1,2,3,4,5,6,7,8,9 }), -1));
+        
+        try {
+            httpclient.execute(getServerHttp(), httppost);
+            fail("ClientProtocolException should have been thrown");
+        } catch (ClientProtocolException ex) {
+            Throwable cause = ex.getCause();
+            assertNotNull(cause);
+            assertTrue(cause instanceof NonRepeatableRequestException);
+        }
+    }
+
 }