mirror of
https://github.com/square/okhttp.git
synced 2026-01-12 10:23:16 +03:00
[4.x] Add test for 103 handling (#8055)
* Add test for 103 handling * Minimise changes * Simplify name
This commit is contained in:
@@ -29,6 +29,8 @@ class MockResponse : Cloneable {
|
||||
@set:JvmName("status")
|
||||
var status: String = ""
|
||||
|
||||
internal var informationalResponses: List<MockResponse> = listOf()
|
||||
|
||||
private var headersBuilder = Headers.Builder()
|
||||
private var trailersBuilder = Headers.Builder()
|
||||
|
||||
@@ -347,6 +349,10 @@ class MockResponse : Cloneable {
|
||||
|
||||
override fun toString() = status
|
||||
|
||||
fun addInformationalResponse(informationalResponse: MockResponse): MockResponse = apply {
|
||||
informationalResponses += informationalResponse
|
||||
}
|
||||
|
||||
companion object {
|
||||
private const val CHUNKED_BODY_HEADER = "Transfer-encoding: chunked"
|
||||
}
|
||||
|
||||
@@ -1026,6 +1026,13 @@ class MockWebServer : ExternalResource(), Closeable {
|
||||
readBody = true
|
||||
}
|
||||
|
||||
peek.informationalResponses.forEach {
|
||||
val informationalHeader =
|
||||
listOf(Header(Header.RESPONSE_STATUS, it.status.replace("HTTP/1.1 ", "")))
|
||||
stream.writeHeaders(informationalHeader, outFinished = false, flushHeaders = true)
|
||||
stream.connection.flush()
|
||||
}
|
||||
|
||||
val body = Buffer()
|
||||
val requestLine = "$method $path HTTP/1.1"
|
||||
var exception: IOException? = null
|
||||
|
||||
@@ -2812,6 +2812,43 @@ public final class CallTest {
|
||||
assertThat(recordedRequest.getBody().readUtf8()).isEqualTo("abc");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void serverRespondsWithEarlyHintsHttp2() throws Exception {
|
||||
enableProtocol(Protocol.HTTP_2);
|
||||
server.enqueue(
|
||||
new MockResponse()
|
||||
.addInformationalResponse(
|
||||
new MockResponse().setResponseCode(103).addHeader("Link", "</style.css>; rel=preload; as=style")
|
||||
)
|
||||
);
|
||||
Request request = new Request.Builder()
|
||||
.url(server.url("/"))
|
||||
.post(RequestBody.create("abc", MediaType.get("text/plain")))
|
||||
.build();
|
||||
executeSynchronously(request)
|
||||
.assertFailure(SocketTimeoutException.class);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void serverRespondsWithEarlyHintsHttp1() throws Exception {
|
||||
server.enqueue(
|
||||
new MockResponse()
|
||||
.addInformationalResponse(
|
||||
new MockResponse().setResponseCode(103).addHeader("Link", "</style.css>; rel=preload; as=style")
|
||||
)
|
||||
);
|
||||
Request request = new Request.Builder()
|
||||
.url(server.url("/"))
|
||||
.post(RequestBody.create("abc", MediaType.get("text/plain")))
|
||||
.build();
|
||||
executeSynchronously(request)
|
||||
.assertSuccessful()
|
||||
.assertCode(200);
|
||||
RecordedRequest recordedRequest = server.takeRequest();
|
||||
assertThat(recordedRequest.getBody().readUtf8()).isEqualTo("abc");
|
||||
assertThat(recordedRequest.getHeader("Link")).isNull();
|
||||
}
|
||||
|
||||
@Test public void serverRespondsWithUnsolicited100Continue_HTTP2() throws Exception {
|
||||
enableProtocol(Protocol.HTTP_2);
|
||||
serverRespondsWithUnsolicited100Continue();
|
||||
|
||||
Reference in New Issue
Block a user