Cleanup of authentication test cases
diff --git a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/async/AbstractHttpAsyncClientAuthentication.java b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/async/AbstractHttpAsyncClientAuthentication.java
index 7a0c7e3..88f73b2 100644
--- a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/async/AbstractHttpAsyncClientAuthentication.java
+++ b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/async/AbstractHttpAsyncClientAuthentication.java
@@ -27,8 +27,6 @@
package org.apache.hc.client5.testing.async;
import java.util.Collections;
-import java.util.List;
-import java.util.Map;
import java.util.concurrent.Future;
import java.util.concurrent.atomic.AtomicLong;
@@ -36,13 +34,9 @@
import org.apache.hc.client5.http.async.methods.SimpleHttpRequest;
import org.apache.hc.client5.http.async.methods.SimpleHttpResponse;
import org.apache.hc.client5.http.async.methods.SimpleRequestBuilder;
-import org.apache.hc.client5.http.auth.AuthChallenge;
-import org.apache.hc.client5.http.auth.AuthScheme;
import org.apache.hc.client5.http.auth.AuthSchemeFactory;
import org.apache.hc.client5.http.auth.AuthScope;
-import org.apache.hc.client5.http.auth.ChallengeType;
-import org.apache.hc.client5.http.auth.Credentials;
-import org.apache.hc.client5.http.auth.CredentialsStore;
+import org.apache.hc.client5.http.auth.CredentialsProvider;
import org.apache.hc.client5.http.auth.StandardAuthScheme;
import org.apache.hc.client5.http.auth.UsernamePasswordCredentials;
import org.apache.hc.client5.http.config.RequestConfig;
@@ -69,13 +63,13 @@
import org.apache.hc.core5.http.impl.HttpProcessors;
import org.apache.hc.core5.http.message.BasicHeader;
import org.apache.hc.core5.http.nio.AsyncServerExchangeHandler;
-import org.apache.hc.core5.http.protocol.HttpContext;
import org.apache.hc.core5.http.protocol.HttpCoreContext;
import org.apache.hc.core5.http2.config.H2Config;
import org.apache.hc.core5.http2.impl.H2Processors;
import org.apache.hc.core5.net.URIAuthority;
import org.junit.Assert;
import org.junit.Test;
+import org.mockito.Mockito;
public abstract class AbstractHttpAsyncClientAuthentication<T extends CloseableHttpAsyncClient> extends AbstractIntegrationTestBase<T> {
@@ -110,42 +104,12 @@
abstract void setTargetAuthenticationStrategy(AuthenticationStrategy targetAuthStrategy);
- static class TestCredentialsProvider implements CredentialsStore {
-
- private final Credentials creds;
- private AuthScope authscope;
-
- TestCredentialsProvider(final Credentials creds) {
- super();
- this.creds = creds;
- }
-
- @Override
- public void clear() {
- }
-
- @Override
- public Credentials getCredentials(final AuthScope authscope, final HttpContext context) {
- this.authscope = authscope;
- return this.creds;
- }
-
- @Override
- public void setCredentials(final AuthScope authscope, final Credentials credentials) {
- }
-
- public AuthScope getAuthScope() {
- return this.authscope;
- }
-
- }
-
@Test
public void testBasicAuthenticationNoCreds() throws Exception {
server.register("*", AsyncEchoHandler::new);
final HttpHost target = start();
- final TestCredentialsProvider credsProvider = new TestCredentialsProvider(null);
+ final CredentialsProvider credsProvider = Mockito.mock(CredentialsProvider.class);
final HttpClientContext context = HttpClientContext.create();
context.setCredentialsProvider(credsProvider);
@@ -157,9 +121,8 @@
Assert.assertNotNull(response);
Assert.assertEquals(HttpStatus.SC_UNAUTHORIZED, response.getCode());
- final AuthScope authscope = credsProvider.getAuthScope();
- Assert.assertNotNull(authscope);
- Assert.assertEquals("test realm", authscope.getRealm());
+ Mockito.verify(credsProvider).getCredentials(
+ Mockito.eq(new AuthScope(target, "test realm", "basic")), Mockito.any());
}
@Test
@@ -167,8 +130,9 @@
server.register("*", AsyncEchoHandler::new);
final HttpHost target = start();
- final TestCredentialsProvider credsProvider = new TestCredentialsProvider(
- new UsernamePasswordCredentials("test", "all-wrong".toCharArray()));
+ final CredentialsProvider credsProvider = Mockito.mock(CredentialsProvider.class);
+ Mockito.when(credsProvider.getCredentials(Mockito.any(), Mockito.any()))
+ .thenReturn(new UsernamePasswordCredentials("test", "all-wrong".toCharArray()));
final HttpClientContext context = HttpClientContext.create();
context.setCredentialsProvider(credsProvider);
@@ -180,9 +144,8 @@
Assert.assertNotNull(response);
Assert.assertEquals(HttpStatus.SC_UNAUTHORIZED, response.getCode());
- final AuthScope authscope = credsProvider.getAuthScope();
- Assert.assertNotNull(authscope);
- Assert.assertEquals("test realm", authscope.getRealm());
+ Mockito.verify(credsProvider).getCredentials(
+ Mockito.eq(new AuthScope(target, "test realm", "basic")), Mockito.any());
}
@Test
@@ -190,8 +153,9 @@
server.register("*", AsyncEchoHandler::new);
final HttpHost target = start();
- final TestCredentialsProvider credsProvider = new TestCredentialsProvider(
- new UsernamePasswordCredentials("test", "test".toCharArray()));
+ final CredentialsProvider credsProvider = Mockito.mock(CredentialsProvider.class);
+ Mockito.when(credsProvider.getCredentials(Mockito.any(), Mockito.any()))
+ .thenReturn(new UsernamePasswordCredentials("test", "test".toCharArray()));
final HttpClientContext context = HttpClientContext.create();
context.setCredentialsProvider(credsProvider);
@@ -204,9 +168,8 @@
Assert.assertNotNull(response);
Assert.assertEquals(HttpStatus.SC_OK, response.getCode());
- final AuthScope authscope = credsProvider.getAuthScope();
- Assert.assertNotNull(authscope);
- Assert.assertEquals("test realm", authscope.getRealm());
+ Mockito.verify(credsProvider).getCredentials(
+ Mockito.eq(new AuthScope(target, "test realm", "basic")), Mockito.any());
}
@Test
@@ -214,8 +177,9 @@
server.register("*", AsyncEchoHandler::new);
final HttpHost target = start();
- final TestCredentialsProvider credsProvider = new TestCredentialsProvider(
- new UsernamePasswordCredentials("test", "test".toCharArray()));
+ final CredentialsProvider credsProvider = Mockito.mock(CredentialsProvider.class);
+ Mockito.when(credsProvider.getCredentials(Mockito.any(), Mockito.any()))
+ .thenReturn(new UsernamePasswordCredentials("test", "test".toCharArray()));
final HttpClientContext context = HttpClientContext.create();
context.setCredentialsProvider(credsProvider);
final Future<SimpleHttpResponse> future = httpclient.execute(
@@ -228,9 +192,8 @@
Assert.assertNotNull(response);
Assert.assertEquals(HttpStatus.SC_OK, response.getCode());
- final AuthScope authscope = credsProvider.getAuthScope();
- Assert.assertNotNull(authscope);
- Assert.assertEquals("test realm", authscope.getRealm());
+ Mockito.verify(credsProvider).getCredentials(
+ Mockito.eq(new AuthScope(target, "test realm", "basic")), Mockito.any());
}
@Test
@@ -238,8 +201,9 @@
server.register("*", AsyncEchoHandler::new);
final HttpHost target = start();
- final TestCredentialsProvider credsProvider = new TestCredentialsProvider(
- new UsernamePasswordCredentials("test", "all-wrong".toCharArray()));
+ final CredentialsProvider credsProvider = Mockito.mock(CredentialsProvider.class);
+ Mockito.when(credsProvider.getCredentials(Mockito.any(), Mockito.any()))
+ .thenReturn(new UsernamePasswordCredentials("test", "all-wrong".toCharArray()));
final HttpClientContext context = HttpClientContext.create();
context.setCredentialsProvider(credsProvider);
context.setRequestConfig(RequestConfig.custom().setExpectContinueEnabled(true).build());
@@ -260,8 +224,9 @@
server.register("*", AsyncEchoHandler::new);
final HttpHost target = start();
- final TestCredentialsProvider credsProvider = new TestCredentialsProvider(
- new UsernamePasswordCredentials("test", "test".toCharArray()));
+ final CredentialsProvider credsProvider = Mockito.mock(CredentialsProvider.class);
+ Mockito.when(credsProvider.getCredentials(Mockito.any(), Mockito.any()))
+ .thenReturn(new UsernamePasswordCredentials("test", "test".toCharArray()));
final HttpClientContext context = HttpClientContext.create();
context.setCredentialsProvider(credsProvider);
context.setRequestConfig(RequestConfig.custom().setExpectContinueEnabled(true).build());
@@ -275,51 +240,34 @@
Assert.assertNotNull(response);
Assert.assertEquals(HttpStatus.SC_OK, response.getCode());
- final AuthScope authscope = credsProvider.getAuthScope();
- Assert.assertNotNull(authscope);
- Assert.assertEquals("test realm", authscope.getRealm());
+ Mockito.verify(credsProvider).getCredentials(
+ Mockito.eq(new AuthScope(target, "test realm", "basic")), Mockito.any());
}
@Test
public void testBasicAuthenticationCredentialsCaching() throws Exception {
server.register("*", AsyncEchoHandler::new);
- final AtomicLong count = new AtomicLong(0);
- setTargetAuthenticationStrategy(new DefaultAuthenticationStrategy() {
-
- @Override
- public List<AuthScheme> select(
- final ChallengeType challengeType,
- final Map<String, AuthChallenge> challenges,
- final HttpContext context) {
- count.incrementAndGet();
- return super.select(challengeType, challenges, context);
- }
- });
+ final DefaultAuthenticationStrategy authStrategy = Mockito.spy(new DefaultAuthenticationStrategy());
+ setTargetAuthenticationStrategy(authStrategy);
final HttpHost target = start();
final HttpClientContext context = HttpClientContext.create();
context.setCredentialsProvider(CredentialsProviderBuilder.create()
- .add(target, "test", "test".toCharArray())
+ .add(target, "test", "test".toCharArray())
.build());
- final Future<SimpleHttpResponse> future1 = httpclient.execute(SimpleRequestBuilder.get()
- .setHttpHost(target)
- .setPath("/")
- .build(), context, null);
- final HttpResponse response1 = future1.get();
- Assert.assertNotNull(response1);
- Assert.assertEquals(HttpStatus.SC_OK, response1.getCode());
+ for (int i = 0; i < 5; i++) {
+ final Future<SimpleHttpResponse> future = httpclient.execute(SimpleRequestBuilder.get()
+ .setHttpHost(target)
+ .setPath("/")
+ .build(), context, null);
+ final HttpResponse response = future.get();
+ Assert.assertNotNull(response);
+ Assert.assertEquals(HttpStatus.SC_OK, response.getCode());
+ }
- final Future<SimpleHttpResponse> future2 = httpclient.execute(SimpleRequestBuilder.get()
- .setHttpHost(target)
- .setPath("/")
- .build(), context, null);
- final HttpResponse response2 = future2.get();
- Assert.assertNotNull(response2);
- Assert.assertEquals(HttpStatus.SC_OK, response2.getCode());
-
- Assert.assertEquals(1, count.get());
+ Mockito.verify(authStrategy).select(Mockito.any(), Mockito.any(), Mockito.any());
}
@Test
@@ -388,8 +336,9 @@
@Test
public void testReauthentication() throws Exception {
server.register("*", AsyncEchoHandler::new);
- final TestCredentialsProvider credsProvider = new TestCredentialsProvider(
- new UsernamePasswordCredentials("test", "test".toCharArray()));
+ final CredentialsProvider credsProvider = Mockito.mock(CredentialsProvider.class);
+ Mockito.when(credsProvider.getCredentials(Mockito.any(), Mockito.any()))
+ .thenReturn(new UsernamePasswordCredentials("test", "test".toCharArray()));
final Registry<AuthSchemeFactory> authSchemeRegistry = RegistryBuilder.<AuthSchemeFactory>create()
.register("MyBasic", context -> new BasicScheme() {
@@ -462,8 +411,9 @@
});
- final TestCredentialsProvider credsProvider = new TestCredentialsProvider(
- new UsernamePasswordCredentials("test", "test".toCharArray()));
+ final CredentialsProvider credsProvider = Mockito.mock(CredentialsProvider.class);
+ Mockito.when(credsProvider.getCredentials(Mockito.any(), Mockito.any()))
+ .thenReturn(new UsernamePasswordCredentials("test", "test".toCharArray()));
final HttpClientContext context = HttpClientContext.create();
context.setCredentialsProvider(credsProvider);
@@ -474,9 +424,8 @@
final SimpleHttpResponse response = future.get();
Assert.assertNotNull(response);
Assert.assertEquals(HttpStatus.SC_OK, response.getCode());
- final AuthScope authscope = credsProvider.getAuthScope();
- Assert.assertNotNull(authscope);
- Assert.assertEquals("test realm", authscope.getRealm());
+ Mockito.verify(credsProvider).getCredentials(
+ Mockito.eq(new AuthScope(target, "test realm", "basic")), Mockito.any());
}
}
diff --git a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/async/TestHttp1ClientAuthentication.java b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/async/TestHttp1ClientAuthentication.java
index b4b049d..d8ff129 100644
--- a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/async/TestHttp1ClientAuthentication.java
+++ b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/async/TestHttp1ClientAuthentication.java
@@ -36,6 +36,7 @@
import org.apache.hc.client5.http.async.methods.SimpleRequestBuilder;
import org.apache.hc.client5.http.auth.AuthSchemeFactory;
import org.apache.hc.client5.http.auth.AuthScope;
+import org.apache.hc.client5.http.auth.CredentialsProvider;
import org.apache.hc.client5.http.auth.UsernamePasswordCredentials;
import org.apache.hc.client5.http.config.ConnectionConfig;
import org.apache.hc.client5.http.config.RequestConfig;
@@ -63,6 +64,7 @@
import org.junit.rules.ExternalResource;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
+import org.mockito.Mockito;
@RunWith(Parameterized.class)
public class TestHttp1ClientAuthentication extends AbstractHttpAsyncClientAuthentication<CloseableHttpAsyncClient> {
@@ -149,8 +151,9 @@
},
Http1Config.DEFAULT);
- final TestCredentialsProvider credsProvider = new TestCredentialsProvider(
- new UsernamePasswordCredentials("test", "test".toCharArray()));
+ final CredentialsProvider credsProvider = Mockito.mock(CredentialsProvider.class);
+ Mockito.when(credsProvider.getCredentials(Mockito.any(), Mockito.any()))
+ .thenReturn(new UsernamePasswordCredentials("test", "test".toCharArray()));
final HttpClientContext context = HttpClientContext.create();
context.setCredentialsProvider(credsProvider);
@@ -163,9 +166,8 @@
Assert.assertNotNull(response);
Assert.assertEquals(HttpStatus.SC_OK, response.getCode());
- final AuthScope authscope = credsProvider.getAuthScope();
- Assert.assertNotNull(authscope);
- Assert.assertEquals("test realm", authscope.getRealm());
+ Mockito.verify(credsProvider).getCredentials(
+ Mockito.eq(new AuthScope(target, "test realm", "basic")), Mockito.any());
}
}
\ No newline at end of file
diff --git a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestClientAuthentication.java b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestClientAuthentication.java
index e443375..1e88a46 100644
--- a/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestClientAuthentication.java
+++ b/httpclient5-testing/src/test/java/org/apache/hc/client5/testing/sync/TestClientAuthentication.java
@@ -31,17 +31,12 @@
import java.net.InetSocketAddress;
import java.nio.charset.StandardCharsets;
import java.util.Collections;
-import java.util.List;
-import java.util.Map;
import java.util.concurrent.atomic.AtomicLong;
import org.apache.hc.client5.http.auth.AuthCache;
-import org.apache.hc.client5.http.auth.AuthChallenge;
import org.apache.hc.client5.http.auth.AuthScheme;
import org.apache.hc.client5.http.auth.AuthSchemeFactory;
import org.apache.hc.client5.http.auth.AuthScope;
-import org.apache.hc.client5.http.auth.ChallengeType;
-import org.apache.hc.client5.http.auth.Credentials;
import org.apache.hc.client5.http.auth.CredentialsProvider;
import org.apache.hc.client5.http.auth.StandardAuthScheme;
import org.apache.hc.client5.http.auth.UsernamePasswordCredentials;
@@ -82,6 +77,7 @@
import org.apache.hc.core5.net.URIAuthority;
import org.junit.Assert;
import org.junit.Test;
+import org.mockito.Mockito;
/**
* Unit tests for automatic client authentication.
@@ -97,46 +93,24 @@
return start(new BasicTestAuthenticator("test:test", "test realm"));
}
- static class TestCredentialsProvider implements CredentialsProvider {
-
- private final Credentials creds;
- private AuthScope authscope;
-
- TestCredentialsProvider(final Credentials creds) {
- super();
- this.creds = creds;
- }
-
- @Override
- public Credentials getCredentials(final AuthScope authscope, final HttpContext context) {
- this.authscope = authscope;
- return this.creds;
- }
-
- public AuthScope getAuthScope() {
- return this.authscope;
- }
-
- }
-
@Test
public void testBasicAuthenticationNoCreds() throws Exception {
this.server.registerHandler("*", new EchoHandler());
final HttpHost target = start();
final HttpClientContext context = HttpClientContext.create();
- final TestCredentialsProvider credsProvider = new TestCredentialsProvider(null);
+ final CredentialsProvider credsProvider = Mockito.mock(CredentialsProvider.class);
context.setCredentialsProvider(credsProvider);
final HttpGet httpget = new HttpGet("/");
- final ClassicHttpResponse response = this.httpclient.execute(target, httpget, context);
- final HttpEntity entity = response.getEntity();
- Assert.assertEquals(HttpStatus.SC_UNAUTHORIZED, response.getCode());
- Assert.assertNotNull(entity);
- EntityUtils.consume(entity);
- final AuthScope authscope = credsProvider.getAuthScope();
- Assert.assertNotNull(authscope);
- Assert.assertEquals("test realm", authscope.getRealm());
+ try (final ClassicHttpResponse response = this.httpclient.execute(target, httpget, context)) {
+ final HttpEntity entity = response.getEntity();
+ Assert.assertEquals(HttpStatus.SC_UNAUTHORIZED, response.getCode());
+ Assert.assertNotNull(entity);
+ EntityUtils.consume(entity);
+ }
+ Mockito.verify(credsProvider).getCredentials(
+ Mockito.eq(new AuthScope(target, "test realm", "basic")), Mockito.any());
}
@Test
@@ -145,19 +119,20 @@
final HttpHost target = start();
final HttpClientContext context = HttpClientContext.create();
- final TestCredentialsProvider credsProvider = new TestCredentialsProvider(
- new UsernamePasswordCredentials("test", "all-wrong".toCharArray()));
+ final CredentialsProvider credsProvider = Mockito.mock(CredentialsProvider.class);
+ Mockito.when(credsProvider.getCredentials(Mockito.any(), Mockito.any()))
+ .thenReturn(new UsernamePasswordCredentials("test", "all-wrong".toCharArray()));
context.setCredentialsProvider(credsProvider);
final HttpGet httpget = new HttpGet("/");
- final ClassicHttpResponse response = this.httpclient.execute(target, httpget, context);
- final HttpEntity entity = response.getEntity();
- Assert.assertEquals(HttpStatus.SC_UNAUTHORIZED, response.getCode());
- Assert.assertNotNull(entity);
- EntityUtils.consume(entity);
- final AuthScope authscope = credsProvider.getAuthScope();
- Assert.assertNotNull(authscope);
- Assert.assertEquals("test realm", authscope.getRealm());
+ try (final ClassicHttpResponse response = this.httpclient.execute(target, httpget, context)) {
+ final HttpEntity entity = response.getEntity();
+ Assert.assertEquals(HttpStatus.SC_UNAUTHORIZED, response.getCode());
+ Assert.assertNotNull(entity);
+ EntityUtils.consume(entity);
+ }
+ Mockito.verify(credsProvider).getCredentials(
+ Mockito.eq(new AuthScope(target, "test realm", "basic")), Mockito.any());
}
@Test
@@ -165,20 +140,21 @@
this.server.registerHandler("*", new EchoHandler());
final HttpGet httpget = new HttpGet("/");
final HttpClientContext context = HttpClientContext.create();
- final TestCredentialsProvider credsProvider = new TestCredentialsProvider(
- new UsernamePasswordCredentials("test", "test".toCharArray()));
+ final CredentialsProvider credsProvider = Mockito.mock(CredentialsProvider.class);
+ Mockito.when(credsProvider.getCredentials(Mockito.any(), Mockito.any()))
+ .thenReturn(new UsernamePasswordCredentials("test", "test".toCharArray()));
context.setCredentialsProvider(credsProvider);
final HttpHost target = start();
- final ClassicHttpResponse response = this.httpclient.execute(target, httpget, context);
- final HttpEntity entity = response.getEntity();
- Assert.assertEquals(HttpStatus.SC_OK, response.getCode());
- Assert.assertNotNull(entity);
- EntityUtils.consume(entity);
- final AuthScope authscope = credsProvider.getAuthScope();
- Assert.assertNotNull(authscope);
- Assert.assertEquals("test realm", authscope.getRealm());
+ try (final ClassicHttpResponse response = this.httpclient.execute(target, httpget, context)) {
+ final HttpEntity entity = response.getEntity();
+ Assert.assertEquals(HttpStatus.SC_OK, response.getCode());
+ Assert.assertNotNull(entity);
+ EntityUtils.consume(entity);
+ }
+ Mockito.verify(credsProvider).getCredentials(
+ Mockito.eq(new AuthScope(target, "test realm", "basic")), Mockito.any());
}
@Test
@@ -196,14 +172,16 @@
new byte[] { 1, 2, 3, 4, 5, 6, 7, 8, 9 } ),
-1, null));
final HttpClientContext context = HttpClientContext.create();
- final TestCredentialsProvider credsProvider = new TestCredentialsProvider(
- new UsernamePasswordCredentials("test", "test".toCharArray()));
+ final CredentialsProvider credsProvider = Mockito.mock(CredentialsProvider.class);
+ Mockito.when(credsProvider.getCredentials(Mockito.any(), Mockito.any()))
+ .thenReturn(new UsernamePasswordCredentials("test", "test".toCharArray()));
context.setCredentialsProvider(credsProvider);
- final ClassicHttpResponse response = this.httpclient.execute(target, httpput, context);
- final HttpEntity entity = response.getEntity();
- Assert.assertEquals(HttpStatus.SC_OK, response.getCode());
- Assert.assertNotNull(entity);
+ try (final ClassicHttpResponse response = this.httpclient.execute(target, httpput, context)) {
+ final HttpEntity entity = response.getEntity();
+ Assert.assertEquals(HttpStatus.SC_OK, response.getCode());
+ Assert.assertNotNull(entity);
+ }
}
@Test
@@ -220,15 +198,17 @@
-1, null));
final HttpClientContext context = HttpClientContext.create();
- final TestCredentialsProvider credsProvider = new TestCredentialsProvider(
- new UsernamePasswordCredentials("test", "boom".toCharArray()));
+ final CredentialsProvider credsProvider = Mockito.mock(CredentialsProvider.class);
+ Mockito.when(credsProvider.getCredentials(Mockito.any(), Mockito.any()))
+ .thenReturn(new UsernamePasswordCredentials("test", "boom".toCharArray()));
context.setCredentialsProvider(credsProvider);
- final CloseableHttpResponse response = this.httpclient.execute(target, httpput, context);
- final HttpEntity entity = response.getEntity();
- Assert.assertEquals(401, response.getCode());
- Assert.assertNotNull(entity);
- EntityUtils.consume(entity);
+ try (final CloseableHttpResponse response = this.httpclient.execute(target, httpput, context)) {
+ final HttpEntity entity = response.getEntity();
+ Assert.assertEquals(401, response.getCode());
+ Assert.assertNotNull(entity);
+ EntityUtils.consume(entity);
+ }
}
@Test
@@ -240,18 +220,19 @@
httppost.setEntity(new StringEntity("some important stuff", StandardCharsets.US_ASCII));
final HttpClientContext context = HttpClientContext.create();
- final TestCredentialsProvider credsProvider = new TestCredentialsProvider(
- new UsernamePasswordCredentials("test", "test".toCharArray()));
+ final CredentialsProvider credsProvider = Mockito.mock(CredentialsProvider.class);
+ Mockito.when(credsProvider.getCredentials(Mockito.any(), Mockito.any()))
+ .thenReturn(new UsernamePasswordCredentials("test", "test".toCharArray()));
context.setCredentialsProvider(credsProvider);
- final ClassicHttpResponse response = this.httpclient.execute(target, httppost, context);
- final HttpEntity entity = response.getEntity();
- Assert.assertEquals(HttpStatus.SC_OK, response.getCode());
- Assert.assertNotNull(entity);
- EntityUtils.consume(entity);
- final AuthScope authscope = credsProvider.getAuthScope();
- Assert.assertNotNull(authscope);
- Assert.assertEquals("test realm", authscope.getRealm());
+ try (final ClassicHttpResponse response = this.httpclient.execute(target, httppost, context)) {
+ final HttpEntity entity = response.getEntity();
+ Assert.assertEquals(HttpStatus.SC_OK, response.getCode());
+ Assert.assertNotNull(entity);
+ EntityUtils.consume(entity);
+ }
+ Mockito.verify(credsProvider).getCredentials(
+ Mockito.eq(new AuthScope(target, "test realm", "basic")), Mockito.any());
}
@Test
@@ -268,46 +249,23 @@
context.setRequestConfig(RequestConfig.custom()
.setExpectContinueEnabled(false)
.build());
- final TestCredentialsProvider credsProvider = new TestCredentialsProvider(
- new UsernamePasswordCredentials("test", "test".toCharArray()));
+ final CredentialsProvider credsProvider = Mockito.mock(CredentialsProvider.class);
+ Mockito.when(credsProvider.getCredentials(Mockito.any(), Mockito.any()))
+ .thenReturn(new UsernamePasswordCredentials("test", "test".toCharArray()));
context.setCredentialsProvider(credsProvider);
- final CloseableHttpResponse response = this.httpclient.execute(target, httppost, context);
- final HttpEntity entity = response.getEntity();
- Assert.assertEquals(401, response.getCode());
- Assert.assertNotNull(entity);
- EntityUtils.consume(entity);
- }
-
- static class TestTargetAuthenticationStrategy extends DefaultAuthenticationStrategy {
-
- private final AtomicLong count;
-
- public TestTargetAuthenticationStrategy() {
- super();
- this.count = new AtomicLong();
+ try (final CloseableHttpResponse response = this.httpclient.execute(target, httppost, context)) {
+ final HttpEntity entity = response.getEntity();
+ Assert.assertEquals(401, response.getCode());
+ Assert.assertNotNull(entity);
+ EntityUtils.consume(entity);
}
-
- @Override
- public List<AuthScheme> select(
- final ChallengeType challengeType,
- final Map<String, AuthChallenge> challenges,
- final HttpContext context) {
- final List<AuthScheme> authSchemes = super.select(challengeType, challenges, context);
- this.count.incrementAndGet();
- return authSchemes;
- }
-
- public long getCount() {
- return this.count.get();
- }
-
}
@Test
public void testBasicAuthenticationCredentialsCaching() throws Exception {
this.server.registerHandler("*", new EchoHandler());
- final TestTargetAuthenticationStrategy authStrategy = new TestTargetAuthenticationStrategy();
+ final DefaultAuthenticationStrategy authStrategy = Mockito.spy(new DefaultAuthenticationStrategy());
this.clientBuilder.setTargetAuthenticationStrategy(authStrategy);
final HttpHost target = start();
@@ -317,21 +275,17 @@
.add(target, "test", "test".toCharArray())
.build());
- final HttpGet httpget = new HttpGet("/");
+ for (int i = 0; i < 5; i++) {
+ final HttpGet httpget = new HttpGet("/");
+ try (final ClassicHttpResponse response = this.httpclient.execute(target, httpget, context)) {
+ final HttpEntity entity1 = response.getEntity();
+ Assert.assertEquals(HttpStatus.SC_OK, response.getCode());
+ Assert.assertNotNull(entity1);
+ EntityUtils.consume(entity1);
+ }
+ }
- final ClassicHttpResponse response1 = this.httpclient.execute(target, httpget, context);
- final HttpEntity entity1 = response1.getEntity();
- Assert.assertEquals(HttpStatus.SC_OK, response1.getCode());
- Assert.assertNotNull(entity1);
- EntityUtils.consume(entity1);
-
- final ClassicHttpResponse response2 = this.httpclient.execute(target, httpget, context);
- final HttpEntity entity2 = response1.getEntity();
- Assert.assertEquals(HttpStatus.SC_OK, response2.getCode());
- Assert.assertNotNull(entity2);
- EntityUtils.consume(entity2);
-
- Assert.assertEquals(1, authStrategy.getCount());
+ Mockito.verify(authStrategy).select(Mockito.any(), Mockito.any(), Mockito.any());
}
@Test
@@ -363,7 +317,7 @@
});
- final TestTargetAuthenticationStrategy authStrategy = new TestTargetAuthenticationStrategy();
+ final DefaultAuthenticationStrategy authStrategy = Mockito.spy(new DefaultAuthenticationStrategy());
final CredentialsProvider credsProvider = CredentialsProviderBuilder.create()
.add(new AuthScope(target, "this realm", null), "test", "this".toCharArray())
.add(new AuthScope(target, "that realm", null), "test", "that".toCharArray())
@@ -377,29 +331,32 @@
final HttpGet httpget1 = new HttpGet("/this");
- final ClassicHttpResponse response1 = this.httpclient.execute(target, httpget1, context);
- final HttpEntity entity1 = response1.getEntity();
- Assert.assertEquals(HttpStatus.SC_OK, response1.getCode());
- Assert.assertNotNull(entity1);
- EntityUtils.consume(entity1);
+ try (final ClassicHttpResponse response1 = this.httpclient.execute(target, httpget1, context)) {
+ final HttpEntity entity1 = response1.getEntity();
+ Assert.assertEquals(HttpStatus.SC_OK, response1.getCode());
+ Assert.assertNotNull(entity1);
+ EntityUtils.consume(entity1);
+ }
final HttpGet httpget2 = new HttpGet("/this");
- final ClassicHttpResponse response2 = this.httpclient.execute(target, httpget2, context);
- final HttpEntity entity2 = response1.getEntity();
- Assert.assertEquals(HttpStatus.SC_OK, response2.getCode());
- Assert.assertNotNull(entity2);
- EntityUtils.consume(entity2);
+ try (final ClassicHttpResponse response2 = this.httpclient.execute(target, httpget2, context)) {
+ final HttpEntity entity2 = response2.getEntity();
+ Assert.assertEquals(HttpStatus.SC_OK, response2.getCode());
+ Assert.assertNotNull(entity2);
+ EntityUtils.consume(entity2);
+ }
final HttpGet httpget3 = new HttpGet("/that");
- final ClassicHttpResponse response3 = this.httpclient.execute(target, httpget3, context);
- final HttpEntity entity3 = response1.getEntity();
- Assert.assertEquals(HttpStatus.SC_OK, response3.getCode());
- Assert.assertNotNull(entity3);
- EntityUtils.consume(entity3);
+ try (final ClassicHttpResponse response3 = this.httpclient.execute(target, httpget3, context)) {
+ final HttpEntity entity3 = response3.getEntity();
+ Assert.assertEquals(HttpStatus.SC_OK, response3.getCode());
+ Assert.assertNotNull(entity3);
+ EntityUtils.consume(entity3);
+ }
- Assert.assertEquals(2, authStrategy.getCount());
+ Mockito.verify(authStrategy, Mockito.times(2)).select(Mockito.any(), Mockito.any(), Mockito.any());
}
@Test
@@ -409,11 +366,12 @@
final HttpGet httpget = new HttpGet("http://test:test@" + target.toHostString() + "/");
final HttpClientContext context = HttpClientContext.create();
- final ClassicHttpResponse response = this.httpclient.execute(target, httpget, context);
- final HttpEntity entity = response.getEntity();
- Assert.assertEquals(HttpStatus.SC_OK, response.getCode());
- Assert.assertNotNull(entity);
- EntityUtils.consume(entity);
+ try (final ClassicHttpResponse response = this.httpclient.execute(target, httpget, context)) {
+ final HttpEntity entity = response.getEntity();
+ Assert.assertEquals(HttpStatus.SC_OK, response.getCode());
+ Assert.assertNotNull(entity);
+ EntityUtils.consume(entity);
+ }
}
@Test
@@ -423,11 +381,12 @@
final HttpGet httpget = new HttpGet("http://test:all-wrong@" + target.toHostString() + "/");
final HttpClientContext context = HttpClientContext.create();
- final ClassicHttpResponse response = this.httpclient.execute(target, httpget, context);
- final HttpEntity entity = response.getEntity();
- Assert.assertEquals(HttpStatus.SC_UNAUTHORIZED, response.getCode());
- Assert.assertNotNull(entity);
- EntityUtils.consume(entity);
+ try (final ClassicHttpResponse response = this.httpclient.execute(target, httpget, context)) {
+ final HttpEntity entity = response.getEntity();
+ Assert.assertEquals(HttpStatus.SC_UNAUTHORIZED, response.getCode());
+ Assert.assertNotNull(entity);
+ EntityUtils.consume(entity);
+ }
}
@Test
@@ -455,39 +414,19 @@
final HttpGet httpget = new HttpGet("/thatway");
final HttpClientContext context = HttpClientContext.create();
- final ClassicHttpResponse response = this.httpclient.execute(target, httpget, context);
- final HttpEntity entity = response.getEntity();
- Assert.assertEquals(HttpStatus.SC_OK, response.getCode());
- Assert.assertNotNull(entity);
- EntityUtils.consume(entity);
- }
-
- static class CountingAuthenticator extends BasicTestAuthenticator {
-
- private final AtomicLong count;
-
- public CountingAuthenticator(final String userToken, final String realm) {
- super(userToken, realm);
- this.count = new AtomicLong();
+ try (final ClassicHttpResponse response = this.httpclient.execute(target, httpget, context)) {
+ final HttpEntity entity = response.getEntity();
+ Assert.assertEquals(HttpStatus.SC_OK, response.getCode());
+ Assert.assertNotNull(entity);
+ EntityUtils.consume(entity);
}
-
- @Override
- public boolean authenticate(final URIAuthority authority, final String requestUri, final String credentials) {
- this.count.incrementAndGet();
- return super.authenticate(authority, requestUri, credentials);
- }
-
- public long getCount() {
- return this.count.get();
- }
-
}
@Test
public void testPreemptiveAuthentication() throws Exception {
this.server.registerHandler("*", new EchoHandler());
- final CountingAuthenticator countingAuthenticator = new CountingAuthenticator("test:test", "test realm");
- final HttpHost target = start(countingAuthenticator);
+ final Authenticator authenticator = Mockito.spy(new BasicTestAuthenticator("test:test", "test realm"));
+ final HttpHost target = start(authenticator);
final BasicScheme basicScheme = new BasicScheme();
basicScheme.initPreemptive(new UsernamePasswordCredentials("test", "test".toCharArray()));
@@ -497,21 +436,21 @@
context.setAuthCache(authCache);
final HttpGet httpget = new HttpGet("/");
- final ClassicHttpResponse response1 = this.httpclient.execute(target, httpget, context);
- final HttpEntity entity1 = response1.getEntity();
- Assert.assertEquals(HttpStatus.SC_OK, response1.getCode());
- Assert.assertNotNull(entity1);
- EntityUtils.consume(entity1);
+ try (final ClassicHttpResponse response1 = this.httpclient.execute(target, httpget, context)) {
+ final HttpEntity entity1 = response1.getEntity();
+ Assert.assertEquals(HttpStatus.SC_OK, response1.getCode());
+ Assert.assertNotNull(entity1);
+ EntityUtils.consume(entity1);
+ }
- Assert.assertEquals(1, countingAuthenticator.getCount());
+ Mockito.verify(authenticator).authenticate(Mockito.any(), Mockito.any(), Mockito.any());
}
@Test
public void testPreemptiveAuthenticationFailure() throws Exception {
this.server.registerHandler("*", new EchoHandler());
- final CountingAuthenticator countingAuthenticator = new CountingAuthenticator("test:test", "test realm");
-
- final HttpHost target = start(countingAuthenticator);
+ final Authenticator authenticator = Mockito.spy(new BasicTestAuthenticator("test:test", "test realm"));
+ final HttpHost target = start(authenticator);
final HttpClientContext context = HttpClientContext.create();
final AuthCache authCache = new BasicAuthCache();
@@ -522,13 +461,14 @@
.build());
final HttpGet httpget = new HttpGet("/");
- final ClassicHttpResponse response1 = this.httpclient.execute(target, httpget, context);
- final HttpEntity entity1 = response1.getEntity();
- Assert.assertEquals(HttpStatus.SC_UNAUTHORIZED, response1.getCode());
- Assert.assertNotNull(entity1);
- EntityUtils.consume(entity1);
+ try (final ClassicHttpResponse response1 = this.httpclient.execute(target, httpget, context)) {
+ final HttpEntity entity1 = response1.getEntity();
+ Assert.assertEquals(HttpStatus.SC_UNAUTHORIZED, response1.getCode());
+ Assert.assertNotNull(entity1);
+ EntityUtils.consume(entity1);
+ }
- Assert.assertEquals(1, countingAuthenticator.getCount());
+ Mockito.verify(authenticator).authenticate(Mockito.any(), Mockito.any(), Mockito.any());
}
static class ProxyAuthHandler implements HttpRequestHandler {
@@ -557,15 +497,15 @@
final HttpHost target = super.start();
final HttpClientContext context = HttpClientContext.create();
- final TestCredentialsProvider credsProvider = new TestCredentialsProvider(null);
+ final CredentialsProvider credsProvider = Mockito.mock(CredentialsProvider.class);
context.setCredentialsProvider(credsProvider);
final HttpGet httpget = new HttpGet("/");
- final ClassicHttpResponse response = this.httpclient.execute(target, httpget, context);
- final HttpEntity entity = response.getEntity();
- Assert.assertEquals(HttpStatus.SC_PROXY_AUTHENTICATION_REQUIRED,
- response.getCode());
- EntityUtils.consume(entity);
+ try (final ClassicHttpResponse response = this.httpclient.execute(target, httpget, context)) {
+ final HttpEntity entity = response.getEntity();
+ Assert.assertEquals(HttpStatus.SC_PROXY_AUTHENTICATION_REQUIRED, response.getCode());
+ EntityUtils.consume(entity);
+ }
}
@Test
@@ -592,9 +532,10 @@
for (int i = 0; i < 2; i++) {
final HttpGet httpget = new HttpGet("/");
- final ClassicHttpResponse response = this.httpclient.execute(target, httpget, context);
- EntityUtils.consume(response.getEntity());
- Assert.assertEquals(HttpStatus.SC_OK, response.getCode());
+ try (final ClassicHttpResponse response = this.httpclient.execute(target, httpget, context)) {
+ EntityUtils.consume(response.getEntity());
+ Assert.assertEquals(HttpStatus.SC_OK, response.getCode());
+ }
}
}
@@ -619,8 +560,9 @@
};
- final TestCredentialsProvider credsProvider = new TestCredentialsProvider(
- new UsernamePasswordCredentials("test", "test".toCharArray()));
+ final CredentialsProvider credsProvider = Mockito.mock(CredentialsProvider.class);
+ Mockito.when(credsProvider.getCredentials(Mockito.any(), Mockito.any()))
+ .thenReturn(new UsernamePasswordCredentials("test", "test".toCharArray()));
final RequestConfig config = RequestConfig.custom()
.setTargetPreferredAuthSchemes(Collections.singletonList("MyBasic"))
@@ -688,19 +630,20 @@
});
final HttpClientContext context = HttpClientContext.create();
- final TestCredentialsProvider credsProvider = new TestCredentialsProvider(
- new UsernamePasswordCredentials("test", "test".toCharArray()));
+ final CredentialsProvider credsProvider = Mockito.mock(CredentialsProvider.class);
+ Mockito.when(credsProvider.getCredentials(Mockito.any(), Mockito.any()))
+ .thenReturn(new UsernamePasswordCredentials("test", "test".toCharArray()));
context.setCredentialsProvider(credsProvider);
final HttpGet httpget = new HttpGet("/");
- final ClassicHttpResponse response = this.httpclient.execute(target, httpget, context);
- final HttpEntity entity = response.getEntity();
- Assert.assertEquals(HttpStatus.SC_OK, response.getCode());
- Assert.assertNotNull(entity);
- EntityUtils.consume(entity);
- final AuthScope authscope = credsProvider.getAuthScope();
- Assert.assertNotNull(authscope);
- Assert.assertEquals("test realm", authscope.getRealm());
+ try (final ClassicHttpResponse response = this.httpclient.execute(target, httpget, context)) {
+ final HttpEntity entity = response.getEntity();
+ Assert.assertEquals(HttpStatus.SC_OK, response.getCode());
+ Assert.assertNotNull(entity);
+ EntityUtils.consume(entity);
+ }
+ Mockito.verify(credsProvider).getCredentials(
+ Mockito.eq(new AuthScope(target, "test realm", "basic")), Mockito.any());
}
}