From 9168492b7b36185a471edfe7ac1e99fe0f253f03 Mon Sep 17 00:00:00 2001 From: Krzysztof Woyke Date: Wed, 27 Nov 2019 21:50:27 +0100 Subject: [PATCH 1/3] BAEL-11410: Add timeout OkHttp live tests --- .../okhttp/OkHttpTimeoutLiveTest.java | 113 ++++++++++++++++++ 1 file changed, 113 insertions(+) create mode 100644 libraries-http/src/test/java/com/baeldung/okhttp/OkHttpTimeoutLiveTest.java diff --git a/libraries-http/src/test/java/com/baeldung/okhttp/OkHttpTimeoutLiveTest.java b/libraries-http/src/test/java/com/baeldung/okhttp/OkHttpTimeoutLiveTest.java new file mode 100644 index 0000000000..18b5cef648 --- /dev/null +++ b/libraries-http/src/test/java/com/baeldung/okhttp/OkHttpTimeoutLiveTest.java @@ -0,0 +1,113 @@ +package com.baeldung.okhttp; + +import okhttp3.MediaType; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.RequestBody; +import org.junit.Test; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.InterruptedIOException; +import java.net.SocketTimeoutException; +import java.util.concurrent.TimeUnit; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.catchThrowable; + +public class OkHttpTimeoutLiveTest { + + private static Logger logger = LoggerFactory.getLogger(OkHttpTimeoutLiveTest.class); + + private static final String HTTP_NON_ROUTABLE_ADDRESS = "http://203.0.113.1"; + private static final String HTTPS_ADDRESS_DELAY_2 = "https://httpbin.org/delay/2"; + + @Test + public void whenConnectTimeoutExceededThenSocketTimeoutException() { + // Given + final OkHttpClient client = new OkHttpClient.Builder() + .connectTimeout(10, TimeUnit.MILLISECONDS) + .build(); + + Request request = new Request.Builder() + .url(HTTP_NON_ROUTABLE_ADDRESS) + .build(); + + // When + Throwable thrown = catchThrowable(() -> client.newCall(request).execute()); + + // Then + assertThat(thrown).isInstanceOf(SocketTimeoutException.class); + + logThrown(thrown); + } + + @Test + public void whenReadTimeoutExceededThenSocketTimeoutException() { + // Given + final OkHttpClient client = new OkHttpClient.Builder() + .readTimeout(10, TimeUnit.MILLISECONDS) + .build(); + + Request request = new Request.Builder() + .url(HTTPS_ADDRESS_DELAY_2) + .build(); + + // When + Throwable thrown = catchThrowable(() -> client.newCall(request).execute()); + + // Then + assertThat(thrown).isInstanceOf(SocketTimeoutException.class); + + logThrown(thrown); + } + + @Test + public void whenWriteTimeoutExceededThenSocketTimeoutException() { + // Given + final OkHttpClient client = new OkHttpClient.Builder() + .writeTimeout(10, TimeUnit.MILLISECONDS) + .build(); + + Request request = new Request.Builder() + .url(HTTPS_ADDRESS_DELAY_2) + .post(RequestBody.create(MediaType.parse("text/plain"), create1MBString())) + .build(); + + // When + Throwable thrown = catchThrowable(() -> client.newCall(request).execute()); + + // Then + assertThat(thrown).isInstanceOf(SocketTimeoutException.class); + + logThrown(thrown); + } + + @Test + public void whenCallTimeoutExceededThenSocketTimeoutException() { + // Given + final OkHttpClient client = new OkHttpClient.Builder() + .callTimeout(1, TimeUnit.SECONDS) + .build(); + + Request request = new Request.Builder() + .url(HTTPS_ADDRESS_DELAY_2) + .build(); + + // When + Throwable thrown = catchThrowable(() -> client.newCall(request).execute()); + + // Then + assertThat(thrown).isInstanceOf(InterruptedIOException.class); + + logThrown(thrown); + } + + private void logThrown(Throwable thrown) { + logger.info("Thrown: ", thrown); + } + + private String create1MBString() { + return new String(new char[512 * 1024]); + } +} From b241ef7886b1f9b6675c52667472e006f301b93d Mon Sep 17 00:00:00 2001 From: Krzysiek Date: Wed, 27 Nov 2019 22:59:11 +0100 Subject: [PATCH 2/3] BAEL-11410: Add per request test --- .../okhttp/OkHttpTimeoutLiveTest.java | 41 +++++++++++++++---- 1 file changed, 32 insertions(+), 9 deletions(-) diff --git a/libraries-http/src/test/java/com/baeldung/okhttp/OkHttpTimeoutLiveTest.java b/libraries-http/src/test/java/com/baeldung/okhttp/OkHttpTimeoutLiveTest.java index 18b5cef648..9c798b8c2c 100644 --- a/libraries-http/src/test/java/com/baeldung/okhttp/OkHttpTimeoutLiveTest.java +++ b/libraries-http/src/test/java/com/baeldung/okhttp/OkHttpTimeoutLiveTest.java @@ -1,13 +1,11 @@ package com.baeldung.okhttp; -import okhttp3.MediaType; -import okhttp3.OkHttpClient; -import okhttp3.Request; -import okhttp3.RequestBody; +import okhttp3.*; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.io.IOException; import java.io.InterruptedIOException; import java.net.SocketTimeoutException; import java.util.concurrent.TimeUnit; @@ -25,7 +23,7 @@ public class OkHttpTimeoutLiveTest { @Test public void whenConnectTimeoutExceededThenSocketTimeoutException() { // Given - final OkHttpClient client = new OkHttpClient.Builder() + OkHttpClient client = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.MILLISECONDS) .build(); @@ -45,7 +43,7 @@ public class OkHttpTimeoutLiveTest { @Test public void whenReadTimeoutExceededThenSocketTimeoutException() { // Given - final OkHttpClient client = new OkHttpClient.Builder() + OkHttpClient client = new OkHttpClient.Builder() .readTimeout(10, TimeUnit.MILLISECONDS) .build(); @@ -65,7 +63,7 @@ public class OkHttpTimeoutLiveTest { @Test public void whenWriteTimeoutExceededThenSocketTimeoutException() { // Given - final OkHttpClient client = new OkHttpClient.Builder() + OkHttpClient client = new OkHttpClient.Builder() .writeTimeout(10, TimeUnit.MILLISECONDS) .build(); @@ -84,9 +82,9 @@ public class OkHttpTimeoutLiveTest { } @Test - public void whenCallTimeoutExceededThenSocketTimeoutException() { + public void whenCallTimeoutExceededThenInterruptedIOException() { // Given - final OkHttpClient client = new OkHttpClient.Builder() + OkHttpClient client = new OkHttpClient.Builder() .callTimeout(1, TimeUnit.SECONDS) .build(); @@ -103,6 +101,31 @@ public class OkHttpTimeoutLiveTest { logThrown(thrown); } + @Test + public void whenPerRequestTimeoutExtendedThenResponseSuccess() throws IOException { + // Given + OkHttpClient defaultClient = new OkHttpClient.Builder() + .readTimeout(1, TimeUnit.SECONDS) + .build(); + + Request request = new Request.Builder() + .url(HTTPS_ADDRESS_DELAY_2) + .build(); + + Throwable thrown = catchThrowable(() -> defaultClient.newCall(request).execute()); + + assertThat(thrown).isInstanceOf(InterruptedIOException.class); + + // When + OkHttpClient extendedTimeoutClient = defaultClient.newBuilder() + .readTimeout(5, TimeUnit.SECONDS) + .build(); + + // Then + Response response = extendedTimeoutClient.newCall(request).execute(); + assertThat(response.code()).isEqualTo(200); + } + private void logThrown(Throwable thrown) { logger.info("Thrown: ", thrown); } From f3a28a752ba9ea794ade2cac72e61a0ee72722c1 Mon Sep 17 00:00:00 2001 From: Krzysiek Date: Thu, 28 Nov 2019 21:56:18 +0100 Subject: [PATCH 3/3] BAEL-11410: Move OkHttpTimeoutLiveTest to com.baeldung.okhttp.timeout --- .../baeldung/okhttp/{ => timeout}/OkHttpTimeoutLiveTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename libraries-http/src/test/java/com/baeldung/okhttp/{ => timeout}/OkHttpTimeoutLiveTest.java (99%) diff --git a/libraries-http/src/test/java/com/baeldung/okhttp/OkHttpTimeoutLiveTest.java b/libraries-http/src/test/java/com/baeldung/okhttp/timeout/OkHttpTimeoutLiveTest.java similarity index 99% rename from libraries-http/src/test/java/com/baeldung/okhttp/OkHttpTimeoutLiveTest.java rename to libraries-http/src/test/java/com/baeldung/okhttp/timeout/OkHttpTimeoutLiveTest.java index 9c798b8c2c..6f8b749869 100644 --- a/libraries-http/src/test/java/com/baeldung/okhttp/OkHttpTimeoutLiveTest.java +++ b/libraries-http/src/test/java/com/baeldung/okhttp/timeout/OkHttpTimeoutLiveTest.java @@ -1,4 +1,4 @@ -package com.baeldung.okhttp; +package com.baeldung.okhttp.timeout; import okhttp3.*; import org.junit.Test;