1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package org.apache.hc.client5.testing.async;
28
29 import java.util.concurrent.Future;
30
31 import org.apache.hc.client5.http.async.methods.SimpleHttpRequest;
32 import org.apache.hc.client5.http.async.methods.SimpleHttpResponse;
33 import org.apache.hc.client5.http.async.methods.SimpleRequestBuilder;
34 import org.apache.hc.client5.http.auth.AuthScope;
35 import org.apache.hc.client5.http.auth.CredentialsProvider;
36 import org.apache.hc.client5.http.auth.UsernamePasswordCredentials;
37 import org.apache.hc.client5.http.protocol.HttpClientContext;
38 import org.apache.hc.client5.testing.BasicTestAuthenticator;
39 import org.apache.hc.client5.testing.extension.async.ClientProtocolLevel;
40 import org.apache.hc.client5.testing.extension.async.ServerProtocolLevel;
41 import org.apache.hc.client5.testing.extension.async.TestAsyncClient;
42 import org.apache.hc.core5.http.HeaderElements;
43 import org.apache.hc.core5.http.HttpHeaders;
44 import org.apache.hc.core5.http.HttpHost;
45 import org.apache.hc.core5.http.HttpResponse;
46 import org.apache.hc.core5.http.HttpStatus;
47 import org.apache.hc.core5.http.URIScheme;
48 import org.junit.jupiter.api.Assertions;
49 import org.junit.jupiter.api.Test;
50 import org.mockito.Mockito;
51
52 abstract class TestHttp1ClientAuthentication extends AbstractHttpAsyncClientAuthenticationTest {
53
54 public TestHttp1ClientAuthentication(final URIScheme scheme) {
55 super(scheme, ClientProtocolLevel.STANDARD, ServerProtocolLevel.STANDARD);
56 }
57
58 @Test
59 void testBasicAuthenticationSuccessNonPersistentConnection() throws Exception {
60 configureServer(bootstrap -> bootstrap
61 .register("*", AsyncEchoHandler::new)
62 .setExchangeHandlerDecorator(exchangeHandler ->
63 new AuthenticatingAsyncDecorator(exchangeHandler, new BasicTestAuthenticator("test:test", "test realm")) {
64
65 @Override
66 protected void customizeUnauthorizedResponse(final HttpResponse unauthorized) {
67 unauthorized.addHeader(HttpHeaders.CONNECTION, HeaderElements.CLOSE);
68 }
69 }));
70 final HttpHost target = startServer();
71
72 final TestAsyncClient client = startClient();
73
74 final CredentialsProvider credsProvider = Mockito.mock(CredentialsProvider.class);
75 Mockito.when(credsProvider.getCredentials(Mockito.any(), Mockito.any()))
76 .thenReturn(new UsernamePasswordCredentials("test", "test".toCharArray()));
77 final HttpClientContext context = HttpClientContext.create();
78 context.setCredentialsProvider(credsProvider);
79
80 final SimpleHttpRequest request = SimpleRequestBuilder.get()
81 .setHttpHost(target)
82 .setPath("/")
83 .build();
84 final Future<SimpleHttpResponse> future = client.execute(request, context, null);
85 final HttpResponse response = future.get();
86
87 Assertions.assertNotNull(response);
88 Assertions.assertEquals(HttpStatus.SC_OK, response.getCode());
89 Mockito.verify(credsProvider).getCredentials(
90 Mockito.eq(new AuthScope(target, "test realm", "basic")), Mockito.any());
91 }
92
93 }