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

Side by Side 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, 4 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/http/http_network_transaction.h" 5 #include "net/http/http_network_transaction.h"
6 6
7 #include <math.h> // ceil 7 #include <math.h> // ceil
8 #include <stdarg.h> 8 #include <stdarg.h>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after
275 "\r\n\r\n"; 275 "\r\n\r\n";
276 } 276 }
277 277
278 // Either |write_failure| specifies a write failure or |read_failure| 278 // Either |write_failure| specifies a write failure or |read_failure|
279 // specifies a read failure when using a reused socket. In either case, the 279 // specifies a read failure when using a reused socket. In either case, the
280 // failure should cause the network transaction to resend the request, and the 280 // failure should cause the network transaction to resend the request, and the
281 // other argument should be NULL. 281 // other argument should be NULL.
282 void KeepAliveConnectionResendRequestTest(const MockWrite* write_failure, 282 void KeepAliveConnectionResendRequestTest(const MockWrite* write_failure,
283 const MockRead* read_failure); 283 const MockRead* read_failure);
284 284
285 // Test behaviour of retries when a request can be retried automatically.
286 void PartialDataRetryTest(int expected_status,
287 const char* expected_response_data,
288 MockRead read1[],
289 size_t read1_count,
290 MockRead read2[] = NULL,
291 size_t read2_count = 0,
292 MockRead read3[] = NULL,
293 size_t read3_count = 0,
294 MockRead read4[] = NULL,
295 size_t read4_count = 0,
296 MockRead read5[] = NULL,
297 size_t read5_count = 0);
298
285 // Either |write_failure| specifies a write failure or |read_failure| 299 // Either |write_failure| specifies a write failure or |read_failure|
286 // specifies a read failure when using a reused socket. In either case, the 300 // specifies a read failure when using a reused socket. In either case, the
287 // failure should cause the network transaction to resend the request, and the 301 // failure should cause the network transaction to resend the request, and the
288 // other argument should be NULL. 302 // other argument should be NULL.
289 void PreconnectErrorResendRequestTest(const MockWrite* write_failure, 303 void PreconnectErrorResendRequestTest(const MockWrite* write_failure,
290 const MockRead* read_failure, 304 const MockRead* read_failure,
291 bool use_spdy); 305 bool use_spdy);
292 306
293 SimpleGetHelperResult SimpleGetHelperForData(StaticSocketDataProvider* data[], 307 SimpleGetHelperResult SimpleGetHelperForData(StaticSocketDataProvider* data[],
294 size_t data_count) { 308 size_t data_count) {
(...skipping 1035 matching lines...) Expand 10 before | Expand all | Expand 10 after
1330 EXPECT_TRUE(response->headers.get() != NULL); 1344 EXPECT_TRUE(response->headers.get() != NULL);
1331 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); 1345 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine());
1332 1346
1333 std::string response_data; 1347 std::string response_data;
1334 rv = ReadTransaction(trans.get(), &response_data); 1348 rv = ReadTransaction(trans.get(), &response_data);
1335 EXPECT_EQ(OK, rv); 1349 EXPECT_EQ(OK, rv);
1336 EXPECT_EQ(kExpectedResponseData[i], response_data); 1350 EXPECT_EQ(kExpectedResponseData[i], response_data);
1337 } 1351 }
1338 } 1352 }
1339 1353
1354 void HttpNetworkTransactionTest::PartialDataRetryTest(
1355 int expected_status,
1356 const char* expected_response_data,
1357 MockRead read1[],
1358 size_t read1_count,
1359 MockRead read2[],
1360 size_t read2_count,
1361 MockRead read3[],
1362 size_t read3_count,
1363 MockRead read4[],
1364 size_t read4_count,
1365 MockRead read5[],
1366 size_t read5_count) {
1367 HttpRequestInfo request;
1368 request.method = "GET";
1369 request.url = GURL("http://www.foo.com/");
1370 request.load_flags = 0;
1371
1372 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_));
1373
1374 // Written data for successfully sending both requests.
1375 MockWrite data1_writes[] = {
1376 MockWrite("GET / HTTP/1.1\r\n"
1377 "Host: www.foo.com\r\n"
1378 "Connection: keep-alive\r\n\r\n")
1379 };
1380
1381 StaticSocketDataProvider data1(read1, read1_count,
1382 data1_writes, arraysize(data1_writes));
1383 session_deps_.socket_factory->AddSocketDataProvider(&data1);
1384
1385 StaticSocketDataProvider data2(read2, read2_count, NULL, 0);
1386 if (read2)
1387 session_deps_.socket_factory->AddSocketDataProvider(&data2);
1388
1389 StaticSocketDataProvider data3(read3, read3_count, NULL, 0);
1390 if (read3)
1391 session_deps_.socket_factory->AddSocketDataProvider(&data3);
1392
1393 StaticSocketDataProvider data4(read4, read4_count, NULL, 0);
1394 if (read4)
1395 session_deps_.socket_factory->AddSocketDataProvider(&data4);
1396
1397 StaticSocketDataProvider data5(read5, read5_count, NULL, 0);
1398 if (read5)
1399 session_deps_.socket_factory->AddSocketDataProvider(&data5);
1400
1401 uint32 first_socket_log_id = NetLog::Source::kInvalidId;
1402 TestCompletionCallback callback;
1403
1404 scoped_ptr<HttpTransaction> trans(
1405 new HttpNetworkTransaction(DEFAULT_PRIORITY, session.get()));
1406
1407 int rv = trans->Start(&request, callback.callback(), BoundNetLog());
1408 EXPECT_EQ(ERR_IO_PENDING, rv);
1409
1410 rv = callback.WaitForResult();
1411 EXPECT_EQ(OK, rv);
1412
1413 const HttpResponseInfo* response = trans->GetResponseInfo();
1414 ASSERT_TRUE(response != NULL);
1415
1416 EXPECT_TRUE(response->headers.get() != NULL);
1417 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine());
1418
1419 std::string response_data;
1420 rv = ReadTransaction(trans.get(), &response_data);
1421 EXPECT_EQ(expected_status, rv);
1422 EXPECT_EQ(expected_response_data, response_data);
1423 }
1424
1340 void HttpNetworkTransactionTest::PreconnectErrorResendRequestTest( 1425 void HttpNetworkTransactionTest::PreconnectErrorResendRequestTest(
1341 const MockWrite* write_failure, 1426 const MockWrite* write_failure,
1342 const MockRead* read_failure, 1427 const MockRead* read_failure,
1343 bool use_spdy) { 1428 bool use_spdy) {
1344 HttpRequestInfo request; 1429 HttpRequestInfo request;
1345 request.method = "GET"; 1430 request.method = "GET";
1346 request.url = GURL("https://www.foo.com/"); 1431 request.url = GURL("https://www.foo.com/");
1347 request.load_flags = 0; 1432 request.load_flags = 0;
1348 1433
1349 CapturingNetLog net_log; 1434 CapturingNetLog net_log;
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
1531 TEST_P(HttpNetworkTransactionTest, SpdyPreconnectErrorEOF) { 1616 TEST_P(HttpNetworkTransactionTest, SpdyPreconnectErrorEOF) {
1532 MockRead read_failure(SYNCHRONOUS, OK); // EOF 1617 MockRead read_failure(SYNCHRONOUS, OK); // EOF
1533 PreconnectErrorResendRequestTest(NULL, &read_failure, true); 1618 PreconnectErrorResendRequestTest(NULL, &read_failure, true);
1534 } 1619 }
1535 1620
1536 TEST_P(HttpNetworkTransactionTest, SpdyPreconnectErrorAsyncEOF) { 1621 TEST_P(HttpNetworkTransactionTest, SpdyPreconnectErrorAsyncEOF) {
1537 MockRead read_failure(ASYNC, OK); // EOF 1622 MockRead read_failure(ASYNC, OK); // EOF
1538 PreconnectErrorResendRequestTest(NULL, &read_failure, true); 1623 PreconnectErrorResendRequestTest(NULL, &read_failure, true);
1539 } 1624 }
1540 1625
1626 TEST_P(HttpNetworkTransactionTest, PartialDataRetryInHeader) {
1627 MockRead data_reads1[] = {
1628 MockRead("HTTP/1.1 200 OK\r\n"),
1629 MockRead("Content-Lengt"),
1630 MockRead(ASYNC, ERR_CONNECTION_RESET),
1631 };
1632
1633 MockRead data_reads2[] = {
1634 MockRead("HTTP/1.1 200 OK\r\n"),
1635 MockRead("Content-Length: 2\r\n\r\n"),
1636 MockRead("AA"),
1637 MockRead(ASYNC, OK),
1638 };
1639
1640 PartialDataRetryTest(OK, "AA", data_reads1, arraysize(data_reads1),
1641 data_reads2, arraysize(data_reads2));
1642 }
1643
1644 TEST_P(HttpNetworkTransactionTest, PartialDataRetryFullHeaderNoData) {
1645 MockRead data_reads1[] = {
1646 MockRead("HTTP/1.1 200 OK\r\n"),
1647 MockRead("Cache-Control: max-age=100\r\n"),
1648 MockRead("Content-Length: 2\r\n\r\n"),
1649 MockRead(ASYNC, ERR_CONNECTION_RESET),
1650 };
1651
1652 MockRead data_reads2[] = {
1653 MockRead("HTTP/1.1 200 OK\r\n"),
1654 MockRead("Cache-Control: max-age=100\r\n"),
1655 MockRead("Content-Length: 2\r\n\r\nAB"),
1656 MockRead(ASYNC, OK),
1657 };
1658
1659 PartialDataRetryTest(OK, "AB", data_reads1, arraysize(data_reads1),
1660 data_reads2, arraysize(data_reads2));
1661 }
1662
1663 TEST_P(HttpNetworkTransactionTest, PartialDataRetryMaxAgeSuccess) {
1664 MockRead data_reads1[] = {
1665 MockRead("HTTP/1.1 200 OK\r\n"),
1666 MockRead("Cache-Control: max-age=100\r\n"),
1667 MockRead("Content-Length: 2\r\n\r\nA"),
1668 MockRead(ASYNC, ERR_CONNECTION_RESET),
1669 };
1670
1671 MockRead data_reads2[] = {
1672 MockRead("HTTP/1.1 200 OK\r\n"),
1673 MockRead("Cache-Control: max-age=100\r\n"),
1674 MockRead("Content-Length: 2\r\n\r\nAC"),
1675 MockRead(ASYNC, OK),
1676 };
1677
1678 PartialDataRetryTest(OK, "AC", data_reads1, arraysize(data_reads1),
1679 data_reads2, arraysize(data_reads2));
1680 }
1681
1682 TEST_P(HttpNetworkTransactionTest, PartialDataRetryInBodyPragmaNoCache) {
1683 MockRead data_reads1[] = {
1684 MockRead("HTTP/1.1 200 OK\r\n"
1685 "Pragma: no-cache\r\n"
1686 "Content-Length: 2\r\n\r\n"),
1687 MockRead("A"),
1688 MockRead(ASYNC, ERR_CONNECTION_RESET),
1689 };
1690
1691 PartialDataRetryTest(ERR_CONNECTION_RESET, "", data_reads1,
1692 arraysize(data_reads1));
1693 }
1694
1695 TEST_P(HttpNetworkTransactionTest, PartialDataRetryMaxAgeFail) {
1696 MockRead data_reads1[] = {
1697 MockRead("HTTP/1.1 200 OK\r\n"
1698 "Cache-Control: max-age=-1\r\n"),
1699 MockRead("Content-Length: 2\r\n\r\n"),
1700 MockRead(ASYNC, ERR_CONNECTION_RESET),
1701 };
1702
1703 PartialDataRetryTest(ERR_CONNECTION_RESET, "", data_reads1,
1704 arraysize(data_reads1));
1705 }
1706
1707 TEST_P(HttpNetworkTransactionTest, PartialDataRetryAlmostExpired) {
1708 MockRead data_reads1[] = {
1709 MockRead("HTTP/1.1 200 OK\r\n"
1710 "Date: Wed,14 Dec 2011 15:50:00 GMT\r\n"),
1711 MockRead("Expires: Wed,14 Dec 2011 15:50:59 GMT\r\n"),
1712 MockRead("Content-Length: 2\r\n\r\nA"),
1713 MockRead(ASYNC, ERR_CONNECTION_RESET),
1714 };
1715
1716 PartialDataRetryTest(ERR_CONNECTION_RESET, "", data_reads1,
1717 arraysize(data_reads1));
1718 }
1719
1720 TEST_P(HttpNetworkTransactionTest, PartialDataRetryInBodyMultipleReads) {
1721 MockRead data_reads1[] = {
1722 MockRead("HTTP/1.1 200 OK\r\n"
1723 "Content-Length: 2\r\n"),
1724 MockRead("Cache-Control: max-age=100\r\n\r\nA"),
1725 MockRead(ASYNC, ERR_CONNECTION_RESET),
1726 };
1727
1728 MockRead data_reads2[] = {
1729 MockRead("HTTP/1.1 200 OK\r\n"
1730 "Content-Length: 2\r\n"),
1731 MockRead("Cache-Control: max-age=100\r\n\r\nA"),
1732 MockRead("G"),
1733 MockRead(ASYNC, OK),
1734 };
1735
1736 PartialDataRetryTest(OK, "AG", data_reads1, arraysize(data_reads1),
1737 data_reads2, arraysize(data_reads2));
1738 }
1739
1740 TEST_P(HttpNetworkTransactionTest, PartialDataRetryInLargeBody) {
1741 MockRead data_reads1[] = {
1742 MockRead("HTTP/1.1 200 OK\r\n"
1743 "Cache-Control: max-age=100\r\n"
1744 "Content-Length: 400\r\n\r\n"
1745 "012345678901234567890123456789012345678901234567890123456789"
1746 "012345678901234567890123456789012345678901234567890123456789"
1747 "012345678901234567890123456789012345678901234567890123456789"
1748 "012345678901234567890123456789012345678901234567890123456789"),
1749 MockRead("012345678901234567890123456789012345678901234567890123456789"),
1750 MockRead(ASYNC, ERR_CONNECTION_RESET),
1751 };
1752
1753 MockRead data_reads2[] = {
1754 MockRead("HTTP/1.1 200 OK\r\n"
1755 "Cache-Control: max-age=100\r\n"
1756 "Content-Length: 400\r\n\r\n"
1757 "012345678901234567890123456789012345678901234567890123456789"
1758 "012345678901234567890123456789012345678901234567890123456789"),
1759 MockRead("012345678901234567890123456789012345678901234567890123456789"),
1760 MockRead("012345678901234567890123456789012345678901234567890123456789"
1761 "012345678901234567890123456789012345678901234567890123456789"
1762 "012345678901234567890123456789012345678901234567890123456789"
1763 "0123456789012345678901234567890123456789"),
1764 MockRead(ASYNC, OK),
1765 };
1766
1767 PartialDataRetryTest(OK,
1768 "012345678901234567890123456789012345678901234567890123456789"
1769 "012345678901234567890123456789012345678901234567890123456789"
1770 "012345678901234567890123456789012345678901234567890123456789"
1771 "012345678901234567890123456789012345678901234567890123456789"
1772 "012345678901234567890123456789012345678901234567890123456789"
1773 "012345678901234567890123456789012345678901234567890123456789"
1774 "0123456789012345678901234567890123456789",
1775 data_reads1, arraysize(data_reads1),
1776 data_reads2, arraysize(data_reads2));
1777 }
1778
1779 TEST_P(HttpNetworkTransactionTest, PartialDataRetryInBodyRangeMultipleReads) {
1780 MockRead data_reads1[] = {
1781 MockRead("HTTP/1.1 200 OK\r\n"
1782 "ETag: A023EF02BD589BC472A2D6774EAE3C58\r\n"
1783 "Date: Tue, 15 Nov 1994 08:12:31 GMT\r\n"
1784 "Expires: Tue, 15 Nov 1994 09:12:31 GMT\r\n"
1785 "Last-Modified: Wed, 14 Dec 2011 15:50:59 GMT\r\n"
1786 "Accept-Ranges: bytes\r\n"
1787 "Content-Length: 3\r\n\r\nA"),
1788 MockRead(ASYNC, ERR_CONNECTION_RESET),
1789 };
1790
1791 MockRead data_reads2[] = {
1792 MockRead("HTTP/1.1 206 Partial Content\r\n"
1793 "ETag: A023EF02BD589BC472A2D6774EAE3C58\r\n"
1794 "Date: Tue, 15 Nov 1994 08:12:31 GMT\r\n"
1795 "Expires: Tue, 15 Nov 1994 09:12:31 GMT\r\n"
1796 "Last-Modified: Wed, 14 Dec 2011 15:50:59 GMT\r\n"
1797 "Content-Length: 2\r\n"
1798 "Content-Range: bytes 1-2/3\r\n\r\n"),
1799 MockRead("HA"),
1800 MockRead(ASYNC, OK),
1801 };
1802
1803 PartialDataRetryTest(OK, "AHA", data_reads1, arraysize(data_reads1),
1804 data_reads2, arraysize(data_reads2));
1805 }
1806
1807 TEST_P(HttpNetworkTransactionTest, PartialDataRetryInBodyRangeSingleRead) {
1808 MockRead data_reads1[] = {
1809 MockRead("HTTP/1.1 200 OK\r\n"
1810 "ETag: A023EF02BD589BC472A2D6774EAE3C58\r\n"
1811 "Date: Tue, 15 Nov 1994 08:12:31 GMT\r\n"
1812 "Expires: Tue, 15 Nov 1994 09:12:31 GMT\r\n"
1813 "Last-Modified: Wed,14 Dec 2011 15:50:59 GMT\r\n"
1814 "Accept-Ranges: bytes\r\n"
1815 "Content-Length: 3\r\n\r\nA"),
1816 MockRead(ASYNC, ERR_CONNECTION_RESET),
1817 };
1818
1819 MockRead data_reads2[] = {
1820 MockRead("HTTP/1.1 206 Partial Content\r\n"
1821 "ETag: A023EF02BD589BC472A2D6774EAE3C58\r\n"
1822 "Date: Tue, 15 Nov 1994 08:12:31 GMT\r\n"
1823 "Expires: Tue, 15 Nov 1994 09:12:31 GMT\r\n"
1824 "Last-Modified: Wed,14 Dec 2011 15:50:59 GMT\r\n"
1825 "Accept-Ranges: bytes\r\n"
1826 "Content-Length: 2\r\n"
1827 "Content-Range: bytes 1-2/3\r\n\r\nIA"),
1828 MockRead(ASYNC, OK),
1829 };
1830
1831 PartialDataRetryTest(OK, "AIA", data_reads1, arraysize(data_reads1),
1832 data_reads2, arraysize(data_reads2));
1833 }
1834
1835 TEST_P(HttpNetworkTransactionTest, PartialDataRetryChunked) {
1836 MockRead data_reads1[] = {
1837 MockRead("HTTP/1.1 200 OK\r\n"
1838 "Transfer-Encoding: chunked\r\n"
1839 "Cache-Control: max-age=100\r\n\r\n"),
1840 MockRead("2\r\n"),
1841 MockRead("A"),
1842 MockRead(ASYNC, ERR_CONNECTION_RESET),
1843 };
1844
1845 MockRead data_reads2[] = {
1846 MockRead("HTTP/1.1 200 OK\r\n"
1847 "Transfer-Encoding: chunked\r\n"
1848 "Cache-Control: max-age=100\r\n\r\n"),
1849 MockRead("2\r\n"),
1850 MockRead("AJ\r\n"),
1851 MockRead("2\r\n"),
1852 MockRead("AJ\r\n"),
1853 MockRead("0\r\n\r\n"),
1854 MockRead(ASYNC, OK),
1855 };
1856
1857 PartialDataRetryTest(OK, "AJAJ", data_reads1, arraysize(data_reads1),
1858 data_reads2, arraysize(data_reads2));
1859 }
1860
1861 TEST_P(HttpNetworkTransactionTest, PartialDataRetryChangedContentNormal) {
1862 MockRead data_reads1[] = {
1863 MockRead("HTTP/1.1 200 OK\r\n"
1864 "Cache-Control: max-age=100\r\n"\
1865 "Content-Length: 2\r\n\r\nA"),
1866 MockRead(ASYNC, ERR_CONNECTION_RESET),
1867 };
1868
1869 MockRead data_reads2[] = {
1870 MockRead("HTTP/1.1 200 OK\r\n"\
1871 "Cache-Control: max-age=100\r\n"\
1872 "Content-Length: 2\r\n\r\nOC"),
1873 MockRead(ASYNC, OK),
1874 };
1875
1876 PartialDataRetryTest(ERR_RETRY_HASH_MISMATCH, "", data_reads1,
1877 arraysize(data_reads1), data_reads2, arraysize(data_reads2));
1878 }
1879
1880 TEST_P(HttpNetworkTransactionTest, PartialDataRetryChangedContentChunked) {
1881 MockRead data_reads1[] = {
1882 MockRead("HTTP/1.1 200 OK\r\n"\
1883 "Transfer-Encoding: chunked\r\n"\
1884 "Cache-Control: max-age=100\r\n\r\n"),
1885 MockRead("1\r\n"),
1886 MockRead("A\r\n"),
1887 MockRead(ASYNC, ERR_CONNECTION_RESET),
1888 };
1889
1890 MockRead data_reads2[] = {
1891 MockRead("HTTP/1.1 200 OK\r\n"\
1892 "Transfer-Encoding: chunked\r\n"\
1893 "Cache-Control: max-age=100\r\n\r\n"),
1894 MockRead("1\r\n"),
1895 MockRead("B\r\n"),
1896 MockRead("1\r\nJ\r\n"),
1897 MockRead("0\r\n\r\n"),
1898 MockRead(ASYNC, OK),
1899 };
1900
1901 PartialDataRetryTest(ERR_RETRY_HASH_MISMATCH, "", data_reads1,
1902 arraysize(data_reads1), data_reads2, arraysize(data_reads2));
1903 }
1904
1905 TEST_P(HttpNetworkTransactionTest, PartialDataRetryTwoTimes) {
1906 MockRead data_reads1[] = {
1907 MockRead("HTTP/1.1 200 OK\r\n"\
1908 "Cache-Control: max-age=100\r\n"\
1909 "Content-Length: 3\r\n\r\nA"),
1910 MockRead(ASYNC, ERR_CONNECTION_RESET),
1911 };
1912
1913 MockRead data_reads2[] = {
1914 MockRead("HTTP/1.1 200 OK\r\n"\
1915 "Cache-Control: max-age=100\r\n"\
1916 "Content-Length: 3\r\n\r\nAB"),
1917 MockRead(ASYNC, ERR_CONNECTION_RESET),
1918 };
1919
1920 MockRead data_reads3[] = {
1921 MockRead("HTTP/1.1 200 OK\r\n"\
1922 "Cache-Control: max-age=100\r\n"\
1923 "Content-Length: 3\r\n\r\nABC"),
1924 MockRead(ASYNC, OK),
1925 };
1926
1927 PartialDataRetryTest(OK, "ABC", data_reads1, arraysize(data_reads1),
1928 data_reads2, arraysize(data_reads2), data_reads3, arraysize(data_reads3));
1929 }
1930
1931 TEST_P(HttpNetworkTransactionTest, PartialDataRetryFourTimes) {
1932 MockRead data_reads1[] = {
1933 MockRead("HTTP/1.1 200 OK\r\n"\
1934 "Cache-Control: max-age=100\r\n"\
1935 "Content-Length: 5\r\n\r\nA"),
1936 MockRead(ASYNC, ERR_CONNECTION_RESET),
1937 };
1938
1939 MockRead data_reads2[] = {
1940 MockRead("HTTP/1.1 200 OK\r\n"\
1941 "Cache-Control: max-age=100\r\n"\
1942 "Content-Length: 5\r\n\r\nAB"),
1943 MockRead(ASYNC, ERR_CONNECTION_RESET),
1944 };
1945
1946 MockRead data_reads3[] = {
1947 MockRead("HTTP/1.1 200 OK\r\n"\
1948 "Cache-Control: max-age=100\r\n"\
1949 "Content-Length: 5\r\n\r\nABC"),
1950 MockRead(ASYNC, ERR_CONNECTION_RESET),
1951 };
1952
1953 MockRead data_reads4[] = {
1954 MockRead("HTTP/1.1 200 OK\r\n"\
1955 "Cache-Control: max-age=100\r\n"\
1956 "Content-Length: 5\r\n\r\nABCD"),
1957 MockRead(ASYNC, ERR_CONNECTION_RESET),
1958 };
1959
1960 MockRead data_reads5[] = {
1961 MockRead("HTTP/1.1 200 OK\r\n"\
1962 "Cache-Control: max-age=100\r\n"\
1963 "Content-Length: 5\r\n\r\nABCDE"),
1964 MockRead(ASYNC, OK),
1965 };
1966
1967 PartialDataRetryTest(OK, "ABCDE", data_reads1, arraysize(data_reads1),
1968 data_reads2, arraysize(data_reads2), data_reads3, arraysize(data_reads3),
1969 data_reads4, arraysize(data_reads4), data_reads5, arraysize(data_reads5));
1970 }
1971
1972 TEST_P(HttpNetworkTransactionTest, PartialDataRetrySmallerContent) {
1973 MockRead data_reads1[] = {
1974 MockRead("HTTP/1.1 200 OK\r\n"\
1975 "Cache-Control: max-age=100\r\n"\
1976 "Content-Length: 5\r\n\r\nAB"),
1977 MockRead(ASYNC, ERR_CONNECTION_RESET),
1978 };
1979
1980 MockRead data_reads2[] = {
1981 MockRead("HTTP/1.1 200 OK\r\n"\
1982 "Cache-Control: max-age=100\r\n"\
1983 "Content-Len"),
1984 MockRead(ASYNC, ERR_CONNECTION_RESET),
1985 };
1986
1987 MockRead data_reads3[] = {
1988 MockRead("HTTP/1.1 200 OK\r\n"\
1989 "Cache-Control: max-age=100\r\n"\
1990 "Content-Length: 5\r\n\r\nABCDE"),
1991 MockRead(ASYNC, OK),
1992 };
1993
1994 PartialDataRetryTest(OK, "ABCDE", data_reads1, arraysize(data_reads1),
1995 data_reads2, arraysize(data_reads2), data_reads3, arraysize(data_reads3));
1996 }
1997
1998 TEST_P(HttpNetworkTransactionTest, PartialDataRetryContentLengthChange) {
1999 MockRead data_reads1[] = {
2000 MockRead("HTTP/1.1 200 OK\r\n"\
2001 "Cache-Control: max-age=100\r\n"\
2002 "Content-Length: 2\r\n\r\nA"),
2003 MockRead(ASYNC, ERR_CONNECTION_RESET),
2004 };
2005
2006 MockRead data_reads2[] = {
2007 MockRead("HTTP/1.1 200 OK\r\n"\
2008 "Cache-Control: max-age=100\r\n"\
2009 "Content-Length: 3\r\n\r\nABC"),
2010 MockRead(ASYNC, OK),
2011 };
2012 PartialDataRetryTest(ERR_RETRY_CONTENT_UPDATED, "", data_reads1,
2013 arraysize(data_reads1), data_reads2, arraysize(data_reads2));
2014 }
2015
2016 TEST_P(HttpNetworkTransactionTest, PartialDataRetryEtagOK) {
2017 MockRead data_reads1[] = {
2018 MockRead("HTTP/1.1 200 OK\r\n"\
2019 "ETag: A023EF02BD589BC472A2D6774EAE3C58\r\n"\
2020 "Last-Modified: Wed,14 Dec 2011 15:50:59 GMT\r\n"\
2021 "Content-Length: 2\r\n\r\nA"),
2022 MockRead(ASYNC, ERR_CONNECTION_RESET),
2023 };
2024
2025 MockRead data_reads2[] = {
2026 MockRead("HTTP/1.1 200 OK\r\n"\
2027 "ETag: A023EF02BD589BC472A2D6774EAE3C58\r\n"\
2028 "Last-Modified: Wed,14 Dec 2011 15:50:59 GMT\r\n"\
2029 "Content-Length: 2\r\n\r\nA1"),
2030 MockRead(ASYNC, OK),
2031 };
2032
2033 PartialDataRetryTest(OK, "A1", data_reads1, arraysize(data_reads1),
2034 data_reads2, arraysize(data_reads2));
2035 }
2036
2037 TEST_P(HttpNetworkTransactionTest, PartialDataRetryLastModifiedChanged) {
2038 MockRead data_reads1[] = {
2039 MockRead("HTTP/1.1 200 OK\r\n"\
2040 "Date: Tue, 15 Nov 1994 08:12:31 GMT\r\n"\
2041 "Last-Modified: Tue, 15 Nov 1994 08:10:31 GMT\r\n"\
2042 "Content-Length: 2\r\n\r\nA"),
2043 MockRead(ASYNC, ERR_CONNECTION_RESET),
2044 };
2045
2046 MockRead data_reads2[] = {
2047 MockRead("HTTP/1.1 200 OK\r\n"\
2048 "Date: Tue, 15 Nov 1994 08:12:33 GMT\r\n"\
2049 "Last-Modified: Tue, 15 Nov 1994 08:12:32 GMT\r\n"\
2050 "Content-Length: 2\r\n\r\nA1"),
2051 MockRead(ASYNC, OK),
2052 };
2053
2054 PartialDataRetryTest(ERR_RETRY_CONTENT_UPDATED, "", data_reads1,
2055 arraysize(data_reads1), data_reads2, arraysize(data_reads2));
2056 }
2057
2058 TEST_P(HttpNetworkTransactionTest, PartialDataRetryEtagChange) {
2059 MockRead data_reads1[] = {
2060 MockRead("HTTP/1.1 200 OK\r\n"\
2061 "ETag: A023EF02BD589BC472A2D6774EAE3C58\r\n"\
2062 "Last-Modified: Wed,14 Dec 2011 15:50:59 GMT\r\n"\
2063 "Content-Length: 2\r\n\r\nA"),
2064 MockRead(ASYNC, ERR_CONNECTION_RESET),
2065 };
2066
2067 MockRead data_reads2[] = {
2068 MockRead("HTTP/1.1 200 OK\r\n"\
2069 "ETag: A023EF02BD589BC472A2D6774EAE3C59\r\n"\
2070 "Last-Modified: Wed,14 Dec 2011 15:50:59 GMT\r\n"\
2071 "Content-Length: 2\r\n\r\nA1"),
2072 MockRead(ASYNC, OK),
2073 };
2074
2075 PartialDataRetryTest(ERR_RETRY_CONTENT_UPDATED, "", data_reads1,
2076 arraysize(data_reads1), data_reads2, arraysize(data_reads2));
2077 }
2078
1541 TEST_P(HttpNetworkTransactionTest, NonKeepAliveConnectionReset) { 2079 TEST_P(HttpNetworkTransactionTest, NonKeepAliveConnectionReset) {
1542 HttpRequestInfo request; 2080 HttpRequestInfo request;
1543 request.method = "GET"; 2081 request.method = "GET";
1544 request.url = GURL("http://www.google.com/"); 2082 request.url = GURL("http://www.google.com/");
1545 request.load_flags = 0; 2083 request.load_flags = 0;
1546 2084
1547 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_)); 2085 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps_));
1548 scoped_ptr<HttpTransaction> trans( 2086 scoped_ptr<HttpTransaction> trans(
1549 new HttpNetworkTransaction(DEFAULT_PRIORITY, session)); 2087 new HttpNetworkTransaction(DEFAULT_PRIORITY, session));
1550 2088
(...skipping 11652 matching lines...) Expand 10 before | Expand all | Expand 10 after
13203 EXPECT_EQ(ERR_IO_PENDING, rv); 13741 EXPECT_EQ(ERR_IO_PENDING, rv);
13204 13742
13205 rv = callback.WaitForResult(); 13743 rv = callback.WaitForResult();
13206 EXPECT_EQ(ERR_CONNECTION_RESET, rv); 13744 EXPECT_EQ(ERR_CONNECTION_RESET, rv);
13207 13745
13208 const HttpResponseInfo* response = trans->GetResponseInfo(); 13746 const HttpResponseInfo* response = trans->GetResponseInfo();
13209 EXPECT_TRUE(response == NULL); 13747 EXPECT_TRUE(response == NULL);
13210 } 13748 }
13211 13749
13212 } // namespace net 13750 } // namespace net
OLDNEW
« 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