Skip to content

Commit 433981d

Browse files
update deps
1 parent 273bf65 commit 433981d

File tree

2 files changed

+69
-5
lines changed

2 files changed

+69
-5
lines changed

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,11 @@
2323
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
2424
<cucumber.jutils.version>9.24</cucumber.jutils.version>
2525
<cucumber.bom.version>7.21.1</cucumber.bom.version>
26-
<junit.bom.version>5.12.0</junit.bom.version>
26+
<junit.bom.version>5.12.1</junit.bom.version>
2727
<jackson.bom.version>2.18.3</jackson.bom.version>
2828
<guice.version>7.0.0</guice.version>
2929
<surefire.version>3.5.2</surefire.version>
30-
<http.client.version>5.3.1</http.client.version>
30+
<http.client.version>5.4.2</http.client.version>
3131
<awaitility.version>4.3.0</awaitility.version>
3232
<allure.cucumber.version>2.27.0</allure.cucumber.version>
3333
<tags>@notebook</tags>

src/main/java/com/cucumber/tutorial/context/services/api/HttpService.java

Lines changed: 67 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,17 +11,31 @@
1111
import me.tongfei.progressbar.DelegatingProgressBarConsumer;
1212
import me.tongfei.progressbar.ProgressBar;
1313
import me.tongfei.progressbar.ProgressBarBuilder;
14+
import org.apache.hc.client5.http.HttpRequestRetryStrategy;
1415
import org.apache.hc.client5.http.classic.methods.HttpUriRequestBase;
16+
import org.apache.hc.client5.http.config.ConnectionConfig;
1517
import org.apache.hc.client5.http.impl.classic.CloseableHttpClient;
1618
import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
1719
import org.apache.hc.client5.http.impl.classic.HttpClients;
20+
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager;
1821
import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder;
22+
import org.apache.hc.client5.http.ssl.ClientTlsStrategyBuilder;
1923
import org.apache.hc.client5.http.ssl.NoopHostnameVerifier;
20-
import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory;
24+
import org.apache.hc.client5.http.ssl.TlsSocketStrategy;
25+
import org.apache.hc.core5.http.HttpRequest;
26+
import org.apache.hc.core5.http.HttpResponse;
27+
import org.apache.hc.core5.http.HttpStatus;
2128
import org.apache.hc.core5.http.Method;
2229
import org.apache.hc.core5.http.ParseException;
30+
import org.apache.hc.core5.http.io.SocketConfig;
2331
import org.apache.hc.core5.http.io.entity.EntityUtils;
32+
import org.apache.hc.core5.http.protocol.HttpContext;
33+
import org.apache.hc.core5.http.ssl.TLS;
2434
import org.apache.hc.core5.net.URIBuilder;
35+
import org.apache.hc.core5.pool.PoolConcurrencyPolicy;
36+
import org.apache.hc.core5.pool.PoolReusePolicy;
37+
import org.apache.hc.core5.util.TimeValue;
38+
import org.apache.hc.core5.util.Timeout;
2539
import org.awaitility.core.ConditionTimeoutException;
2640
import org.awaitility.pollinterval.FixedPollInterval;
2741
import org.awaitility.pollinterval.PollInterval;
@@ -59,9 +73,26 @@ protected static HttpClientBuilder defaultHttpClientBuilder() {
5973
try {
6074
SSLContext ctx = SSLContext.getInstance("TLS");
6175
ctx.init(new KeyManager[0], new TrustManager[]{new DefaultTrustManager()}, new SecureRandom());
76+
PoolingHttpClientConnectionManager connectionManager = PoolingHttpClientConnectionManagerBuilder.create()
77+
.setTlsSocketStrategy((TlsSocketStrategy) ClientTlsStrategyBuilder.create()
78+
.setSslContext(ctx)
79+
.setHostnameVerifier(new NoopHostnameVerifier())
80+
.setTlsVersions(TLS.V_1_3)
81+
.build())
82+
.setDefaultSocketConfig(SocketConfig.custom().setSoTimeout(Timeout.ofSeconds(601)).build())
83+
.setPoolConcurrencyPolicy(PoolConcurrencyPolicy.STRICT)
84+
.setConnPoolPolicy(PoolReusePolicy.FIFO)
85+
.setDefaultConnectionConfig(ConnectionConfig.custom()
86+
.setSocketTimeout(Timeout.ofSeconds(601))
87+
.setConnectTimeout(Timeout.ofSeconds(601))
88+
.setTimeToLive(TimeValue.ofSeconds(601))
89+
.build())
90+
.setMaxConnPerRoute(10)
91+
.build();
92+
6293
return HttpClients.custom()
63-
.setConnectionManager(PoolingHttpClientConnectionManagerBuilder.create()
64-
.setSSLSocketFactory(new SSLConnectionSocketFactory(ctx, new NoopHostnameVerifier())).build());
94+
.setConnectionManager(connectionManager)
95+
.setRetryStrategy(new CustomRequestRetryStrategy());
6596
} catch (NoSuchAlgorithmException | KeyManagementException e) {
6697
throw new RuntimeException(e);
6798
}
@@ -232,6 +263,39 @@ private static String prettyPrint(String content) {
232263
}
233264
}
234265

266+
protected static class CustomRequestRetryStrategy implements HttpRequestRetryStrategy {
267+
private static final int MAX_RETRIES = 5;
268+
269+
@Override
270+
public boolean retryRequest(HttpRequest httpRequest, IOException e, int count, HttpContext httpContext) {
271+
if (count < MAX_RETRIES) {
272+
LOG.error("Got request error {}. Retry {}...", e.getMessage(), count);
273+
return true;
274+
}
275+
return false;
276+
}
277+
278+
@Override
279+
public boolean retryRequest(HttpResponse response, int count, HttpContext httpContext) {
280+
if (count <= MAX_RETRIES && (response.getCode() == HttpStatus.SC_GATEWAY_TIMEOUT
281+
|| response.getCode() == HttpStatus.SC_SERVICE_UNAVAILABLE)) {
282+
LOG.warn("Got {} {}. Retry {}...", response.getCode(), response.getReasonPhrase(), count);
283+
return true;
284+
}
285+
return false;
286+
}
287+
288+
@Override
289+
public TimeValue getRetryInterval(HttpResponse response, int count, HttpContext context) {
290+
return TimeValue.ofSeconds(10);
291+
}
292+
293+
@Override
294+
public TimeValue getRetryInterval(HttpRequest request, IOException e, int count, HttpContext context) {
295+
return TimeValue.ofSeconds(5);
296+
}
297+
}
298+
235299
private static class DefaultTrustManager implements X509TrustManager {
236300

237301
@Override

0 commit comments

Comments
 (0)