| 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/bidirectional_stream_quic_impl.h" | 5 #include "net/quic/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 18 matching lines...) Expand all Loading... |
| 29 #include "net/quic/spdy_utils.h" | 29 #include "net/quic/spdy_utils.h" |
| 30 #include "net/quic/test_tools/crypto_test_utils.h" | 30 #include "net/quic/test_tools/crypto_test_utils.h" |
| 31 #include "net/quic/test_tools/mock_clock.h" | 31 #include "net/quic/test_tools/mock_clock.h" |
| 32 #include "net/quic/test_tools/mock_crypto_client_stream_factory.h" | 32 #include "net/quic/test_tools/mock_crypto_client_stream_factory.h" |
| 33 #include "net/quic/test_tools/mock_random.h" | 33 #include "net/quic/test_tools/mock_random.h" |
| 34 #include "net/quic/test_tools/quic_connection_peer.h" | 34 #include "net/quic/test_tools/quic_connection_peer.h" |
| 35 #include "net/quic/test_tools/quic_test_packet_maker.h" | 35 #include "net/quic/test_tools/quic_test_packet_maker.h" |
| 36 #include "net/quic/test_tools/quic_test_utils.h" | 36 #include "net/quic/test_tools/quic_test_utils.h" |
| 37 #include "net/quic/test_tools/test_task_runner.h" | 37 #include "net/quic/test_tools/test_task_runner.h" |
| 38 #include "net/socket/socket_test_util.h" | 38 #include "net/socket/socket_test_util.h" |
| 39 #include "net/test/gtest_util.h" |
| 39 #include "testing/gmock/include/gmock/gmock.h" | 40 #include "testing/gmock/include/gmock/gmock.h" |
| 40 #include "testing/gtest/include/gtest/gtest.h" | 41 #include "testing/gtest/include/gtest/gtest.h" |
| 41 | 42 |
| 43 using net::test::IsError; |
| 44 using net::test::IsOk; |
| 45 |
| 42 namespace net { | 46 namespace net { |
| 43 | 47 |
| 44 namespace test { | 48 namespace test { |
| 45 | 49 |
| 46 namespace { | 50 namespace { |
| 47 | 51 |
| 48 const char kUploadData[] = "Really nifty data!"; | 52 const char kUploadData[] = "Really nifty data!"; |
| 49 const char kDefaultServerHostName[] = "www.google.com"; | 53 const char kDefaultServerHostName[] = "www.google.com"; |
| 50 const uint16_t kDefaultServerPort = 80; | 54 const uint16_t kDefaultServerPort = 80; |
| 51 // Size of the buffer to be allocated for each read. | 55 // Size of the buffer to be allocated for each read. |
| (...skipping 582 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 634 | 638 |
| 635 size_t spdy_response_headers_frame_length; | 639 size_t spdy_response_headers_frame_length; |
| 636 QuicStreamOffset offset = 0; | 640 QuicStreamOffset offset = 0; |
| 637 ProcessPacket(ConstructResponseHeadersPacket( | 641 ProcessPacket(ConstructResponseHeadersPacket( |
| 638 2, !kFin, std::move(response_headers), | 642 2, !kFin, std::move(response_headers), |
| 639 &spdy_response_headers_frame_length, &offset)); | 643 &spdy_response_headers_frame_length, &offset)); |
| 640 | 644 |
| 641 delegate->WaitUntilNextCallback(); // OnHeadersReceived | 645 delegate->WaitUntilNextCallback(); // OnHeadersReceived |
| 642 TestCompletionCallback cb; | 646 TestCompletionCallback cb; |
| 643 int rv = delegate->ReadData(cb.callback()); | 647 int rv = delegate->ReadData(cb.callback()); |
| 644 EXPECT_EQ(ERR_IO_PENDING, rv); | 648 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 645 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); | 649 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); |
| 646 const char kResponseBody[] = "Hello world!"; | 650 const char kResponseBody[] = "Hello world!"; |
| 647 // Server sends data. | 651 // Server sends data. |
| 648 ProcessPacket( | 652 ProcessPacket( |
| 649 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); | 653 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); |
| 650 EXPECT_EQ(12, cb.WaitForResult()); | 654 EXPECT_EQ(12, cb.WaitForResult()); |
| 651 | 655 |
| 652 EXPECT_EQ(std::string(kResponseBody), delegate->data_received()); | 656 EXPECT_EQ(std::string(kResponseBody), delegate->data_received()); |
| 653 TestCompletionCallback cb2; | 657 TestCompletionCallback cb2; |
| 654 EXPECT_EQ(ERR_IO_PENDING, delegate->ReadData(cb2.callback())); | 658 EXPECT_THAT(delegate->ReadData(cb2.callback()), IsError(ERR_IO_PENDING)); |
| 655 | 659 |
| 656 SpdyHeaderBlock trailers; | 660 SpdyHeaderBlock trailers; |
| 657 size_t spdy_trailers_frame_length; | 661 size_t spdy_trailers_frame_length; |
| 658 trailers["foo"] = "bar"; | 662 trailers["foo"] = "bar"; |
| 659 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); | 663 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); |
| 660 // Server sends trailers. | 664 // Server sends trailers. |
| 661 ProcessPacket(ConstructResponseTrailersPacket( | 665 ProcessPacket(ConstructResponseTrailersPacket( |
| 662 4, kFin, trailers.Clone(), &spdy_trailers_frame_length, &offset)); | 666 4, kFin, trailers.Clone(), &spdy_trailers_frame_length, &offset)); |
| 663 | 667 |
| 664 delegate->WaitUntilNextCallback(); // OnTrailersReceived | 668 delegate->WaitUntilNextCallback(); // OnTrailersReceived |
| 665 EXPECT_EQ(OK, cb2.WaitForResult()); | 669 EXPECT_THAT(cb2.WaitForResult(), IsOk()); |
| 666 trailers.erase(kFinalOffsetHeaderKey); | 670 trailers.erase(kFinalOffsetHeaderKey); |
| 667 EXPECT_EQ(trailers, delegate->trailers()); | 671 EXPECT_EQ(trailers, delegate->trailers()); |
| 668 | 672 |
| 669 EXPECT_EQ(OK, delegate->ReadData(cb2.callback())); | 673 EXPECT_THAT(delegate->ReadData(cb2.callback()), IsOk()); |
| 670 base::RunLoop().RunUntilIdle(); | 674 base::RunLoop().RunUntilIdle(); |
| 671 | 675 |
| 672 EXPECT_EQ(2, delegate->on_data_read_count()); | 676 EXPECT_EQ(2, delegate->on_data_read_count()); |
| 673 EXPECT_EQ(0, delegate->on_data_sent_count()); | 677 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 674 EXPECT_EQ(kProtoQUIC1SPDY3, delegate->GetProtocol()); | 678 EXPECT_EQ(kProtoQUIC1SPDY3, delegate->GetProtocol()); |
| 675 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), | 679 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), |
| 676 delegate->GetTotalSentBytes()); | 680 delegate->GetTotalSentBytes()); |
| 677 EXPECT_EQ( | 681 EXPECT_EQ( |
| 678 static_cast<int64_t>(spdy_response_headers_frame_length + | 682 static_cast<int64_t>(spdy_response_headers_frame_length + |
| 679 strlen(kResponseBody) + spdy_trailers_frame_length), | 683 strlen(kResponseBody) + spdy_trailers_frame_length), |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 752 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); | 756 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 753 size_t spdy_response_headers_frame_length; | 757 size_t spdy_response_headers_frame_length; |
| 754 QuicStreamOffset offset = 0; | 758 QuicStreamOffset offset = 0; |
| 755 ProcessPacket(ConstructResponseHeadersPacket( | 759 ProcessPacket(ConstructResponseHeadersPacket( |
| 756 2, !kFin, std::move(response_headers), | 760 2, !kFin, std::move(response_headers), |
| 757 &spdy_response_headers_frame_length, &offset)); | 761 &spdy_response_headers_frame_length, &offset)); |
| 758 | 762 |
| 759 delegate->WaitUntilNextCallback(); // OnHeadersReceived | 763 delegate->WaitUntilNextCallback(); // OnHeadersReceived |
| 760 TestCompletionCallback cb; | 764 TestCompletionCallback cb; |
| 761 int rv = delegate->ReadData(cb.callback()); | 765 int rv = delegate->ReadData(cb.callback()); |
| 762 EXPECT_EQ(ERR_IO_PENDING, rv); | 766 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 763 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); | 767 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); |
| 764 const char kResponseBody[] = "Hello world!"; | 768 const char kResponseBody[] = "Hello world!"; |
| 765 // Server sends data. | 769 // Server sends data. |
| 766 ProcessPacket( | 770 ProcessPacket( |
| 767 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); | 771 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); |
| 768 | 772 |
| 769 EXPECT_EQ(static_cast<int>(strlen(kResponseBody)), cb.WaitForResult()); | 773 EXPECT_EQ(static_cast<int>(strlen(kResponseBody)), cb.WaitForResult()); |
| 770 | 774 |
| 771 // Send a second Data packet. | 775 // Send a second Data packet. |
| 772 scoped_refptr<StringIOBuffer> buf3(new StringIOBuffer(kBody3)); | 776 scoped_refptr<StringIOBuffer> buf3(new StringIOBuffer(kBody3)); |
| 773 scoped_refptr<StringIOBuffer> buf4(new StringIOBuffer(kBody4)); | 777 scoped_refptr<StringIOBuffer> buf4(new StringIOBuffer(kBody4)); |
| 774 scoped_refptr<StringIOBuffer> buf5(new StringIOBuffer(kBody5)); | 778 scoped_refptr<StringIOBuffer> buf5(new StringIOBuffer(kBody5)); |
| 775 | 779 |
| 776 delegate->SendvData({buf3, buf4, buf5}, | 780 delegate->SendvData({buf3, buf4, buf5}, |
| 777 {buf3->size(), buf4->size(), buf5->size()}, kFin); | 781 {buf3->size(), buf4->size(), buf5->size()}, kFin); |
| 778 delegate->WaitUntilNextCallback(); // OnDataSent | 782 delegate->WaitUntilNextCallback(); // OnDataSent |
| 779 | 783 |
| 780 size_t spdy_trailers_frame_length; | 784 size_t spdy_trailers_frame_length; |
| 781 SpdyHeaderBlock trailers; | 785 SpdyHeaderBlock trailers; |
| 782 trailers["foo"] = "bar"; | 786 trailers["foo"] = "bar"; |
| 783 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); | 787 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); |
| 784 // Server sends trailers. | 788 // Server sends trailers. |
| 785 ProcessPacket(ConstructResponseTrailersPacket( | 789 ProcessPacket(ConstructResponseTrailersPacket( |
| 786 4, kFin, trailers.Clone(), &spdy_trailers_frame_length, &offset)); | 790 4, kFin, trailers.Clone(), &spdy_trailers_frame_length, &offset)); |
| 787 | 791 |
| 788 delegate->WaitUntilNextCallback(); // OnTrailersReceived | 792 delegate->WaitUntilNextCallback(); // OnTrailersReceived |
| 789 trailers.erase(kFinalOffsetHeaderKey); | 793 trailers.erase(kFinalOffsetHeaderKey); |
| 790 EXPECT_EQ(trailers, delegate->trailers()); | 794 EXPECT_EQ(trailers, delegate->trailers()); |
| 791 EXPECT_EQ(OK, delegate->ReadData(cb.callback())); | 795 EXPECT_THAT(delegate->ReadData(cb.callback()), IsOk()); |
| 792 | 796 |
| 793 EXPECT_EQ(1, delegate->on_data_read_count()); | 797 EXPECT_EQ(1, delegate->on_data_read_count()); |
| 794 EXPECT_EQ(2, delegate->on_data_sent_count()); | 798 EXPECT_EQ(2, delegate->on_data_sent_count()); |
| 795 EXPECT_EQ(kProtoQUIC1SPDY3, delegate->GetProtocol()); | 799 EXPECT_EQ(kProtoQUIC1SPDY3, delegate->GetProtocol()); |
| 796 EXPECT_EQ( | 800 EXPECT_EQ( |
| 797 static_cast<int64_t>(spdy_request_headers_frame_length + strlen(kBody1) + | 801 static_cast<int64_t>(spdy_request_headers_frame_length + strlen(kBody1) + |
| 798 strlen(kBody2) + strlen(kBody3) + strlen(kBody4) + | 802 strlen(kBody2) + strlen(kBody3) + strlen(kBody4) + |
| 799 strlen(kBody5)), | 803 strlen(kBody5)), |
| 800 delegate->GetTotalSentBytes()); | 804 delegate->GetTotalSentBytes()); |
| 801 EXPECT_EQ( | 805 EXPECT_EQ( |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 851 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); | 855 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 852 size_t spdy_response_headers_frame_length; | 856 size_t spdy_response_headers_frame_length; |
| 853 QuicStreamOffset offset = 0; | 857 QuicStreamOffset offset = 0; |
| 854 ProcessPacket(ConstructResponseHeadersPacket( | 858 ProcessPacket(ConstructResponseHeadersPacket( |
| 855 2, !kFin, std::move(response_headers), | 859 2, !kFin, std::move(response_headers), |
| 856 &spdy_response_headers_frame_length, &offset)); | 860 &spdy_response_headers_frame_length, &offset)); |
| 857 | 861 |
| 858 delegate->WaitUntilNextCallback(); // OnHeadersReceived | 862 delegate->WaitUntilNextCallback(); // OnHeadersReceived |
| 859 TestCompletionCallback cb; | 863 TestCompletionCallback cb; |
| 860 int rv = delegate->ReadData(cb.callback()); | 864 int rv = delegate->ReadData(cb.callback()); |
| 861 EXPECT_EQ(ERR_IO_PENDING, rv); | 865 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 862 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); | 866 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); |
| 863 const char kResponseBody[] = "Hello world!"; | 867 const char kResponseBody[] = "Hello world!"; |
| 864 // Server sends data. | 868 // Server sends data. |
| 865 ProcessPacket( | 869 ProcessPacket( |
| 866 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); | 870 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); |
| 867 | 871 |
| 868 EXPECT_EQ(static_cast<int>(strlen(kResponseBody)), cb.WaitForResult()); | 872 EXPECT_EQ(static_cast<int>(strlen(kResponseBody)), cb.WaitForResult()); |
| 869 | 873 |
| 870 // Send a second Data packet. | 874 // Send a second Data packet. |
| 871 scoped_refptr<StringIOBuffer> buf2(new StringIOBuffer(kBody2)); | 875 scoped_refptr<StringIOBuffer> buf2(new StringIOBuffer(kBody2)); |
| 872 | 876 |
| 873 delegate->SendData(buf2, buf2->size(), true); | 877 delegate->SendData(buf2, buf2->size(), true); |
| 874 delegate->WaitUntilNextCallback(); // OnDataSent | 878 delegate->WaitUntilNextCallback(); // OnDataSent |
| 875 | 879 |
| 876 size_t spdy_trailers_frame_length; | 880 size_t spdy_trailers_frame_length; |
| 877 SpdyHeaderBlock trailers; | 881 SpdyHeaderBlock trailers; |
| 878 trailers["foo"] = "bar"; | 882 trailers["foo"] = "bar"; |
| 879 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); | 883 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); |
| 880 // Server sends trailers. | 884 // Server sends trailers. |
| 881 ProcessPacket(ConstructResponseTrailersPacket( | 885 ProcessPacket(ConstructResponseTrailersPacket( |
| 882 4, kFin, trailers.Clone(), &spdy_trailers_frame_length, &offset)); | 886 4, kFin, trailers.Clone(), &spdy_trailers_frame_length, &offset)); |
| 883 | 887 |
| 884 delegate->WaitUntilNextCallback(); // OnTrailersReceived | 888 delegate->WaitUntilNextCallback(); // OnTrailersReceived |
| 885 trailers.erase(kFinalOffsetHeaderKey); | 889 trailers.erase(kFinalOffsetHeaderKey); |
| 886 EXPECT_EQ(trailers, delegate->trailers()); | 890 EXPECT_EQ(trailers, delegate->trailers()); |
| 887 EXPECT_EQ(OK, delegate->ReadData(cb.callback())); | 891 EXPECT_THAT(delegate->ReadData(cb.callback()), IsOk()); |
| 888 | 892 |
| 889 EXPECT_EQ(1, delegate->on_data_read_count()); | 893 EXPECT_EQ(1, delegate->on_data_read_count()); |
| 890 EXPECT_EQ(2, delegate->on_data_sent_count()); | 894 EXPECT_EQ(2, delegate->on_data_sent_count()); |
| 891 EXPECT_EQ(kProtoQUIC1SPDY3, delegate->GetProtocol()); | 895 EXPECT_EQ(kProtoQUIC1SPDY3, delegate->GetProtocol()); |
| 892 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length + | 896 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length + |
| 893 strlen(kBody1) + strlen(kBody2)), | 897 strlen(kBody1) + strlen(kBody2)), |
| 894 delegate->GetTotalSentBytes()); | 898 delegate->GetTotalSentBytes()); |
| 895 EXPECT_EQ( | 899 EXPECT_EQ( |
| 896 static_cast<int64_t>(spdy_response_headers_frame_length + | 900 static_cast<int64_t>(spdy_response_headers_frame_length + |
| 897 strlen(kResponseBody) + spdy_trailers_frame_length), | 901 strlen(kResponseBody) + spdy_trailers_frame_length), |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 951 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); | 955 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 952 size_t spdy_response_headers_frame_length; | 956 size_t spdy_response_headers_frame_length; |
| 953 QuicStreamOffset offset = 0; | 957 QuicStreamOffset offset = 0; |
| 954 ProcessPacket(ConstructResponseHeadersPacket( | 958 ProcessPacket(ConstructResponseHeadersPacket( |
| 955 2, !kFin, std::move(response_headers), | 959 2, !kFin, std::move(response_headers), |
| 956 &spdy_response_headers_frame_length, &offset)); | 960 &spdy_response_headers_frame_length, &offset)); |
| 957 | 961 |
| 958 delegate->WaitUntilNextCallback(); // OnHeadersReceived | 962 delegate->WaitUntilNextCallback(); // OnHeadersReceived |
| 959 TestCompletionCallback cb; | 963 TestCompletionCallback cb; |
| 960 int rv = delegate->ReadData(cb.callback()); | 964 int rv = delegate->ReadData(cb.callback()); |
| 961 EXPECT_EQ(ERR_IO_PENDING, rv); | 965 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 962 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); | 966 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); |
| 963 const char kResponseBody[] = "Hello world!"; | 967 const char kResponseBody[] = "Hello world!"; |
| 964 // Server sends data. | 968 // Server sends data. |
| 965 ProcessPacket( | 969 ProcessPacket( |
| 966 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); | 970 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); |
| 967 | 971 |
| 968 EXPECT_EQ(static_cast<int>(strlen(kResponseBody)), cb.WaitForResult()); | 972 EXPECT_EQ(static_cast<int>(strlen(kResponseBody)), cb.WaitForResult()); |
| 969 | 973 |
| 970 // Send a second Data packet. | 974 // Send a second Data packet. |
| 971 scoped_refptr<StringIOBuffer> buf3(new StringIOBuffer(kBody3)); | 975 scoped_refptr<StringIOBuffer> buf3(new StringIOBuffer(kBody3)); |
| 972 scoped_refptr<StringIOBuffer> buf4(new StringIOBuffer(kBody4)); | 976 scoped_refptr<StringIOBuffer> buf4(new StringIOBuffer(kBody4)); |
| 973 scoped_refptr<StringIOBuffer> buf5(new StringIOBuffer(kBody5)); | 977 scoped_refptr<StringIOBuffer> buf5(new StringIOBuffer(kBody5)); |
| 974 | 978 |
| 975 delegate->SendvData({buf3, buf4, buf5}, | 979 delegate->SendvData({buf3, buf4, buf5}, |
| 976 {buf3->size(), buf4->size(), buf5->size()}, kFin); | 980 {buf3->size(), buf4->size(), buf5->size()}, kFin); |
| 977 delegate->WaitUntilNextCallback(); // OnDataSent | 981 delegate->WaitUntilNextCallback(); // OnDataSent |
| 978 | 982 |
| 979 size_t spdy_trailers_frame_length; | 983 size_t spdy_trailers_frame_length; |
| 980 SpdyHeaderBlock trailers; | 984 SpdyHeaderBlock trailers; |
| 981 trailers["foo"] = "bar"; | 985 trailers["foo"] = "bar"; |
| 982 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); | 986 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); |
| 983 // Server sends trailers. | 987 // Server sends trailers. |
| 984 ProcessPacket(ConstructResponseTrailersPacket( | 988 ProcessPacket(ConstructResponseTrailersPacket( |
| 985 4, kFin, trailers.Clone(), &spdy_trailers_frame_length, &offset)); | 989 4, kFin, trailers.Clone(), &spdy_trailers_frame_length, &offset)); |
| 986 | 990 |
| 987 delegate->WaitUntilNextCallback(); // OnTrailersReceived | 991 delegate->WaitUntilNextCallback(); // OnTrailersReceived |
| 988 trailers.erase(kFinalOffsetHeaderKey); | 992 trailers.erase(kFinalOffsetHeaderKey); |
| 989 EXPECT_EQ(trailers, delegate->trailers()); | 993 EXPECT_EQ(trailers, delegate->trailers()); |
| 990 EXPECT_EQ(OK, delegate->ReadData(cb.callback())); | 994 EXPECT_THAT(delegate->ReadData(cb.callback()), IsOk()); |
| 991 | 995 |
| 992 EXPECT_EQ(1, delegate->on_data_read_count()); | 996 EXPECT_EQ(1, delegate->on_data_read_count()); |
| 993 EXPECT_EQ(2, delegate->on_data_sent_count()); | 997 EXPECT_EQ(2, delegate->on_data_sent_count()); |
| 994 EXPECT_EQ(kProtoQUIC1SPDY3, delegate->GetProtocol()); | 998 EXPECT_EQ(kProtoQUIC1SPDY3, delegate->GetProtocol()); |
| 995 EXPECT_EQ( | 999 EXPECT_EQ( |
| 996 static_cast<int64_t>(spdy_request_headers_frame_length + strlen(kBody1) + | 1000 static_cast<int64_t>(spdy_request_headers_frame_length + strlen(kBody1) + |
| 997 strlen(kBody2) + strlen(kBody3) + strlen(kBody4) + | 1001 strlen(kBody2) + strlen(kBody3) + strlen(kBody4) + |
| 998 strlen(kBody5)), | 1002 strlen(kBody5)), |
| 999 delegate->GetTotalSentBytes()); | 1003 delegate->GetTotalSentBytes()); |
| 1000 EXPECT_EQ( | 1004 EXPECT_EQ( |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1040 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); | 1044 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 1041 size_t spdy_response_headers_frame_length; | 1045 size_t spdy_response_headers_frame_length; |
| 1042 QuicStreamOffset offset = 0; | 1046 QuicStreamOffset offset = 0; |
| 1043 ProcessPacket(ConstructResponseHeadersPacket( | 1047 ProcessPacket(ConstructResponseHeadersPacket( |
| 1044 2, !kFin, std::move(response_headers), | 1048 2, !kFin, std::move(response_headers), |
| 1045 &spdy_response_headers_frame_length, &offset)); | 1049 &spdy_response_headers_frame_length, &offset)); |
| 1046 | 1050 |
| 1047 delegate->WaitUntilNextCallback(); // OnHeadersReceived | 1051 delegate->WaitUntilNextCallback(); // OnHeadersReceived |
| 1048 TestCompletionCallback cb; | 1052 TestCompletionCallback cb; |
| 1049 int rv = delegate->ReadData(cb.callback()); | 1053 int rv = delegate->ReadData(cb.callback()); |
| 1050 EXPECT_EQ(ERR_IO_PENDING, rv); | 1054 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1051 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); | 1055 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); |
| 1052 const char kResponseBody[] = "Hello world!"; | 1056 const char kResponseBody[] = "Hello world!"; |
| 1053 // Server sends data. | 1057 // Server sends data. |
| 1054 ProcessPacket( | 1058 ProcessPacket( |
| 1055 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); | 1059 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); |
| 1056 | 1060 |
| 1057 EXPECT_EQ(static_cast<int>(strlen(kResponseBody)), cb.WaitForResult()); | 1061 EXPECT_EQ(static_cast<int>(strlen(kResponseBody)), cb.WaitForResult()); |
| 1058 | 1062 |
| 1059 size_t spdy_trailers_frame_length; | 1063 size_t spdy_trailers_frame_length; |
| 1060 SpdyHeaderBlock trailers; | 1064 SpdyHeaderBlock trailers; |
| 1061 trailers["foo"] = "bar"; | 1065 trailers["foo"] = "bar"; |
| 1062 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); | 1066 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); |
| 1063 // Server sends trailers. | 1067 // Server sends trailers. |
| 1064 ProcessPacket(ConstructResponseTrailersPacket( | 1068 ProcessPacket(ConstructResponseTrailersPacket( |
| 1065 4, kFin, trailers.Clone(), &spdy_trailers_frame_length, &offset)); | 1069 4, kFin, trailers.Clone(), &spdy_trailers_frame_length, &offset)); |
| 1066 | 1070 |
| 1067 delegate->WaitUntilNextCallback(); // OnTrailersReceived | 1071 delegate->WaitUntilNextCallback(); // OnTrailersReceived |
| 1068 trailers.erase(kFinalOffsetHeaderKey); | 1072 trailers.erase(kFinalOffsetHeaderKey); |
| 1069 EXPECT_EQ(trailers, delegate->trailers()); | 1073 EXPECT_EQ(trailers, delegate->trailers()); |
| 1070 EXPECT_EQ(OK, delegate->ReadData(cb.callback())); | 1074 EXPECT_THAT(delegate->ReadData(cb.callback()), IsOk()); |
| 1071 | 1075 |
| 1072 EXPECT_EQ(1, delegate->on_data_read_count()); | 1076 EXPECT_EQ(1, delegate->on_data_read_count()); |
| 1073 EXPECT_EQ(1, delegate->on_data_sent_count()); | 1077 EXPECT_EQ(1, delegate->on_data_sent_count()); |
| 1074 EXPECT_EQ(kProtoQUIC1SPDY3, delegate->GetProtocol()); | 1078 EXPECT_EQ(kProtoQUIC1SPDY3, delegate->GetProtocol()); |
| 1075 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length + | 1079 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length + |
| 1076 strlen(kUploadData)), | 1080 strlen(kUploadData)), |
| 1077 delegate->GetTotalSentBytes()); | 1081 delegate->GetTotalSentBytes()); |
| 1078 EXPECT_EQ( | 1082 EXPECT_EQ( |
| 1079 static_cast<int64_t>(spdy_response_headers_frame_length + | 1083 static_cast<int64_t>(spdy_response_headers_frame_length + |
| 1080 strlen(kResponseBody) + spdy_trailers_frame_length), | 1084 strlen(kResponseBody) + spdy_trailers_frame_length), |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1117 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); | 1121 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 1118 size_t spdy_response_headers_frame_length; | 1122 size_t spdy_response_headers_frame_length; |
| 1119 QuicStreamOffset offset = 0; | 1123 QuicStreamOffset offset = 0; |
| 1120 ProcessPacket(ConstructResponseHeadersPacket( | 1124 ProcessPacket(ConstructResponseHeadersPacket( |
| 1121 2, !kFin, std::move(response_headers), | 1125 2, !kFin, std::move(response_headers), |
| 1122 &spdy_response_headers_frame_length, &offset)); | 1126 &spdy_response_headers_frame_length, &offset)); |
| 1123 | 1127 |
| 1124 delegate->WaitUntilNextCallback(); // OnHeadersReceived | 1128 delegate->WaitUntilNextCallback(); // OnHeadersReceived |
| 1125 TestCompletionCallback cb; | 1129 TestCompletionCallback cb; |
| 1126 int rv = delegate->ReadData(cb.callback()); | 1130 int rv = delegate->ReadData(cb.callback()); |
| 1127 EXPECT_EQ(ERR_IO_PENDING, rv); | 1131 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1128 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); | 1132 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); |
| 1129 const char kResponseBody[] = "Hello world!"; | 1133 const char kResponseBody[] = "Hello world!"; |
| 1130 // Server sends data. | 1134 // Server sends data. |
| 1131 ProcessPacket( | 1135 ProcessPacket( |
| 1132 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); | 1136 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); |
| 1133 | 1137 |
| 1134 EXPECT_EQ(static_cast<int>(strlen(kResponseBody)), cb.WaitForResult()); | 1138 EXPECT_EQ(static_cast<int>(strlen(kResponseBody)), cb.WaitForResult()); |
| 1135 | 1139 |
| 1136 size_t spdy_trailers_frame_length; | 1140 size_t spdy_trailers_frame_length; |
| 1137 SpdyHeaderBlock trailers; | 1141 SpdyHeaderBlock trailers; |
| 1138 trailers["foo"] = "bar"; | 1142 trailers["foo"] = "bar"; |
| 1139 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); | 1143 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); |
| 1140 // Server sends trailers. | 1144 // Server sends trailers. |
| 1141 ProcessPacket(ConstructResponseTrailersPacket( | 1145 ProcessPacket(ConstructResponseTrailersPacket( |
| 1142 4, kFin, trailers.Clone(), &spdy_trailers_frame_length, &offset)); | 1146 4, kFin, trailers.Clone(), &spdy_trailers_frame_length, &offset)); |
| 1143 | 1147 |
| 1144 delegate->WaitUntilNextCallback(); // OnTrailersReceived | 1148 delegate->WaitUntilNextCallback(); // OnTrailersReceived |
| 1145 trailers.erase(kFinalOffsetHeaderKey); | 1149 trailers.erase(kFinalOffsetHeaderKey); |
| 1146 EXPECT_EQ(trailers, delegate->trailers()); | 1150 EXPECT_EQ(trailers, delegate->trailers()); |
| 1147 EXPECT_EQ(OK, delegate->ReadData(cb.callback())); | 1151 EXPECT_THAT(delegate->ReadData(cb.callback()), IsOk()); |
| 1148 | 1152 |
| 1149 EXPECT_EQ(1, delegate->on_data_read_count()); | 1153 EXPECT_EQ(1, delegate->on_data_read_count()); |
| 1150 EXPECT_EQ(1, delegate->on_data_sent_count()); | 1154 EXPECT_EQ(1, delegate->on_data_sent_count()); |
| 1151 EXPECT_EQ(kProtoQUIC1SPDY3, delegate->GetProtocol()); | 1155 EXPECT_EQ(kProtoQUIC1SPDY3, delegate->GetProtocol()); |
| 1152 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length + | 1156 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length + |
| 1153 strlen(kUploadData)), | 1157 strlen(kUploadData)), |
| 1154 delegate->GetTotalSentBytes()); | 1158 delegate->GetTotalSentBytes()); |
| 1155 EXPECT_EQ( | 1159 EXPECT_EQ( |
| 1156 static_cast<int64_t>(spdy_response_headers_frame_length + | 1160 static_cast<int64_t>(spdy_response_headers_frame_length + |
| 1157 strlen(kResponseBody) + spdy_trailers_frame_length), | 1161 strlen(kResponseBody) + spdy_trailers_frame_length), |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1197 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); | 1201 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); |
| 1198 | 1202 |
| 1199 // Client sends a data packet. | 1203 // Client sends a data packet. |
| 1200 scoped_refptr<StringIOBuffer> buf(new StringIOBuffer(kUploadData)); | 1204 scoped_refptr<StringIOBuffer> buf(new StringIOBuffer(kUploadData)); |
| 1201 | 1205 |
| 1202 delegate->SendData(buf, buf->size(), false); | 1206 delegate->SendData(buf, buf->size(), false); |
| 1203 delegate->WaitUntilNextCallback(); // OnDataSent | 1207 delegate->WaitUntilNextCallback(); // OnDataSent |
| 1204 | 1208 |
| 1205 TestCompletionCallback cb; | 1209 TestCompletionCallback cb; |
| 1206 int rv = delegate->ReadData(cb.callback()); | 1210 int rv = delegate->ReadData(cb.callback()); |
| 1207 EXPECT_EQ(ERR_IO_PENDING, rv); | 1211 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1208 const char kResponseBody[] = "Hello world!"; | 1212 const char kResponseBody[] = "Hello world!"; |
| 1209 | 1213 |
| 1210 // Server sends a data packet. | 1214 // Server sends a data packet. |
| 1211 ProcessPacket(ConstructAckAndDataPacket(3, !kIncludeVersion, 2, 1, !kFin, 0, | 1215 ProcessPacket(ConstructAckAndDataPacket(3, !kIncludeVersion, 2, 1, !kFin, 0, |
| 1212 kResponseBody, &server_maker_)); | 1216 kResponseBody, &server_maker_)); |
| 1213 | 1217 |
| 1214 EXPECT_EQ(static_cast<int64_t>(strlen(kResponseBody)), cb.WaitForResult()); | 1218 EXPECT_EQ(static_cast<int64_t>(strlen(kResponseBody)), cb.WaitForResult()); |
| 1215 EXPECT_EQ(std::string(kResponseBody), delegate->data_received()); | 1219 EXPECT_EQ(std::string(kResponseBody), delegate->data_received()); |
| 1216 | 1220 |
| 1217 // Client sends a data packet. | 1221 // Client sends a data packet. |
| 1218 delegate->SendData(buf, buf->size(), true); | 1222 delegate->SendData(buf, buf->size(), true); |
| 1219 delegate->WaitUntilNextCallback(); // OnDataSent | 1223 delegate->WaitUntilNextCallback(); // OnDataSent |
| 1220 | 1224 |
| 1221 TestCompletionCallback cb2; | 1225 TestCompletionCallback cb2; |
| 1222 rv = delegate->ReadData(cb2.callback()); | 1226 rv = delegate->ReadData(cb2.callback()); |
| 1223 EXPECT_EQ(ERR_IO_PENDING, rv); | 1227 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1224 ProcessPacket(ConstructAckAndDataPacket(4, !kIncludeVersion, 3, 1, kFin, | 1228 ProcessPacket(ConstructAckAndDataPacket(4, !kIncludeVersion, 3, 1, kFin, |
| 1225 strlen(kResponseBody), kResponseBody, | 1229 strlen(kResponseBody), kResponseBody, |
| 1226 &server_maker_)); | 1230 &server_maker_)); |
| 1227 | 1231 |
| 1228 EXPECT_EQ(static_cast<int64_t>(strlen(kResponseBody)), cb2.WaitForResult()); | 1232 EXPECT_EQ(static_cast<int64_t>(strlen(kResponseBody)), cb2.WaitForResult()); |
| 1229 | 1233 |
| 1230 std::string expected_body(kResponseBody); | 1234 std::string expected_body(kResponseBody); |
| 1231 expected_body.append(kResponseBody); | 1235 expected_body.append(kResponseBody); |
| 1232 EXPECT_EQ(expected_body, delegate->data_received()); | 1236 EXPECT_EQ(expected_body, delegate->data_received()); |
| 1233 | 1237 |
| 1234 EXPECT_EQ(OK, delegate->ReadData(cb.callback())); | 1238 EXPECT_THAT(delegate->ReadData(cb.callback()), IsOk()); |
| 1235 EXPECT_EQ(2, delegate->on_data_read_count()); | 1239 EXPECT_EQ(2, delegate->on_data_read_count()); |
| 1236 EXPECT_EQ(2, delegate->on_data_sent_count()); | 1240 EXPECT_EQ(2, delegate->on_data_sent_count()); |
| 1237 EXPECT_EQ(kProtoQUIC1SPDY3, delegate->GetProtocol()); | 1241 EXPECT_EQ(kProtoQUIC1SPDY3, delegate->GetProtocol()); |
| 1238 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length + | 1242 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length + |
| 1239 2 * strlen(kUploadData)), | 1243 2 * strlen(kUploadData)), |
| 1240 delegate->GetTotalSentBytes()); | 1244 delegate->GetTotalSentBytes()); |
| 1241 EXPECT_EQ(static_cast<int64_t>(spdy_response_headers_frame_length + | 1245 EXPECT_EQ(static_cast<int64_t>(spdy_response_headers_frame_length + |
| 1242 2 * strlen(kResponseBody)), | 1246 2 * strlen(kResponseBody)), |
| 1243 delegate->GetTotalReceivedBytes()); | 1247 delegate->GetTotalReceivedBytes()); |
| 1244 } | 1248 } |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1261 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 1265 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 1262 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); | 1266 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); |
| 1263 delegate->WaitUntilNextCallback(); // OnStreamReady | 1267 delegate->WaitUntilNextCallback(); // OnStreamReady |
| 1264 ConfirmHandshake(); | 1268 ConfirmHandshake(); |
| 1265 | 1269 |
| 1266 // Server sends a Rst. | 1270 // Server sends a Rst. |
| 1267 ProcessPacket(ConstructServerRstStreamPacket(1)); | 1271 ProcessPacket(ConstructServerRstStreamPacket(1)); |
| 1268 | 1272 |
| 1269 delegate->WaitUntilNextCallback(); // OnFailed | 1273 delegate->WaitUntilNextCallback(); // OnFailed |
| 1270 TestCompletionCallback cb; | 1274 TestCompletionCallback cb; |
| 1271 EXPECT_EQ(ERR_QUIC_PROTOCOL_ERROR, delegate->ReadData(cb.callback())); | 1275 EXPECT_THAT(delegate->ReadData(cb.callback()), |
| 1276 IsError(ERR_QUIC_PROTOCOL_ERROR)); |
| 1272 | 1277 |
| 1273 base::RunLoop().RunUntilIdle(); | 1278 base::RunLoop().RunUntilIdle(); |
| 1274 | 1279 |
| 1275 EXPECT_EQ(ERR_QUIC_PROTOCOL_ERROR, delegate->error()); | 1280 EXPECT_THAT(delegate->error(), IsError(ERR_QUIC_PROTOCOL_ERROR)); |
| 1276 EXPECT_EQ(0, delegate->on_data_read_count()); | 1281 EXPECT_EQ(0, delegate->on_data_read_count()); |
| 1277 EXPECT_EQ(0, delegate->on_data_sent_count()); | 1282 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 1278 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), | 1283 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), |
| 1279 delegate->GetTotalSentBytes()); | 1284 delegate->GetTotalSentBytes()); |
| 1280 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); | 1285 EXPECT_EQ(0, delegate->GetTotalReceivedBytes()); |
| 1281 } | 1286 } |
| 1282 | 1287 |
| 1283 TEST_P(BidirectionalStreamQuicImplTest, ServerSendsRstAfterReadData) { | 1288 TEST_P(BidirectionalStreamQuicImplTest, ServerSendsRstAfterReadData) { |
| 1284 SetRequest("GET", "/", DEFAULT_PRIORITY); | 1289 SetRequest("GET", "/", DEFAULT_PRIORITY); |
| 1285 size_t spdy_request_headers_frame_length; | 1290 size_t spdy_request_headers_frame_length; |
| (...skipping 27 matching lines...) Expand all Loading... |
| 1313 QuicStreamOffset offset = 0; | 1318 QuicStreamOffset offset = 0; |
| 1314 ProcessPacket(ConstructResponseHeadersPacket( | 1319 ProcessPacket(ConstructResponseHeadersPacket( |
| 1315 2, !kFin, std::move(response_headers), | 1320 2, !kFin, std::move(response_headers), |
| 1316 &spdy_response_headers_frame_length, &offset)); | 1321 &spdy_response_headers_frame_length, &offset)); |
| 1317 | 1322 |
| 1318 delegate->WaitUntilNextCallback(); // OnHeadersReceived | 1323 delegate->WaitUntilNextCallback(); // OnHeadersReceived |
| 1319 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); | 1324 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); |
| 1320 | 1325 |
| 1321 TestCompletionCallback cb; | 1326 TestCompletionCallback cb; |
| 1322 int rv = delegate->ReadData(cb.callback()); | 1327 int rv = delegate->ReadData(cb.callback()); |
| 1323 EXPECT_EQ(ERR_IO_PENDING, rv); | 1328 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1324 | 1329 |
| 1325 // Server sends a Rst. | 1330 // Server sends a Rst. |
| 1326 ProcessPacket(ConstructServerRstStreamPacket(3)); | 1331 ProcessPacket(ConstructServerRstStreamPacket(3)); |
| 1327 | 1332 |
| 1328 delegate->WaitUntilNextCallback(); // OnFailed | 1333 delegate->WaitUntilNextCallback(); // OnFailed |
| 1329 | 1334 |
| 1330 EXPECT_EQ(ERR_QUIC_PROTOCOL_ERROR, delegate->ReadData(cb.callback())); | 1335 EXPECT_THAT(delegate->ReadData(cb.callback()), |
| 1331 EXPECT_EQ(ERR_QUIC_PROTOCOL_ERROR, delegate->error()); | 1336 IsError(ERR_QUIC_PROTOCOL_ERROR)); |
| 1337 EXPECT_THAT(delegate->error(), IsError(ERR_QUIC_PROTOCOL_ERROR)); |
| 1332 EXPECT_EQ(0, delegate->on_data_read_count()); | 1338 EXPECT_EQ(0, delegate->on_data_read_count()); |
| 1333 EXPECT_EQ(0, delegate->on_data_sent_count()); | 1339 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 1334 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), | 1340 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), |
| 1335 delegate->GetTotalSentBytes()); | 1341 delegate->GetTotalSentBytes()); |
| 1336 EXPECT_EQ(static_cast<int64_t>(spdy_response_headers_frame_length), | 1342 EXPECT_EQ(static_cast<int64_t>(spdy_response_headers_frame_length), |
| 1337 delegate->GetTotalReceivedBytes()); | 1343 delegate->GetTotalReceivedBytes()); |
| 1338 } | 1344 } |
| 1339 | 1345 |
| 1340 TEST_P(BidirectionalStreamQuicImplTest, CancelStreamAfterSendData) { | 1346 TEST_P(BidirectionalStreamQuicImplTest, CancelStreamAfterSendData) { |
| 1341 SetRequest("POST", "/", DEFAULT_PRIORITY); | 1347 SetRequest("POST", "/", DEFAULT_PRIORITY); |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1427 | 1433 |
| 1428 size_t spdy_response_headers_frame_length; | 1434 size_t spdy_response_headers_frame_length; |
| 1429 QuicStreamOffset offset = 0; | 1435 QuicStreamOffset offset = 0; |
| 1430 ProcessPacket(ConstructResponseHeadersPacket( | 1436 ProcessPacket(ConstructResponseHeadersPacket( |
| 1431 2, !kFin, std::move(response_headers), | 1437 2, !kFin, std::move(response_headers), |
| 1432 &spdy_response_headers_frame_length, &offset)); | 1438 &spdy_response_headers_frame_length, &offset)); |
| 1433 | 1439 |
| 1434 delegate->WaitUntilNextCallback(); // OnHeadersReceived | 1440 delegate->WaitUntilNextCallback(); // OnHeadersReceived |
| 1435 TestCompletionCallback cb; | 1441 TestCompletionCallback cb; |
| 1436 int rv = delegate->ReadData(cb.callback()); | 1442 int rv = delegate->ReadData(cb.callback()); |
| 1437 EXPECT_EQ(ERR_IO_PENDING, rv); | 1443 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1438 session()->connection()->CloseConnection( | 1444 session()->connection()->CloseConnection( |
| 1439 QUIC_NO_ERROR, "test", ConnectionCloseBehavior::SILENT_CLOSE); | 1445 QUIC_NO_ERROR, "test", ConnectionCloseBehavior::SILENT_CLOSE); |
| 1440 delegate->WaitUntilNextCallback(); // OnFailed | 1446 delegate->WaitUntilNextCallback(); // OnFailed |
| 1441 EXPECT_TRUE(delegate->on_failed_called()); | 1447 EXPECT_TRUE(delegate->on_failed_called()); |
| 1442 | 1448 |
| 1443 // Try to send data after OnFailed(), should not get called back. | 1449 // Try to send data after OnFailed(), should not get called back. |
| 1444 scoped_refptr<StringIOBuffer> buf(new StringIOBuffer(kUploadData)); | 1450 scoped_refptr<StringIOBuffer> buf(new StringIOBuffer(kUploadData)); |
| 1445 delegate->SendData(buf, buf->size(), false); | 1451 delegate->SendData(buf, buf->size(), false); |
| 1446 base::RunLoop().RunUntilIdle(); | 1452 base::RunLoop().RunUntilIdle(); |
| 1447 | 1453 |
| 1448 EXPECT_EQ(ERR_UNEXPECTED, delegate->ReadData(cb.callback())); | 1454 EXPECT_THAT(delegate->ReadData(cb.callback()), IsError(ERR_UNEXPECTED)); |
| 1449 EXPECT_EQ(ERR_UNEXPECTED, delegate->error()); | 1455 EXPECT_THAT(delegate->error(), IsError(ERR_UNEXPECTED)); |
| 1450 EXPECT_EQ(0, delegate->on_data_read_count()); | 1456 EXPECT_EQ(0, delegate->on_data_read_count()); |
| 1451 EXPECT_EQ(0, delegate->on_data_sent_count()); | 1457 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 1452 EXPECT_EQ(kProtoQUIC1SPDY3, delegate->GetProtocol()); | 1458 EXPECT_EQ(kProtoQUIC1SPDY3, delegate->GetProtocol()); |
| 1453 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), | 1459 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), |
| 1454 delegate->GetTotalSentBytes()); | 1460 delegate->GetTotalSentBytes()); |
| 1455 EXPECT_EQ(static_cast<int64_t>(spdy_response_headers_frame_length), | 1461 EXPECT_EQ(static_cast<int64_t>(spdy_response_headers_frame_length), |
| 1456 delegate->GetTotalReceivedBytes()); | 1462 delegate->GetTotalReceivedBytes()); |
| 1457 } | 1463 } |
| 1458 | 1464 |
| 1459 TEST_P(BidirectionalStreamQuicImplTest, CancelStreamAfterReadData) { | 1465 TEST_P(BidirectionalStreamQuicImplTest, CancelStreamAfterReadData) { |
| (...skipping 26 matching lines...) Expand all Loading... |
| 1486 size_t spdy_response_headers_frame_length; | 1492 size_t spdy_response_headers_frame_length; |
| 1487 ProcessPacket( | 1493 ProcessPacket( |
| 1488 ConstructResponseHeadersPacket(2, !kFin, std::move(response_headers), | 1494 ConstructResponseHeadersPacket(2, !kFin, std::move(response_headers), |
| 1489 &spdy_response_headers_frame_length, 0)); | 1495 &spdy_response_headers_frame_length, 0)); |
| 1490 | 1496 |
| 1491 delegate->WaitUntilNextCallback(); // OnHeadersReceived | 1497 delegate->WaitUntilNextCallback(); // OnHeadersReceived |
| 1492 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); | 1498 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); |
| 1493 | 1499 |
| 1494 // Cancel the stream after ReadData returns ERR_IO_PENDING. | 1500 // Cancel the stream after ReadData returns ERR_IO_PENDING. |
| 1495 TestCompletionCallback cb; | 1501 TestCompletionCallback cb; |
| 1496 EXPECT_EQ(ERR_IO_PENDING, delegate->ReadData(cb.callback())); | 1502 EXPECT_THAT(delegate->ReadData(cb.callback()), IsError(ERR_IO_PENDING)); |
| 1497 delegate->CancelStream(); | 1503 delegate->CancelStream(); |
| 1498 | 1504 |
| 1499 base::RunLoop().RunUntilIdle(); | 1505 base::RunLoop().RunUntilIdle(); |
| 1500 | 1506 |
| 1501 EXPECT_EQ(0, delegate->on_data_read_count()); | 1507 EXPECT_EQ(0, delegate->on_data_read_count()); |
| 1502 EXPECT_EQ(0, delegate->on_data_sent_count()); | 1508 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 1503 EXPECT_EQ(kProtoQUIC1SPDY3, delegate->GetProtocol()); | 1509 EXPECT_EQ(kProtoQUIC1SPDY3, delegate->GetProtocol()); |
| 1504 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), | 1510 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length), |
| 1505 delegate->GetTotalSentBytes()); | 1511 delegate->GetTotalSentBytes()); |
| 1506 EXPECT_EQ(static_cast<int64_t>(spdy_response_headers_frame_length), | 1512 EXPECT_EQ(static_cast<int64_t>(spdy_response_headers_frame_length), |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1583 ProcessPacket(ConstructResponseHeadersPacket( | 1589 ProcessPacket(ConstructResponseHeadersPacket( |
| 1584 2, !kFin, std::move(response_headers), | 1590 2, !kFin, std::move(response_headers), |
| 1585 &spdy_response_headers_frame_length, nullptr)); | 1591 &spdy_response_headers_frame_length, nullptr)); |
| 1586 | 1592 |
| 1587 delegate->WaitUntilNextCallback(); // OnHeadersReceived | 1593 delegate->WaitUntilNextCallback(); // OnHeadersReceived |
| 1588 | 1594 |
| 1589 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); | 1595 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); |
| 1590 | 1596 |
| 1591 TestCompletionCallback cb; | 1597 TestCompletionCallback cb; |
| 1592 int rv = delegate->ReadData(cb.callback()); | 1598 int rv = delegate->ReadData(cb.callback()); |
| 1593 EXPECT_EQ(ERR_IO_PENDING, rv); | 1599 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1594 const char kResponseBody[] = "Hello world!"; | 1600 const char kResponseBody[] = "Hello world!"; |
| 1595 // Server sends data. | 1601 // Server sends data. |
| 1596 ProcessPacket( | 1602 ProcessPacket( |
| 1597 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); | 1603 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); |
| 1598 EXPECT_EQ(static_cast<int64_t>(strlen(kResponseBody)), cb.WaitForResult()); | 1604 EXPECT_EQ(static_cast<int64_t>(strlen(kResponseBody)), cb.WaitForResult()); |
| 1599 | 1605 |
| 1600 base::RunLoop().RunUntilIdle(); | 1606 base::RunLoop().RunUntilIdle(); |
| 1601 | 1607 |
| 1602 EXPECT_EQ(1, delegate->on_data_read_count()); | 1608 EXPECT_EQ(1, delegate->on_data_read_count()); |
| 1603 EXPECT_EQ(0, delegate->on_data_sent_count()); | 1609 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1636 ProcessPacket(ConstructResponseHeadersPacket( | 1642 ProcessPacket(ConstructResponseHeadersPacket( |
| 1637 2, !kFin, std::move(response_headers), | 1643 2, !kFin, std::move(response_headers), |
| 1638 &spdy_response_headers_frame_length, &offset)); | 1644 &spdy_response_headers_frame_length, &offset)); |
| 1639 | 1645 |
| 1640 delegate->WaitUntilNextCallback(); // OnHeadersReceived | 1646 delegate->WaitUntilNextCallback(); // OnHeadersReceived |
| 1641 | 1647 |
| 1642 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); | 1648 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); |
| 1643 | 1649 |
| 1644 TestCompletionCallback cb; | 1650 TestCompletionCallback cb; |
| 1645 int rv = delegate->ReadData(cb.callback()); | 1651 int rv = delegate->ReadData(cb.callback()); |
| 1646 EXPECT_EQ(ERR_IO_PENDING, rv); | 1652 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
| 1647 const char kResponseBody[] = "Hello world!"; | 1653 const char kResponseBody[] = "Hello world!"; |
| 1648 // Server sends data. | 1654 // Server sends data. |
| 1649 ProcessPacket( | 1655 ProcessPacket( |
| 1650 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); | 1656 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); |
| 1651 | 1657 |
| 1652 EXPECT_EQ(static_cast<int64_t>(strlen(kResponseBody)), cb.WaitForResult()); | 1658 EXPECT_EQ(static_cast<int64_t>(strlen(kResponseBody)), cb.WaitForResult()); |
| 1653 EXPECT_EQ(std::string(kResponseBody), delegate->data_received()); | 1659 EXPECT_EQ(std::string(kResponseBody), delegate->data_received()); |
| 1654 | 1660 |
| 1655 size_t spdy_trailers_frame_length; | 1661 size_t spdy_trailers_frame_length; |
| 1656 SpdyHeaderBlock trailers; | 1662 SpdyHeaderBlock trailers; |
| 1657 trailers["foo"] = "bar"; | 1663 trailers["foo"] = "bar"; |
| 1658 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); | 1664 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); |
| 1659 // Server sends trailers. | 1665 // Server sends trailers. |
| 1660 ProcessPacket(ConstructResponseTrailersPacket( | 1666 ProcessPacket(ConstructResponseTrailersPacket( |
| 1661 4, kFin, trailers.Clone(), &spdy_trailers_frame_length, &offset)); | 1667 4, kFin, trailers.Clone(), &spdy_trailers_frame_length, &offset)); |
| 1662 | 1668 |
| 1663 delegate->WaitUntilNextCallback(); // OnTrailersReceived | 1669 delegate->WaitUntilNextCallback(); // OnTrailersReceived |
| 1664 trailers.erase(kFinalOffsetHeaderKey); | 1670 trailers.erase(kFinalOffsetHeaderKey); |
| 1665 EXPECT_EQ(trailers, delegate->trailers()); | 1671 EXPECT_EQ(trailers, delegate->trailers()); |
| 1666 | 1672 |
| 1667 base::RunLoop().RunUntilIdle(); | 1673 base::RunLoop().RunUntilIdle(); |
| 1668 | 1674 |
| 1669 EXPECT_EQ(1, delegate->on_data_read_count()); | 1675 EXPECT_EQ(1, delegate->on_data_read_count()); |
| 1670 EXPECT_EQ(0, delegate->on_data_sent_count()); | 1676 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 1671 } | 1677 } |
| 1672 | 1678 |
| 1673 } // namespace test | 1679 } // namespace test |
| 1674 | 1680 |
| 1675 } // namespace net | 1681 } // namespace net |
| OLD | NEW |