| OLD | NEW |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |