Polishing contribution

Closes gh-35225
This commit is contained in:
Brian Clozel
2025-08-25 19:06:25 +02:00
parent 4101714830
commit 18eb2a6073
5 changed files with 60 additions and 54 deletions
@@ -16,21 +16,21 @@
package org.springframework.http.client;
import java.io.ByteArrayOutputStream;
import java.util.zip.DeflaterOutputStream;
import java.util.zip.GZIPOutputStream;
import mockwebserver3.Dispatcher;
import mockwebserver3.MockResponse;
import mockwebserver3.MockWebServer;
import mockwebserver3.RecordedRequest;
import okio.Buffer;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.springframework.http.HttpHeaders;
import org.springframework.util.StringUtils;
import java.io.ByteArrayOutputStream;
import java.nio.charset.StandardCharsets;
import java.util.zip.DeflaterOutputStream;
import java.util.zip.GZIPOutputStream;
import static org.assertj.core.api.Assertions.assertThat;
/**
@@ -112,25 +112,34 @@ public abstract class AbstractMockWebServerTests {
String headerName = request.getTarget().replace("/header/","");
return new MockResponse.Builder().body(headerName + ":" + request.getHeaders().get(headerName)).code(200).build();
}
else if(request.getTarget().startsWith("/compress/")) {
else if(request.getTarget().startsWith("/compress/") && request.getBody() != null) {
String encoding = request.getTarget().replace("/compress/","");
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
String requestBody = request.getBody().utf8();
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
if (encoding.equals("gzip")) {
try(GZIPOutputStream gzipOutputStream = new GZIPOutputStream(byteArrayOutputStream)) {
gzipOutputStream.write("Test Payload".getBytes());
try(GZIPOutputStream gzipOutputStream = new GZIPOutputStream(outputStream)) {
gzipOutputStream.write(requestBody.getBytes());
gzipOutputStream.flush();
}
}
else if(encoding.equals("deflate")) {
try(DeflaterOutputStream deflaterOutputStream = new DeflaterOutputStream(byteArrayOutputStream)) {
deflaterOutputStream.write("Test Payload".getBytes());
try(DeflaterOutputStream deflaterOutputStream = new DeflaterOutputStream(outputStream)) {
deflaterOutputStream.write(requestBody.getBytes());
deflaterOutputStream.flush();
}
} else {
byteArrayOutputStream.write("Test Payload".getBytes());
}
return new MockResponse.Builder().body(byteArrayOutputStream.toString(StandardCharsets.ISO_8859_1))
.code(200).setHeader(HttpHeaders.CONTENT_ENCODING, encoding).build();
else {
outputStream.write(requestBody.getBytes());
}
Buffer buffer = new Buffer();
buffer.write(outputStream.toByteArray());
MockResponse.Builder builder = new MockResponse.Builder()
.body(buffer)
.code(200);
if (!encoding.isEmpty()) {
builder.setHeader(HttpHeaders.CONTENT_ENCODING, encoding);
}
return builder.build();
}
return new MockResponse.Builder().code(404).build();
}
@@ -100,22 +100,22 @@ class JdkClientHttpRequestFactoryTests extends AbstractHttpRequestFactoryTests {
void deleteRequestWithBody() throws Exception {
URI uri = URI.create(baseUrl + "/echo");
ClientHttpRequest request = this.factory.createRequest(uri, HttpMethod.DELETE);
StreamUtils.copy("body", StandardCharsets.ISO_8859_1, request.getBody());
StreamUtils.copy("body", StandardCharsets.UTF_8, request.getBody());
try (ClientHttpResponse response = request.execute()) {
assertThat(response.getStatusCode()).as("Invalid response status").isEqualTo(HttpStatus.OK);
assertThat(StreamUtils.copyToString(response.getBody(), StandardCharsets.ISO_8859_1))
.as("Invalid request body").isEqualTo("body");
assertThat(response.getBody()).as("Invalid request body").hasContent("body");
}
}
@Test
void compressionDisabled() throws IOException {
URI uri = URI.create(baseUrl + "/compress/");
ClientHttpRequest request = this.factory.createRequest(uri, HttpMethod.GET);
ClientHttpRequest request = this.factory.createRequest(uri, HttpMethod.POST);
StreamUtils.copy("Payload to compress", StandardCharsets.UTF_8, request.getBody());
try (ClientHttpResponse response = request.execute()) {
assertThat(response.getStatusCode()).as("Invalid response status").isEqualTo(HttpStatus.OK);
assertThat(StreamUtils.copyToString(response.getBody(), StandardCharsets.ISO_8859_1))
.as("Invalid request body").isEqualTo("Test Payload");
assertThat(response.getHeaders().containsHeader("Content-Encoding")).isFalse();
assertThat(response.getBody()).as("Invalid request body").hasContent("Payload to compress");
}
}
@@ -123,13 +123,14 @@ class JdkClientHttpRequestFactoryTests extends AbstractHttpRequestFactoryTests {
void compressionGzip() throws IOException {
URI uri = URI.create(baseUrl + "/compress/gzip");
JdkClientHttpRequestFactory requestFactory = (JdkClientHttpRequestFactory) this.factory;
requestFactory.setCompressionEnabled(true);
ClientHttpRequest request = requestFactory.createRequest(uri, HttpMethod.GET);
requestFactory.enableCompression(true);
ClientHttpRequest request = requestFactory.createRequest(uri, HttpMethod.POST);
StreamUtils.copy("Payload to compress", StandardCharsets.UTF_8, request.getBody());
try (ClientHttpResponse response = request.execute()) {
assertThat(response.getStatusCode()).as("Invalid response status").isEqualTo(HttpStatus.OK);
assertThat(StreamUtils.copyToString(response.getBody(), StandardCharsets.ISO_8859_1))
.as("Invalid request body").isEqualTo("Test Payload");
assertThat(response.getHeaders().getFirst("Content-Encoding"))
.as("Invalid content encoding").isEqualTo("gzip");
assertThat(response.getBody()).as("Invalid request body").hasContent("Payload to compress");
}
}
@@ -137,12 +138,14 @@ class JdkClientHttpRequestFactoryTests extends AbstractHttpRequestFactoryTests {
void compressionDeflate() throws IOException {
URI uri = URI.create(baseUrl + "/compress/deflate");
JdkClientHttpRequestFactory requestFactory = (JdkClientHttpRequestFactory) this.factory;
requestFactory.setCompressionEnabled(true);
ClientHttpRequest request = requestFactory.createRequest(uri, HttpMethod.GET);
requestFactory.enableCompression(true);
ClientHttpRequest request = requestFactory.createRequest(uri, HttpMethod.POST);
StreamUtils.copy("Payload to compress", StandardCharsets.UTF_8, request.getBody());
try (ClientHttpResponse response = request.execute()) {
assertThat(response.getStatusCode()).as("Invalid response status").isEqualTo(HttpStatus.OK);
assertThat(StreamUtils.copyToString(response.getBody(), StandardCharsets.ISO_8859_1))
.as("Invalid request body").isEqualTo("Test Payload");
assertThat(response.getHeaders().getFirst("Content-Encoding"))
.as("Invalid content encoding").isEqualTo("deflate");
assertThat(response.getBody()).as("Invalid request body").hasContent("Payload to compress");
}
}
@@ -72,7 +72,7 @@ class JdkClientHttpRequestTests {
}
private JdkClientHttpRequest createRequest(Duration timeout) {
return new JdkClientHttpRequest(client, URI.create("https://abc.com"), HttpMethod.GET, executor, timeout);
return new JdkClientHttpRequest(client, URI.create("https://abc.com"), HttpMethod.GET, executor, timeout, false);
}
}