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.http.impl.classic;
28
29 import java.io.IOException;
30
31 import org.apache.hc.client5.http.classic.methods.HttpPost;
32 import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder;
33 import org.apache.hc.client5.http.io.HttpClientConnectionManager;
34 import org.apache.hc.core5.http.ClassicHttpRequest;
35 import org.apache.hc.core5.http.Header;
36 import org.apache.hc.core5.http.HttpException;
37 import org.apache.hc.core5.http.HttpResponse;
38 import org.apache.hc.core5.http.impl.bootstrap.HttpServer;
39 import org.apache.hc.core5.http.impl.bootstrap.ServerBootstrap;
40 import org.apache.hc.core5.http.io.entity.EntityUtils;
41 import org.apache.hc.core5.io.CloseMode;
42 import org.junit.jupiter.api.AfterEach;
43 import org.junit.jupiter.api.Assertions;
44 import org.junit.jupiter.api.BeforeEach;
45 import org.junit.jupiter.api.Test;
46
47 @SuppressWarnings("boxing")
48 public class TestHttpClientBuilderInterceptors {
49
50 private HttpServer localServer;
51 private String uri;
52 private CloseableHttpClient httpClient;
53
54 @BeforeEach
55 public void before() throws Exception {
56 this.localServer = ServerBootstrap.bootstrap()
57 .register("/test", (request, response, context) -> {
58 final Header testInterceptorHeader = request.getHeader("X-Test-Interceptor");
59 if (testInterceptorHeader != null) {
60 response.setHeader(testInterceptorHeader);
61 }
62 response.setCode(200);
63 }).create();
64
65 this.localServer.start();
66 uri = "http://localhost:" + this.localServer.getLocalPort() + "/test";
67 final HttpClientConnectionManager cm = PoolingHttpClientConnectionManagerBuilder.create()
68 .setMaxConnPerRoute(5)
69 .build();
70 httpClient = HttpClientBuilder.create()
71 .setConnectionManager(cm)
72 .addExecInterceptorLast("test-interceptor", (request, scope, chain) -> {
73 request.setHeader("X-Test-Interceptor", "active");
74 return chain.proceed(request, scope);
75 })
76 .build();
77 }
78
79 @AfterEach
80 public void after() throws Exception {
81 this.httpClient.close(CloseMode.IMMEDIATE);
82 this.localServer.stop();
83 }
84
85 @Test
86 public void testAddExecInterceptorLastShouldBeExecuted() throws IOException, HttpException {
87 final ClassicHttpRequest request = new HttpPost(uri);
88 final HttpResponse response = httpClient.execute(request, httpResponse -> {
89 EntityUtils.consume(httpResponse.getEntity());
90 return httpResponse;
91 });
92 Assertions.assertEquals(200, response.getCode());
93 final Header testFilterHeader = response.getHeader("X-Test-Interceptor");
94 Assertions.assertNotNull(testFilterHeader);
95 }
96
97 }