diff --git a/pom.xml b/pom.xml index bf2b891a..a6abd115 100644 --- a/pom.xml +++ b/pom.xml @@ -297,8 +297,8 @@ com.squareup.okhttp3 - mockwebserver - 4.12.0 + mockwebserver3-junit5 + 5.1.0 test diff --git a/src/test/java/com/influxdb/v3/client/AbstractMockServerTest.java b/src/test/java/com/influxdb/v3/client/AbstractMockServerTest.java index 66f98a2d..44b05560 100644 --- a/src/test/java/com/influxdb/v3/client/AbstractMockServerTest.java +++ b/src/test/java/com/influxdb/v3/client/AbstractMockServerTest.java @@ -22,11 +22,13 @@ package com.influxdb.v3.client; import java.io.IOException; +import java.util.HashMap; import java.util.Map; import javax.annotation.Nonnull; +import javax.annotation.Nullable; -import okhttp3.mockwebserver.MockResponse; -import okhttp3.mockwebserver.MockWebServer; +import mockwebserver3.MockResponse; +import mockwebserver3.MockWebServer; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; @@ -50,32 +52,42 @@ protected void startMockServer() { @AfterEach protected void shutdownMockServer() throws IOException { - mockServer.shutdown(); + mockServer.close(); } @Nonnull protected MockResponse createEmptyResponse(final int responseCode) { - return new MockResponse().setResponseCode(responseCode); + return new MockResponse.Builder().code(responseCode).build(); } @Nonnull - protected MockResponse createResponse(final int responseCode) { + protected MockResponse createResponse(final int responseCode, + @Nullable final Map headers, + @Nullable final String body) { + + MockResponse.Builder mrb = new MockResponse.Builder(); + mrb.code(responseCode); + Map effectiveHeaders = new HashMap<>(Map.of("Content-Type", "text/csv; charset=utf-8", + "Date", "Tue, 26 Jun 2018 13:15:01 GMT")); + if (headers != null) { + effectiveHeaders.putAll(headers); + } + for (Map.Entry entry : effectiveHeaders.entrySet()) { + mrb.addHeader(entry.getKey(), entry.getValue()); + } + if (body != null) { + mrb.body(body); + } - return createResponseWithHeaders(responseCode, Map.of( - "Content-Type", "text/csv; charset=utf-8", - "Date", "Tue, 26 Jun 2018 13:15:01 GMT" - )); + return mrb.build(); } @Nonnull - protected MockResponse createResponseWithHeaders(final int responseCode, final Map headers) { - - final MockResponse response = new MockResponse() - .setResponseCode(responseCode); - for (Map.Entry entry : headers.entrySet()) { - response.addHeader(entry.getKey(), entry.getValue()); - } + protected MockResponse createResponse(final int responseCode) { - return response; + return createResponse(responseCode, Map.of( + "Content-Type", "text/csv; charset=utf-8", + "Date", "Tue, 26 Jun 2018 13:15:01 GMT" + ), null); } } diff --git a/src/test/java/com/influxdb/v3/client/InfluxDBClientWriteTest.java b/src/test/java/com/influxdb/v3/client/InfluxDBClientWriteTest.java index 49e513da..5164c3a2 100644 --- a/src/test/java/com/influxdb/v3/client/InfluxDBClientWriteTest.java +++ b/src/test/java/com/influxdb/v3/client/InfluxDBClientWriteTest.java @@ -27,8 +27,8 @@ import java.util.Map; import io.netty.handler.codec.http.HttpResponseStatus; +import mockwebserver3.RecordedRequest; import okhttp3.HttpUrl; -import okhttp3.mockwebserver.RecordedRequest; import org.assertj.core.api.Assertions; import org.jetbrains.annotations.NotNull; import org.junit.jupiter.api.AfterEach; @@ -103,8 +103,8 @@ void databaseParameter() throws InterruptedException { assertThat(mockServer.getRequestCount()).isEqualTo(1); RecordedRequest request = mockServer.takeRequest(); assertThat(request).isNotNull(); - assertThat(request.getRequestUrl()).isNotNull(); - assertThat(request.getRequestUrl().queryParameter("bucket")).isEqualTo("my-database"); + assertThat(request.getUrl()).isNotNull(); + assertThat(request.getUrl().queryParameter("bucket")).isEqualTo("my-database"); } @Test @@ -116,8 +116,8 @@ void databaseParameterSpecified() throws InterruptedException { assertThat(mockServer.getRequestCount()).isEqualTo(1); RecordedRequest request = mockServer.takeRequest(); assertThat(request).isNotNull(); - assertThat(request.getRequestUrl()).isNotNull(); - assertThat(request.getRequestUrl().queryParameter("bucket")).isEqualTo("my-database-2"); + assertThat(request.getUrl()).isNotNull(); + assertThat(request.getUrl().queryParameter("bucket")).isEqualTo("my-database-2"); } @Test @@ -144,8 +144,8 @@ void precisionParameter() throws InterruptedException { assertThat(mockServer.getRequestCount()).isEqualTo(1); RecordedRequest request = mockServer.takeRequest(); assertThat(request).isNotNull(); - assertThat(request.getRequestUrl()).isNotNull(); - assertThat(request.getRequestUrl().queryParameter("precision")).isEqualTo("ns"); + assertThat(request.getUrl()).isNotNull(); + assertThat(request.getUrl().queryParameter("precision")).isEqualTo("ns"); } @Test @@ -157,8 +157,8 @@ void precisionParameterSpecified() throws InterruptedException { assertThat(mockServer.getRequestCount()).isEqualTo(1); RecordedRequest request = mockServer.takeRequest(); assertThat(request).isNotNull(); - assertThat(request.getRequestUrl()).isNotNull(); - assertThat(request.getRequestUrl().queryParameter("precision")).isEqualTo("s"); + assertThat(request.getUrl()).isNotNull(); + assertThat(request.getUrl().queryParameter("precision")).isEqualTo("s"); } @Test @@ -170,9 +170,9 @@ void gzipParameter() throws InterruptedException { assertThat(mockServer.getRequestCount()).isEqualTo(1); RecordedRequest request = mockServer.takeRequest(); assertThat(request).isNotNull(); - assertThat(request.getRequestUrl()).isNotNull(); - assertThat(request.getHeader("Content-Type")).isEqualTo("text/plain; charset=utf-8"); - assertThat(request.getHeader("Content-Encoding")).isNotEqualTo("gzip"); + assertThat(request.getUrl()).isNotNull(); + assertThat(request.getHeaders().get("Content-Type")).isEqualTo("text/plain; charset=utf-8"); + assertThat(request.getHeaders().get("Content-Encoding")).isNotEqualTo("gzip"); } @Test @@ -184,9 +184,9 @@ void gzipParameterSpecified() throws InterruptedException { assertThat(mockServer.getRequestCount()).isEqualTo(1); RecordedRequest request = mockServer.takeRequest(); assertThat(request).isNotNull(); - assertThat(request.getRequestUrl()).isNotNull(); - assertThat(request.getHeader("Content-Type")).isEqualTo("text/plain; charset=utf-8"); - assertThat(request.getHeader("Content-Encoding")).isEqualTo("gzip"); + assertThat(request.getUrl()).isNotNull(); + assertThat(request.getHeaders().get("Content-Type")).isEqualTo("text/plain; charset=utf-8"); + assertThat(request.getHeaders().get("Content-Encoding")).isEqualTo("gzip"); } @Test @@ -199,10 +199,10 @@ void writeNoSyncFalseUsesV2API() throws InterruptedException { assertThat(mockServer.getRequestCount()).isEqualTo(1); RecordedRequest request = mockServer.takeRequest(); assertThat(request).isNotNull(); - assertThat(request.getRequestUrl()).isNotNull(); - assertThat(request.getRequestUrl().encodedPath()).isEqualTo("/api/v2/write"); - assertThat(request.getRequestUrl().queryParameter("no_sync")).isNull(); - assertThat(request.getRequestUrl().queryParameter("precision")).isEqualTo("ns"); + assertThat(request.getUrl()).isNotNull(); + assertThat(request.getUrl().encodedPath()).isEqualTo("/api/v2/write"); + assertThat(request.getUrl().queryParameter("no_sync")).isNull(); + assertThat(request.getUrl().queryParameter("precision")).isEqualTo("ns"); } @@ -216,10 +216,10 @@ void writeNoSyncTrueUsesV3API() throws InterruptedException { assertThat(mockServer.getRequestCount()).isEqualTo(1); RecordedRequest request = mockServer.takeRequest(); assertThat(request).isNotNull(); - assertThat(request.getRequestUrl()).isNotNull(); - assertThat(request.getRequestUrl().encodedPath()).isEqualTo("/api/v3/write_lp"); - assertThat(request.getRequestUrl().queryParameter("no_sync")).isEqualTo("true"); - assertThat(request.getRequestUrl().queryParameter("precision")).isEqualTo("nanosecond"); + assertThat(request.getUrl()).isNotNull(); + assertThat(request.getUrl().encodedPath()).isEqualTo("/api/v3/write_lp"); + assertThat(request.getUrl().queryParameter("no_sync")).isEqualTo("true"); + assertThat(request.getUrl().queryParameter("precision")).isEqualTo("nanosecond"); } @Test @@ -234,10 +234,10 @@ void writeNoSyncTrueOnV2ServerThrowsException() throws InterruptedException { assertThat(mockServer.getRequestCount()).isEqualTo(1); RecordedRequest request = mockServer.takeRequest(); assertThat(request).isNotNull(); - assertThat(request.getRequestUrl()).isNotNull(); - assertThat(request.getRequestUrl().encodedPath()).isEqualTo("/api/v3/write_lp"); - assertThat(request.getRequestUrl().queryParameter("no_sync")).isEqualTo("true"); - assertThat(request.getRequestUrl().queryParameter("precision")).isEqualTo("millisecond"); + assertThat(request.getUrl()).isNotNull(); + assertThat(request.getUrl().encodedPath()).isEqualTo("/api/v3/write_lp"); + assertThat(request.getUrl().queryParameter("no_sync")).isEqualTo("true"); + assertThat(request.getUrl().queryParameter("precision")).isEqualTo("millisecond"); assertThat(ae.statusCode()).isEqualTo(HttpResponseStatus.METHOD_NOT_ALLOWED.code()); assertThat(ae.getMessage()).contains("Server doesn't support write with NoSync=true" @@ -376,7 +376,7 @@ private void checkWriteCalled(final String expectedPath, final String expectedDB final String expectedPrecision, final boolean expectedNoSync, final boolean expectedGzip) throws InterruptedException { RecordedRequest request = assertThatServerRequested(); - HttpUrl requestUrl = request.getRequestUrl(); + HttpUrl requestUrl = request.getUrl(); assertThat(requestUrl).isNotNull(); assertThat(requestUrl.encodedPath()).isEqualTo(expectedPath); if (expectedNoSync) { @@ -391,9 +391,9 @@ private void checkWriteCalled(final String expectedPath, final String expectedDB assertThat(requestUrl.queryParameter("no_sync")).isNull(); } if (expectedGzip) { - assertThat(request.getHeader("Content-Encoding")).isEqualTo("gzip"); + assertThat(request.getHeaders().get("Content-Encoding")).isEqualTo("gzip"); } else { - assertThat(request.getHeader("Content-Encoding")).isNull(); + assertThat(request.getHeaders().get("Content-Encoding")).isNull(); } } @@ -415,11 +415,11 @@ void allParameterSpecified() throws InterruptedException { assertThat(mockServer.getRequestCount()).isEqualTo(1); RecordedRequest request = mockServer.takeRequest(); assertThat(request).isNotNull(); - assertThat(request.getRequestUrl()).isNotNull(); - assertThat(request.getHeader("Content-Type")).isEqualTo("text/plain; charset=utf-8"); - assertThat(request.getHeader("Content-Encoding")).isEqualTo("gzip"); - assertThat(request.getRequestUrl().queryParameter("precision")).isEqualTo("s"); - assertThat(request.getRequestUrl().queryParameter("bucket")).isEqualTo("your-database"); + assertThat(request.getUrl()).isNotNull(); + assertThat(request.getHeaders().get("Content-Type")).isEqualTo("text/plain; charset=utf-8"); + assertThat(request.getHeaders().get("Content-Encoding")).isEqualTo("gzip"); + assertThat(request.getUrl().queryParameter("precision")).isEqualTo("s"); + assertThat(request.getUrl().queryParameter("bucket")).isEqualTo("your-database"); } @Test @@ -431,8 +431,8 @@ void contentHeaders() throws InterruptedException { assertThat(mockServer.getRequestCount()).isEqualTo(1); RecordedRequest request = mockServer.takeRequest(); assertThat(request).isNotNull(); - assertThat(request.getHeader("Content-Type")).isEqualTo("text/plain; charset=utf-8"); - assertThat(request.getHeader("Content-Encoding")).isNull(); + assertThat(request.getHeaders().get("Content-Type")).isEqualTo("text/plain; charset=utf-8"); + assertThat(request.getHeaders().get("Content-Encoding")).isNull(); } @Test @@ -444,7 +444,10 @@ void bodyRecord() throws InterruptedException { assertThat(mockServer.getRequestCount()).isEqualTo(1); RecordedRequest request = mockServer.takeRequest(); assertThat(request).isNotNull(); - assertThat(request.getBody().readUtf8()).isEqualTo("mem,tag=one value=1.0"); +// assertThat(request.getBody().readUtf8()).isEqualTo("mem,tag=one value=1.0"); +// assertThat(request.getBody().getUtf8$okio()).isEqualTo("mem,tag=one value=1.0"); + assertThat(request.getBody().utf8()).isEqualTo("mem,tag=one value=1.0"); + } @Test @@ -460,7 +463,8 @@ void bodyPoint() throws InterruptedException { assertThat(mockServer.getRequestCount()).isEqualTo(1); RecordedRequest request = mockServer.takeRequest(); assertThat(request).isNotNull(); - assertThat(request.getBody().readUtf8()).isEqualTo("mem,tag=one value=1.0"); + // assertThat(request.getBody().readUtf8()).isEqualTo("mem,tag=one value=1.0"); + assertThat(request.getBody().utf8()).isEqualTo("mem,tag=one value=1.0"); } @Test @@ -480,7 +484,8 @@ void bodyConcat() throws InterruptedException { assertThat(mockServer.getRequestCount()).isEqualTo(1); RecordedRequest request = mockServer.takeRequest(); assertThat(request).isNotNull(); - assertThat(request.getBody().readUtf8()).isEqualTo("mem,tag=one value=1.0\ncpu,tag=two value=2.0"); + // assertThat(request.getBody().readUtf8()).isEqualTo("mem,tag=one value=1.0\ncpu,tag=two value=2.0"); + assertThat(request.getBody().utf8()).isEqualTo("mem,tag=one value=1.0\ncpu,tag=two value=2.0"); } @@ -502,17 +507,16 @@ void defaultTags() throws InterruptedException { RecordedRequest request = mockServer.takeRequest(); assertThat(request).isNotNull(); - assertThat(request.getBody().readUtf8()).isEqualTo("mem,model=M5,tag=one,unit=U2 value=1.0"); + // assertThat(request.getBody().readUtf8()).isEqualTo("mem,model=M5,tag=one,unit=U2 value=1.0"); + assertThat(request.getBody().utf8()).isEqualTo("mem,model=M5,tag=one,unit=U2 value=1.0"); } @Test public void retryHandled429Test() { - mockServer.enqueue(createResponse(429) - .setBody("{ \"message\" : \"Too Many Requests\" }") - .setHeader("retry-after", "42") - .setHeader("content-type", "application/json") - ); + mockServer.enqueue(createResponse(429, + Map.of("retry-after", "42", "content-type", "application/json"), + "{ \"message\" : \"Too Many Requests\" }")); Point point = Point.measurement("mem") .setTag("tag", "one") diff --git a/src/test/java/com/influxdb/v3/client/internal/RestClientTest.java b/src/test/java/com/influxdb/v3/client/internal/RestClientTest.java index ab927888..10cbd110 100644 --- a/src/test/java/com/influxdb/v3/client/internal/RestClientTest.java +++ b/src/test/java/com/influxdb/v3/client/internal/RestClientTest.java @@ -36,8 +36,9 @@ import java.util.Optional; import io.netty.handler.codec.http.HttpMethod; -import okhttp3.mockwebserver.MockResponse; -import okhttp3.mockwebserver.RecordedRequest; +import mockwebserver3.MockResponse; +import mockwebserver3.RecordedRequest; +import okhttp3.Headers; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; @@ -114,7 +115,7 @@ public void authenticationHeader() throws InterruptedException { RecordedRequest recordedRequest = mockServer.takeRequest(); - String authorization = recordedRequest.getHeader("Authorization"); + String authorization = recordedRequest.getHeaders().get("Authorization"); Assertions.assertThat(authorization).isEqualTo("Token my-token"); } @@ -132,7 +133,7 @@ public void authenticationHeaderCustomAuthScheme() throws InterruptedException { RecordedRequest recordedRequest = mockServer.takeRequest(); - String authorization = recordedRequest.getHeader("Authorization"); + String authorization = recordedRequest.getHeaders().get("Authorization"); Assertions.assertThat(authorization).isEqualTo("my-auth-scheme my-token"); } @@ -148,7 +149,7 @@ public void authenticationHeaderNotDefined() throws InterruptedException { RecordedRequest recordedRequest = mockServer.takeRequest(); - String authorization = recordedRequest.getHeader("Authorization"); + String authorization = recordedRequest.getHeaders().get("Authorization"); Assertions.assertThat(authorization).isNull(); } @@ -164,7 +165,7 @@ public void userAgent() throws InterruptedException { RecordedRequest recordedRequest = mockServer.takeRequest(); - String userAgent = recordedRequest.getHeader("User-Agent"); + String userAgent = recordedRequest.getHeaders().get("User-Agent"); Assertions.assertThat(userAgent).startsWith("influxdb3-java/"); } @@ -182,7 +183,7 @@ public void customHeader() throws InterruptedException { RecordedRequest recordedRequest = mockServer.takeRequest(); - String authorization = recordedRequest.getHeader("X-device"); + String authorization = recordedRequest.getHeaders().get("X-device"); Assertions.assertThat(authorization).isEqualTo("ab-01"); } @@ -200,9 +201,9 @@ public void customHeaderRequest() throws InterruptedException { RecordedRequest recordedRequest = mockServer.takeRequest(); - String header = recordedRequest.getHeader("X-device"); + String header = recordedRequest.getHeaders().get("X-device"); Assertions.assertThat(header).isEqualTo("ab-01"); - header = recordedRequest.getHeader("X-Request-Trace-Id"); + header = recordedRequest.getHeaders().get("X-Request-Trace-Id"); Assertions.assertThat(header).isEqualTo("123"); } @@ -220,7 +221,7 @@ public void useCustomHeaderFromRequest() throws InterruptedException { RecordedRequest recordedRequest = mockServer.takeRequest(); - String header = recordedRequest.getHeader("X-device"); + String header = recordedRequest.getHeaders().get("X-device"); Assertions.assertThat(header).isEqualTo("ab-02"); } @@ -243,7 +244,7 @@ public void useParamsFromWriteConfig() throws Exception { RecordedRequest recordedRequest = mockServer.takeRequest(); - String header = recordedRequest.getHeader("X-Tracing-Id"); + String header = recordedRequest.getHeaders().get("X-Tracing-Id"); Assertions.assertThat(header).isEqualTo("852"); } @@ -259,8 +260,8 @@ public void uri() throws InterruptedException { RecordedRequest recordedRequest = mockServer.takeRequest(); - Assertions.assertThat(recordedRequest.getRequestUrl()).isNotNull(); - Assertions.assertThat(recordedRequest.getRequestUrl().toString()).isEqualTo(baseURL + "ping"); + Assertions.assertThat(recordedRequest.getUrl()).isNotNull(); + Assertions.assertThat(recordedRequest.getUrl().toString()).isEqualTo(baseURL + "ping"); } @Test @@ -280,18 +281,23 @@ public void proxy() throws InterruptedException { restClient = new RestClient(new ClientConfig.Builder() .host("http://foo.com:8086") - .proxy(ProxySelector.of((InetSocketAddress) mockServer.toProxyAddress().address())) + .proxy(ProxySelector.of((InetSocketAddress) mockServer.getProxyAddress().address())) .build()); restClient.request("ping", HttpMethod.GET, null, null, null); RecordedRequest recordedRequest = mockServer.takeRequest(); - Assertions.assertThat(recordedRequest.getRequestUrl()).isNotNull(); - Assertions.assertThat(recordedRequest.getRequestUrl().toString()).isEqualTo(baseURL); // server is used as proxy - Assertions.assertThat(recordedRequest.getRequestLine()).isEqualTo("GET http://foo.com:8086/ping HTTP/1.1"); + Assertions.assertThat(recordedRequest.getUrl()).isNotNull(); + // with mockwebserver3 getUrl() returns target URL not proxy URL + // successful return implies proxy was used correctly. + Assertions.assertThat(recordedRequest.getUrl().toString()) + .isEqualTo("http://foo.com:8086/ping"); // server is used as proxy + Assertions.assertThat(recordedRequest.getRequestLine()) + .isEqualTo("GET http://foo.com:8086/ping HTTP/1.1"); } + @Test public void proxyUrl() throws InterruptedException { mockServer.enqueue(createResponse(200)); @@ -305,14 +311,19 @@ public void proxyUrl() throws InterruptedException { RecordedRequest recordedRequest = mockServer.takeRequest(); - Assertions.assertThat(recordedRequest.getRequestUrl()).isNotNull(); - Assertions.assertThat(recordedRequest.getRequestUrl().toString()).isEqualTo(baseURL); // server is used as proxy - Assertions.assertThat(recordedRequest.getRequestLine()).isEqualTo("GET http://foo.com:8086/ping HTTP/1.1"); + Assertions.assertThat(recordedRequest.getUrl()).isNotNull(); + // with mockwebserver3 getUrl() returns target URL not proxy URL + // successful return implies proxy was used correctly. + Assertions.assertThat(recordedRequest.getUrl().toString()) + .isEqualTo("http://foo.com:8086/ping"); // server is used as proxy + Assertions.assertThat(recordedRequest.getRequestLine()) + .isEqualTo("GET http://foo.com:8086/ping HTTP/1.1"); } + @Test public void proxyWithAuthentication() throws InterruptedException { - mockServer.enqueue(createResponseWithHeaders(407, Map.of("Proxy-Authenticate", "Basic"))); + mockServer.enqueue(createResponse(407, Map.of("Proxy-Authenticate", "Basic"), null)); mockServer.enqueue(createResponse(200)); restClient = new RestClient(new ClientConfig.Builder() @@ -331,12 +342,14 @@ protected PasswordAuthentication getPasswordAuthentication() { RecordedRequest recordedRequest = mockServer.takeRequest(); RecordedRequest proxyAuthRequest = mockServer.takeRequest(); - Assertions.assertThat(recordedRequest.getRequestUrl()).isNotNull(); - Assertions.assertThat(recordedRequest.getRequestUrl().toString()).isEqualTo(baseURL); // server is used as proxy + Assertions.assertThat(recordedRequest.getUrl()).isNotNull(); + // with mockwebserver3 getUrl() returns target URL not proxy URL + // successful return implies proxy was used correctly. + Assertions.assertThat(recordedRequest.getUrl().toString()).isEqualTo("http://foo.com:8086/ping"); Assertions.assertThat(recordedRequest.getRequestLine()).isEqualTo("GET http://foo.com:8086/ping HTTP/1.1"); Assertions.assertThat(mockServer.getRequestCount()).isEqualTo(2); - String proxyAuthorization = proxyAuthRequest.getHeader("Proxy-Authorization"); + String proxyAuthorization = proxyAuthRequest.getHeaders().get("Proxy-Authorization"); Assertions.assertThat(proxyAuthorization) .isEqualTo("Basic " + Base64.getEncoder().encodeToString("john:secret".getBytes())); } @@ -357,7 +370,8 @@ public void error() { @Test public void errorFromHeader() { - mockServer.enqueue(createResponse(500).setHeader("X-Influx-Error", "not used")); + + mockServer.enqueue(createResponse(500, Map.of("X-Influx-Error", "not used"), null)); restClient = new RestClient(new ClientConfig.Builder() .host(baseURL) @@ -371,61 +385,70 @@ public void errorFromHeader() { @Test public void errorFromBody() { - mockServer.enqueue(createResponse(401) - .setHeader("X-Influx-Error", "not used") - .setBody("{\"message\":\"token does not have sufficient permissions\"}")); - restClient = new RestClient(new ClientConfig.Builder() - .host(baseURL) - .build()); + mockServer.enqueue(createResponse(401, + Map.of("X-Influx-Errpr", "not used"), + "{\"message\":\"token does not have sufficient permissions\"}")); - Assertions.assertThatThrownBy( - () -> restClient.request("ping", HttpMethod.GET, null, null, null)) - .isInstanceOf(InfluxDBApiException.class) - .hasMessage("HTTP status code: 401; Message: token does not have sufficient permissions"); + restClient = new RestClient(new ClientConfig.Builder() + .host(baseURL) + .build()); + + Assertions.assertThatThrownBy( + () -> restClient.request("ping", HttpMethod.GET, null, null, null) + ) + .isInstanceOf(InfluxDBApiException.class) + .hasMessage("HTTP status code: 401; Message: token does not have sufficient permissions"); } @Test public void errorFromBodyEdgeWithoutMessage() { // OSS/Edge error message - mockServer.enqueue(createResponse(400) - .setBody("{\"error\":\"parsing failed\"}")); - restClient = new RestClient(new ClientConfig.Builder() + mockServer.enqueue(createResponse(400, + null, + "{\"error\":\"parsing failed\"}")); + + restClient = new RestClient(new ClientConfig.Builder() .host(baseURL) .build()); - Assertions.assertThatThrownBy( - () -> restClient.request("ping", HttpMethod.GET, null, null, null)) - .isInstanceOf(InfluxDBApiException.class) - .hasMessage("HTTP status code: 400; Message: parsing failed"); + Assertions.assertThatThrownBy( + () -> restClient.request("ping", HttpMethod.GET, null, null, null) + ) + .isInstanceOf(InfluxDBApiException.class) + .hasMessage("HTTP status code: 400; Message: parsing failed"); } @Test public void errorFromBodyEdgeWithMessage() { // OSS/Edge specific error message - mockServer.enqueue(createResponse(400) - .setBody("{\"error\":\"parsing failed\",\"data\":{\"error_message\":\"invalid field value\"}}")); - restClient = new RestClient(new ClientConfig.Builder() - .host(baseURL) - .build()); + mockServer.enqueue(createResponse(400, + null, + "{\"error\":\"parsing failed\",\"data\":{\"error_message\":\"invalid field value\"}}")); - Assertions.assertThatThrownBy( - () -> restClient.request("ping", HttpMethod.GET, null, null, null)) - .isInstanceOf(InfluxDBApiException.class) - .hasMessage("HTTP status code: 400; Message: invalid field value"); + restClient = new RestClient(new ClientConfig.Builder() + .host(baseURL) + .build()); + + Assertions.assertThatThrownBy( + () -> restClient.request("ping", HttpMethod.GET, null, null, null) + ) + .isInstanceOf(InfluxDBApiException.class) + .hasMessage("HTTP status code: 400; Message: invalid field value"); } @Test public void errorFromBodyText() { - mockServer.enqueue(createResponse(402) - .setBody("token is over the limit")); - restClient = new RestClient(new ClientConfig.Builder() - .host(baseURL) - .build()); + mockServer.enqueue(createResponse(402, null, "token is over the limit")); - Assertions.assertThatThrownBy( - () -> restClient.request("ping", HttpMethod.GET, null, null, null)) + restClient = new RestClient(new ClientConfig.Builder() + .host(baseURL) + .build()); + + Assertions.assertThatThrownBy( + () -> restClient.request("ping", HttpMethod.GET, null, null, null) + ) .isInstanceOf(InfluxDBApiException.class) .hasMessage("HTTP status code: 402; Message: token is over the limit"); } @@ -450,13 +473,11 @@ public void generateHttpException() { public void errorHttpExceptionThrown() { String retryDate = Instant.now().plus(300, ChronoUnit.SECONDS).toString(); - mockServer.enqueue(createResponse(503) - .setHeader("retry-after", retryDate) - .setHeader("content-type", "application/json") - .setBody("{\"message\":\"temporarily offline\"}") - ); + mockServer.enqueue(createResponse(503, + Map.of("retry-after", retryDate, "content-type", "application/json"), + "{\"message\":\"temporarily offline\"}")); - restClient = new RestClient(new ClientConfig.Builder() + restClient = new RestClient(new ClientConfig.Builder() .host(baseURL) .build()); @@ -481,7 +502,9 @@ public void errorHttpExceptionThrown() { @Test public void getServerVersionV2Successful() throws Exception { String influxDBVersion = "v2.1.0"; - mockServer.enqueue(createResponse(200).setHeader("x-influxdb-version", influxDBVersion)); + mockServer.enqueue(createResponse(200, + Map.of("x-influxdb-version", influxDBVersion), + null)); restClient = new RestClient(new ClientConfig.Builder() .host(baseURL) @@ -494,7 +517,9 @@ public void getServerVersionV2Successful() throws Exception { @Test public void getServerVersionV3Successful() throws Exception { String influxDBVersion = "3.0.0"; - mockServer.enqueue(createResponse(200).setBody("{\"version\":\"" + influxDBVersion + "\"}")); + mockServer.enqueue(createResponse(200, + null, + "{\"version\":\"" + influxDBVersion + "\"}")); restClient = new RestClient(new ClientConfig.Builder() .host(baseURL) @@ -506,9 +531,9 @@ public void getServerVersionV3Successful() throws Exception { @Test public void getServerVersionError() { - MockResponse mockResponse = new MockResponse(); - mockResponse.setBody("not json") - .setHeader("something", "something"); + MockResponse mockResponse = new MockResponse(200, + Headers.of("something", "something"), + "not json"); mockServer.enqueue(mockResponse); restClient = new RestClient(new ClientConfig.Builder() @@ -520,7 +545,7 @@ public void getServerVersionError() { @Test public void getServerVersionErrorNoBody() { - mockServer.enqueue(new MockResponse().setResponseCode(200)); + mockServer.enqueue(new MockResponse(200, Headers.of(), "Test-Version")); restClient = new RestClient(new ClientConfig.Builder() .host(baseURL) .build());