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 2011/10/04 01:51:46 UTC
svn commit: r1178640 - in /httpcomponents/httpclient/trunk/httpclient/src:
main/java/org/apache/http/client/protocol/
main/java/org/apache/http/impl/auth/ test/java/org/apache/http/impl/client/
Author: olegk
Date: Mon Oct 3 23:51:45 2011
New Revision: 1178640
URL: http://svn.apache.org/viewvc?rev=1178640&view=rev
Log:
HTTPCLIENT-1107: test case for auth scheme fallback mechanism in case of multiple auth options
Added:
httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/TestClientAuthenticationFallBack.java (with props)
Modified:
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/protocol/RequestAuthenticationBase.java
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/auth/AuthSchemeBase.java
Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/protocol/RequestAuthenticationBase.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/protocol/RequestAuthenticationBase.java?rev=1178640&r1=1178639&r2=1178640&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/protocol/RequestAuthenticationBase.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/client/protocol/RequestAuthenticationBase.java Mon Oct 3 23:51:45 2011
@@ -90,7 +90,7 @@ abstract class RequestAuthenticationBase
break;
} catch (AuthenticationException ex) {
if (this.log.isWarnEnabled()) {
- this.log.warn("Authentication error: " + ex.getMessage());
+ this.log.warn(authScheme + " authentication error: " + ex.getMessage());
}
}
}
@@ -105,7 +105,7 @@ abstract class RequestAuthenticationBase
request.addHeader(header);
} catch (AuthenticationException ex) {
if (this.log.isErrorEnabled()) {
- this.log.error("Authentication error: " + ex.getMessage());
+ this.log.error(authScheme + " authentication error: " + ex.getMessage());
}
}
}
Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/auth/AuthSchemeBase.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/auth/AuthSchemeBase.java?rev=1178640&r1=1178639&r2=1178640&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/auth/AuthSchemeBase.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/auth/AuthSchemeBase.java Mon Oct 3 23:51:45 2011
@@ -26,6 +26,8 @@
package org.apache.http.impl.auth;
+import java.util.Locale;
+
import org.apache.http.annotation.NotThreadSafe;
import org.apache.http.FormattedHeader;
@@ -140,7 +142,12 @@ public abstract class AuthSchemeBase imp
@Override
public String toString() {
- return getSchemeName();
+ String name = getSchemeName();
+ if (name != null) {
+ return name.toUpperCase(Locale.US);
+ } else {
+ return super.toString();
+ }
}
}
Added: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/TestClientAuthenticationFallBack.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/TestClientAuthenticationFallBack.java?rev=1178640&view=auto
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/TestClientAuthenticationFallBack.java (added)
+++ httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/TestClientAuthenticationFallBack.java Mon Oct 3 23:51:45 2011
@@ -0,0 +1,156 @@
+/*
+ * ====================================================================
+ *
+ * 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 org.apache.http.HttpEntity;
+import org.apache.http.HttpException;
+import org.apache.http.HttpRequest;
+import org.apache.http.HttpResponse;
+import org.apache.http.HttpResponseInterceptor;
+import org.apache.http.HttpStatus;
+import org.apache.http.auth.AUTH;
+import org.apache.http.auth.AuthScope;
+import org.apache.http.auth.Credentials;
+import org.apache.http.auth.UsernamePasswordCredentials;
+import org.apache.http.client.CredentialsProvider;
+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.localserver.RequestBasicAuth;
+import org.apache.http.protocol.BasicHttpProcessor;
+import org.apache.http.protocol.HTTP;
+import org.apache.http.protocol.HttpContext;
+import org.apache.http.protocol.HttpRequestHandler;
+import org.apache.http.protocol.ResponseConnControl;
+import org.apache.http.protocol.ResponseContent;
+import org.apache.http.protocol.ResponseDate;
+import org.apache.http.protocol.ResponseServer;
+import org.apache.http.util.EntityUtils;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+public class TestClientAuthenticationFallBack extends BasicServerTestBase {
+
+ public class ResponseBasicUnauthorized implements HttpResponseInterceptor {
+
+ public void process(
+ final HttpResponse response,
+ final HttpContext context) throws HttpException, IOException {
+ if (response.getStatusLine().getStatusCode() == HttpStatus.SC_UNAUTHORIZED) {
+ response.addHeader(AUTH.WWW_AUTH, "Digest realm=\"test realm\" invalid");
+ response.addHeader(AUTH.WWW_AUTH, "Basic realm=\"test realm\"");
+ }
+ }
+
+ }
+
+ @Before
+ public void setUp() throws Exception {
+ BasicHttpProcessor httpproc = new BasicHttpProcessor();
+ httpproc.addInterceptor(new ResponseDate());
+ httpproc.addInterceptor(new ResponseServer());
+ httpproc.addInterceptor(new ResponseContent());
+ httpproc.addInterceptor(new ResponseConnControl());
+ httpproc.addInterceptor(new RequestBasicAuth());
+ httpproc.addInterceptor(new ResponseBasicUnauthorized());
+
+ this.localServer = new LocalTestServer(httpproc, null);
+ this.httpclient = new DefaultHttpClient();
+ }
+
+ static class AuthHandler implements HttpRequestHandler {
+
+ public void handle(
+ final HttpRequest request,
+ final HttpResponse response,
+ final HttpContext context) throws HttpException, IOException {
+ String creds = (String) context.getAttribute("creds");
+ if (creds == null || !creds.equals("test:test")) {
+ response.setStatusCode(HttpStatus.SC_UNAUTHORIZED);
+ } else {
+ response.setStatusCode(HttpStatus.SC_OK);
+ StringEntity entity = new StringEntity("success", HTTP.ASCII);
+ response.setEntity(entity);
+ }
+ }
+
+ }
+
+ static class TestCredentialsProvider implements CredentialsProvider {
+
+ private final Credentials creds;
+ private AuthScope authscope;
+
+ TestCredentialsProvider(final Credentials creds) {
+ super();
+ this.creds = creds;
+ }
+
+ public void clear() {
+ }
+
+ public Credentials getCredentials(AuthScope authscope) {
+ this.authscope = authscope;
+ return this.creds;
+ }
+
+ public void setCredentials(AuthScope authscope, Credentials credentials) {
+ }
+
+ public AuthScope getAuthScope() {
+ return this.authscope;
+ }
+
+ }
+
+ @Test
+ public void testBasicAuthenticationSuccess() throws Exception {
+ this.localServer.register("*", new AuthHandler());
+ this.localServer.start();
+
+ TestCredentialsProvider credsProvider = new TestCredentialsProvider(
+ new UsernamePasswordCredentials("test", "test"));
+
+
+ this.httpclient.setCredentialsProvider(credsProvider);
+
+ HttpGet httpget = new HttpGet("/");
+
+ HttpResponse response = this.httpclient.execute(getServerHttp(), httpget);
+ HttpEntity entity = response.getEntity();
+ Assert.assertEquals(HttpStatus.SC_OK, response.getStatusLine().getStatusCode());
+ Assert.assertNotNull(entity);
+ EntityUtils.consume(entity);
+ AuthScope authscope = credsProvider.getAuthScope();
+ Assert.assertNotNull(authscope);
+ Assert.assertEquals("test realm", authscope.getRealm());
+ }
+
+}
Propchange: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/TestClientAuthenticationFallBack.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/TestClientAuthenticationFallBack.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/TestClientAuthenticationFallBack.java
------------------------------------------------------------------------------
svn:mime-type = text/plain