diff --git a/pom.xml b/pom.xml index e897920..a3214e0 100644 --- a/pom.xml +++ b/pom.xml @@ -16,8 +16,9 @@ - 11 - ${java.version} + 1.8 + ${java.version} + ${java.version} 2.35.0 1.18.1 5.9.3 @@ -97,7 +98,7 @@ ch.qos.logback logback-classic - 1.4.7 + 1.3.7 provided true diff --git a/src/test/java/org/wiremock/integrations/testcontainers/WireMockContainerExtensionTest.java b/src/test/java/org/wiremock/integrations/testcontainers/WireMockContainerExtensionTest.java index 7130817..977e17d 100644 --- a/src/test/java/org/wiremock/integrations/testcontainers/WireMockContainerExtensionTest.java +++ b/src/test/java/org/wiremock/integrations/testcontainers/WireMockContainerExtensionTest.java @@ -21,9 +21,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.testcontainers.containers.output.Slf4jLogConsumer; +import org.wiremock.integrations.testcontainers.testsupport.http.HttpResponse; import org.wiremock.integrations.testcontainers.testsupport.http.TestHttpClient; -import java.net.http.HttpResponse; import java.nio.file.Paths; import java.time.Duration; import java.util.Collections; @@ -58,10 +58,10 @@ public void testJSONBodyTransformer() throws Exception { String body = "{\"name\":\"John Doe\"}"; // when - HttpResponse response = TestHttpClient.newInstance().post(url, body); + HttpResponse response = new TestHttpClient().post(url, body); // then - assertThat(response.body()) + assertThat(response.getBody()) .as("Wrong response body") .contains("Hello, John Doe!"); } diff --git a/src/test/java/org/wiremock/integrations/testcontainers/WireMockContainerExtensionsCombinationTest.java b/src/test/java/org/wiremock/integrations/testcontainers/WireMockContainerExtensionsCombinationTest.java index 4286a8b..139b3a6 100644 --- a/src/test/java/org/wiremock/integrations/testcontainers/WireMockContainerExtensionsCombinationTest.java +++ b/src/test/java/org/wiremock/integrations/testcontainers/WireMockContainerExtensionsCombinationTest.java @@ -21,11 +21,12 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.testcontainers.containers.output.Slf4jLogConsumer; +import org.wiremock.integrations.testcontainers.testsupport.http.HttpResponse; import org.wiremock.integrations.testcontainers.testsupport.http.TestHttpClient; -import java.net.http.HttpResponse; import java.nio.file.Paths; import java.util.Collections; +import java.util.concurrent.TimeUnit; import static org.assertj.core.api.Assertions.assertThat; @@ -59,12 +60,11 @@ public void testJSONBodyTransformer() throws Exception { String body = "{\"name\":\"John Doe\"}"; // when - HttpResponse response = TestHttpClient.newInstance().post(url, body); + HttpResponse response = new TestHttpClient().post(url, body); // then - assertThat(response.body()) + assertThat(response.getBody()) .as("Wrong response body") .contains("Hello, John Doe!"); } - } diff --git a/src/test/java/org/wiremock/integrations/testcontainers/WireMockContainerExtensionsWebhookTest.java b/src/test/java/org/wiremock/integrations/testcontainers/WireMockContainerExtensionsWebhookTest.java index 032b6ce..df87e5a 100644 --- a/src/test/java/org/wiremock/integrations/testcontainers/WireMockContainerExtensionsWebhookTest.java +++ b/src/test/java/org/wiremock/integrations/testcontainers/WireMockContainerExtensionsWebhookTest.java @@ -22,10 +22,10 @@ import org.testcontainers.Testcontainers; import org.testcontainers.containers.GenericContainer; import org.testcontainers.containers.output.Slf4jLogConsumer; +import org.wiremock.integrations.testcontainers.testsupport.http.HttpResponse; import org.wiremock.integrations.testcontainers.testsupport.http.TestHttpClient; import org.wiremock.integrations.testcontainers.testsupport.http.TestHttpServer; -import java.net.http.HttpResponse; import java.nio.file.Paths; import java.time.Duration; import java.util.Collections; @@ -73,15 +73,15 @@ public void callbackUsingJsonStub() throws Exception { String applicationCallbackUrl = String.format("http://%s:%d%s", GenericContainer.INTERNAL_HOST_HOSTNAME, applicationServer.getPort(), APPLICATION_PATH); // when - HttpResponse response = TestHttpClient.newInstance().post( + HttpResponse response = new TestHttpClient().post( wiremockUrl, "{\"callbackMethod\": \"PUT\", \"callbackUrl\": \"" + applicationCallbackUrl + "\"}" ); // then assertThat(response).as("Wiremock Response").isNotNull().satisfies(it -> { - assertThat(it.statusCode()).as("Wiremock Response Status").isEqualTo(200); - assertThat(it.body()).as("Wiremock Response Body") + assertThat(it.getStatusCode()).as("Wiremock Response Status").isEqualTo(200); + assertThat(it.getBody()).as("Wiremock Response Body") .contains("Please wait callback") .contains("PUT") .contains(applicationCallbackUrl); diff --git a/src/test/java/org/wiremock/integrations/testcontainers/WireMockContainerJUnit5Test.java b/src/test/java/org/wiremock/integrations/testcontainers/WireMockContainerJUnit5Test.java index fcb24e8..1149927 100644 --- a/src/test/java/org/wiremock/integrations/testcontainers/WireMockContainerJUnit5Test.java +++ b/src/test/java/org/wiremock/integrations/testcontainers/WireMockContainerJUnit5Test.java @@ -5,10 +5,9 @@ import org.junit.jupiter.params.provider.ValueSource; import org.testcontainers.junit.jupiter.Container; import org.testcontainers.junit.jupiter.Testcontainers; +import org.wiremock.integrations.testcontainers.testsupport.http.HttpResponse; import org.wiremock.integrations.testcontainers.testsupport.http.TestHttpClient; -import java.net.http.HttpResponse; - import static org.assertj.core.api.Assertions.assertThat; @Testcontainers @@ -32,10 +31,10 @@ public void helloWorld(String path) throws Exception { String url = wiremockServer.getUrl(path); // when - HttpResponse response = TestHttpClient.newInstance().get(url); + HttpResponse response = new TestHttpClient().get(url); // then - assertThat(response.body()) + assertThat(response.getBody()) .as("Wrong response body") .contains("Hello, world!"); } @@ -46,10 +45,10 @@ public void helloWorldFromFile() throws Exception { String url = wiremockServer.getUrl("/hello-from-file"); // when - HttpResponse response = TestHttpClient.newInstance().get(url); + HttpResponse response = new TestHttpClient().get(url); // then - assertThat(response.body()) + assertThat(response.getBody()) .as("Wrong response body") .contains("Hello, world!"); } diff --git a/src/test/java/org/wiremock/integrations/testcontainers/WireMockContainerTest.java b/src/test/java/org/wiremock/integrations/testcontainers/WireMockContainerTest.java index 47f4867..b4d0bbc 100644 --- a/src/test/java/org/wiremock/integrations/testcontainers/WireMockContainerTest.java +++ b/src/test/java/org/wiremock/integrations/testcontainers/WireMockContainerTest.java @@ -17,10 +17,9 @@ import org.junit.Rule; import org.junit.Test; +import org.wiremock.integrations.testcontainers.testsupport.http.HttpResponse; import org.wiremock.integrations.testcontainers.testsupport.http.TestHttpClient; -import java.net.http.HttpResponse; - import static org.assertj.core.api.Assertions.assertThat; public class WireMockContainerTest { @@ -37,10 +36,10 @@ public void helloWorld() throws Exception { String url = wiremockServer.getUrl("/hello"); // when - HttpResponse response = TestHttpClient.newInstance().get(url); + HttpResponse response = new TestHttpClient().get(url); // then - assertThat(response.body()) + assertThat(response.getBody()) .as("Wrong response body") .contains("Hello, world!"); } @@ -51,10 +50,10 @@ public void helloWorldWithoutLeadingSlashInPath() throws Exception { String url = wiremockServer.getUrl("hello"); // when - HttpResponse response = TestHttpClient.newInstance().get(url); + HttpResponse response = new TestHttpClient().get(url); // then - assertThat(response.body()) + assertThat(response.getBody()) .as("Wrong response body") .contains("Hello, world!"); } @@ -65,10 +64,10 @@ public void helloWorldFromFile() throws Exception { String url = wiremockServer.getUrl("/hello-from-file"); // when - HttpResponse response = TestHttpClient.newInstance().get(url); + HttpResponse response = new TestHttpClient().get(url); // then - assertThat(response.body()) + assertThat(response.getBody()) .as("Wrong response body") .contains("Hello, world!"); } diff --git a/src/test/java/org/wiremock/integrations/testcontainers/testsupport/http/HttpResponse.java b/src/test/java/org/wiremock/integrations/testcontainers/testsupport/http/HttpResponse.java new file mode 100644 index 0000000..7f4ea0f --- /dev/null +++ b/src/test/java/org/wiremock/integrations/testcontainers/testsupport/http/HttpResponse.java @@ -0,0 +1,19 @@ +package org.wiremock.integrations.testcontainers.testsupport.http; + +public class HttpResponse { + + String body; + int statusCode; + public HttpResponse(String body, int statusCode) { + this.body = body; + this.statusCode = statusCode; + } + + public String getBody() { + return body; + } + + public int getStatusCode() { + return statusCode; + } +} diff --git a/src/test/java/org/wiremock/integrations/testcontainers/testsupport/http/TestHttpClient.java b/src/test/java/org/wiremock/integrations/testcontainers/testsupport/http/TestHttpClient.java index fe6a2ee..47b641b 100644 --- a/src/test/java/org/wiremock/integrations/testcontainers/testsupport/http/TestHttpClient.java +++ b/src/test/java/org/wiremock/integrations/testcontainers/testsupport/http/TestHttpClient.java @@ -1,46 +1,56 @@ package org.wiremock.integrations.testcontainers.testsupport.http; import java.io.IOException; -import java.net.URI; -import java.net.http.HttpClient; -import java.net.http.HttpRequest; -import java.net.http.HttpResponse; -import java.time.Duration; +import java.io.InputStream; +import java.io.OutputStream; +import java.io.InputStreamReader; +import java.io.BufferedReader; +import java.net.HttpURLConnection; +import java.net.URL; +import java.nio.charset.StandardCharsets; public final class TestHttpClient { - private final HttpClient client; - private TestHttpClient(HttpClient.Version version) { - client = HttpClient.newBuilder().version(version).build(); + public HttpResponse send(HttpURLConnection connection) throws IOException { + InputStream inputStream = connection.getInputStream(); + + BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream)); + StringBuilder response = new StringBuilder(); + + String line; + while ((line = reader.readLine()) != null) { + response.append(line); + } + reader.close(); + + + + return new HttpResponse(response.toString(), connection.getResponseCode()); } - public static TestHttpClient newInstance() { - return new TestHttpClient(HttpClient.Version.HTTP_1_1); - } + public HttpResponse get(String uri) throws IOException { + URL url = new URL(uri); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("GET"); - public HttpResponse send(HttpRequest request) throws IOException, InterruptedException { - return client.send(request, HttpResponse.BodyHandlers.ofString()); + return send(connection); } - public HttpResponse get(String uri) throws IOException, InterruptedException { - HttpRequest request = newRequestBuilder() - .uri(URI.create(uri)) - .GET() - .build(); - return send(request); - } - public HttpResponse post(String uri, String body) throws IOException, InterruptedException { - HttpRequest request = newRequestBuilder() - .uri(URI.create(uri)) - .header("Content-Type", "application/json") - .POST(HttpRequest.BodyPublishers.ofString(body)) - .build(); - return send(request); - } + public HttpResponse post(String uri, String body) throws IOException { + URL url = new URL(uri); + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + connection.setRequestMethod("POST"); + connection.setRequestProperty("Content-Type", "application/json"); + connection.setRequestProperty("Accept", "application/json"); + connection.setDoOutput(true); + connection.setConnectTimeout(10000); + + try (OutputStream outputStream = connection.getOutputStream()) { + byte[] input = body.getBytes(StandardCharsets.UTF_8); + outputStream.write(input, 0, input.length); + } - private static HttpRequest.Builder newRequestBuilder() { - return HttpRequest.newBuilder() - .timeout(Duration.ofSeconds(10)); + return send(connection); } } diff --git a/src/test/java/org/wiremock/integrations/testcontainers/testsupport/http/TestHttpServer.java b/src/test/java/org/wiremock/integrations/testcontainers/testsupport/http/TestHttpServer.java index e93420a..b3f1800 100644 --- a/src/test/java/org/wiremock/integrations/testcontainers/testsupport/http/TestHttpServer.java +++ b/src/test/java/org/wiremock/integrations/testcontainers/testsupport/http/TestHttpServer.java @@ -5,6 +5,7 @@ import com.sun.net.httpserver.HttpServer; import java.io.IOException; +import java.io.InputStream; import java.net.InetSocketAddress; import java.nio.charset.StandardCharsets; import java.util.ArrayList; @@ -48,10 +49,15 @@ private static final class AllRequestsRecorder implements HttpHandler { public void handle(HttpExchange exchange) throws IOException { String method = exchange.getRequestMethod(); String path = exchange.getRequestURI().getPath(); - String body = exchange.getRequestBody().available() > 0 - ? new String(exchange.getRequestBody().readAllBytes(), StandardCharsets.UTF_8) - : null; - + String body = null; + + InputStream requestBody = exchange.getRequestBody(); + if (requestBody.available() > 0) { + byte[] requestBodyBytes = new byte[requestBody.available()]; + requestBody.read(requestBodyBytes); + body = new String(requestBodyBytes, StandardCharsets.UTF_8); + } + recordedRequests.add(new RecordedRequest(method, path, body)); exchange.sendResponseHeaders(200, 0);