Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(754)

Unified Diff: net/http/http_network_transaction_unittest.cc

Issue 403393003: HTTP retry support. Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fixes according to review. Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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";
« net/http/http_network_transaction.cc ('K') | « net/http/http_network_transaction.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698