diff --git a/commafeed-server/src/main/java/com/commafeed/backend/HttpGetter.java b/commafeed-server/src/main/java/com/commafeed/backend/HttpGetter.java index 5862e537..c1139c29 100644 --- a/commafeed-server/src/main/java/com/commafeed/backend/HttpGetter.java +++ b/commafeed-server/src/main/java/com/commafeed/backend/HttpGetter.java @@ -101,10 +101,11 @@ public class HttpGetter { return new HttpResult(content, contentType, lastModifiedHeader, eTagHeader, duration, urlAfterRedirect); } - public static HttpClient newClient() { + private HttpClient newClient() { SSLFactory sslFactory = SSLFactory.builder().withUnsafeTrustMaterial().withUnsafeHostnameVerifier().build(); return HttpClient.newBuilder() .version(Version.HTTP_1_1) + .connectTimeout(Duration.ofSeconds(5)) .followRedirects(Redirect.ALWAYS) .sslContext(sslFactory.getSslContext()) .sslParameters(sslFactory.getSslParameters()) diff --git a/commafeed-server/src/test/java/com/commafeed/backend/HttpGetterTest.java b/commafeed-server/src/test/java/com/commafeed/backend/HttpGetterTest.java index 1b625a2d..371d5b58 100644 --- a/commafeed-server/src/test/java/com/commafeed/backend/HttpGetterTest.java +++ b/commafeed-server/src/test/java/com/commafeed/backend/HttpGetterTest.java @@ -1,6 +1,7 @@ package com.commafeed.backend; import java.io.IOException; +import java.net.http.HttpConnectTimeoutException; import java.net.http.HttpTimeoutException; import java.util.Objects; import java.util.concurrent.atomic.AtomicInteger; @@ -102,7 +103,17 @@ class HttpGetterTest { this.mockServerClient.when(HttpRequest.request().withMethod("GET")) .respond(HttpResponse.response().withDelay(Delay.milliseconds(smallTimeout * 2))); - Assertions.assertThrows(HttpTimeoutException.class, () -> getter.getBinary(this.feedUrl, smallTimeout)); + HttpTimeoutException e = Assertions.assertThrows(HttpTimeoutException.class, () -> getter.getBinary(this.feedUrl, smallTimeout)); + Assertions.assertEquals("request timed out", e.getMessage()); + } + + @Test + void connectTimeout() { + // try to connect to a non-routable address + // https://stackoverflow.com/a/904609/1885506 + HttpConnectTimeoutException e = Assertions.assertThrows(HttpConnectTimeoutException.class, + () -> getter.getBinary("http://10.255.255.1", 10000)); + Assertions.assertEquals("HTTP connect timed out", e.getMessage()); } @Test