| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <cmath> | 5 #include <cmath> |
| 6 #include <memory> | 6 #include <memory> |
| 7 #include <string> | 7 #include <string> |
| 8 #include <utility> | 8 #include <utility> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| (...skipping 1763 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1774 helper.VerifyDataConsumed(); | 1774 helper.VerifyDataConsumed(); |
| 1775 } | 1775 } |
| 1776 | 1776 |
| 1777 // The client upon cancellation tries to send a RST_STREAM frame. The mock | 1777 // The client upon cancellation tries to send a RST_STREAM frame. The mock |
| 1778 // socket causes the TCP write to return zero. This test checks that the client | 1778 // socket causes the TCP write to return zero. This test checks that the client |
| 1779 // tries to queue up the RST_STREAM frame again. | 1779 // tries to queue up the RST_STREAM frame again. |
| 1780 TEST_F(SpdyNetworkTransactionTest, SocketWriteReturnsZero) { | 1780 TEST_F(SpdyNetworkTransactionTest, SocketWriteReturnsZero) { |
| 1781 SpdySerializedFrame req( | 1781 SpdySerializedFrame req( |
| 1782 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 1782 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 1783 SpdySerializedFrame rst( | 1783 SpdySerializedFrame rst( |
| 1784 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 1784 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_CANCEL)); |
| 1785 MockWrite writes[] = { | 1785 MockWrite writes[] = { |
| 1786 CreateMockWrite(req, 0, SYNCHRONOUS), MockWrite(SYNCHRONOUS, 0, 0, 2), | 1786 CreateMockWrite(req, 0, SYNCHRONOUS), MockWrite(SYNCHRONOUS, 0, 0, 2), |
| 1787 CreateMockWrite(rst, 3, SYNCHRONOUS), | 1787 CreateMockWrite(rst, 3, SYNCHRONOUS), |
| 1788 }; | 1788 }; |
| 1789 | 1789 |
| 1790 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 1790 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
| 1791 MockRead reads[] = { | 1791 MockRead reads[] = { |
| 1792 CreateMockRead(resp, 1, ASYNC), MockRead(ASYNC, 0, 0, 4) // EOF | 1792 CreateMockRead(resp, 1, ASYNC), MockRead(ASYNC, 0, 0, 4) // EOF |
| 1793 }; | 1793 }; |
| 1794 | 1794 |
| (...skipping 17 matching lines...) Expand all Loading... |
| 1812 // Test that the transaction doesn't crash when we don't have a reply. | 1812 // Test that the transaction doesn't crash when we don't have a reply. |
| 1813 TEST_F(SpdyNetworkTransactionTest, ResponseWithoutHeaders) { | 1813 TEST_F(SpdyNetworkTransactionTest, ResponseWithoutHeaders) { |
| 1814 SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true)); | 1814 SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
| 1815 MockRead reads[] = { | 1815 MockRead reads[] = { |
| 1816 CreateMockRead(body, 1), MockRead(ASYNC, 0, 3) // EOF | 1816 CreateMockRead(body, 1), MockRead(ASYNC, 0, 3) // EOF |
| 1817 }; | 1817 }; |
| 1818 | 1818 |
| 1819 SpdySerializedFrame req( | 1819 SpdySerializedFrame req( |
| 1820 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 1820 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 1821 SpdySerializedFrame rst( | 1821 SpdySerializedFrame rst( |
| 1822 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR)); | 1822 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_PROTOCOL_ERROR)); |
| 1823 MockWrite writes[] = { | 1823 MockWrite writes[] = { |
| 1824 CreateMockWrite(req, 0), CreateMockWrite(rst, 2), | 1824 CreateMockWrite(req, 0), CreateMockWrite(rst, 2), |
| 1825 }; | 1825 }; |
| 1826 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 1826 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| 1827 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, | 1827 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, |
| 1828 NetLogWithSource(), nullptr); | 1828 NetLogWithSource(), nullptr); |
| 1829 helper.RunToCompletion(&data); | 1829 helper.RunToCompletion(&data); |
| 1830 TransactionHelperResult out = helper.output(); | 1830 TransactionHelperResult out = helper.output(); |
| 1831 EXPECT_THAT(out.rv, IsError(ERR_SPDY_PROTOCOL_ERROR)); | 1831 EXPECT_THAT(out.rv, IsError(ERR_SPDY_PROTOCOL_ERROR)); |
| 1832 } | 1832 } |
| 1833 | 1833 |
| 1834 // Test that the transaction doesn't crash when we get two replies on the same | 1834 // Test that the transaction doesn't crash when we get two replies on the same |
| 1835 // stream ID. See http://crbug.com/45639. | 1835 // stream ID. See http://crbug.com/45639. |
| 1836 TEST_F(SpdyNetworkTransactionTest, ResponseWithTwoSynReplies) { | 1836 TEST_F(SpdyNetworkTransactionTest, ResponseWithTwoSynReplies) { |
| 1837 SpdySerializedFrame req( | 1837 SpdySerializedFrame req( |
| 1838 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 1838 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 1839 SpdySerializedFrame rst( | 1839 SpdySerializedFrame rst( |
| 1840 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR)); | 1840 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_PROTOCOL_ERROR)); |
| 1841 MockWrite writes[] = { | 1841 MockWrite writes[] = { |
| 1842 CreateMockWrite(req, 0), CreateMockWrite(rst, 4), | 1842 CreateMockWrite(req, 0), CreateMockWrite(rst, 4), |
| 1843 }; | 1843 }; |
| 1844 | 1844 |
| 1845 SpdySerializedFrame resp0(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 1845 SpdySerializedFrame resp0(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
| 1846 SpdySerializedFrame resp1(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 1846 SpdySerializedFrame resp1(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
| 1847 SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true)); | 1847 SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
| 1848 MockRead reads[] = { | 1848 MockRead reads[] = { |
| 1849 CreateMockRead(resp0, 1), CreateMockRead(resp1, 2), | 1849 CreateMockRead(resp0, 1), CreateMockRead(resp1, 2), |
| 1850 CreateMockRead(body, 3), MockRead(ASYNC, 0, 5) // EOF | 1850 CreateMockRead(body, 3), MockRead(ASYNC, 0, 5) // EOF |
| (...skipping 24 matching lines...) Expand all Loading... |
| 1875 EXPECT_THAT(rv, IsError(ERR_SPDY_PROTOCOL_ERROR)); | 1875 EXPECT_THAT(rv, IsError(ERR_SPDY_PROTOCOL_ERROR)); |
| 1876 | 1876 |
| 1877 helper.VerifyDataConsumed(); | 1877 helper.VerifyDataConsumed(); |
| 1878 } | 1878 } |
| 1879 | 1879 |
| 1880 TEST_F(SpdyNetworkTransactionTest, ResetReplyWithTransferEncoding) { | 1880 TEST_F(SpdyNetworkTransactionTest, ResetReplyWithTransferEncoding) { |
| 1881 // Construct the request. | 1881 // Construct the request. |
| 1882 SpdySerializedFrame req( | 1882 SpdySerializedFrame req( |
| 1883 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 1883 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 1884 SpdySerializedFrame rst( | 1884 SpdySerializedFrame rst( |
| 1885 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR)); | 1885 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_PROTOCOL_ERROR)); |
| 1886 MockWrite writes[] = { | 1886 MockWrite writes[] = { |
| 1887 CreateMockWrite(req, 0), CreateMockWrite(rst, 2), | 1887 CreateMockWrite(req, 0), CreateMockWrite(rst, 2), |
| 1888 }; | 1888 }; |
| 1889 | 1889 |
| 1890 const char* const headers[] = { | 1890 const char* const headers[] = { |
| 1891 "transfer-encoding", "chunked" | 1891 "transfer-encoding", "chunked" |
| 1892 }; | 1892 }; |
| 1893 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(headers, 1, 1)); | 1893 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(headers, 1, 1)); |
| 1894 SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true)); | 1894 SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
| 1895 MockRead reads[] = { | 1895 MockRead reads[] = { |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1908 helper.VerifyDataConsumed(); | 1908 helper.VerifyDataConsumed(); |
| 1909 } | 1909 } |
| 1910 | 1910 |
| 1911 TEST_F(SpdyNetworkTransactionTest, ResetPushWithTransferEncoding) { | 1911 TEST_F(SpdyNetworkTransactionTest, ResetPushWithTransferEncoding) { |
| 1912 // Construct the request. | 1912 // Construct the request. |
| 1913 SpdySerializedFrame req( | 1913 SpdySerializedFrame req( |
| 1914 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 1914 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 1915 SpdySerializedFrame priority( | 1915 SpdySerializedFrame priority( |
| 1916 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); | 1916 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
| 1917 SpdySerializedFrame rst( | 1917 SpdySerializedFrame rst( |
| 1918 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_PROTOCOL_ERROR)); | 1918 spdy_util_.ConstructSpdyRstStream(2, ERROR_CODE_PROTOCOL_ERROR)); |
| 1919 MockWrite writes[] = { | 1919 MockWrite writes[] = { |
| 1920 CreateMockWrite(req, 0), CreateMockWrite(priority, 3), | 1920 CreateMockWrite(req, 0), CreateMockWrite(priority, 3), |
| 1921 CreateMockWrite(rst, 5), | 1921 CreateMockWrite(rst, 5), |
| 1922 }; | 1922 }; |
| 1923 | 1923 |
| 1924 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 1924 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
| 1925 const char* const headers[] = { | 1925 const char* const headers[] = { |
| 1926 "transfer-encoding", "chunked" | 1926 "transfer-encoding", "chunked" |
| 1927 }; | 1927 }; |
| 1928 SpdySerializedFrame push( | 1928 SpdySerializedFrame push( |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1984 // MockClientSocketFactory) are still alive. | 1984 // MockClientSocketFactory) are still alive. |
| 1985 base::RunLoop().RunUntilIdle(); | 1985 base::RunLoop().RunUntilIdle(); |
| 1986 helper.VerifyDataNotConsumed(); | 1986 helper.VerifyDataNotConsumed(); |
| 1987 } | 1987 } |
| 1988 | 1988 |
| 1989 // Verify that the client sends a Rst Frame upon cancelling the stream. | 1989 // Verify that the client sends a Rst Frame upon cancelling the stream. |
| 1990 TEST_F(SpdyNetworkTransactionTest, CancelledTransactionSendRst) { | 1990 TEST_F(SpdyNetworkTransactionTest, CancelledTransactionSendRst) { |
| 1991 SpdySerializedFrame req( | 1991 SpdySerializedFrame req( |
| 1992 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 1992 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 1993 SpdySerializedFrame rst( | 1993 SpdySerializedFrame rst( |
| 1994 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 1994 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_CANCEL)); |
| 1995 MockWrite writes[] = { | 1995 MockWrite writes[] = { |
| 1996 CreateMockWrite(req, 0, SYNCHRONOUS), | 1996 CreateMockWrite(req, 0, SYNCHRONOUS), |
| 1997 CreateMockWrite(rst, 2, SYNCHRONOUS), | 1997 CreateMockWrite(rst, 2, SYNCHRONOUS), |
| 1998 }; | 1998 }; |
| 1999 | 1999 |
| 2000 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 2000 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
| 2001 MockRead reads[] = { | 2001 MockRead reads[] = { |
| 2002 CreateMockRead(resp, 1, ASYNC), MockRead(ASYNC, 0, 0, 3) // EOF | 2002 CreateMockRead(resp, 1, ASYNC), MockRead(ASYNC, 0, 0, 3) // EOF |
| 2003 }; | 2003 }; |
| 2004 | 2004 |
| (...skipping 334 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2339 | 2339 |
| 2340 // Setup writes/reads to www.example.org | 2340 // Setup writes/reads to www.example.org |
| 2341 SpdySerializedFrame req( | 2341 SpdySerializedFrame req( |
| 2342 spdy_util_.ConstructSpdyHeaders(1, std::move(headers), LOWEST, true)); | 2342 spdy_util_.ConstructSpdyHeaders(1, std::move(headers), LOWEST, true)); |
| 2343 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 2343 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
| 2344 SpdySerializedFrame rep(spdy_util_.ConstructSpdyPush( | 2344 SpdySerializedFrame rep(spdy_util_.ConstructSpdyPush( |
| 2345 nullptr, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str(), | 2345 nullptr, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str(), |
| 2346 "301 Moved Permanently", "http://www.foo.com/index.php")); | 2346 "301 Moved Permanently", "http://www.foo.com/index.php")); |
| 2347 SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true)); | 2347 SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
| 2348 SpdySerializedFrame rst( | 2348 SpdySerializedFrame rst( |
| 2349 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_CANCEL)); | 2349 spdy_util_.ConstructSpdyRstStream(2, ERROR_CODE_CANCEL)); |
| 2350 MockWrite writes[] = { | 2350 MockWrite writes[] = { |
| 2351 CreateMockWrite(req, 1), CreateMockWrite(rst, 6), | 2351 CreateMockWrite(req, 1), CreateMockWrite(rst, 6), |
| 2352 }; | 2352 }; |
| 2353 MockRead reads[] = { | 2353 MockRead reads[] = { |
| 2354 CreateMockRead(resp, 2), CreateMockRead(rep, 3), CreateMockRead(body, 4), | 2354 CreateMockRead(resp, 2), CreateMockRead(rep, 3), CreateMockRead(body, 4), |
| 2355 MockRead(ASYNC, ERR_IO_PENDING, 5), // Force a pause | 2355 MockRead(ASYNC, ERR_IO_PENDING, 5), // Force a pause |
| 2356 MockRead(ASYNC, 0, 0, 7) // EOF | 2356 MockRead(ASYNC, 0, 0, 7) // EOF |
| 2357 }; | 2357 }; |
| 2358 | 2358 |
| 2359 // Setup writes/reads to www.foo.com | 2359 // Setup writes/reads to www.foo.com |
| (...skipping 298 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2658 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); | 2658 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
| 2659 MockWrite writes[] = { | 2659 MockWrite writes[] = { |
| 2660 CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream2_priority, 3), | 2660 CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream2_priority, 3), |
| 2661 }; | 2661 }; |
| 2662 | 2662 |
| 2663 SpdySerializedFrame stream1_reply( | 2663 SpdySerializedFrame stream1_reply( |
| 2664 spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 2664 spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
| 2665 SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( | 2665 SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( |
| 2666 nullptr, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); | 2666 nullptr, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); |
| 2667 SpdySerializedFrame stream2_rst( | 2667 SpdySerializedFrame stream2_rst( |
| 2668 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_PROTOCOL_ERROR)); | 2668 spdy_util_.ConstructSpdyRstStream(2, ERROR_CODE_PROTOCOL_ERROR)); |
| 2669 SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); | 2669 SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
| 2670 MockRead reads[] = { | 2670 MockRead reads[] = { |
| 2671 CreateMockRead(stream1_reply, 1), | 2671 CreateMockRead(stream1_reply, 1), |
| 2672 CreateMockRead(stream2_syn, 2, SYNCHRONOUS), | 2672 CreateMockRead(stream2_syn, 2, SYNCHRONOUS), |
| 2673 CreateMockRead(stream2_rst, 4), | 2673 CreateMockRead(stream2_rst, 4), |
| 2674 CreateMockRead(stream1_body, 5, SYNCHRONOUS), | 2674 CreateMockRead(stream1_body, 5, SYNCHRONOUS), |
| 2675 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 6), // Force a pause | 2675 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 6), // Force a pause |
| 2676 }; | 2676 }; |
| 2677 | 2677 |
| 2678 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 2678 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 2704 } | 2704 } |
| 2705 | 2705 |
| 2706 // Verify that we don't leak streams and that we properly send a reset | 2706 // Verify that we don't leak streams and that we properly send a reset |
| 2707 // if the server pushes the same stream twice. | 2707 // if the server pushes the same stream twice. |
| 2708 TEST_F(SpdyNetworkTransactionTest, ServerPushDuplicate) { | 2708 TEST_F(SpdyNetworkTransactionTest, ServerPushDuplicate) { |
| 2709 SpdySerializedFrame stream1_syn( | 2709 SpdySerializedFrame stream1_syn( |
| 2710 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 2710 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 2711 SpdySerializedFrame stream2_priority( | 2711 SpdySerializedFrame stream2_priority( |
| 2712 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); | 2712 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
| 2713 SpdySerializedFrame stream3_rst( | 2713 SpdySerializedFrame stream3_rst( |
| 2714 spdy_util_.ConstructSpdyRstStream(4, RST_STREAM_PROTOCOL_ERROR)); | 2714 spdy_util_.ConstructSpdyRstStream(4, ERROR_CODE_PROTOCOL_ERROR)); |
| 2715 MockWrite writes[] = { | 2715 MockWrite writes[] = { |
| 2716 CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream2_priority, 3), | 2716 CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream2_priority, 3), |
| 2717 CreateMockWrite(stream3_rst, 5), | 2717 CreateMockWrite(stream3_rst, 5), |
| 2718 }; | 2718 }; |
| 2719 | 2719 |
| 2720 SpdySerializedFrame stream1_reply( | 2720 SpdySerializedFrame stream1_reply( |
| 2721 spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 2721 spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
| 2722 SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( | 2722 SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( |
| 2723 nullptr, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); | 2723 nullptr, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); |
| 2724 SpdySerializedFrame stream3_syn(spdy_util_.ConstructSpdyPush( | 2724 SpdySerializedFrame stream3_syn(spdy_util_.ConstructSpdyPush( |
| (...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2858 | 2858 |
| 2859 // Verify the pushed stream. | 2859 // Verify the pushed stream. |
| 2860 EXPECT_TRUE(response2.headers); | 2860 EXPECT_TRUE(response2.headers); |
| 2861 EXPECT_EQ("HTTP/1.1 200", response2.headers->GetStatusLine()); | 2861 EXPECT_EQ("HTTP/1.1 200", response2.headers->GetStatusLine()); |
| 2862 } | 2862 } |
| 2863 | 2863 |
| 2864 TEST_F(SpdyNetworkTransactionTest, ServerPushInvalidAssociatedStreamID0) { | 2864 TEST_F(SpdyNetworkTransactionTest, ServerPushInvalidAssociatedStreamID0) { |
| 2865 SpdySerializedFrame stream1_syn( | 2865 SpdySerializedFrame stream1_syn( |
| 2866 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 2866 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 2867 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway( | 2867 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway( |
| 2868 0, GOAWAY_PROTOCOL_ERROR, "Framer error: 1 (INVALID_STREAM_ID).")); | 2868 0, ERROR_CODE_PROTOCOL_ERROR, "Framer error: 1 (INVALID_STREAM_ID).")); |
| 2869 MockWrite writes[] = { | 2869 MockWrite writes[] = { |
| 2870 CreateMockWrite(stream1_syn, 0), CreateMockWrite(goaway, 3), | 2870 CreateMockWrite(stream1_syn, 0), CreateMockWrite(goaway, 3), |
| 2871 }; | 2871 }; |
| 2872 | 2872 |
| 2873 SpdySerializedFrame stream1_reply( | 2873 SpdySerializedFrame stream1_reply( |
| 2874 spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 2874 spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
| 2875 SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( | 2875 SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( |
| 2876 nullptr, 0, 2, 0, GetDefaultUrlWithPath("/foo.dat").c_str())); | 2876 nullptr, 0, 2, 0, GetDefaultUrlWithPath("/foo.dat").c_str())); |
| 2877 MockRead reads[] = { | 2877 MockRead reads[] = { |
| 2878 CreateMockRead(stream1_reply, 1), CreateMockRead(stream2_syn, 2), | 2878 CreateMockRead(stream1_reply, 1), CreateMockRead(stream2_syn, 2), |
| (...skipping 27 matching lines...) Expand all Loading... |
| 2906 HttpResponseInfo response = *trans->GetResponseInfo(); | 2906 HttpResponseInfo response = *trans->GetResponseInfo(); |
| 2907 EXPECT_TRUE(response.headers); | 2907 EXPECT_TRUE(response.headers); |
| 2908 EXPECT_EQ("HTTP/1.1 200", response.headers->GetStatusLine()); | 2908 EXPECT_EQ("HTTP/1.1 200", response.headers->GetStatusLine()); |
| 2909 } | 2909 } |
| 2910 | 2910 |
| 2911 TEST_F(SpdyNetworkTransactionTest, ServerPushInvalidAssociatedStreamID9) { | 2911 TEST_F(SpdyNetworkTransactionTest, ServerPushInvalidAssociatedStreamID9) { |
| 2912 SpdySerializedFrame stream1_syn( | 2912 SpdySerializedFrame stream1_syn( |
| 2913 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 2913 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 2914 SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); | 2914 SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
| 2915 SpdySerializedFrame stream2_rst( | 2915 SpdySerializedFrame stream2_rst( |
| 2916 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_STREAM_CLOSED)); | 2916 spdy_util_.ConstructSpdyRstStream(2, ERROR_CODE_STREAM_CLOSED)); |
| 2917 MockWrite writes[] = { | 2917 MockWrite writes[] = { |
| 2918 CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream2_rst, 3), | 2918 CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream2_rst, 3), |
| 2919 }; | 2919 }; |
| 2920 | 2920 |
| 2921 SpdySerializedFrame stream1_reply( | 2921 SpdySerializedFrame stream1_reply( |
| 2922 spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 2922 spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
| 2923 SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( | 2923 SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( |
| 2924 nullptr, 0, 2, 9, GetDefaultUrlWithPath("/foo.dat").c_str())); | 2924 nullptr, 0, 2, 9, GetDefaultUrlWithPath("/foo.dat").c_str())); |
| 2925 MockRead reads[] = { | 2925 MockRead reads[] = { |
| 2926 CreateMockRead(stream1_reply, 1), CreateMockRead(stream2_syn, 2), | 2926 CreateMockRead(stream1_reply, 1), CreateMockRead(stream2_syn, 2), |
| (...skipping 29 matching lines...) Expand all Loading... |
| 2956 HttpResponseInfo response = *trans->GetResponseInfo(); | 2956 HttpResponseInfo response = *trans->GetResponseInfo(); |
| 2957 EXPECT_TRUE(response.headers); | 2957 EXPECT_TRUE(response.headers); |
| 2958 EXPECT_EQ("HTTP/1.1 200", response.headers->GetStatusLine()); | 2958 EXPECT_EQ("HTTP/1.1 200", response.headers->GetStatusLine()); |
| 2959 } | 2959 } |
| 2960 | 2960 |
| 2961 TEST_F(SpdyNetworkTransactionTest, ServerPushNoURL) { | 2961 TEST_F(SpdyNetworkTransactionTest, ServerPushNoURL) { |
| 2962 SpdySerializedFrame stream1_syn( | 2962 SpdySerializedFrame stream1_syn( |
| 2963 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 2963 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 2964 SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); | 2964 SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
| 2965 SpdySerializedFrame stream2_rst( | 2965 SpdySerializedFrame stream2_rst( |
| 2966 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_PROTOCOL_ERROR)); | 2966 spdy_util_.ConstructSpdyRstStream(2, ERROR_CODE_PROTOCOL_ERROR)); |
| 2967 MockWrite writes[] = { | 2967 MockWrite writes[] = { |
| 2968 CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream2_rst, 3), | 2968 CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream2_rst, 3), |
| 2969 }; | 2969 }; |
| 2970 | 2970 |
| 2971 SpdySerializedFrame stream1_reply( | 2971 SpdySerializedFrame stream1_reply( |
| 2972 spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 2972 spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
| 2973 SpdyHeaderBlock incomplete_headers; | 2973 SpdyHeaderBlock incomplete_headers; |
| 2974 incomplete_headers[spdy_util_.GetStatusKey()] = "200 OK"; | 2974 incomplete_headers[spdy_util_.GetStatusKey()] = "200 OK"; |
| 2975 incomplete_headers["hello"] = "bye"; | 2975 incomplete_headers["hello"] = "bye"; |
| 2976 SpdySerializedFrame stream2_syn(spdy_util_.ConstructInitialSpdyPushFrame( | 2976 SpdySerializedFrame stream2_syn(spdy_util_.ConstructInitialSpdyPushFrame( |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3011 EXPECT_EQ("HTTP/1.1 200", response.headers->GetStatusLine()); | 3011 EXPECT_EQ("HTTP/1.1 200", response.headers->GetStatusLine()); |
| 3012 } | 3012 } |
| 3013 | 3013 |
| 3014 // PUSH_PROMISE on a server-initiated stream should trigger GOAWAY. | 3014 // PUSH_PROMISE on a server-initiated stream should trigger GOAWAY. |
| 3015 TEST_F(SpdyNetworkTransactionTest, ServerPushOnPushedStream) { | 3015 TEST_F(SpdyNetworkTransactionTest, ServerPushOnPushedStream) { |
| 3016 SpdySerializedFrame stream1_syn( | 3016 SpdySerializedFrame stream1_syn( |
| 3017 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 3017 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 3018 SpdySerializedFrame stream2_priority( | 3018 SpdySerializedFrame stream2_priority( |
| 3019 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); | 3019 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
| 3020 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway( | 3020 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway( |
| 3021 2, GOAWAY_PROTOCOL_ERROR, "Push on even stream id.")); | 3021 2, ERROR_CODE_PROTOCOL_ERROR, "Push on even stream id.")); |
| 3022 MockWrite writes[] = { | 3022 MockWrite writes[] = { |
| 3023 CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream2_priority, 3), | 3023 CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream2_priority, 3), |
| 3024 CreateMockWrite(goaway, 5), | 3024 CreateMockWrite(goaway, 5), |
| 3025 }; | 3025 }; |
| 3026 | 3026 |
| 3027 SpdySerializedFrame stream1_reply( | 3027 SpdySerializedFrame stream1_reply( |
| 3028 spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 3028 spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
| 3029 SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( | 3029 SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( |
| 3030 nullptr, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); | 3030 nullptr, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); |
| 3031 SpdySerializedFrame stream3_syn(spdy_util_.ConstructSpdyPush( | 3031 SpdySerializedFrame stream3_syn(spdy_util_.ConstructSpdyPush( |
| 3032 nullptr, 0, 4, 2, GetDefaultUrlWithPath("/bar.dat").c_str())); | 3032 nullptr, 0, 4, 2, GetDefaultUrlWithPath("/bar.dat").c_str())); |
| 3033 MockRead reads[] = { | 3033 MockRead reads[] = { |
| 3034 CreateMockRead(stream1_reply, 1), CreateMockRead(stream2_syn, 2), | 3034 CreateMockRead(stream1_reply, 1), CreateMockRead(stream2_syn, 2), |
| 3035 CreateMockRead(stream3_syn, 4), | 3035 CreateMockRead(stream3_syn, 4), |
| 3036 }; | 3036 }; |
| 3037 | 3037 |
| 3038 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 3038 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| 3039 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, | 3039 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, |
| 3040 NetLogWithSource(), nullptr); | 3040 NetLogWithSource(), nullptr); |
| 3041 helper.RunToCompletion(&data); | 3041 helper.RunToCompletion(&data); |
| 3042 } | 3042 } |
| 3043 | 3043 |
| 3044 // PUSH_PROMISE on a closed client-initiated stream should trigger RST_STREAM. | 3044 // PUSH_PROMISE on a closed client-initiated stream should trigger RST_STREAM. |
| 3045 TEST_F(SpdyNetworkTransactionTest, ServerPushOnClosedStream) { | 3045 TEST_F(SpdyNetworkTransactionTest, ServerPushOnClosedStream) { |
| 3046 SpdySerializedFrame stream1_syn( | 3046 SpdySerializedFrame stream1_syn( |
| 3047 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 3047 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 3048 SpdySerializedFrame rst( | 3048 SpdySerializedFrame rst( |
| 3049 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_STREAM_CLOSED)); | 3049 spdy_util_.ConstructSpdyRstStream(2, ERROR_CODE_STREAM_CLOSED)); |
| 3050 MockWrite writes[] = { | 3050 MockWrite writes[] = { |
| 3051 CreateMockWrite(stream1_syn, 0), CreateMockWrite(rst, 5), | 3051 CreateMockWrite(stream1_syn, 0), CreateMockWrite(rst, 5), |
| 3052 }; | 3052 }; |
| 3053 | 3053 |
| 3054 SpdySerializedFrame stream1_reply( | 3054 SpdySerializedFrame stream1_reply( |
| 3055 spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 3055 spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
| 3056 SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); | 3056 SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
| 3057 SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( | 3057 SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( |
| 3058 nullptr, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); | 3058 nullptr, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); |
| 3059 MockRead reads[] = { | 3059 MockRead reads[] = { |
| (...skipping 28 matching lines...) Expand all Loading... |
| 3088 } | 3088 } |
| 3089 | 3089 |
| 3090 // PUSH_PROMISE on a server-initiated stream should trigger GOAWAY even if | 3090 // PUSH_PROMISE on a server-initiated stream should trigger GOAWAY even if |
| 3091 // stream is closed. | 3091 // stream is closed. |
| 3092 TEST_F(SpdyNetworkTransactionTest, ServerPushOnClosedPushedStream) { | 3092 TEST_F(SpdyNetworkTransactionTest, ServerPushOnClosedPushedStream) { |
| 3093 SpdySerializedFrame stream1_syn( | 3093 SpdySerializedFrame stream1_syn( |
| 3094 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 3094 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 3095 SpdySerializedFrame stream2_priority( | 3095 SpdySerializedFrame stream2_priority( |
| 3096 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); | 3096 spdy_util_.ConstructSpdyPriority(2, 1, IDLE, true)); |
| 3097 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway( | 3097 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway( |
| 3098 2, GOAWAY_PROTOCOL_ERROR, "Push on even stream id.")); | 3098 2, ERROR_CODE_PROTOCOL_ERROR, "Push on even stream id.")); |
| 3099 MockWrite writes[] = { | 3099 MockWrite writes[] = { |
| 3100 CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream2_priority, 3), | 3100 CreateMockWrite(stream1_syn, 0), CreateMockWrite(stream2_priority, 3), |
| 3101 CreateMockWrite(goaway, 8), | 3101 CreateMockWrite(goaway, 8), |
| 3102 }; | 3102 }; |
| 3103 | 3103 |
| 3104 SpdySerializedFrame stream1_reply( | 3104 SpdySerializedFrame stream1_reply( |
| 3105 spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 3105 spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
| 3106 SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( | 3106 SpdySerializedFrame stream2_syn(spdy_util_.ConstructSpdyPush( |
| 3107 nullptr, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); | 3107 nullptr, 0, 2, 1, GetDefaultUrlWithPath("/foo.dat").c_str())); |
| 3108 SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); | 3108 SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
| (...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3359 0, {nullptr}, | 3359 0, {nullptr}, |
| 3360 }, | 3360 }, |
| 3361 }; | 3361 }; |
| 3362 | 3362 |
| 3363 for (size_t i = 0; i < arraysize(test_cases); ++i) { | 3363 for (size_t i = 0; i < arraysize(test_cases); ++i) { |
| 3364 SpdyTestUtil spdy_test_util; | 3364 SpdyTestUtil spdy_test_util; |
| 3365 | 3365 |
| 3366 SpdySerializedFrame req( | 3366 SpdySerializedFrame req( |
| 3367 spdy_test_util.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 3367 spdy_test_util.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 3368 SpdySerializedFrame rst( | 3368 SpdySerializedFrame rst( |
| 3369 spdy_test_util.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR)); | 3369 spdy_test_util.ConstructSpdyRstStream(1, ERROR_CODE_PROTOCOL_ERROR)); |
| 3370 MockWrite writes[] = { | 3370 MockWrite writes[] = { |
| 3371 CreateMockWrite(req, 0), CreateMockWrite(rst, 2), | 3371 CreateMockWrite(req, 0), CreateMockWrite(rst, 2), |
| 3372 }; | 3372 }; |
| 3373 | 3373 |
| 3374 // Construct the reply. | 3374 // Construct the reply. |
| 3375 SpdyHeaderBlock reply_headers; | 3375 SpdyHeaderBlock reply_headers; |
| 3376 AppendToHeaderBlock( | 3376 AppendToHeaderBlock( |
| 3377 test_cases[i].headers, test_cases[i].num_headers, &reply_headers); | 3377 test_cases[i].headers, test_cases[i].num_headers, &reply_headers); |
| 3378 SpdySerializedFrame resp( | 3378 SpdySerializedFrame resp( |
| 3379 spdy_test_util.ConstructSpdyReply(1, std::move(reply_headers))); | 3379 spdy_test_util.ConstructSpdyReply(1, std::move(reply_headers))); |
| 3380 MockRead reads[] = { | 3380 MockRead reads[] = { |
| 3381 CreateMockRead(resp, 1), MockRead(ASYNC, 0, 3) // EOF | 3381 CreateMockRead(resp, 1), MockRead(ASYNC, 0, 3) // EOF |
| 3382 }; | 3382 }; |
| 3383 | 3383 |
| 3384 SequencedSocketData data(reads, arraysize(reads), writes, | 3384 SequencedSocketData data(reads, arraysize(reads), writes, |
| 3385 arraysize(writes)); | 3385 arraysize(writes)); |
| 3386 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, | 3386 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, |
| 3387 NetLogWithSource(), nullptr); | 3387 NetLogWithSource(), nullptr); |
| 3388 helper.RunToCompletion(&data); | 3388 helper.RunToCompletion(&data); |
| 3389 TransactionHelperResult out = helper.output(); | 3389 TransactionHelperResult out = helper.output(); |
| 3390 EXPECT_THAT(out.rv, IsError(ERR_SPDY_PROTOCOL_ERROR)); | 3390 EXPECT_THAT(out.rv, IsError(ERR_SPDY_PROTOCOL_ERROR)); |
| 3391 } | 3391 } |
| 3392 } | 3392 } |
| 3393 | 3393 |
| 3394 TEST_F(SpdyNetworkTransactionTest, CorruptFrameSessionError) { | 3394 TEST_F(SpdyNetworkTransactionTest, CorruptFrameSessionError) { |
| 3395 SpdySerializedFrame req( | 3395 SpdySerializedFrame req( |
| 3396 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 3396 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 3397 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway( | 3397 SpdySerializedFrame goaway( |
| 3398 0, GOAWAY_COMPRESSION_ERROR, "Framer error: 6 (DECOMPRESS_FAILURE).")); | 3398 spdy_util_.ConstructSpdyGoAway(0, ERROR_CODE_COMPRESSION_ERROR, |
| 3399 "Framer error: 6 (DECOMPRESS_FAILURE).")); |
| 3399 MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(goaway, 2)}; | 3400 MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(goaway, 2)}; |
| 3400 | 3401 |
| 3401 // This is the length field that's too short. | 3402 // This is the length field that's too short. |
| 3402 SpdySerializedFrame reply_wrong_length( | 3403 SpdySerializedFrame reply_wrong_length( |
| 3403 spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 3404 spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
| 3404 size_t right_size = reply_wrong_length.size() - kFrameHeaderSize; | 3405 size_t right_size = reply_wrong_length.size() - kFrameHeaderSize; |
| 3405 size_t wrong_size = right_size - 4; | 3406 size_t wrong_size = right_size - 4; |
| 3406 test::SetFrameLength(&reply_wrong_length, wrong_size); | 3407 test::SetFrameLength(&reply_wrong_length, wrong_size); |
| 3407 | 3408 |
| 3408 MockRead reads[] = { | 3409 MockRead reads[] = { |
| 3409 MockRead(ASYNC, reply_wrong_length.data(), reply_wrong_length.size() - 4, | 3410 MockRead(ASYNC, reply_wrong_length.data(), reply_wrong_length.size() - 4, |
| 3410 1), | 3411 1), |
| 3411 }; | 3412 }; |
| 3412 | 3413 |
| 3413 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 3414 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| 3414 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, | 3415 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, |
| 3415 NetLogWithSource(), nullptr); | 3416 NetLogWithSource(), nullptr); |
| 3416 helper.RunToCompletion(&data); | 3417 helper.RunToCompletion(&data); |
| 3417 TransactionHelperResult out = helper.output(); | 3418 TransactionHelperResult out = helper.output(); |
| 3418 EXPECT_THAT(out.rv, IsError(ERR_SPDY_COMPRESSION_ERROR)); | 3419 EXPECT_THAT(out.rv, IsError(ERR_SPDY_COMPRESSION_ERROR)); |
| 3419 } | 3420 } |
| 3420 | 3421 |
| 3421 TEST_F(SpdyNetworkTransactionTest, GoAwayOnDecompressionFailure) { | 3422 TEST_F(SpdyNetworkTransactionTest, GoAwayOnDecompressionFailure) { |
| 3422 SpdySerializedFrame req( | 3423 SpdySerializedFrame req( |
| 3423 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 3424 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 3424 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway( | 3425 SpdySerializedFrame goaway( |
| 3425 0, GOAWAY_COMPRESSION_ERROR, "Framer error: 6 (DECOMPRESS_FAILURE).")); | 3426 spdy_util_.ConstructSpdyGoAway(0, ERROR_CODE_COMPRESSION_ERROR, |
| 3427 "Framer error: 6 (DECOMPRESS_FAILURE).")); |
| 3426 MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(goaway, 2)}; | 3428 MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(goaway, 2)}; |
| 3427 | 3429 |
| 3428 // Read HEADERS with corrupted payload. | 3430 // Read HEADERS with corrupted payload. |
| 3429 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 3431 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
| 3430 memset(resp.data() + 12, 0xcf, resp.size() - 12); | 3432 memset(resp.data() + 12, 0xcf, resp.size() - 12); |
| 3431 MockRead reads[] = {CreateMockRead(resp, 1)}; | 3433 MockRead reads[] = {CreateMockRead(resp, 1)}; |
| 3432 | 3434 |
| 3433 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 3435 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| 3434 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, | 3436 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, |
| 3435 NetLogWithSource(), nullptr); | 3437 NetLogWithSource(), nullptr); |
| 3436 helper.RunToCompletion(&data); | 3438 helper.RunToCompletion(&data); |
| 3437 TransactionHelperResult out = helper.output(); | 3439 TransactionHelperResult out = helper.output(); |
| 3438 EXPECT_THAT(out.rv, IsError(ERR_SPDY_COMPRESSION_ERROR)); | 3440 EXPECT_THAT(out.rv, IsError(ERR_SPDY_COMPRESSION_ERROR)); |
| 3439 } | 3441 } |
| 3440 | 3442 |
| 3441 TEST_F(SpdyNetworkTransactionTest, GoAwayOnFrameSizeError) { | 3443 TEST_F(SpdyNetworkTransactionTest, GoAwayOnFrameSizeError) { |
| 3442 SpdySerializedFrame req( | 3444 SpdySerializedFrame req( |
| 3443 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 3445 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 3444 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway( | 3446 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway( |
| 3445 0, GOAWAY_FRAME_SIZE_ERROR, | 3447 0, ERROR_CODE_FRAME_SIZE_ERROR, |
| 3446 "Framer error: 15 (INVALID_CONTROL_FRAME_SIZE).")); | 3448 "Framer error: 15 (INVALID_CONTROL_FRAME_SIZE).")); |
| 3447 MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(goaway, 2)}; | 3449 MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(goaway, 2)}; |
| 3448 | 3450 |
| 3449 // Read WINDOW_UPDATE with incorrectly-sized payload. | 3451 // Read WINDOW_UPDATE with incorrectly-sized payload. |
| 3450 SpdySerializedFrame bad_window_update( | 3452 SpdySerializedFrame bad_window_update( |
| 3451 spdy_util_.ConstructSpdyWindowUpdate(1, 1)); | 3453 spdy_util_.ConstructSpdyWindowUpdate(1, 1)); |
| 3452 test::SetFrameLength(&bad_window_update, bad_window_update.size() - 1); | 3454 test::SetFrameLength(&bad_window_update, bad_window_update.size() - 1); |
| 3453 MockRead reads[] = {CreateMockRead(bad_window_update, 1)}; | 3455 MockRead reads[] = {CreateMockRead(bad_window_update, 1)}; |
| 3454 | 3456 |
| 3455 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 3457 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| (...skipping 488 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3944 | 3946 |
| 3945 // Verify that we consumed all test data. | 3947 // Verify that we consumed all test data. |
| 3946 helper.VerifyDataConsumed(); | 3948 helper.VerifyDataConsumed(); |
| 3947 } | 3949 } |
| 3948 | 3950 |
| 3949 // Verify the case where we buffer data and cancel the transaction. | 3951 // Verify the case where we buffer data and cancel the transaction. |
| 3950 TEST_F(SpdyNetworkTransactionTest, BufferedCancelled) { | 3952 TEST_F(SpdyNetworkTransactionTest, BufferedCancelled) { |
| 3951 SpdySerializedFrame req( | 3953 SpdySerializedFrame req( |
| 3952 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 3954 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 3953 SpdySerializedFrame rst( | 3955 SpdySerializedFrame rst( |
| 3954 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_CANCEL)); | 3956 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_CANCEL)); |
| 3955 MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(rst, 4)}; | 3957 MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(rst, 4)}; |
| 3956 | 3958 |
| 3957 // NOTE: We don't FIN the stream. | 3959 // NOTE: We don't FIN the stream. |
| 3958 SpdySerializedFrame data_frame( | 3960 SpdySerializedFrame data_frame( |
| 3959 spdy_util_.ConstructSpdyDataFrame(1, "message", 7, /*fin=*/false)); | 3961 spdy_util_.ConstructSpdyDataFrame(1, "message", 7, /*fin=*/false)); |
| 3960 | 3962 |
| 3961 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 3963 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
| 3962 MockRead reads[] = { | 3964 MockRead reads[] = { |
| 3963 CreateMockRead(resp, 1), | 3965 CreateMockRead(resp, 1), |
| 3964 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a wait | 3966 MockRead(ASYNC, ERR_IO_PENDING, 2), // Force a wait |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4038 SpdySerializedFrame req1( | 4040 SpdySerializedFrame req1( |
| 4039 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 4041 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 4040 spdy_util_.UpdateWithStreamDestruction(1); | 4042 spdy_util_.UpdateWithStreamDestruction(1); |
| 4041 SpdySerializedFrame req2( | 4043 SpdySerializedFrame req2( |
| 4042 spdy_util_.ConstructSpdyGet("https://www.example.org/foo", 3, LOWEST)); | 4044 spdy_util_.ConstructSpdyGet("https://www.example.org/foo", 3, LOWEST)); |
| 4043 MockWrite writes[] = {CreateMockWrite(req1, 0), CreateMockWrite(req2, 3)}; | 4045 MockWrite writes[] = {CreateMockWrite(req1, 0), CreateMockWrite(req2, 3)}; |
| 4044 | 4046 |
| 4045 SpdySerializedFrame resp1(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 4047 SpdySerializedFrame resp1(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
| 4046 SpdySerializedFrame body1(spdy_util_.ConstructSpdyDataFrame(1, true)); | 4048 SpdySerializedFrame body1(spdy_util_.ConstructSpdyDataFrame(1, true)); |
| 4047 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway( | 4049 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway( |
| 4048 0x7fffffff, GOAWAY_NO_ERROR, "Graceful shutdown.")); | 4050 0x7fffffff, ERROR_CODE_NO_ERROR, "Graceful shutdown.")); |
| 4049 SpdySerializedFrame resp2(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 3)); | 4051 SpdySerializedFrame resp2(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 3)); |
| 4050 SpdySerializedFrame body2(spdy_util_.ConstructSpdyDataFrame(3, true)); | 4052 SpdySerializedFrame body2(spdy_util_.ConstructSpdyDataFrame(3, true)); |
| 4051 MockRead reads[] = {CreateMockRead(resp1, 1), CreateMockRead(body1, 2), | 4053 MockRead reads[] = {CreateMockRead(resp1, 1), CreateMockRead(body1, 2), |
| 4052 CreateMockRead(goaway, 4), CreateMockRead(resp2, 5), | 4054 CreateMockRead(goaway, 4), CreateMockRead(resp2, 5), |
| 4053 CreateMockRead(body2, 6), MockRead(ASYNC, 0, 7)}; | 4055 CreateMockRead(body2, 6), MockRead(ASYNC, 0, 7)}; |
| 4054 | 4056 |
| 4055 // Run first transaction. | 4057 // Run first transaction. |
| 4056 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 4058 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| 4057 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, | 4059 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, |
| 4058 NetLogWithSource(), nullptr); | 4060 NetLogWithSource(), nullptr); |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4148 // Do not force SPDY so that second socket can negotiate HTTP/1.1. | 4150 // Do not force SPDY so that second socket can negotiate HTTP/1.1. |
| 4149 NormalSpdyTransactionHelper helper(request, DEFAULT_PRIORITY, | 4151 NormalSpdyTransactionHelper helper(request, DEFAULT_PRIORITY, |
| 4150 NetLogWithSource(), nullptr); | 4152 NetLogWithSource(), nullptr); |
| 4151 | 4153 |
| 4152 // First socket: HTTP/2 request rejected with HTTP_1_1_REQUIRED. | 4154 // First socket: HTTP/2 request rejected with HTTP_1_1_REQUIRED. |
| 4153 SpdyHeaderBlock headers(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); | 4155 SpdyHeaderBlock headers(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); |
| 4154 SpdySerializedFrame req( | 4156 SpdySerializedFrame req( |
| 4155 spdy_util_.ConstructSpdyHeaders(1, std::move(headers), LOWEST, true)); | 4157 spdy_util_.ConstructSpdyHeaders(1, std::move(headers), LOWEST, true)); |
| 4156 MockWrite writes0[] = {CreateMockWrite(req, 0)}; | 4158 MockWrite writes0[] = {CreateMockWrite(req, 0)}; |
| 4157 SpdySerializedFrame go_away(spdy_util_.ConstructSpdyGoAway( | 4159 SpdySerializedFrame go_away(spdy_util_.ConstructSpdyGoAway( |
| 4158 0, GOAWAY_HTTP_1_1_REQUIRED, "Try again using HTTP/1.1 please.")); | 4160 0, ERROR_CODE_HTTP_1_1_REQUIRED, "Try again using HTTP/1.1 please.")); |
| 4159 MockRead reads0[] = {CreateMockRead(go_away, 1)}; | 4161 MockRead reads0[] = {CreateMockRead(go_away, 1)}; |
| 4160 SequencedSocketData data0(reads0, arraysize(reads0), writes0, | 4162 SequencedSocketData data0(reads0, arraysize(reads0), writes0, |
| 4161 arraysize(writes0)); | 4163 arraysize(writes0)); |
| 4162 | 4164 |
| 4163 std::unique_ptr<SSLSocketDataProvider> ssl_provider0( | 4165 std::unique_ptr<SSLSocketDataProvider> ssl_provider0( |
| 4164 new SSLSocketDataProvider(ASYNC, OK)); | 4166 new SSLSocketDataProvider(ASYNC, OK)); |
| 4165 // Expect HTTP/2 protocols too in SSLConfig. | 4167 // Expect HTTP/2 protocols too in SSLConfig. |
| 4166 ssl_provider0->next_protos_expected_in_ssl_config.push_back(kProtoHTTP2); | 4168 ssl_provider0->next_protos_expected_in_ssl_config.push_back(kProtoHTTP2); |
| 4167 ssl_provider0->next_protos_expected_in_ssl_config.push_back(kProtoHTTP11); | 4169 ssl_provider0->next_protos_expected_in_ssl_config.push_back(kProtoHTTP11); |
| 4168 // Force SPDY. | 4170 // Force SPDY. |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4226 ProxyService::CreateFixedFromPacResult("HTTPS myproxy:70")); | 4228 ProxyService::CreateFixedFromPacResult("HTTPS myproxy:70")); |
| 4227 // Do not force SPDY so that second socket can negotiate HTTP/1.1. | 4229 // Do not force SPDY so that second socket can negotiate HTTP/1.1. |
| 4228 NormalSpdyTransactionHelper helper( | 4230 NormalSpdyTransactionHelper helper( |
| 4229 request, DEFAULT_PRIORITY, NetLogWithSource(), std::move(session_deps)); | 4231 request, DEFAULT_PRIORITY, NetLogWithSource(), std::move(session_deps)); |
| 4230 | 4232 |
| 4231 // First socket: HTTP/2 CONNECT rejected with HTTP_1_1_REQUIRED. | 4233 // First socket: HTTP/2 CONNECT rejected with HTTP_1_1_REQUIRED. |
| 4232 SpdySerializedFrame req(spdy_util_.ConstructSpdyConnect( | 4234 SpdySerializedFrame req(spdy_util_.ConstructSpdyConnect( |
| 4233 nullptr, 0, 1, LOWEST, HostPortPair("www.example.org", 443))); | 4235 nullptr, 0, 1, LOWEST, HostPortPair("www.example.org", 443))); |
| 4234 MockWrite writes0[] = {CreateMockWrite(req, 0)}; | 4236 MockWrite writes0[] = {CreateMockWrite(req, 0)}; |
| 4235 SpdySerializedFrame go_away(spdy_util_.ConstructSpdyGoAway( | 4237 SpdySerializedFrame go_away(spdy_util_.ConstructSpdyGoAway( |
| 4236 0, GOAWAY_HTTP_1_1_REQUIRED, "Try again using HTTP/1.1 please.")); | 4238 0, ERROR_CODE_HTTP_1_1_REQUIRED, "Try again using HTTP/1.1 please.")); |
| 4237 MockRead reads0[] = {CreateMockRead(go_away, 1)}; | 4239 MockRead reads0[] = {CreateMockRead(go_away, 1)}; |
| 4238 SequencedSocketData data0(reads0, arraysize(reads0), writes0, | 4240 SequencedSocketData data0(reads0, arraysize(reads0), writes0, |
| 4239 arraysize(writes0)); | 4241 arraysize(writes0)); |
| 4240 | 4242 |
| 4241 std::unique_ptr<SSLSocketDataProvider> ssl_provider0( | 4243 std::unique_ptr<SSLSocketDataProvider> ssl_provider0( |
| 4242 new SSLSocketDataProvider(ASYNC, OK)); | 4244 new SSLSocketDataProvider(ASYNC, OK)); |
| 4243 // Expect HTTP/2 protocols too in SSLConfig. | 4245 // Expect HTTP/2 protocols too in SSLConfig. |
| 4244 ssl_provider0->next_protos_expected_in_ssl_config.push_back(kProtoHTTP2); | 4246 ssl_provider0->next_protos_expected_in_ssl_config.push_back(kProtoHTTP2); |
| 4245 ssl_provider0->next_protos_expected_in_ssl_config.push_back(kProtoHTTP11); | 4247 ssl_provider0->next_protos_expected_in_ssl_config.push_back(kProtoHTTP11); |
| 4246 // Force SPDY. | 4248 // Force SPDY. |
| (...skipping 575 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4822 | 4824 |
| 4823 // Verify that we consumed all test data. | 4825 // Verify that we consumed all test data. |
| 4824 EXPECT_TRUE(data.AllReadDataConsumed()); | 4826 EXPECT_TRUE(data.AllReadDataConsumed()); |
| 4825 EXPECT_TRUE(data.AllWriteDataConsumed()); | 4827 EXPECT_TRUE(data.AllWriteDataConsumed()); |
| 4826 } | 4828 } |
| 4827 | 4829 |
| 4828 TEST_F(SpdyNetworkTransactionTest, ResponseHeadersTwice) { | 4830 TEST_F(SpdyNetworkTransactionTest, ResponseHeadersTwice) { |
| 4829 SpdySerializedFrame req( | 4831 SpdySerializedFrame req( |
| 4830 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 4832 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 4831 SpdySerializedFrame rst( | 4833 SpdySerializedFrame rst( |
| 4832 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR)); | 4834 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_PROTOCOL_ERROR)); |
| 4833 MockWrite writes[] = { | 4835 MockWrite writes[] = { |
| 4834 CreateMockWrite(req, 0), CreateMockWrite(rst, 4), | 4836 CreateMockWrite(req, 0), CreateMockWrite(rst, 4), |
| 4835 }; | 4837 }; |
| 4836 | 4838 |
| 4837 SpdySerializedFrame stream1_reply( | 4839 SpdySerializedFrame stream1_reply( |
| 4838 spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 4840 spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
| 4839 | 4841 |
| 4840 SpdyHeaderBlock late_headers; | 4842 SpdyHeaderBlock late_headers; |
| 4841 late_headers["hello"] = "bye"; | 4843 late_headers["hello"] = "bye"; |
| 4842 SpdySerializedFrame stream1_headers(spdy_util_.ConstructSpdyResponseHeaders( | 4844 SpdySerializedFrame stream1_headers(spdy_util_.ConstructSpdyResponseHeaders( |
| (...skipping 12 matching lines...) Expand all Loading... |
| 4855 EXPECT_THAT(out.rv, IsError(ERR_SPDY_PROTOCOL_ERROR)); | 4857 EXPECT_THAT(out.rv, IsError(ERR_SPDY_PROTOCOL_ERROR)); |
| 4856 } | 4858 } |
| 4857 | 4859 |
| 4858 // Tests that receiving HEADERS, DATA, HEADERS, and DATA in that sequence will | 4860 // Tests that receiving HEADERS, DATA, HEADERS, and DATA in that sequence will |
| 4859 // trigger a ERR_SPDY_PROTOCOL_ERROR because trailing HEADERS must not be | 4861 // trigger a ERR_SPDY_PROTOCOL_ERROR because trailing HEADERS must not be |
| 4860 // followed by any DATA frames. | 4862 // followed by any DATA frames. |
| 4861 TEST_F(SpdyNetworkTransactionTest, SyncReplyDataAfterTrailers) { | 4863 TEST_F(SpdyNetworkTransactionTest, SyncReplyDataAfterTrailers) { |
| 4862 SpdySerializedFrame req( | 4864 SpdySerializedFrame req( |
| 4863 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 4865 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 4864 SpdySerializedFrame rst( | 4866 SpdySerializedFrame rst( |
| 4865 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR)); | 4867 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_PROTOCOL_ERROR)); |
| 4866 MockWrite writes[] = { | 4868 MockWrite writes[] = { |
| 4867 CreateMockWrite(req, 0), CreateMockWrite(rst, 5), | 4869 CreateMockWrite(req, 0), CreateMockWrite(rst, 5), |
| 4868 }; | 4870 }; |
| 4869 | 4871 |
| 4870 SpdySerializedFrame stream1_reply( | 4872 SpdySerializedFrame stream1_reply( |
| 4871 spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 4873 spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
| 4872 SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, false)); | 4874 SpdySerializedFrame stream1_body(spdy_util_.ConstructSpdyDataFrame(1, false)); |
| 4873 | 4875 |
| 4874 SpdyHeaderBlock late_headers; | 4876 SpdyHeaderBlock late_headers; |
| 4875 late_headers["hello"] = "bye"; | 4877 late_headers["hello"] = "bye"; |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4915 for (size_t index = 0; index < arraysize(kTestCases); index += 2) { | 4917 for (size_t index = 0; index < arraysize(kTestCases); index += 2) { |
| 4916 const char* url_to_fetch = kTestCases[index]; | 4918 const char* url_to_fetch = kTestCases[index]; |
| 4917 const char* url_to_push = kTestCases[index + 1]; | 4919 const char* url_to_push = kTestCases[index + 1]; |
| 4918 | 4920 |
| 4919 SpdyTestUtil spdy_test_util; | 4921 SpdyTestUtil spdy_test_util; |
| 4920 SpdySerializedFrame stream1_syn( | 4922 SpdySerializedFrame stream1_syn( |
| 4921 spdy_test_util.ConstructSpdyGet(url_to_fetch, 1, LOWEST)); | 4923 spdy_test_util.ConstructSpdyGet(url_to_fetch, 1, LOWEST)); |
| 4922 SpdySerializedFrame stream1_body( | 4924 SpdySerializedFrame stream1_body( |
| 4923 spdy_test_util.ConstructSpdyDataFrame(1, true)); | 4925 spdy_test_util.ConstructSpdyDataFrame(1, true)); |
| 4924 SpdySerializedFrame push_rst( | 4926 SpdySerializedFrame push_rst( |
| 4925 spdy_test_util.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); | 4927 spdy_test_util.ConstructSpdyRstStream(2, ERROR_CODE_REFUSED_STREAM)); |
| 4926 MockWrite writes[] = { | 4928 MockWrite writes[] = { |
| 4927 CreateMockWrite(stream1_syn, 0), CreateMockWrite(push_rst, 3), | 4929 CreateMockWrite(stream1_syn, 0), CreateMockWrite(push_rst, 3), |
| 4928 }; | 4930 }; |
| 4929 | 4931 |
| 4930 SpdySerializedFrame stream1_reply( | 4932 SpdySerializedFrame stream1_reply( |
| 4931 spdy_test_util.ConstructSpdyGetReply(nullptr, 0, 1)); | 4933 spdy_test_util.ConstructSpdyGetReply(nullptr, 0, 1)); |
| 4932 SpdySerializedFrame stream2_syn( | 4934 SpdySerializedFrame stream2_syn( |
| 4933 spdy_test_util.ConstructSpdyPush(nullptr, 0, 2, 1, url_to_push)); | 4935 spdy_test_util.ConstructSpdyPush(nullptr, 0, 2, 1, url_to_push)); |
| 4934 const char kPushedData[] = "pushed"; | 4936 const char kPushedData[] = "pushed"; |
| 4935 SpdySerializedFrame stream2_body(spdy_test_util.ConstructSpdyDataFrame( | 4937 SpdySerializedFrame stream2_body(spdy_test_util.ConstructSpdyDataFrame( |
| 4936 2, kPushedData, strlen(kPushedData), true)); | 4938 2, kPushedData, strlen(kPushedData), true)); |
| 4937 SpdySerializedFrame rst( | 4939 SpdySerializedFrame rst( |
| 4938 spdy_test_util.ConstructSpdyRstStream(2, RST_STREAM_CANCEL)); | 4940 spdy_test_util.ConstructSpdyRstStream(2, ERROR_CODE_CANCEL)); |
| 4939 | 4941 |
| 4940 MockRead reads[] = { | 4942 MockRead reads[] = { |
| 4941 CreateMockRead(stream1_reply, 1), | 4943 CreateMockRead(stream1_reply, 1), |
| 4942 CreateMockRead(stream2_syn, 2), | 4944 CreateMockRead(stream2_syn, 2), |
| 4943 CreateMockRead(stream1_body, 4), | 4945 CreateMockRead(stream1_body, 4), |
| 4944 CreateMockRead(stream2_body, 5), | 4946 CreateMockRead(stream2_body, 5), |
| 4945 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 6), // Force a pause | 4947 MockRead(SYNCHRONOUS, ERR_IO_PENDING, 6), // Force a pause |
| 4946 }; | 4948 }; |
| 4947 | 4949 |
| 4948 HttpResponseInfo response; | 4950 HttpResponseInfo response; |
| (...skipping 312 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5261 | 5263 |
| 5262 TEST_F(SpdyNetworkTransactionTest, ServerPushInvalidCrossOrigin) { | 5264 TEST_F(SpdyNetworkTransactionTest, ServerPushInvalidCrossOrigin) { |
| 5263 // "spdy_pooling.pem" is valid for www.example.org, | 5265 // "spdy_pooling.pem" is valid for www.example.org, |
| 5264 // but not for invalid.example.org. | 5266 // but not for invalid.example.org. |
| 5265 const char* url_to_fetch = "https://www.example.org"; | 5267 const char* url_to_fetch = "https://www.example.org"; |
| 5266 const char* url_to_push = "https://invalid.example.org"; | 5268 const char* url_to_push = "https://invalid.example.org"; |
| 5267 | 5269 |
| 5268 SpdySerializedFrame headers( | 5270 SpdySerializedFrame headers( |
| 5269 spdy_util_.ConstructSpdyGet(url_to_fetch, 1, LOWEST)); | 5271 spdy_util_.ConstructSpdyGet(url_to_fetch, 1, LOWEST)); |
| 5270 SpdySerializedFrame rst( | 5272 SpdySerializedFrame rst( |
| 5271 spdy_util_.ConstructSpdyRstStream(2, RST_STREAM_REFUSED_STREAM)); | 5273 spdy_util_.ConstructSpdyRstStream(2, ERROR_CODE_REFUSED_STREAM)); |
| 5272 MockWrite writes[] = { | 5274 MockWrite writes[] = { |
| 5273 CreateMockWrite(headers, 0), CreateMockWrite(rst, 3), | 5275 CreateMockWrite(headers, 0), CreateMockWrite(rst, 3), |
| 5274 }; | 5276 }; |
| 5275 | 5277 |
| 5276 SpdySerializedFrame reply(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 5278 SpdySerializedFrame reply(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
| 5277 SpdySerializedFrame push( | 5279 SpdySerializedFrame push( |
| 5278 spdy_util_.ConstructSpdyPush(nullptr, 0, 2, 1, url_to_push)); | 5280 spdy_util_.ConstructSpdyPush(nullptr, 0, 2, 1, url_to_push)); |
| 5279 SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true)); | 5281 SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
| 5280 const char kPushedData[] = "pushed"; | 5282 const char kPushedData[] = "pushed"; |
| 5281 SpdySerializedFrame pushed_body(spdy_util_.ConstructSpdyDataFrame( | 5283 SpdySerializedFrame pushed_body(spdy_util_.ConstructSpdyDataFrame( |
| (...skipping 27 matching lines...) Expand all Loading... |
| 5309 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 5311 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 5310 // Will be destroyed by the RST before stream 3 starts. | 5312 // Will be destroyed by the RST before stream 3 starts. |
| 5311 spdy_util_.UpdateWithStreamDestruction(1); | 5313 spdy_util_.UpdateWithStreamDestruction(1); |
| 5312 SpdySerializedFrame req2( | 5314 SpdySerializedFrame req2( |
| 5313 spdy_util_.ConstructSpdyGet(nullptr, 0, 3, LOWEST, true)); | 5315 spdy_util_.ConstructSpdyGet(nullptr, 0, 3, LOWEST, true)); |
| 5314 MockWrite writes[] = { | 5316 MockWrite writes[] = { |
| 5315 CreateMockWrite(req, 0), CreateMockWrite(req2, 2), | 5317 CreateMockWrite(req, 0), CreateMockWrite(req2, 2), |
| 5316 }; | 5318 }; |
| 5317 | 5319 |
| 5318 SpdySerializedFrame refused( | 5320 SpdySerializedFrame refused( |
| 5319 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_REFUSED_STREAM)); | 5321 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_REFUSED_STREAM)); |
| 5320 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 3)); | 5322 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 3)); |
| 5321 SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(3, true)); | 5323 SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(3, true)); |
| 5322 MockRead reads[] = { | 5324 MockRead reads[] = { |
| 5323 CreateMockRead(refused, 1), CreateMockRead(resp, 3), | 5325 CreateMockRead(refused, 1), CreateMockRead(resp, 3), |
| 5324 CreateMockRead(body, 4), MockRead(ASYNC, 0, 5) // EOF | 5326 CreateMockRead(body, 4), MockRead(ASYNC, 0, 5) // EOF |
| 5325 }; | 5327 }; |
| 5326 | 5328 |
| 5327 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 5329 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| 5328 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, | 5330 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, |
| 5329 NetLogWithSource(), nullptr); | 5331 NetLogWithSource(), nullptr); |
| (...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 5703 static int kFrameCount = 3; | 5705 static int kFrameCount = 3; |
| 5704 | 5706 |
| 5705 std::unique_ptr<std::string> content( | 5707 std::unique_ptr<std::string> content( |
| 5706 new std::string(kMaxSpdyFrameChunkSize, 'a')); | 5708 new std::string(kMaxSpdyFrameChunkSize, 'a')); |
| 5707 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost( | 5709 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost( |
| 5708 kDefaultUrl, 1, kMaxSpdyFrameChunkSize * kFrameCount, LOWEST, nullptr, | 5710 kDefaultUrl, 1, kMaxSpdyFrameChunkSize * kFrameCount, LOWEST, nullptr, |
| 5709 0)); | 5711 0)); |
| 5710 SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame( | 5712 SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame( |
| 5711 1, content->c_str(), content->size(), false)); | 5713 1, content->c_str(), content->size(), false)); |
| 5712 SpdySerializedFrame rst( | 5714 SpdySerializedFrame rst( |
| 5713 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_FLOW_CONTROL_ERROR)); | 5715 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_FLOW_CONTROL_ERROR)); |
| 5714 | 5716 |
| 5715 // We're not going to write a data frame with FIN, we'll receive a bad | 5717 // We're not going to write a data frame with FIN, we'll receive a bad |
| 5716 // WINDOW_UPDATE while sending a request and will send a RST_STREAM frame. | 5718 // WINDOW_UPDATE while sending a request and will send a RST_STREAM frame. |
| 5717 MockWrite writes[] = { | 5719 MockWrite writes[] = { |
| 5718 CreateMockWrite(req, 0), CreateMockWrite(body, 2), | 5720 CreateMockWrite(req, 0), CreateMockWrite(body, 2), |
| 5719 CreateMockWrite(rst, 3), | 5721 CreateMockWrite(rst, 3), |
| 5720 }; | 5722 }; |
| 5721 | 5723 |
| 5722 static const int32_t kDeltaWindowSize = 0x7fffffff; // cause an overflow | 5724 static const int32_t kDeltaWindowSize = 0x7fffffff; // cause an overflow |
| 5723 SpdySerializedFrame window_update( | 5725 SpdySerializedFrame window_update( |
| (...skipping 520 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6244 TEST_F(SpdyNetworkTransactionTest, GoAwayOnOddPushStreamId) { | 6246 TEST_F(SpdyNetworkTransactionTest, GoAwayOnOddPushStreamId) { |
| 6245 SpdyHeaderBlock push_headers; | 6247 SpdyHeaderBlock push_headers; |
| 6246 spdy_util_.AddUrlToHeaderBlock("http://www.example.org/a.dat", &push_headers); | 6248 spdy_util_.AddUrlToHeaderBlock("http://www.example.org/a.dat", &push_headers); |
| 6247 SpdySerializedFrame push( | 6249 SpdySerializedFrame push( |
| 6248 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 3, 1)); | 6250 spdy_util_.ConstructInitialSpdyPushFrame(std::move(push_headers), 3, 1)); |
| 6249 MockRead reads[] = {CreateMockRead(push, 1)}; | 6251 MockRead reads[] = {CreateMockRead(push, 1)}; |
| 6250 | 6252 |
| 6251 SpdySerializedFrame req( | 6253 SpdySerializedFrame req( |
| 6252 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 6254 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 6253 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway( | 6255 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway( |
| 6254 0, GOAWAY_PROTOCOL_ERROR, "Odd push stream id.")); | 6256 0, ERROR_CODE_PROTOCOL_ERROR, "Odd push stream id.")); |
| 6255 MockWrite writes[] = { | 6257 MockWrite writes[] = { |
| 6256 CreateMockWrite(req, 0), CreateMockWrite(goaway, 2), | 6258 CreateMockWrite(req, 0), CreateMockWrite(goaway, 2), |
| 6257 }; | 6259 }; |
| 6258 | 6260 |
| 6259 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 6261 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| 6260 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, | 6262 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, |
| 6261 NetLogWithSource(), nullptr); | 6263 NetLogWithSource(), nullptr); |
| 6262 helper.RunToCompletion(&data); | 6264 helper.RunToCompletion(&data); |
| 6263 TransactionHelperResult out = helper.output(); | 6265 TransactionHelperResult out = helper.output(); |
| 6264 EXPECT_THAT(out.rv, IsError(ERR_SPDY_PROTOCOL_ERROR)); | 6266 EXPECT_THAT(out.rv, IsError(ERR_SPDY_PROTOCOL_ERROR)); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 6275 std::move(push_b_headers), 2, 1)); | 6277 std::move(push_b_headers), 2, 1)); |
| 6276 MockRead reads[] = { | 6278 MockRead reads[] = { |
| 6277 CreateMockRead(push_a, 1), CreateMockRead(push_b, 3), | 6279 CreateMockRead(push_a, 1), CreateMockRead(push_b, 3), |
| 6278 }; | 6280 }; |
| 6279 | 6281 |
| 6280 SpdySerializedFrame req( | 6282 SpdySerializedFrame req( |
| 6281 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 6283 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 6282 SpdySerializedFrame priority_a( | 6284 SpdySerializedFrame priority_a( |
| 6283 spdy_util_.ConstructSpdyPriority(4, 1, IDLE, true)); | 6285 spdy_util_.ConstructSpdyPriority(4, 1, IDLE, true)); |
| 6284 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway( | 6286 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway( |
| 6285 4, GOAWAY_PROTOCOL_ERROR, | 6287 4, ERROR_CODE_PROTOCOL_ERROR, |
| 6286 "New push stream id must be greater than the last accepted.")); | 6288 "New push stream id must be greater than the last accepted.")); |
| 6287 MockWrite writes[] = { | 6289 MockWrite writes[] = { |
| 6288 CreateMockWrite(req, 0), CreateMockWrite(priority_a, 2), | 6290 CreateMockWrite(req, 0), CreateMockWrite(priority_a, 2), |
| 6289 CreateMockWrite(goaway, 4), | 6291 CreateMockWrite(goaway, 4), |
| 6290 }; | 6292 }; |
| 6291 | 6293 |
| 6292 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 6294 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| 6293 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, | 6295 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, |
| 6294 NetLogWithSource(), nullptr); | 6296 NetLogWithSource(), nullptr); |
| 6295 helper.RunToCompletion(&data); | 6297 helper.RunToCompletion(&data); |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6372 EXPECT_EQ("HTTP/1.1 200", out.status_line); | 6374 EXPECT_EQ("HTTP/1.1 200", out.status_line); |
| 6373 EXPECT_EQ("hello!", out.response_data); | 6375 EXPECT_EQ("hello!", out.response_data); |
| 6374 ASSERT_TRUE(out.response_info.headers->HasHeaderValue(kKey, kValue)); | 6376 ASSERT_TRUE(out.response_info.headers->HasHeaderValue(kKey, kValue)); |
| 6375 } | 6377 } |
| 6376 | 6378 |
| 6377 // End of line delimiter is forbidden according to RFC 7230 Section 3.2. | 6379 // End of line delimiter is forbidden according to RFC 7230 Section 3.2. |
| 6378 TEST_F(SpdyNetworkTransactionTest, CRLFInHeaderValue) { | 6380 TEST_F(SpdyNetworkTransactionTest, CRLFInHeaderValue) { |
| 6379 SpdySerializedFrame req( | 6381 SpdySerializedFrame req( |
| 6380 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 6382 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
| 6381 SpdySerializedFrame rst( | 6383 SpdySerializedFrame rst( |
| 6382 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_PROTOCOL_ERROR)); | 6384 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_PROTOCOL_ERROR)); |
| 6383 MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(rst, 2)}; | 6385 MockWrite writes[] = {CreateMockWrite(req, 0), CreateMockWrite(rst, 2)}; |
| 6384 | 6386 |
| 6385 const char* response_headers[] = {"folded", "foo\r\nbar"}; | 6387 const char* response_headers[] = {"folded", "foo\r\nbar"}; |
| 6386 SpdySerializedFrame resp( | 6388 SpdySerializedFrame resp( |
| 6387 spdy_util_.ConstructSpdyGetReply(response_headers, 1, 1)); | 6389 spdy_util_.ConstructSpdyGetReply(response_headers, 1, 1)); |
| 6388 MockRead reads[] = {CreateMockRead(resp, 1), MockRead(ASYNC, 0, 3)}; | 6390 MockRead reads[] = {CreateMockRead(resp, 1), MockRead(ASYNC, 0, 3)}; |
| 6389 | 6391 |
| 6390 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 6392 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| 6391 | 6393 |
| 6392 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, | 6394 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, |
| 6393 NetLogWithSource(), nullptr); | 6395 NetLogWithSource(), nullptr); |
| 6394 helper.RunToCompletion(&data); | 6396 helper.RunToCompletion(&data); |
| 6395 TransactionHelperResult out = helper.output(); | 6397 TransactionHelperResult out = helper.output(); |
| 6396 | 6398 |
| 6397 EXPECT_THAT(out.rv, IsError(ERR_SPDY_PROTOCOL_ERROR)); | 6399 EXPECT_THAT(out.rv, IsError(ERR_SPDY_PROTOCOL_ERROR)); |
| 6398 } | 6400 } |
| 6399 | 6401 |
| 6400 // Regression test for https://crbug.com/603182. | 6402 // Regression test for https://crbug.com/603182. |
| 6401 // No response headers received before RST_STREAM: error. | 6403 // No response headers received before RST_STREAM: error. |
| 6402 TEST_F(SpdyNetworkTransactionTest, RstStreamNoError) { | 6404 TEST_F(SpdyNetworkTransactionTest, RstStreamNoError) { |
| 6403 SpdySerializedFrame req(spdy_util_.ConstructChunkedSpdyPost(nullptr, 0)); | 6405 SpdySerializedFrame req(spdy_util_.ConstructChunkedSpdyPost(nullptr, 0)); |
| 6404 MockWrite writes[] = {CreateMockWrite(req, 0, ASYNC)}; | 6406 MockWrite writes[] = {CreateMockWrite(req, 0, ASYNC)}; |
| 6405 | 6407 |
| 6406 SpdySerializedFrame rst( | 6408 SpdySerializedFrame rst( |
| 6407 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_NO_ERROR)); | 6409 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_NO_ERROR)); |
| 6408 MockRead reads[] = {CreateMockRead(rst, 1), MockRead(ASYNC, 0, 2)}; | 6410 MockRead reads[] = {CreateMockRead(rst, 1), MockRead(ASYNC, 0, 2)}; |
| 6409 | 6411 |
| 6410 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 6412 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| 6411 NormalSpdyTransactionHelper helper(CreateChunkedPostRequest(), | 6413 NormalSpdyTransactionHelper helper(CreateChunkedPostRequest(), |
| 6412 DEFAULT_PRIORITY, NetLogWithSource(), | 6414 DEFAULT_PRIORITY, NetLogWithSource(), |
| 6413 nullptr); | 6415 nullptr); |
| 6414 helper.RunToCompletion(&data); | 6416 helper.RunToCompletion(&data); |
| 6415 TransactionHelperResult out = helper.output(); | 6417 TransactionHelperResult out = helper.output(); |
| 6416 EXPECT_THAT(out.rv, IsError(ERR_SPDY_PROTOCOL_ERROR)); | 6418 EXPECT_THAT(out.rv, IsError(ERR_SPDY_PROTOCOL_ERROR)); |
| 6417 } | 6419 } |
| 6418 | 6420 |
| 6419 // Regression test for https://crbug.com/603182. | 6421 // Regression test for https://crbug.com/603182. |
| 6420 // Response headers and data, then RST_STREAM received, | 6422 // Response headers and data, then RST_STREAM received, |
| 6421 // before request body is sent: success. | 6423 // before request body is sent: success. |
| 6422 TEST_F(SpdyNetworkTransactionTest, RstStreamNoErrorAfterResponse) { | 6424 TEST_F(SpdyNetworkTransactionTest, RstStreamNoErrorAfterResponse) { |
| 6423 SpdySerializedFrame req(spdy_util_.ConstructChunkedSpdyPost(nullptr, 0)); | 6425 SpdySerializedFrame req(spdy_util_.ConstructChunkedSpdyPost(nullptr, 0)); |
| 6424 MockWrite writes[] = {CreateMockWrite(req, 0, ASYNC)}; | 6426 MockWrite writes[] = {CreateMockWrite(req, 0, ASYNC)}; |
| 6425 | 6427 |
| 6426 SpdySerializedFrame resp(spdy_util_.ConstructSpdyPostReply(nullptr, 0)); | 6428 SpdySerializedFrame resp(spdy_util_.ConstructSpdyPostReply(nullptr, 0)); |
| 6427 SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true)); | 6429 SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
| 6428 SpdySerializedFrame rst( | 6430 SpdySerializedFrame rst( |
| 6429 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_NO_ERROR)); | 6431 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_NO_ERROR)); |
| 6430 MockRead reads[] = {CreateMockRead(resp, 1), CreateMockRead(body, 2), | 6432 MockRead reads[] = {CreateMockRead(resp, 1), CreateMockRead(body, 2), |
| 6431 CreateMockRead(rst, 3), MockRead(ASYNC, 0, 4)}; | 6433 CreateMockRead(rst, 3), MockRead(ASYNC, 0, 4)}; |
| 6432 | 6434 |
| 6433 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 6435 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| 6434 NormalSpdyTransactionHelper helper(CreateChunkedPostRequest(), | 6436 NormalSpdyTransactionHelper helper(CreateChunkedPostRequest(), |
| 6435 DEFAULT_PRIORITY, NetLogWithSource(), | 6437 DEFAULT_PRIORITY, NetLogWithSource(), |
| 6436 nullptr); | 6438 nullptr); |
| 6437 helper.RunToCompletion(&data); | 6439 helper.RunToCompletion(&data); |
| 6438 TransactionHelperResult out = helper.output(); | 6440 TransactionHelperResult out = helper.output(); |
| 6439 EXPECT_THAT(out.rv, IsOk()); | 6441 EXPECT_THAT(out.rv, IsOk()); |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 6497 | 6499 |
| 6498 // Regression test for https://crbug.com/606990. | 6500 // Regression test for https://crbug.com/606990. |
| 6499 // Server responds before POST data are sent and resets stream with NO_ERROR. | 6501 // Server responds before POST data are sent and resets stream with NO_ERROR. |
| 6500 TEST_F(SpdyNetworkTransactionTest, ResponseAndRstStreamBeforePostDataSent) { | 6502 TEST_F(SpdyNetworkTransactionTest, ResponseAndRstStreamBeforePostDataSent) { |
| 6501 SpdySerializedFrame req(spdy_util_.ConstructChunkedSpdyPost(nullptr, 0)); | 6503 SpdySerializedFrame req(spdy_util_.ConstructChunkedSpdyPost(nullptr, 0)); |
| 6502 MockWrite writes[] = {CreateMockWrite(req, 0)}; | 6504 MockWrite writes[] = {CreateMockWrite(req, 0)}; |
| 6503 | 6505 |
| 6504 SpdySerializedFrame resp(spdy_util_.ConstructSpdyPostReply(nullptr, 0)); | 6506 SpdySerializedFrame resp(spdy_util_.ConstructSpdyPostReply(nullptr, 0)); |
| 6505 SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true)); | 6507 SpdySerializedFrame body(spdy_util_.ConstructSpdyDataFrame(1, true)); |
| 6506 SpdySerializedFrame rst( | 6508 SpdySerializedFrame rst( |
| 6507 spdy_util_.ConstructSpdyRstStream(1, RST_STREAM_NO_ERROR)); | 6509 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_NO_ERROR)); |
| 6508 MockRead reads[] = {CreateMockRead(resp, 1), CreateMockRead(body, 2), | 6510 MockRead reads[] = {CreateMockRead(resp, 1), CreateMockRead(body, 2), |
| 6509 CreateMockRead(rst, 3), MockRead(ASYNC, 0, 4)}; | 6511 CreateMockRead(rst, 3), MockRead(ASYNC, 0, 4)}; |
| 6510 | 6512 |
| 6511 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 6513 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
| 6512 NormalSpdyTransactionHelper helper(CreateChunkedPostRequest(), | 6514 NormalSpdyTransactionHelper helper(CreateChunkedPostRequest(), |
| 6513 DEFAULT_PRIORITY, NetLogWithSource(), | 6515 DEFAULT_PRIORITY, NetLogWithSource(), |
| 6514 nullptr); | 6516 nullptr); |
| 6515 | 6517 |
| 6516 helper.RunToCompletion(&data); | 6518 helper.RunToCompletion(&data); |
| 6517 | 6519 |
| 6518 TransactionHelperResult out = helper.output(); | 6520 TransactionHelperResult out = helper.output(); |
| 6519 EXPECT_THAT(out.rv, IsOk()); | 6521 EXPECT_THAT(out.rv, IsOk()); |
| 6520 EXPECT_EQ("HTTP/1.1 200", out.status_line); | 6522 EXPECT_EQ("HTTP/1.1 200", out.status_line); |
| 6521 EXPECT_EQ("hello!", out.response_data); | 6523 EXPECT_EQ("hello!", out.response_data); |
| 6522 } | 6524 } |
| 6523 | 6525 |
| 6524 class SpdyNetworkTransactionTLSUsageCheckTest | 6526 class SpdyNetworkTransactionTLSUsageCheckTest |
| 6525 : public SpdyNetworkTransactionTest { | 6527 : public SpdyNetworkTransactionTest { |
| 6526 protected: | 6528 protected: |
| 6527 void RunTLSUsageCheckTest( | 6529 void RunTLSUsageCheckTest( |
| 6528 std::unique_ptr<SSLSocketDataProvider> ssl_provider) { | 6530 std::unique_ptr<SSLSocketDataProvider> ssl_provider) { |
| 6529 SpdySerializedFrame goaway( | 6531 SpdySerializedFrame goaway( |
| 6530 spdy_util_.ConstructSpdyGoAway(0, GOAWAY_INADEQUATE_SECURITY, "")); | 6532 spdy_util_.ConstructSpdyGoAway(0, ERROR_CODE_INADEQUATE_SECURITY, "")); |
| 6531 MockWrite writes[] = {CreateMockWrite(goaway)}; | 6533 MockWrite writes[] = {CreateMockWrite(goaway)}; |
| 6532 | 6534 |
| 6533 StaticSocketDataProvider data(nullptr, 0, writes, arraysize(writes)); | 6535 StaticSocketDataProvider data(nullptr, 0, writes, arraysize(writes)); |
| 6534 HttpRequestInfo request; | 6536 HttpRequestInfo request; |
| 6535 request.method = "GET"; | 6537 request.method = "GET"; |
| 6536 request.url = default_url_; | 6538 request.url = default_url_; |
| 6537 NormalSpdyTransactionHelper helper(request, DEFAULT_PRIORITY, | 6539 NormalSpdyTransactionHelper helper(request, DEFAULT_PRIORITY, |
| 6538 NetLogWithSource(), nullptr); | 6540 NetLogWithSource(), nullptr); |
| 6539 helper.RunToCompletionWithSSLData(&data, std::move(ssl_provider)); | 6541 helper.RunToCompletionWithSSLData(&data, std::move(ssl_provider)); |
| 6540 TransactionHelperResult out = helper.output(); | 6542 TransactionHelperResult out = helper.output(); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 6554 TEST_F(SpdyNetworkTransactionTLSUsageCheckTest, TLSCipherSuiteSucky) { | 6556 TEST_F(SpdyNetworkTransactionTLSUsageCheckTest, TLSCipherSuiteSucky) { |
| 6555 std::unique_ptr<SSLSocketDataProvider> ssl_provider( | 6557 std::unique_ptr<SSLSocketDataProvider> ssl_provider( |
| 6556 new SSLSocketDataProvider(ASYNC, OK)); | 6558 new SSLSocketDataProvider(ASYNC, OK)); |
| 6557 // Set to TLS_RSA_WITH_NULL_MD5 | 6559 // Set to TLS_RSA_WITH_NULL_MD5 |
| 6558 SSLConnectionStatusSetCipherSuite(0x1, &ssl_provider->connection_status); | 6560 SSLConnectionStatusSetCipherSuite(0x1, &ssl_provider->connection_status); |
| 6559 | 6561 |
| 6560 RunTLSUsageCheckTest(std::move(ssl_provider)); | 6562 RunTLSUsageCheckTest(std::move(ssl_provider)); |
| 6561 } | 6563 } |
| 6562 | 6564 |
| 6563 } // namespace net | 6565 } // namespace net |
| OLD | NEW |