Read to end-of-stream for HTTP contract tests
#minor-release PiperOrigin-RevId: 358847933
This commit is contained in:
parent
7b692f9676
commit
691ac39fcb
@ -147,7 +147,6 @@ public class HttpDataSourceTestEnv extends ExternalResource {
|
||||
.setName(name)
|
||||
.setUri(Uri.parse(server.url(resource.getPath()).toString()))
|
||||
.setExpectedBytes(resource.getData())
|
||||
.setEndOfInputExpected(!resource.resolvesToUnknownLength())
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
@ -33,6 +33,7 @@ import com.google.common.collect.Maps;
|
||||
import java.lang.annotation.Documented;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
@ -277,21 +278,19 @@ public class WebServerDispatcher extends Dispatcher {
|
||||
if (!resource.supportsRangeRequests() || rangeHeader == null) {
|
||||
switch (preferredContentCoding) {
|
||||
case "gzip":
|
||||
setResponseBody(
|
||||
response, Util.gzip(resourceData), /* chunked= */ resource.resolvesToUnknownLength);
|
||||
response
|
||||
.setBody(new Buffer().write(Util.gzip(resourceData)))
|
||||
.setHeader("Content-Encoding", "gzip");
|
||||
break;
|
||||
case "identity":
|
||||
setResponseBody(response, resourceData, /* chunked= */ resource.resolvesToUnknownLength);
|
||||
response
|
||||
.setBody(new Buffer().write(resourceData))
|
||||
.setHeader("Content-Encoding", "identity");
|
||||
break;
|
||||
default:
|
||||
throw new IllegalStateException("Unexpected content coding: " + preferredContentCoding);
|
||||
}
|
||||
if (resource.resolvesToUnknownLength()) {
|
||||
response.setHeader("Content-Length", "");
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
@ -328,11 +327,11 @@ public class WebServerDispatcher extends Dispatcher {
|
||||
+ "-"
|
||||
+ (resourceData.length - 1)
|
||||
+ "/"
|
||||
+ (resource.resolvesToUnknownLength() ? "*" : resourceData.length))
|
||||
.setBody(new Buffer().write(resourceData, start, resourceData.length - start));
|
||||
if (resource.resolvesToUnknownLength()) {
|
||||
response.setHeader("Content-Length", "");
|
||||
}
|
||||
+ (resource.resolvesToUnknownLength() ? "*" : resourceData.length));
|
||||
setResponseBody(
|
||||
response,
|
||||
Arrays.copyOfRange(resourceData, start, resourceData.length),
|
||||
/* chunked= */ resource.resolvesToUnknownLength);
|
||||
return response;
|
||||
}
|
||||
|
||||
@ -345,7 +344,7 @@ public class WebServerDispatcher extends Dispatcher {
|
||||
}
|
||||
|
||||
int end = min(range.second + 1, resourceData.length);
|
||||
return response
|
||||
response
|
||||
.setResponseCode(206)
|
||||
.setHeader(
|
||||
"Content-Range",
|
||||
@ -354,8 +353,26 @@ public class WebServerDispatcher extends Dispatcher {
|
||||
+ "-"
|
||||
+ (end - 1)
|
||||
+ "/"
|
||||
+ (resource.resolvesToUnknownLength() ? "*" : resourceData.length))
|
||||
.setBody(new Buffer().write(resourceData, range.first, end - range.first));
|
||||
+ (resource.resolvesToUnknownLength() ? "*" : resourceData.length));
|
||||
setResponseBody(
|
||||
response, Arrays.copyOfRange(resourceData, range.first, end), /* chunked= */ false);
|
||||
return response;
|
||||
}
|
||||
|
||||
/**
|
||||
* Populates a response with the specified body.
|
||||
*
|
||||
* @param response The response whose body should be populated.
|
||||
* @param body The body data.
|
||||
* @param chunked Whether to use chunked transfer encoding. Note that if set to {@code true}, the
|
||||
* "Content-Length" header will not be set.
|
||||
*/
|
||||
private static void setResponseBody(MockResponse response, byte[] body, boolean chunked) {
|
||||
if (chunked) {
|
||||
response.setChunkedBody(new Buffer().write(body), /* maxChunkSize= */ Integer.MAX_VALUE);
|
||||
} else {
|
||||
response.setBody(new Buffer().write(body));
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -257,7 +257,7 @@ public class WebServerDispatcherTest {
|
||||
try (Response response = client.newCall(request).execute()) {
|
||||
assertThat(response.code()).isEqualTo(200);
|
||||
assertThat(response.header("Accept-Ranges")).isEqualTo("bytes");
|
||||
assertThat(response.header("Content-Length")).isEmpty();
|
||||
assertThat(response.header("Content-Length")).isNull();
|
||||
assertThat(response.header("Content-Range")).isNull();
|
||||
assertThat(response.body().contentLength()).isEqualTo(-1);
|
||||
|
||||
@ -298,7 +298,7 @@ public class WebServerDispatcherTest {
|
||||
try (Response response = client.newCall(request).execute()) {
|
||||
assertThat(response.code()).isEqualTo(206);
|
||||
assertThat(response.header("Accept-Ranges")).isEqualTo("bytes");
|
||||
assertThat(response.header("Content-Length")).isEmpty();
|
||||
assertThat(response.header("Content-Length")).isNull();
|
||||
assertThat(response.header("Content-Range")).isEqualTo("bytes 5-19/*");
|
||||
assertThat(response.body().contentLength()).isEqualTo(-1);
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user