| Index: net/http/http_network_transaction_unittest.cc
|
| diff --git a/net/http/http_network_transaction_unittest.cc b/net/http/http_network_transaction_unittest.cc
|
| index 8c078c4c1f158797ad4d8715d780b02e902750ca..2a3bc82489fe9efb5e353bc761b71e2f657bc178 100644
|
| --- a/net/http/http_network_transaction_unittest.cc
|
| +++ b/net/http/http_network_transaction_unittest.cc
|
| @@ -282,6 +282,20 @@ class HttpNetworkTransactionTest
|
| void KeepAliveConnectionResendRequestTest(const MockWrite* write_failure,
|
| const MockRead* read_failure);
|
|
|
| + // Test behaviour of retries when a request can be retried automatically.
|
| + void PartialDataRetryTest(int expected_status,
|
| + const char* expected_response_data,
|
| + MockRead read1[],
|
| + size_t read1_count,
|
| + MockRead read2[] = NULL,
|
| + size_t read2_count = 0,
|
| + MockRead read3[] = NULL,
|
| + size_t read3_count = 0,
|
| + MockRead read4[] = NULL,
|
| + size_t read4_count = 0,
|
| + MockRead read5[] = NULL,
|
| + size_t read5_count = 0);
|
| +
|
| // Either |write_failure| specifies a write failure or |read_failure|
|
| // specifies a read failure when using a reused socket. In either case, the
|
| // failure should cause the network transaction to resend the request, and the
|
| @@ -1337,6 +1351,77 @@ void HttpNetworkTransactionTest::KeepAliveConnectionResendRequestTest(
|
| }
|
| }
|
|
|
| +void HttpNetworkTransactionTest::PartialDataRetryTest(
|
| + int expected_status,
|
| + const char* expected_response_data,
|
| + MockRead read1[],
|
| + size_t read1_count,
|
| + MockRead read2[],
|
| + size_t read2_count,
|
| + MockRead read3[],
|
| + size_t read3_count,
|
| + MockRead read4[],
|
| + size_t read4_count,
|
| + MockRead read5[],
|
| + size_t read5_count) {
|
| + HttpRequestInfo request;
|
| + request.method = "GET";
|
| + request.url = GURL("http://www.foo.com/");
|
| + request.load_flags = 0;
|
| +
|
| + scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_));
|
| +
|
| + // Written data for successfully sending both requests.
|
| + MockWrite data1_writes[] = {
|
| + MockWrite("GET / HTTP/1.1\r\n"
|
| + "Host: www.foo.com\r\n"
|
| + "Connection: keep-alive\r\n\r\n")
|
| + };
|
| +
|
| + StaticSocketDataProvider data1(read1, read1_count,
|
| + data1_writes, arraysize(data1_writes));
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data1);
|
| +
|
| + StaticSocketDataProvider data2(read2, read2_count, NULL, 0);
|
| + if (read2)
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data2);
|
| +
|
| + StaticSocketDataProvider data3(read3, read3_count, NULL, 0);
|
| + if (read3)
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data3);
|
| +
|
| + StaticSocketDataProvider data4(read4, read4_count, NULL, 0);
|
| + if (read4)
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data4);
|
| +
|
| + StaticSocketDataProvider data5(read5, read5_count, NULL, 0);
|
| + if (read5)
|
| + session_deps_.socket_factory->AddSocketDataProvider(&data5);
|
| +
|
| + uint32 first_socket_log_id = NetLog::Source::kInvalidId;
|
| + TestCompletionCallback callback;
|
| +
|
| + scoped_ptr<HttpTransaction> trans(
|
| + new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
|
| +
|
| + int rv = trans->Start(&request, callback.callback(), BoundNetLog());
|
| + EXPECT_EQ(ERR_IO_PENDING, rv);
|
| +
|
| + rv = callback.WaitForResult();
|
| + EXPECT_EQ(OK, rv);
|
| +
|
| + const HttpResponseInfo* response = trans->GetResponseInfo();
|
| + ASSERT_TRUE(response != NULL);
|
| +
|
| + EXPECT_TRUE(response->headers.get() != NULL);
|
| + EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine());
|
| +
|
| + std::string response_data;
|
| + rv = ReadTransaction(trans.get(), &response_data);
|
| + EXPECT_EQ(expected_status, rv);
|
| + EXPECT_EQ(expected_response_data, response_data);
|
| +}
|
| +
|
| void HttpNetworkTransactionTest::PreconnectErrorResendRequestTest(
|
| const MockWrite* write_failure,
|
| const MockRead* read_failure,
|
| @@ -1538,6 +1623,459 @@ TEST_P(HttpNetworkTransactionTest, SpdyPreconnectErrorAsyncEOF) {
|
| PreconnectErrorResendRequestTest(NULL, &read_failure, true);
|
| }
|
|
|
| +TEST_P(HttpNetworkTransactionTest, PartialDataRetryInHeader) {
|
| + MockRead data_reads1[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"),
|
| + MockRead("Content-Lengt"),
|
| + MockRead(ASYNC, ERR_CONNECTION_RESET),
|
| + };
|
| +
|
| + MockRead data_reads2[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"),
|
| + MockRead("Content-Length: 2\r\n\r\n"),
|
| + MockRead("AA"),
|
| + MockRead(ASYNC, OK),
|
| + };
|
| +
|
| + PartialDataRetryTest(OK, "AA", data_reads1, arraysize(data_reads1),
|
| + data_reads2, arraysize(data_reads2));
|
| +}
|
| +
|
| +TEST_P(HttpNetworkTransactionTest, PartialDataRetryFullHeaderNoData) {
|
| + MockRead data_reads1[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"),
|
| + MockRead("Cache-Control: max-age=100\r\n"),
|
| + MockRead("Content-Length: 2\r\n\r\n"),
|
| + MockRead(ASYNC, ERR_CONNECTION_RESET),
|
| + };
|
| +
|
| + MockRead data_reads2[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"),
|
| + MockRead("Cache-Control: max-age=100\r\n"),
|
| + MockRead("Content-Length: 2\r\n\r\nAB"),
|
| + MockRead(ASYNC, OK),
|
| + };
|
| +
|
| + PartialDataRetryTest(OK, "AB", data_reads1, arraysize(data_reads1),
|
| + data_reads2, arraysize(data_reads2));
|
| +}
|
| +
|
| +TEST_P(HttpNetworkTransactionTest, PartialDataRetryMaxAgeSuccess) {
|
| + MockRead data_reads1[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"),
|
| + MockRead("Cache-Control: max-age=100\r\n"),
|
| + MockRead("Content-Length: 2\r\n\r\nA"),
|
| + MockRead(ASYNC, ERR_CONNECTION_RESET),
|
| + };
|
| +
|
| + MockRead data_reads2[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"),
|
| + MockRead("Cache-Control: max-age=100\r\n"),
|
| + MockRead("Content-Length: 2\r\n\r\nAC"),
|
| + MockRead(ASYNC, OK),
|
| + };
|
| +
|
| + PartialDataRetryTest(OK, "AC", data_reads1, arraysize(data_reads1),
|
| + data_reads2, arraysize(data_reads2));
|
| +}
|
| +
|
| +TEST_P(HttpNetworkTransactionTest, PartialDataRetryInBodyPragmaNoCache) {
|
| + MockRead data_reads1[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"
|
| + "Pragma: no-cache\r\n"
|
| + "Content-Length: 2\r\n\r\n"),
|
| + MockRead("A"),
|
| + MockRead(ASYNC, ERR_CONNECTION_RESET),
|
| + };
|
| +
|
| + PartialDataRetryTest(ERR_CONNECTION_RESET, "", data_reads1,
|
| + arraysize(data_reads1));
|
| +}
|
| +
|
| +TEST_P(HttpNetworkTransactionTest, PartialDataRetryMaxAgeFail) {
|
| + MockRead data_reads1[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"
|
| + "Cache-Control: max-age=-1\r\n"),
|
| + MockRead("Content-Length: 2\r\n\r\n"),
|
| + MockRead(ASYNC, ERR_CONNECTION_RESET),
|
| + };
|
| +
|
| + PartialDataRetryTest(ERR_CONNECTION_RESET, "", data_reads1,
|
| + arraysize(data_reads1));
|
| +}
|
| +
|
| +TEST_P(HttpNetworkTransactionTest, PartialDataRetryAlmostExpired) {
|
| + MockRead data_reads1[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"
|
| + "Date: Wed,14 Dec 2011 15:50:00 GMT\r\n"),
|
| + MockRead("Expires: Wed,14 Dec 2011 15:50:59 GMT\r\n"),
|
| + MockRead("Content-Length: 2\r\n\r\nA"),
|
| + MockRead(ASYNC, ERR_CONNECTION_RESET),
|
| + };
|
| +
|
| + PartialDataRetryTest(ERR_CONNECTION_RESET, "", data_reads1,
|
| + arraysize(data_reads1));
|
| +}
|
| +
|
| +TEST_P(HttpNetworkTransactionTest, PartialDataRetryInBodyMultipleReads) {
|
| + MockRead data_reads1[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"
|
| + "Content-Length: 2\r\n"),
|
| + MockRead("Cache-Control: max-age=100\r\n\r\nA"),
|
| + MockRead(ASYNC, ERR_CONNECTION_RESET),
|
| + };
|
| +
|
| + MockRead data_reads2[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"
|
| + "Content-Length: 2\r\n"),
|
| + MockRead("Cache-Control: max-age=100\r\n\r\nA"),
|
| + MockRead("G"),
|
| + MockRead(ASYNC, OK),
|
| + };
|
| +
|
| + PartialDataRetryTest(OK, "AG", data_reads1, arraysize(data_reads1),
|
| + data_reads2, arraysize(data_reads2));
|
| +}
|
| +
|
| +TEST_P(HttpNetworkTransactionTest, PartialDataRetryInLargeBody) {
|
| + MockRead data_reads1[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"
|
| + "Cache-Control: max-age=100\r\n"
|
| + "Content-Length: 400\r\n\r\n"
|
| + "012345678901234567890123456789012345678901234567890123456789"
|
| + "012345678901234567890123456789012345678901234567890123456789"
|
| + "012345678901234567890123456789012345678901234567890123456789"
|
| + "012345678901234567890123456789012345678901234567890123456789"),
|
| + MockRead("012345678901234567890123456789012345678901234567890123456789"),
|
| + MockRead(ASYNC, ERR_CONNECTION_RESET),
|
| + };
|
| +
|
| + MockRead data_reads2[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"
|
| + "Cache-Control: max-age=100\r\n"
|
| + "Content-Length: 400\r\n\r\n"
|
| + "012345678901234567890123456789012345678901234567890123456789"
|
| + "012345678901234567890123456789012345678901234567890123456789"),
|
| + MockRead("012345678901234567890123456789012345678901234567890123456789"),
|
| + MockRead("012345678901234567890123456789012345678901234567890123456789"
|
| + "012345678901234567890123456789012345678901234567890123456789"
|
| + "012345678901234567890123456789012345678901234567890123456789"
|
| + "0123456789012345678901234567890123456789"),
|
| + MockRead(ASYNC, OK),
|
| + };
|
| +
|
| + PartialDataRetryTest(OK,
|
| + "012345678901234567890123456789012345678901234567890123456789"
|
| + "012345678901234567890123456789012345678901234567890123456789"
|
| + "012345678901234567890123456789012345678901234567890123456789"
|
| + "012345678901234567890123456789012345678901234567890123456789"
|
| + "012345678901234567890123456789012345678901234567890123456789"
|
| + "012345678901234567890123456789012345678901234567890123456789"
|
| + "0123456789012345678901234567890123456789",
|
| + data_reads1, arraysize(data_reads1),
|
| + data_reads2, arraysize(data_reads2));
|
| +}
|
| +
|
| +TEST_P(HttpNetworkTransactionTest, PartialDataRetryInBodyRangeMultipleReads) {
|
| + MockRead data_reads1[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"
|
| + "ETag: A023EF02BD589BC472A2D6774EAE3C58\r\n"
|
| + "Date: Tue, 15 Nov 1994 08:12:31 GMT\r\n"
|
| + "Expires: Tue, 15 Nov 1994 09:12:31 GMT\r\n"
|
| + "Last-Modified: Wed, 14 Dec 2011 15:50:59 GMT\r\n"
|
| + "Accept-Ranges: bytes\r\n"
|
| + "Content-Length: 3\r\n\r\nA"),
|
| + MockRead(ASYNC, ERR_CONNECTION_RESET),
|
| + };
|
| +
|
| + MockRead data_reads2[] = {
|
| + MockRead("HTTP/1.1 206 Partial Content\r\n"
|
| + "ETag: A023EF02BD589BC472A2D6774EAE3C58\r\n"
|
| + "Date: Tue, 15 Nov 1994 08:12:31 GMT\r\n"
|
| + "Expires: Tue, 15 Nov 1994 09:12:31 GMT\r\n"
|
| + "Last-Modified: Wed, 14 Dec 2011 15:50:59 GMT\r\n"
|
| + "Content-Length: 2\r\n"
|
| + "Content-Range: bytes 1-2/3\r\n\r\n"),
|
| + MockRead("HA"),
|
| + MockRead(ASYNC, OK),
|
| + };
|
| +
|
| + PartialDataRetryTest(OK, "AHA", data_reads1, arraysize(data_reads1),
|
| + data_reads2, arraysize(data_reads2));
|
| +}
|
| +
|
| +TEST_P(HttpNetworkTransactionTest, PartialDataRetryInBodyRangeSingleRead) {
|
| + MockRead data_reads1[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"
|
| + "ETag: A023EF02BD589BC472A2D6774EAE3C58\r\n"
|
| + "Date: Tue, 15 Nov 1994 08:12:31 GMT\r\n"
|
| + "Expires: Tue, 15 Nov 1994 09:12:31 GMT\r\n"
|
| + "Last-Modified: Wed,14 Dec 2011 15:50:59 GMT\r\n"
|
| + "Accept-Ranges: bytes\r\n"
|
| + "Content-Length: 3\r\n\r\nA"),
|
| + MockRead(ASYNC, ERR_CONNECTION_RESET),
|
| + };
|
| +
|
| + MockRead data_reads2[] = {
|
| + MockRead("HTTP/1.1 206 Partial Content\r\n"
|
| + "ETag: A023EF02BD589BC472A2D6774EAE3C58\r\n"
|
| + "Date: Tue, 15 Nov 1994 08:12:31 GMT\r\n"
|
| + "Expires: Tue, 15 Nov 1994 09:12:31 GMT\r\n"
|
| + "Last-Modified: Wed,14 Dec 2011 15:50:59 GMT\r\n"
|
| + "Accept-Ranges: bytes\r\n"
|
| + "Content-Length: 2\r\n"
|
| + "Content-Range: bytes 1-2/3\r\n\r\nIA"),
|
| + MockRead(ASYNC, OK),
|
| + };
|
| +
|
| + PartialDataRetryTest(OK, "AIA", data_reads1, arraysize(data_reads1),
|
| + data_reads2, arraysize(data_reads2));
|
| +}
|
| +
|
| +TEST_P(HttpNetworkTransactionTest, PartialDataRetryChunked) {
|
| + MockRead data_reads1[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"
|
| + "Transfer-Encoding: chunked\r\n"
|
| + "Cache-Control: max-age=100\r\n\r\n"),
|
| + MockRead("2\r\n"),
|
| + MockRead("A"),
|
| + MockRead(ASYNC, ERR_CONNECTION_RESET),
|
| + };
|
| +
|
| + MockRead data_reads2[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"
|
| + "Transfer-Encoding: chunked\r\n"
|
| + "Cache-Control: max-age=100\r\n\r\n"),
|
| + MockRead("2\r\n"),
|
| + MockRead("AJ\r\n"),
|
| + MockRead("2\r\n"),
|
| + MockRead("AJ\r\n"),
|
| + MockRead("0\r\n\r\n"),
|
| + MockRead(ASYNC, OK),
|
| + };
|
| +
|
| + PartialDataRetryTest(OK, "AJAJ", data_reads1, arraysize(data_reads1),
|
| + data_reads2, arraysize(data_reads2));
|
| +}
|
| +
|
| +TEST_P(HttpNetworkTransactionTest, PartialDataRetryChangedContentNormal) {
|
| + MockRead data_reads1[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"
|
| + "Cache-Control: max-age=100\r\n"\
|
| + "Content-Length: 2\r\n\r\nA"),
|
| + MockRead(ASYNC, ERR_CONNECTION_RESET),
|
| + };
|
| +
|
| + MockRead data_reads2[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"\
|
| + "Cache-Control: max-age=100\r\n"\
|
| + "Content-Length: 2\r\n\r\nOC"),
|
| + MockRead(ASYNC, OK),
|
| + };
|
| +
|
| + PartialDataRetryTest(ERR_RETRY_HASH_MISMATCH, "", data_reads1,
|
| + arraysize(data_reads1), data_reads2, arraysize(data_reads2));
|
| +}
|
| +
|
| +TEST_P(HttpNetworkTransactionTest, PartialDataRetryChangedContentChunked) {
|
| + MockRead data_reads1[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"\
|
| + "Transfer-Encoding: chunked\r\n"\
|
| + "Cache-Control: max-age=100\r\n\r\n"),
|
| + MockRead("1\r\n"),
|
| + MockRead("A\r\n"),
|
| + MockRead(ASYNC, ERR_CONNECTION_RESET),
|
| + };
|
| +
|
| + MockRead data_reads2[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"\
|
| + "Transfer-Encoding: chunked\r\n"\
|
| + "Cache-Control: max-age=100\r\n\r\n"),
|
| + MockRead("1\r\n"),
|
| + MockRead("B\r\n"),
|
| + MockRead("1\r\nJ\r\n"),
|
| + MockRead("0\r\n\r\n"),
|
| + MockRead(ASYNC, OK),
|
| + };
|
| +
|
| + PartialDataRetryTest(ERR_RETRY_HASH_MISMATCH, "", data_reads1,
|
| + arraysize(data_reads1), data_reads2, arraysize(data_reads2));
|
| +}
|
| +
|
| +TEST_P(HttpNetworkTransactionTest, PartialDataRetryTwoTimes) {
|
| + MockRead data_reads1[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"\
|
| + "Cache-Control: max-age=100\r\n"\
|
| + "Content-Length: 3\r\n\r\nA"),
|
| + MockRead(ASYNC, ERR_CONNECTION_RESET),
|
| + };
|
| +
|
| + MockRead data_reads2[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"\
|
| + "Cache-Control: max-age=100\r\n"\
|
| + "Content-Length: 3\r\n\r\nAB"),
|
| + MockRead(ASYNC, ERR_CONNECTION_RESET),
|
| + };
|
| +
|
| + MockRead data_reads3[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"\
|
| + "Cache-Control: max-age=100\r\n"\
|
| + "Content-Length: 3\r\n\r\nABC"),
|
| + MockRead(ASYNC, OK),
|
| + };
|
| +
|
| + PartialDataRetryTest(OK, "ABC", data_reads1, arraysize(data_reads1),
|
| + data_reads2, arraysize(data_reads2), data_reads3, arraysize(data_reads3));
|
| +}
|
| +
|
| +TEST_P(HttpNetworkTransactionTest, PartialDataRetryFourTimes) {
|
| + MockRead data_reads1[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"\
|
| + "Cache-Control: max-age=100\r\n"\
|
| + "Content-Length: 5\r\n\r\nA"),
|
| + MockRead(ASYNC, ERR_CONNECTION_RESET),
|
| + };
|
| +
|
| + MockRead data_reads2[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"\
|
| + "Cache-Control: max-age=100\r\n"\
|
| + "Content-Length: 5\r\n\r\nAB"),
|
| + MockRead(ASYNC, ERR_CONNECTION_RESET),
|
| + };
|
| +
|
| + MockRead data_reads3[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"\
|
| + "Cache-Control: max-age=100\r\n"\
|
| + "Content-Length: 5\r\n\r\nABC"),
|
| + MockRead(ASYNC, ERR_CONNECTION_RESET),
|
| + };
|
| +
|
| + MockRead data_reads4[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"\
|
| + "Cache-Control: max-age=100\r\n"\
|
| + "Content-Length: 5\r\n\r\nABCD"),
|
| + MockRead(ASYNC, ERR_CONNECTION_RESET),
|
| + };
|
| +
|
| + MockRead data_reads5[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"\
|
| + "Cache-Control: max-age=100\r\n"\
|
| + "Content-Length: 5\r\n\r\nABCDE"),
|
| + MockRead(ASYNC, OK),
|
| + };
|
| +
|
| + PartialDataRetryTest(OK, "ABCDE", data_reads1, arraysize(data_reads1),
|
| + data_reads2, arraysize(data_reads2), data_reads3, arraysize(data_reads3),
|
| + data_reads4, arraysize(data_reads4), data_reads5, arraysize(data_reads5));
|
| +}
|
| +
|
| +TEST_P(HttpNetworkTransactionTest, PartialDataRetrySmallerContent) {
|
| + MockRead data_reads1[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"\
|
| + "Cache-Control: max-age=100\r\n"\
|
| + "Content-Length: 5\r\n\r\nAB"),
|
| + MockRead(ASYNC, ERR_CONNECTION_RESET),
|
| + };
|
| +
|
| + MockRead data_reads2[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"\
|
| + "Cache-Control: max-age=100\r\n"\
|
| + "Content-Len"),
|
| + MockRead(ASYNC, ERR_CONNECTION_RESET),
|
| + };
|
| +
|
| + MockRead data_reads3[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"\
|
| + "Cache-Control: max-age=100\r\n"\
|
| + "Content-Length: 5\r\n\r\nABCDE"),
|
| + MockRead(ASYNC, OK),
|
| + };
|
| +
|
| + PartialDataRetryTest(OK, "ABCDE", data_reads1, arraysize(data_reads1),
|
| + data_reads2, arraysize(data_reads2), data_reads3, arraysize(data_reads3));
|
| +}
|
| +
|
| +TEST_P(HttpNetworkTransactionTest, PartialDataRetryContentLengthChange) {
|
| + MockRead data_reads1[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"\
|
| + "Cache-Control: max-age=100\r\n"\
|
| + "Content-Length: 2\r\n\r\nA"),
|
| + MockRead(ASYNC, ERR_CONNECTION_RESET),
|
| + };
|
| +
|
| + MockRead data_reads2[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"\
|
| + "Cache-Control: max-age=100\r\n"\
|
| + "Content-Length: 3\r\n\r\nABC"),
|
| + MockRead(ASYNC, OK),
|
| + };
|
| + PartialDataRetryTest(ERR_RETRY_CONTENT_UPDATED, "", data_reads1,
|
| + arraysize(data_reads1), data_reads2, arraysize(data_reads2));
|
| +}
|
| +
|
| +TEST_P(HttpNetworkTransactionTest, PartialDataRetryEtagOK) {
|
| + MockRead data_reads1[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"\
|
| + "ETag: A023EF02BD589BC472A2D6774EAE3C58\r\n"\
|
| + "Last-Modified: Wed,14 Dec 2011 15:50:59 GMT\r\n"\
|
| + "Content-Length: 2\r\n\r\nA"),
|
| + MockRead(ASYNC, ERR_CONNECTION_RESET),
|
| + };
|
| +
|
| + MockRead data_reads2[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"\
|
| + "ETag: A023EF02BD589BC472A2D6774EAE3C58\r\n"\
|
| + "Last-Modified: Wed,14 Dec 2011 15:50:59 GMT\r\n"\
|
| + "Content-Length: 2\r\n\r\nA1"),
|
| + MockRead(ASYNC, OK),
|
| + };
|
| +
|
| + PartialDataRetryTest(OK, "A1", data_reads1, arraysize(data_reads1),
|
| + data_reads2, arraysize(data_reads2));
|
| +}
|
| +
|
| +TEST_P(HttpNetworkTransactionTest, PartialDataRetryLastModifiedChanged) {
|
| + MockRead data_reads1[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"\
|
| + "Date: Tue, 15 Nov 1994 08:12:31 GMT\r\n"\
|
| + "Last-Modified: Tue, 15 Nov 1994 08:10:31 GMT\r\n"\
|
| + "Content-Length: 2\r\n\r\nA"),
|
| + MockRead(ASYNC, ERR_CONNECTION_RESET),
|
| + };
|
| +
|
| + MockRead data_reads2[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"\
|
| + "Date: Tue, 15 Nov 1994 08:12:33 GMT\r\n"\
|
| + "Last-Modified: Tue, 15 Nov 1994 08:12:32 GMT\r\n"\
|
| + "Content-Length: 2\r\n\r\nA1"),
|
| + MockRead(ASYNC, OK),
|
| + };
|
| +
|
| + PartialDataRetryTest(ERR_RETRY_CONTENT_UPDATED, "", data_reads1,
|
| + arraysize(data_reads1), data_reads2, arraysize(data_reads2));
|
| +}
|
| +
|
| +TEST_P(HttpNetworkTransactionTest, PartialDataRetryEtagChange) {
|
| + MockRead data_reads1[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"\
|
| + "ETag: A023EF02BD589BC472A2D6774EAE3C58\r\n"\
|
| + "Last-Modified: Wed,14 Dec 2011 15:50:59 GMT\r\n"\
|
| + "Content-Length: 2\r\n\r\nA"),
|
| + MockRead(ASYNC, ERR_CONNECTION_RESET),
|
| + };
|
| +
|
| + MockRead data_reads2[] = {
|
| + MockRead("HTTP/1.1 200 OK\r\n"\
|
| + "ETag: A023EF02BD589BC472A2D6774EAE3C59\r\n"\
|
| + "Last-Modified: Wed,14 Dec 2011 15:50:59 GMT\r\n"\
|
| + "Content-Length: 2\r\n\r\nA1"),
|
| + MockRead(ASYNC, OK),
|
| + };
|
| +
|
| + PartialDataRetryTest(ERR_RETRY_CONTENT_UPDATED, "", data_reads1,
|
| + arraysize(data_reads1), data_reads2, arraysize(data_reads2));
|
| +}
|
| +
|
| TEST_P(HttpNetworkTransactionTest, NonKeepAliveConnectionReset) {
|
| HttpRequestInfo request;
|
| request.method = "GET";
|
|
|