1
0
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:
Yuri Schimke
2023-10-17 02:03:16 +01:00
committed by GitHub
parent a6e54bfd1b
commit ea720d32b5
3 changed files with 50 additions and 0 deletions

View File

@@ -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"
}

View File

@@ -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

View File

@@ -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();