| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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/quic/chromium/bidirectional_stream_quic_impl.h" | 5 #include "net/quic/chromium/bidirectional_stream_quic_impl.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/callback_helpers.h" | 9 #include "base/callback_helpers.h" |
| 10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
| (...skipping 897 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 908 request.priority = DEFAULT_PRIORITY; | 908 request.priority = DEFAULT_PRIORITY; |
| 909 | 909 |
| 910 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 910 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 911 std::unique_ptr<TestDelegateBase> delegate( | 911 std::unique_ptr<TestDelegateBase> delegate( |
| 912 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 912 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 913 delegate->DoNotSendRequestHeadersAutomatically(); | 913 delegate->DoNotSendRequestHeadersAutomatically(); |
| 914 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); | 914 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); |
| 915 EXPECT_FALSE(delegate->is_ready()); | 915 EXPECT_FALSE(delegate->is_ready()); |
| 916 ConfirmHandshake(); | 916 ConfirmHandshake(); |
| 917 delegate->WaitUntilNextCallback(); // OnStreamReady | 917 delegate->WaitUntilNextCallback(); // OnStreamReady |
| 918 EXPECT_TRUE(delegate->is_ready()); |
| 918 | 919 |
| 919 // Sends request headers separately, which causes them to be sent in a | 920 // Sends request headers separately, which causes them to be sent in a |
| 920 // separate packet. | 921 // separate packet. |
| 921 delegate->SendRequestHeaders(); | 922 delegate->SendRequestHeaders(); |
| 922 // Send a Data packet. | 923 // Send a Data packet. |
| 923 scoped_refptr<StringIOBuffer> buf1(new StringIOBuffer(kBody1)); | 924 scoped_refptr<StringIOBuffer> buf1(new StringIOBuffer(kBody1)); |
| 924 scoped_refptr<StringIOBuffer> buf2(new StringIOBuffer(kBody2)); | 925 scoped_refptr<StringIOBuffer> buf2(new StringIOBuffer(kBody2)); |
| 925 | 926 |
| 926 std::vector<int> lengths = {buf1->size(), buf2->size()}; | 927 std::vector<int> lengths = {buf1->size(), buf2->size()}; |
| 927 delegate->SendvData({buf1, buf2}, lengths, !kFin); | 928 delegate->SendvData({buf1, buf2}, lengths, !kFin); |
| (...skipping 256 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1184 EXPECT_EQ( | 1185 EXPECT_EQ( |
| 1185 static_cast<int64_t>(spdy_response_headers_frame_length + | 1186 static_cast<int64_t>(spdy_response_headers_frame_length + |
| 1186 strlen(kResponseBody) + spdy_trailers_frame_length), | 1187 strlen(kResponseBody) + spdy_trailers_frame_length), |
| 1187 delegate->GetTotalReceivedBytes()); | 1188 delegate->GetTotalReceivedBytes()); |
| 1188 } | 1189 } |
| 1189 | 1190 |
| 1190 TEST_P(BidirectionalStreamQuicImplTest, PostRequest) { | 1191 TEST_P(BidirectionalStreamQuicImplTest, PostRequest) { |
| 1191 SetRequest("POST", "/", DEFAULT_PRIORITY); | 1192 SetRequest("POST", "/", DEFAULT_PRIORITY); |
| 1192 size_t spdy_request_headers_frame_length; | 1193 size_t spdy_request_headers_frame_length; |
| 1193 QuicStreamOffset header_stream_offset = 0; | 1194 QuicStreamOffset header_stream_offset = 0; |
| 1195 AddWrite(ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 1194 AddWrite(ConstructRequestHeadersPacketInner( | 1196 AddWrite(ConstructRequestHeadersPacketInner( |
| 1195 1, kClientDataStreamId1, !kFin, DEFAULT_PRIORITY, | 1197 2, kClientDataStreamId1, !kFin, DEFAULT_PRIORITY, |
| 1196 &spdy_request_headers_frame_length, &header_stream_offset)); | 1198 &spdy_request_headers_frame_length, &header_stream_offset)); |
| 1197 AddWrite(ConstructInitialSettingsPacket(2, &header_stream_offset)); | |
| 1198 AddWrite(ConstructDataPacket(3, kIncludeVersion, kFin, 0, kUploadData, | 1199 AddWrite(ConstructDataPacket(3, kIncludeVersion, kFin, 0, kUploadData, |
| 1199 &client_maker_)); | 1200 &client_maker_)); |
| 1200 AddWrite(ConstructClientAckPacket(4, 3, 1, 1)); | 1201 AddWrite(ConstructClientAckPacket(4, 3, 1, 1)); |
| 1201 | 1202 |
| 1202 Initialize(); | 1203 Initialize(); |
| 1203 | 1204 |
| 1204 BidirectionalStreamRequestInfo request; | 1205 BidirectionalStreamRequestInfo request; |
| 1205 request.method = "POST"; | 1206 request.method = "POST"; |
| 1206 request.url = GURL("http://www.google.com/"); | 1207 request.url = GURL("http://www.google.com/"); |
| 1207 request.end_stream_on_headers = false; | 1208 request.end_stream_on_headers = false; |
| (...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1342 EXPECT_EQ( | 1343 EXPECT_EQ( |
| 1343 static_cast<int64_t>(spdy_response_headers_frame_length + | 1344 static_cast<int64_t>(spdy_response_headers_frame_length + |
| 1344 strlen(kResponseBody) + spdy_trailers_frame_length), | 1345 strlen(kResponseBody) + spdy_trailers_frame_length), |
| 1345 delegate->GetTotalReceivedBytes()); | 1346 delegate->GetTotalReceivedBytes()); |
| 1346 } | 1347 } |
| 1347 | 1348 |
| 1348 TEST_P(BidirectionalStreamQuicImplTest, InterleaveReadDataAndSendData) { | 1349 TEST_P(BidirectionalStreamQuicImplTest, InterleaveReadDataAndSendData) { |
| 1349 SetRequest("POST", "/", DEFAULT_PRIORITY); | 1350 SetRequest("POST", "/", DEFAULT_PRIORITY); |
| 1350 size_t spdy_request_headers_frame_length; | 1351 size_t spdy_request_headers_frame_length; |
| 1351 QuicStreamOffset header_stream_offset = 0; | 1352 QuicStreamOffset header_stream_offset = 0; |
| 1353 AddWrite(ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 1352 AddWrite(ConstructRequestHeadersPacketInner( | 1354 AddWrite(ConstructRequestHeadersPacketInner( |
| 1353 1, kClientDataStreamId1, !kFin, DEFAULT_PRIORITY, | 1355 2, kClientDataStreamId1, !kFin, DEFAULT_PRIORITY, |
| 1354 &spdy_request_headers_frame_length, &header_stream_offset)); | 1356 &spdy_request_headers_frame_length, &header_stream_offset)); |
| 1355 | |
| 1356 AddWrite(ConstructInitialSettingsPacket(2, &header_stream_offset)); | |
| 1357 AddWrite(ConstructAckAndDataPacket(3, !kIncludeVersion, 2, 1, 1, !kFin, 0, | 1357 AddWrite(ConstructAckAndDataPacket(3, !kIncludeVersion, 2, 1, 1, !kFin, 0, |
| 1358 kUploadData, &client_maker_)); | 1358 kUploadData, &client_maker_)); |
| 1359 AddWrite(ConstructAckAndDataPacket(4, !kIncludeVersion, 3, 3, 3, kFin, | 1359 AddWrite(ConstructAckAndDataPacket(4, !kIncludeVersion, 3, 3, 3, kFin, |
| 1360 strlen(kUploadData), kUploadData, | 1360 strlen(kUploadData), kUploadData, |
| 1361 &client_maker_)); | 1361 &client_maker_)); |
| 1362 Initialize(); | 1362 Initialize(); |
| 1363 | 1363 |
| 1364 BidirectionalStreamRequestInfo request; | 1364 BidirectionalStreamRequestInfo request; |
| 1365 request.method = "POST"; | 1365 request.method = "POST"; |
| 1366 request.url = GURL("http://www.google.com/"); | 1366 request.url = GURL("http://www.google.com/"); |
| (...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1533 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), | 1533 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), |
| 1534 delegate->GetTotalSentBytes()); | 1534 delegate->GetTotalSentBytes()); |
| 1535 EXPECT_EQ(static_cast<int64_t>(spdy_response_headers_frame_length), | 1535 EXPECT_EQ(static_cast<int64_t>(spdy_response_headers_frame_length), |
| 1536 delegate->GetTotalReceivedBytes()); | 1536 delegate->GetTotalReceivedBytes()); |
| 1537 } | 1537 } |
| 1538 | 1538 |
| 1539 TEST_P(BidirectionalStreamQuicImplTest, SessionClosedBeforeReadData) { | 1539 TEST_P(BidirectionalStreamQuicImplTest, SessionClosedBeforeReadData) { |
| 1540 SetRequest("POST", "/", DEFAULT_PRIORITY); | 1540 SetRequest("POST", "/", DEFAULT_PRIORITY); |
| 1541 size_t spdy_request_headers_frame_length; | 1541 size_t spdy_request_headers_frame_length; |
| 1542 QuicStreamOffset header_stream_offset = 0; | 1542 QuicStreamOffset header_stream_offset = 0; |
| 1543 AddWrite(ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 1543 AddWrite(ConstructRequestHeadersPacketInner( | 1544 AddWrite(ConstructRequestHeadersPacketInner( |
| 1544 1, kClientDataStreamId1, !kFin, DEFAULT_PRIORITY, | 1545 2, kClientDataStreamId1, !kFin, DEFAULT_PRIORITY, |
| 1545 &spdy_request_headers_frame_length, &header_stream_offset)); | 1546 &spdy_request_headers_frame_length, &header_stream_offset)); |
| 1546 AddWrite(ConstructInitialSettingsPacket(2, &header_stream_offset)); | |
| 1547 Initialize(); | 1547 Initialize(); |
| 1548 | 1548 |
| 1549 BidirectionalStreamRequestInfo request; | 1549 BidirectionalStreamRequestInfo request; |
| 1550 request.method = "POST"; | 1550 request.method = "POST"; |
| 1551 request.url = GURL("http://www.google.com/"); | 1551 request.url = GURL("http://www.google.com/"); |
| 1552 request.end_stream_on_headers = false; | 1552 request.end_stream_on_headers = false; |
| 1553 request.priority = DEFAULT_PRIORITY; | 1553 request.priority = DEFAULT_PRIORITY; |
| 1554 | 1554 |
| 1555 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1555 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1556 std::unique_ptr<TestDelegateBase> delegate( | 1556 std::unique_ptr<TestDelegateBase> delegate( |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1593 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), | 1593 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), |
| 1594 delegate->GetTotalSentBytes()); | 1594 delegate->GetTotalSentBytes()); |
| 1595 EXPECT_EQ(static_cast<int64_t>(spdy_response_headers_frame_length), | 1595 EXPECT_EQ(static_cast<int64_t>(spdy_response_headers_frame_length), |
| 1596 delegate->GetTotalReceivedBytes()); | 1596 delegate->GetTotalReceivedBytes()); |
| 1597 } | 1597 } |
| 1598 | 1598 |
| 1599 TEST_P(BidirectionalStreamQuicImplTest, DeleteStreamAfterReadData) { | 1599 TEST_P(BidirectionalStreamQuicImplTest, DeleteStreamAfterReadData) { |
| 1600 SetRequest("POST", "/", DEFAULT_PRIORITY); | 1600 SetRequest("POST", "/", DEFAULT_PRIORITY); |
| 1601 size_t spdy_request_headers_frame_length; | 1601 size_t spdy_request_headers_frame_length; |
| 1602 QuicStreamOffset header_stream_offset = 0; | 1602 QuicStreamOffset header_stream_offset = 0; |
| 1603 AddWrite(ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 1603 AddWrite(ConstructRequestHeadersPacketInner( | 1604 AddWrite(ConstructRequestHeadersPacketInner( |
| 1604 1, kClientDataStreamId1, !kFin, DEFAULT_PRIORITY, | 1605 2, kClientDataStreamId1, !kFin, DEFAULT_PRIORITY, |
| 1605 &spdy_request_headers_frame_length, &header_stream_offset)); | 1606 &spdy_request_headers_frame_length, &header_stream_offset)); |
| 1606 AddWrite(ConstructInitialSettingsPacket(2, &header_stream_offset)); | |
| 1607 AddWrite(ConstructClientAckAndRstStreamPacket(3, 2, 1, 1)); | 1607 AddWrite(ConstructClientAckAndRstStreamPacket(3, 2, 1, 1)); |
| 1608 | 1608 |
| 1609 Initialize(); | 1609 Initialize(); |
| 1610 | 1610 |
| 1611 BidirectionalStreamRequestInfo request; | 1611 BidirectionalStreamRequestInfo request; |
| 1612 request.method = "POST"; | 1612 request.method = "POST"; |
| 1613 request.url = GURL("http://www.google.com/"); | 1613 request.url = GURL("http://www.google.com/"); |
| 1614 request.end_stream_on_headers = false; | 1614 request.end_stream_on_headers = false; |
| 1615 request.priority = DEFAULT_PRIORITY; | 1615 request.priority = DEFAULT_PRIORITY; |
| 1616 | 1616 |
| (...skipping 30 matching lines...) Expand all Loading... |
| 1647 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), | 1647 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), |
| 1648 delegate->GetTotalSentBytes()); | 1648 delegate->GetTotalSentBytes()); |
| 1649 EXPECT_EQ(static_cast<int64_t>(spdy_response_headers_frame_length), | 1649 EXPECT_EQ(static_cast<int64_t>(spdy_response_headers_frame_length), |
| 1650 delegate->GetTotalReceivedBytes()); | 1650 delegate->GetTotalReceivedBytes()); |
| 1651 } | 1651 } |
| 1652 | 1652 |
| 1653 TEST_P(BidirectionalStreamQuicImplTest, DeleteStreamDuringOnHeadersReceived) { | 1653 TEST_P(BidirectionalStreamQuicImplTest, DeleteStreamDuringOnHeadersReceived) { |
| 1654 SetRequest("POST", "/", DEFAULT_PRIORITY); | 1654 SetRequest("POST", "/", DEFAULT_PRIORITY); |
| 1655 size_t spdy_request_headers_frame_length; | 1655 size_t spdy_request_headers_frame_length; |
| 1656 QuicStreamOffset header_stream_offset = 0; | 1656 QuicStreamOffset header_stream_offset = 0; |
| 1657 AddWrite(ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 1657 AddWrite(ConstructRequestHeadersPacketInner( | 1658 AddWrite(ConstructRequestHeadersPacketInner( |
| 1658 1, kClientDataStreamId1, !kFin, DEFAULT_PRIORITY, | 1659 2, kClientDataStreamId1, !kFin, DEFAULT_PRIORITY, |
| 1659 &spdy_request_headers_frame_length, &header_stream_offset)); | 1660 &spdy_request_headers_frame_length, &header_stream_offset)); |
| 1660 AddWrite(ConstructInitialSettingsPacket(2, &header_stream_offset)); | |
| 1661 AddWrite(ConstructClientAckAndRstStreamPacket(3, 2, 1, 1)); | 1661 AddWrite(ConstructClientAckAndRstStreamPacket(3, 2, 1, 1)); |
| 1662 | 1662 |
| 1663 Initialize(); | 1663 Initialize(); |
| 1664 | 1664 |
| 1665 BidirectionalStreamRequestInfo request; | 1665 BidirectionalStreamRequestInfo request; |
| 1666 request.method = "POST"; | 1666 request.method = "POST"; |
| 1667 request.url = GURL("http://www.google.com/"); | 1667 request.url = GURL("http://www.google.com/"); |
| 1668 request.end_stream_on_headers = false; | 1668 request.end_stream_on_headers = false; |
| 1669 request.priority = DEFAULT_PRIORITY; | 1669 request.priority = DEFAULT_PRIORITY; |
| 1670 | 1670 |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1693 base::RunLoop().RunUntilIdle(); | 1693 base::RunLoop().RunUntilIdle(); |
| 1694 | 1694 |
| 1695 EXPECT_EQ(0, delegate->on_data_read_count()); | 1695 EXPECT_EQ(0, delegate->on_data_read_count()); |
| 1696 EXPECT_EQ(0, delegate->on_data_sent_count()); | 1696 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 1697 } | 1697 } |
| 1698 | 1698 |
| 1699 TEST_P(BidirectionalStreamQuicImplTest, DeleteStreamDuringOnDataRead) { | 1699 TEST_P(BidirectionalStreamQuicImplTest, DeleteStreamDuringOnDataRead) { |
| 1700 SetRequest("POST", "/", DEFAULT_PRIORITY); | 1700 SetRequest("POST", "/", DEFAULT_PRIORITY); |
| 1701 size_t spdy_request_headers_frame_length; | 1701 size_t spdy_request_headers_frame_length; |
| 1702 QuicStreamOffset header_stream_offset = 0; | 1702 QuicStreamOffset header_stream_offset = 0; |
| 1703 AddWrite(ConstructInitialSettingsPacket(1, &header_stream_offset)); |
| 1703 AddWrite(ConstructRequestHeadersPacketInner( | 1704 AddWrite(ConstructRequestHeadersPacketInner( |
| 1704 1, kClientDataStreamId1, !kFin, DEFAULT_PRIORITY, | 1705 2, kClientDataStreamId1, !kFin, DEFAULT_PRIORITY, |
| 1705 &spdy_request_headers_frame_length, &header_stream_offset)); | 1706 &spdy_request_headers_frame_length, &header_stream_offset)); |
| 1706 AddWrite(ConstructInitialSettingsPacket(2, &header_stream_offset)); | |
| 1707 AddWrite(ConstructClientAckPacket(3, 3, 1, 1)); | 1707 AddWrite(ConstructClientAckPacket(3, 3, 1, 1)); |
| 1708 AddWrite(ConstructClientRstStreamPacket(4)); | 1708 AddWrite(ConstructClientRstStreamPacket(4)); |
| 1709 | 1709 |
| 1710 Initialize(); | 1710 Initialize(); |
| 1711 | 1711 |
| 1712 BidirectionalStreamRequestInfo request; | 1712 BidirectionalStreamRequestInfo request; |
| 1713 request.method = "POST"; | 1713 request.method = "POST"; |
| 1714 request.url = GURL("http://www.google.com/"); | 1714 request.url = GURL("http://www.google.com/"); |
| 1715 request.end_stream_on_headers = false; | 1715 request.end_stream_on_headers = false; |
| 1716 request.priority = DEFAULT_PRIORITY; | 1716 request.priority = DEFAULT_PRIORITY; |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1816 | 1816 |
| 1817 base::RunLoop().RunUntilIdle(); | 1817 base::RunLoop().RunUntilIdle(); |
| 1818 | 1818 |
| 1819 EXPECT_EQ(1, delegate->on_data_read_count()); | 1819 EXPECT_EQ(1, delegate->on_data_read_count()); |
| 1820 EXPECT_EQ(0, delegate->on_data_sent_count()); | 1820 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 1821 } | 1821 } |
| 1822 | 1822 |
| 1823 } // namespace test | 1823 } // namespace test |
| 1824 | 1824 |
| 1825 } // namespace net | 1825 } // namespace net |
| OLD | NEW |