| 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 "base/callback_helpers.h" | 7 #include "base/callback_helpers.h" |
| 8 #include "base/memory/ptr_util.h" | 8 #include "base/memory/ptr_util.h" |
| 9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
| 10 #include "base/strings/string_number_conversions.h" | 10 #include "base/strings/string_number_conversions.h" |
| (...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 61 std::unique_ptr<base::Timer> timer) | 61 std::unique_ptr<base::Timer> timer) |
| 62 : read_buf_(read_buf), | 62 : read_buf_(read_buf), |
| 63 read_buf_len_(read_buf_len), | 63 read_buf_len_(read_buf_len), |
| 64 timer_(std::move(timer)), | 64 timer_(std::move(timer)), |
| 65 loop_(nullptr), | 65 loop_(nullptr), |
| 66 error_(OK), | 66 error_(OK), |
| 67 on_data_read_count_(0), | 67 on_data_read_count_(0), |
| 68 on_data_sent_count_(0), | 68 on_data_sent_count_(0), |
| 69 not_expect_callback_(false), | 69 not_expect_callback_(false), |
| 70 on_failed_called_(false), | 70 on_failed_called_(false), |
| 71 send_request_headers_automatically_(true) { | 71 send_request_headers_automatically_(true), |
| 72 is_ready_(false) { |
| 72 loop_.reset(new base::RunLoop); | 73 loop_.reset(new base::RunLoop); |
| 73 } | 74 } |
| 74 | 75 |
| 75 ~TestDelegateBase() override {} | 76 ~TestDelegateBase() override {} |
| 76 | 77 |
| 77 void OnStreamReady(bool request_headers_sent) override { | 78 void OnStreamReady(bool request_headers_sent) override { |
| 79 CHECK(!is_ready_); |
| 78 CHECK(!on_failed_called_); | 80 CHECK(!on_failed_called_); |
| 79 EXPECT_EQ(send_request_headers_automatically_, request_headers_sent); | 81 EXPECT_EQ(send_request_headers_automatically_, request_headers_sent); |
| 80 CHECK(!not_expect_callback_); | 82 CHECK(!not_expect_callback_); |
| 83 is_ready_ = true; |
| 81 loop_->Quit(); | 84 loop_->Quit(); |
| 82 } | 85 } |
| 83 | 86 |
| 84 void OnHeadersReceived(const SpdyHeaderBlock& response_headers) override { | 87 void OnHeadersReceived(const SpdyHeaderBlock& response_headers) override { |
| 85 CHECK(!on_failed_called_); | 88 CHECK(!on_failed_called_); |
| 86 CHECK(!not_expect_callback_); | 89 CHECK(!not_expect_callback_); |
| 87 | 90 |
| 88 response_headers_ = response_headers; | 91 response_headers_ = response_headers; |
| 89 loop_->Quit(); | 92 loop_->Quit(); |
| 90 } | 93 } |
| (...skipping 96 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 187 } | 190 } |
| 188 | 191 |
| 189 // Const getters for internal states. | 192 // Const getters for internal states. |
| 190 const std::string& data_received() const { return data_received_; } | 193 const std::string& data_received() const { return data_received_; } |
| 191 int error() const { return error_; } | 194 int error() const { return error_; } |
| 192 const SpdyHeaderBlock& response_headers() const { return response_headers_; } | 195 const SpdyHeaderBlock& response_headers() const { return response_headers_; } |
| 193 const SpdyHeaderBlock& trailers() const { return trailers_; } | 196 const SpdyHeaderBlock& trailers() const { return trailers_; } |
| 194 int on_data_read_count() const { return on_data_read_count_; } | 197 int on_data_read_count() const { return on_data_read_count_; } |
| 195 int on_data_sent_count() const { return on_data_sent_count_; } | 198 int on_data_sent_count() const { return on_data_sent_count_; } |
| 196 bool on_failed_called() const { return on_failed_called_; } | 199 bool on_failed_called() const { return on_failed_called_; } |
| 200 bool is_ready() const { return is_ready_; } |
| 197 | 201 |
| 198 protected: | 202 protected: |
| 199 // Quits |loop_|. | 203 // Quits |loop_|. |
| 200 void QuitLoop() { loop_->Quit(); } | 204 void QuitLoop() { loop_->Quit(); } |
| 201 | 205 |
| 202 // Deletes |stream_|. | 206 // Deletes |stream_|. |
| 203 void DeleteStream() { stream_.reset(); } | 207 void DeleteStream() { stream_.reset(); } |
| 204 | 208 |
| 205 private: | 209 private: |
| 206 std::unique_ptr<BidirectionalStreamQuicImpl> stream_; | 210 std::unique_ptr<BidirectionalStreamQuicImpl> stream_; |
| 207 scoped_refptr<IOBuffer> read_buf_; | 211 scoped_refptr<IOBuffer> read_buf_; |
| 208 int read_buf_len_; | 212 int read_buf_len_; |
| 209 std::unique_ptr<base::Timer> timer_; | 213 std::unique_ptr<base::Timer> timer_; |
| 210 std::string data_received_; | 214 std::string data_received_; |
| 211 std::unique_ptr<base::RunLoop> loop_; | 215 std::unique_ptr<base::RunLoop> loop_; |
| 212 SpdyHeaderBlock response_headers_; | 216 SpdyHeaderBlock response_headers_; |
| 213 SpdyHeaderBlock trailers_; | 217 SpdyHeaderBlock trailers_; |
| 214 int error_; | 218 int error_; |
| 215 int on_data_read_count_; | 219 int on_data_read_count_; |
| 216 int on_data_sent_count_; | 220 int on_data_sent_count_; |
| 217 // This is to ensure that delegate callback is not invoked synchronously when | 221 // This is to ensure that delegate callback is not invoked synchronously when |
| 218 // calling into |stream_|. | 222 // calling into |stream_|. |
| 219 bool not_expect_callback_; | 223 bool not_expect_callback_; |
| 220 bool on_failed_called_; | 224 bool on_failed_called_; |
| 221 CompletionCallback callback_; | 225 CompletionCallback callback_; |
| 222 bool send_request_headers_automatically_; | 226 bool send_request_headers_automatically_; |
| 227 bool is_ready_; |
| 223 | 228 |
| 224 DISALLOW_COPY_AND_ASSIGN(TestDelegateBase); | 229 DISALLOW_COPY_AND_ASSIGN(TestDelegateBase); |
| 225 }; | 230 }; |
| 226 | 231 |
| 227 // A delegate that deletes the stream in a particular callback. | 232 // A delegate that deletes the stream in a particular callback. |
| 228 class DeleteStreamDelegate : public TestDelegateBase { | 233 class DeleteStreamDelegate : public TestDelegateBase { |
| 229 public: | 234 public: |
| 230 // Specifies in which callback the stream can be deleted. | 235 // Specifies in which callback the stream can be deleted. |
| 231 enum Phase { | 236 enum Phase { |
| 232 ON_HEADERS_RECEIVED, | 237 ON_HEADERS_RECEIVED, |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 335 void AddWrite(std::unique_ptr<QuicReceivedPacket> packet) { | 340 void AddWrite(std::unique_ptr<QuicReceivedPacket> packet) { |
| 336 writes_.push_back(PacketToWrite(SYNCHRONOUS, packet.release())); | 341 writes_.push_back(PacketToWrite(SYNCHRONOUS, packet.release())); |
| 337 } | 342 } |
| 338 | 343 |
| 339 void ProcessPacket(std::unique_ptr<QuicReceivedPacket> packet) { | 344 void ProcessPacket(std::unique_ptr<QuicReceivedPacket> packet) { |
| 340 connection_->ProcessUdpPacket(self_addr_, peer_addr_, *packet); | 345 connection_->ProcessUdpPacket(self_addr_, peer_addr_, *packet); |
| 341 } | 346 } |
| 342 | 347 |
| 343 // Configures the test fixture to use the list of expected writes. | 348 // Configures the test fixture to use the list of expected writes. |
| 344 void Initialize() { | 349 void Initialize() { |
| 350 crypto_client_stream_factory_.set_handshake_mode( |
| 351 MockCryptoClientStream::ZERO_RTT); |
| 345 mock_writes_.reset(new MockWrite[writes_.size()]); | 352 mock_writes_.reset(new MockWrite[writes_.size()]); |
| 346 for (size_t i = 0; i < writes_.size(); i++) { | 353 for (size_t i = 0; i < writes_.size(); i++) { |
| 347 if (writes_[i].packet == nullptr) { | 354 if (writes_[i].packet == nullptr) { |
| 348 mock_writes_[i] = MockWrite(writes_[i].mode, writes_[i].rv, i); | 355 mock_writes_[i] = MockWrite(writes_[i].mode, writes_[i].rv, i); |
| 349 } else { | 356 } else { |
| 350 mock_writes_[i] = MockWrite(writes_[i].mode, writes_[i].packet->data(), | 357 mock_writes_[i] = MockWrite(writes_[i].mode, writes_[i].packet->data(), |
| 351 writes_[i].packet->length()); | 358 writes_[i].packet->length()); |
| 352 } | 359 } |
| 353 } | 360 } |
| 354 | 361 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 375 QuicServerId(kDefaultServerHostName, kDefaultServerPort, | 382 QuicServerId(kDefaultServerHostName, kDefaultServerPort, |
| 376 PRIVACY_MODE_DISABLED), | 383 PRIVACY_MODE_DISABLED), |
| 377 kQuicYieldAfterPacketsRead, | 384 kQuicYieldAfterPacketsRead, |
| 378 QuicTime::Delta::FromMilliseconds(kQuicYieldAfterDurationMilliseconds), | 385 QuicTime::Delta::FromMilliseconds(kQuicYieldAfterDurationMilliseconds), |
| 379 /*cert_verify_flags=*/0, DefaultQuicConfig(), &crypto_config_, | 386 /*cert_verify_flags=*/0, DefaultQuicConfig(), &crypto_config_, |
| 380 "CONNECTION_UNKNOWN", base::TimeTicks::Now(), &push_promise_index_, | 387 "CONNECTION_UNKNOWN", base::TimeTicks::Now(), &push_promise_index_, |
| 381 base::ThreadTaskRunnerHandle::Get().get(), | 388 base::ThreadTaskRunnerHandle::Get().get(), |
| 382 /*socket_performance_watcher=*/nullptr, net_log().bound().net_log())); | 389 /*socket_performance_watcher=*/nullptr, net_log().bound().net_log())); |
| 383 session_->Initialize(); | 390 session_->Initialize(); |
| 384 session_->GetCryptoStream()->CryptoConnect(); | 391 session_->GetCryptoStream()->CryptoConnect(); |
| 385 EXPECT_TRUE(session_->IsCryptoHandshakeConfirmed()); | 392 EXPECT_TRUE(session_->IsEncryptionEstablished()); |
| 393 } |
| 394 |
| 395 void ConfirmHandshake() { |
| 396 crypto_client_stream_factory_.last_stream()->SendOnCryptoHandshakeEvent( |
| 397 QuicSession::HANDSHAKE_CONFIRMED); |
| 386 } | 398 } |
| 387 | 399 |
| 388 void SetRequest(const std::string& method, | 400 void SetRequest(const std::string& method, |
| 389 const std::string& path, | 401 const std::string& path, |
| 390 RequestPriority priority) { | 402 RequestPriority priority) { |
| 391 request_headers_ = client_maker_.GetRequestHeaders(method, "http", path); | 403 request_headers_ = client_maker_.GetRequestHeaders(method, "http", path); |
| 392 } | 404 } |
| 393 | 405 |
| 394 SpdyHeaderBlock ConstructResponseHeaders(const std::string& response_code) { | 406 SpdyHeaderBlock ConstructResponseHeaders(const std::string& response_code) { |
| 395 return server_maker_.GetResponseHeaders(response_code); | 407 return server_maker_.GetResponseHeaders(response_code); |
| (...skipping 313 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 709 request.method = "POST"; | 721 request.method = "POST"; |
| 710 request.url = GURL("http://www.google.com/"); | 722 request.url = GURL("http://www.google.com/"); |
| 711 request.end_stream_on_headers = false; | 723 request.end_stream_on_headers = false; |
| 712 request.priority = DEFAULT_PRIORITY; | 724 request.priority = DEFAULT_PRIORITY; |
| 713 | 725 |
| 714 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 726 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 715 std::unique_ptr<TestDelegateBase> delegate( | 727 std::unique_ptr<TestDelegateBase> delegate( |
| 716 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 728 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 717 delegate->DoNotSendRequestHeadersAutomatically(); | 729 delegate->DoNotSendRequestHeadersAutomatically(); |
| 718 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); | 730 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); |
| 731 EXPECT_FALSE(delegate->is_ready()); |
| 732 ConfirmHandshake(); |
| 719 delegate->WaitUntilNextCallback(); // OnStreamReady | 733 delegate->WaitUntilNextCallback(); // OnStreamReady |
| 720 | 734 |
| 721 // Sends request headers separately, which causes them to be sent in a | 735 // Sends request headers separately, which causes them to be sent in a |
| 722 // separate packet. | 736 // separate packet. |
| 723 delegate->SendRequestHeaders(); | 737 delegate->SendRequestHeaders(); |
| 724 // Send a Data packet. | 738 // Send a Data packet. |
| 725 scoped_refptr<StringIOBuffer> buf1(new StringIOBuffer(kBody1)); | 739 scoped_refptr<StringIOBuffer> buf1(new StringIOBuffer(kBody1)); |
| 726 scoped_refptr<StringIOBuffer> buf2(new StringIOBuffer(kBody2)); | 740 scoped_refptr<StringIOBuffer> buf2(new StringIOBuffer(kBody2)); |
| 727 | 741 |
| 728 std::vector<int> lengths = {buf1->size(), buf2->size()}; | 742 std::vector<int> lengths = {buf1->size(), buf2->size()}; |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 812 request.method = "POST"; | 826 request.method = "POST"; |
| 813 request.url = GURL("http://www.google.com/"); | 827 request.url = GURL("http://www.google.com/"); |
| 814 request.end_stream_on_headers = false; | 828 request.end_stream_on_headers = false; |
| 815 request.priority = DEFAULT_PRIORITY; | 829 request.priority = DEFAULT_PRIORITY; |
| 816 | 830 |
| 817 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 831 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 818 std::unique_ptr<TestDelegateBase> delegate( | 832 std::unique_ptr<TestDelegateBase> delegate( |
| 819 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 833 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 820 delegate->DoNotSendRequestHeadersAutomatically(); | 834 delegate->DoNotSendRequestHeadersAutomatically(); |
| 821 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); | 835 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); |
| 836 ConfirmHandshake(); |
| 822 delegate->WaitUntilNextCallback(); // OnStreamReady | 837 delegate->WaitUntilNextCallback(); // OnStreamReady |
| 823 | 838 |
| 824 // Send a Data packet. | 839 // Send a Data packet. |
| 825 scoped_refptr<StringIOBuffer> buf1(new StringIOBuffer(kBody1)); | 840 scoped_refptr<StringIOBuffer> buf1(new StringIOBuffer(kBody1)); |
| 826 | 841 |
| 827 delegate->SendData(buf1, buf1->size(), false); | 842 delegate->SendData(buf1, buf1->size(), false); |
| 828 delegate->WaitUntilNextCallback(); // OnDataSent | 843 delegate->WaitUntilNextCallback(); // OnDataSent |
| 829 | 844 |
| 830 // Server acks the request. | 845 // Server acks the request. |
| 831 ProcessPacket(ConstructServerAckPacket(1, 0, 0)); | 846 ProcessPacket(ConstructServerAckPacket(1, 0, 0)); |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 909 request.method = "POST"; | 924 request.method = "POST"; |
| 910 request.url = GURL("http://www.google.com/"); | 925 request.url = GURL("http://www.google.com/"); |
| 911 request.end_stream_on_headers = false; | 926 request.end_stream_on_headers = false; |
| 912 request.priority = DEFAULT_PRIORITY; | 927 request.priority = DEFAULT_PRIORITY; |
| 913 | 928 |
| 914 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 929 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 915 std::unique_ptr<TestDelegateBase> delegate( | 930 std::unique_ptr<TestDelegateBase> delegate( |
| 916 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 931 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 917 delegate->DoNotSendRequestHeadersAutomatically(); | 932 delegate->DoNotSendRequestHeadersAutomatically(); |
| 918 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); | 933 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); |
| 934 ConfirmHandshake(); |
| 919 delegate->WaitUntilNextCallback(); // OnStreamReady | 935 delegate->WaitUntilNextCallback(); // OnStreamReady |
| 920 | 936 |
| 921 // Send a Data packet. | 937 // Send a Data packet. |
| 922 scoped_refptr<StringIOBuffer> buf1(new StringIOBuffer(kBody1)); | 938 scoped_refptr<StringIOBuffer> buf1(new StringIOBuffer(kBody1)); |
| 923 scoped_refptr<StringIOBuffer> buf2(new StringIOBuffer(kBody2)); | 939 scoped_refptr<StringIOBuffer> buf2(new StringIOBuffer(kBody2)); |
| 924 | 940 |
| 925 std::vector<int> lengths = {buf1->size(), buf2->size()}; | 941 std::vector<int> lengths = {buf1->size(), buf2->size()}; |
| 926 delegate->SendvData({buf1, buf2}, lengths, !kFin); | 942 delegate->SendvData({buf1, buf2}, lengths, !kFin); |
| 927 delegate->WaitUntilNextCallback(); // OnDataSent | 943 delegate->WaitUntilNextCallback(); // OnDataSent |
| 928 | 944 |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 999 BidirectionalStreamRequestInfo request; | 1015 BidirectionalStreamRequestInfo request; |
| 1000 request.method = "POST"; | 1016 request.method = "POST"; |
| 1001 request.url = GURL("http://www.google.com/"); | 1017 request.url = GURL("http://www.google.com/"); |
| 1002 request.end_stream_on_headers = false; | 1018 request.end_stream_on_headers = false; |
| 1003 request.priority = DEFAULT_PRIORITY; | 1019 request.priority = DEFAULT_PRIORITY; |
| 1004 | 1020 |
| 1005 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1021 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1006 std::unique_ptr<TestDelegateBase> delegate( | 1022 std::unique_ptr<TestDelegateBase> delegate( |
| 1007 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 1023 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 1008 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); | 1024 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); |
| 1025 ConfirmHandshake(); |
| 1026 delegate->WaitUntilNextCallback(); // OnStreamReady |
| 1027 |
| 1028 // Send a DATA frame. |
| 1029 scoped_refptr<StringIOBuffer> buf(new StringIOBuffer(kUploadData)); |
| 1030 |
| 1031 delegate->SendData(buf, buf->size(), true); |
| 1032 delegate->WaitUntilNextCallback(); // OnDataSent |
| 1033 |
| 1034 // Server acks the request. |
| 1035 ProcessPacket(ConstructServerAckPacket(1, 0, 0)); |
| 1036 |
| 1037 // Server sends the response headers. |
| 1038 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 1039 size_t spdy_response_headers_frame_length; |
| 1040 QuicStreamOffset offset = 0; |
| 1041 ProcessPacket(ConstructResponseHeadersPacket( |
| 1042 2, !kFin, response_headers, &spdy_response_headers_frame_length, |
| 1043 &offset)); |
| 1044 |
| 1045 delegate->WaitUntilNextCallback(); // OnHeadersReceived |
| 1046 TestCompletionCallback cb; |
| 1047 int rv = delegate->ReadData(cb.callback()); |
| 1048 EXPECT_EQ(ERR_IO_PENDING, rv); |
| 1049 EXPECT_EQ("200", delegate->response_headers().find(":status")->second); |
| 1050 const char kResponseBody[] = "Hello world!"; |
| 1051 // Server sends data. |
| 1052 ProcessPacket( |
| 1053 ConstructServerDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody)); |
| 1054 |
| 1055 EXPECT_EQ(static_cast<int>(strlen(kResponseBody)), cb.WaitForResult()); |
| 1056 |
| 1057 size_t spdy_trailers_frame_length; |
| 1058 SpdyHeaderBlock trailers; |
| 1059 trailers["foo"] = "bar"; |
| 1060 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody)); |
| 1061 // Server sends trailers. |
| 1062 ProcessPacket(ConstructResponseTrailersPacket( |
| 1063 4, kFin, trailers, &spdy_trailers_frame_length, &offset)); |
| 1064 |
| 1065 delegate->WaitUntilNextCallback(); // OnTrailersReceived |
| 1066 trailers.erase(kFinalOffsetHeaderKey); |
| 1067 EXPECT_EQ(trailers, delegate->trailers()); |
| 1068 EXPECT_EQ(OK, delegate->ReadData(cb.callback())); |
| 1069 |
| 1070 EXPECT_EQ(1, delegate->on_data_read_count()); |
| 1071 EXPECT_EQ(1, delegate->on_data_sent_count()); |
| 1072 EXPECT_EQ(kProtoQUIC1SPDY3, delegate->GetProtocol()); |
| 1073 EXPECT_EQ(static_cast<int64_t>(spdy_request_headers_frame_length + |
| 1074 strlen(kUploadData)), |
| 1075 delegate->GetTotalSentBytes()); |
| 1076 EXPECT_EQ( |
| 1077 static_cast<int64_t>(spdy_response_headers_frame_length + |
| 1078 strlen(kResponseBody) + spdy_trailers_frame_length), |
| 1079 delegate->GetTotalReceivedBytes()); |
| 1080 } |
| 1081 |
| 1082 TEST_P(BidirectionalStreamQuicImplTest, PutRequest) { |
| 1083 SetRequest("PUT", "/", DEFAULT_PRIORITY); |
| 1084 size_t spdy_request_headers_frame_length; |
| 1085 AddWrite(ConstructRequestHeadersPacket(1, !kFin, DEFAULT_PRIORITY, |
| 1086 &spdy_request_headers_frame_length)); |
| 1087 AddWrite(ConstructDataPacket(2, kIncludeVersion, kFin, 0, kUploadData, |
| 1088 &client_maker_)); |
| 1089 AddWrite(ConstructClientAckPacket(3, 3, 1)); |
| 1090 |
| 1091 Initialize(); |
| 1092 |
| 1093 BidirectionalStreamRequestInfo request; |
| 1094 request.method = "PUT"; |
| 1095 request.url = GURL("http://www.google.com/"); |
| 1096 request.end_stream_on_headers = false; |
| 1097 request.priority = DEFAULT_PRIORITY; |
| 1098 |
| 1099 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1100 std::unique_ptr<TestDelegateBase> delegate( |
| 1101 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 1102 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); |
| 1009 delegate->WaitUntilNextCallback(); // OnStreamReady | 1103 delegate->WaitUntilNextCallback(); // OnStreamReady |
| 1010 | 1104 |
| 1011 // Send a DATA frame. | 1105 // Send a DATA frame. |
| 1012 scoped_refptr<StringIOBuffer> buf(new StringIOBuffer(kUploadData)); | 1106 scoped_refptr<StringIOBuffer> buf(new StringIOBuffer(kUploadData)); |
| 1013 | 1107 |
| 1014 delegate->SendData(buf, buf->size(), true); | 1108 delegate->SendData(buf, buf->size(), true); |
| 1015 delegate->WaitUntilNextCallback(); // OnDataSent | 1109 delegate->WaitUntilNextCallback(); // OnDataSent |
| 1016 | 1110 |
| 1017 // Server acks the request. | 1111 // Server acks the request. |
| 1018 ProcessPacket(ConstructServerAckPacket(1, 0, 0)); | 1112 ProcessPacket(ConstructServerAckPacket(1, 0, 0)); |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1077 BidirectionalStreamRequestInfo request; | 1171 BidirectionalStreamRequestInfo request; |
| 1078 request.method = "POST"; | 1172 request.method = "POST"; |
| 1079 request.url = GURL("http://www.google.com/"); | 1173 request.url = GURL("http://www.google.com/"); |
| 1080 request.end_stream_on_headers = false; | 1174 request.end_stream_on_headers = false; |
| 1081 request.priority = DEFAULT_PRIORITY; | 1175 request.priority = DEFAULT_PRIORITY; |
| 1082 | 1176 |
| 1083 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1177 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1084 std::unique_ptr<TestDelegateBase> delegate( | 1178 std::unique_ptr<TestDelegateBase> delegate( |
| 1085 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 1179 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 1086 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); | 1180 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); |
| 1181 ConfirmHandshake(); |
| 1087 delegate->WaitUntilNextCallback(); // OnStreamReady | 1182 delegate->WaitUntilNextCallback(); // OnStreamReady |
| 1088 | 1183 |
| 1089 // Server acks the request. | 1184 // Server acks the request. |
| 1090 ProcessPacket(ConstructServerAckPacket(1, 0, 0)); | 1185 ProcessPacket(ConstructServerAckPacket(1, 0, 0)); |
| 1091 | 1186 |
| 1092 // Server sends the response headers. | 1187 // Server sends the response headers. |
| 1093 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); | 1188 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 1094 size_t spdy_response_headers_frame_length; | 1189 size_t spdy_response_headers_frame_length; |
| 1095 ProcessPacket(ConstructResponseHeadersPacket( | 1190 ProcessPacket(ConstructResponseHeadersPacket( |
| 1096 2, !kFin, response_headers, &spdy_response_headers_frame_length, 0)); | 1191 2, !kFin, response_headers, &spdy_response_headers_frame_length, 0)); |
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1156 request.method = "GET"; | 1251 request.method = "GET"; |
| 1157 request.url = GURL("http://www.google.com/"); | 1252 request.url = GURL("http://www.google.com/"); |
| 1158 request.end_stream_on_headers = true; | 1253 request.end_stream_on_headers = true; |
| 1159 request.priority = DEFAULT_PRIORITY; | 1254 request.priority = DEFAULT_PRIORITY; |
| 1160 | 1255 |
| 1161 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1256 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1162 std::unique_ptr<TestDelegateBase> delegate( | 1257 std::unique_ptr<TestDelegateBase> delegate( |
| 1163 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 1258 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 1164 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); | 1259 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); |
| 1165 delegate->WaitUntilNextCallback(); // OnStreamReady | 1260 delegate->WaitUntilNextCallback(); // OnStreamReady |
| 1261 ConfirmHandshake(); |
| 1166 | 1262 |
| 1167 // Server sends a Rst. | 1263 // Server sends a Rst. |
| 1168 ProcessPacket(ConstructServerRstStreamPacket(1)); | 1264 ProcessPacket(ConstructServerRstStreamPacket(1)); |
| 1169 | 1265 |
| 1170 delegate->WaitUntilNextCallback(); // OnFailed | 1266 delegate->WaitUntilNextCallback(); // OnFailed |
| 1171 TestCompletionCallback cb; | 1267 TestCompletionCallback cb; |
| 1172 EXPECT_EQ(ERR_QUIC_PROTOCOL_ERROR, delegate->ReadData(cb.callback())); | 1268 EXPECT_EQ(ERR_QUIC_PROTOCOL_ERROR, delegate->ReadData(cb.callback())); |
| 1173 | 1269 |
| 1174 base::RunLoop().RunUntilIdle(); | 1270 base::RunLoop().RunUntilIdle(); |
| 1175 | 1271 |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1195 request.method = "GET"; | 1291 request.method = "GET"; |
| 1196 request.url = GURL("http://www.google.com/"); | 1292 request.url = GURL("http://www.google.com/"); |
| 1197 request.end_stream_on_headers = true; | 1293 request.end_stream_on_headers = true; |
| 1198 request.priority = DEFAULT_PRIORITY; | 1294 request.priority = DEFAULT_PRIORITY; |
| 1199 | 1295 |
| 1200 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1296 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1201 std::unique_ptr<TestDelegateBase> delegate( | 1297 std::unique_ptr<TestDelegateBase> delegate( |
| 1202 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 1298 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 1203 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); | 1299 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); |
| 1204 delegate->WaitUntilNextCallback(); // OnStreamReady | 1300 delegate->WaitUntilNextCallback(); // OnStreamReady |
| 1301 ConfirmHandshake(); |
| 1205 | 1302 |
| 1206 // Server acks the request. | 1303 // Server acks the request. |
| 1207 ProcessPacket(ConstructServerAckPacket(1, 0, 0)); | 1304 ProcessPacket(ConstructServerAckPacket(1, 0, 0)); |
| 1208 | 1305 |
| 1209 // Server sends the response headers. | 1306 // Server sends the response headers. |
| 1210 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); | 1307 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 1211 | 1308 |
| 1212 size_t spdy_response_headers_frame_length; | 1309 size_t spdy_response_headers_frame_length; |
| 1213 QuicStreamOffset offset = 0; | 1310 QuicStreamOffset offset = 0; |
| 1214 ProcessPacket(ConstructResponseHeadersPacket( | 1311 ProcessPacket(ConstructResponseHeadersPacket( |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1252 BidirectionalStreamRequestInfo request; | 1349 BidirectionalStreamRequestInfo request; |
| 1253 request.method = "POST"; | 1350 request.method = "POST"; |
| 1254 request.url = GURL("http://www.google.com/"); | 1351 request.url = GURL("http://www.google.com/"); |
| 1255 request.end_stream_on_headers = false; | 1352 request.end_stream_on_headers = false; |
| 1256 request.priority = DEFAULT_PRIORITY; | 1353 request.priority = DEFAULT_PRIORITY; |
| 1257 | 1354 |
| 1258 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1355 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1259 std::unique_ptr<TestDelegateBase> delegate( | 1356 std::unique_ptr<TestDelegateBase> delegate( |
| 1260 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 1357 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 1261 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); | 1358 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); |
| 1359 ConfirmHandshake(); |
| 1262 delegate->WaitUntilNextCallback(); // OnStreamReady | 1360 delegate->WaitUntilNextCallback(); // OnStreamReady |
| 1263 | 1361 |
| 1264 // Server acks the request. | 1362 // Server acks the request. |
| 1265 ProcessPacket(ConstructServerAckPacket(1, 0, 0)); | 1363 ProcessPacket(ConstructServerAckPacket(1, 0, 0)); |
| 1266 | 1364 |
| 1267 // Server sends the response headers. | 1365 // Server sends the response headers. |
| 1268 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); | 1366 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 1269 size_t spdy_response_headers_frame_length; | 1367 size_t spdy_response_headers_frame_length; |
| 1270 ProcessPacket(ConstructResponseHeadersPacket( | 1368 ProcessPacket(ConstructResponseHeadersPacket( |
| 1271 2, !kFin, response_headers, &spdy_response_headers_frame_length, 0)); | 1369 2, !kFin, response_headers, &spdy_response_headers_frame_length, 0)); |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1307 BidirectionalStreamRequestInfo request; | 1405 BidirectionalStreamRequestInfo request; |
| 1308 request.method = "POST"; | 1406 request.method = "POST"; |
| 1309 request.url = GURL("http://www.google.com/"); | 1407 request.url = GURL("http://www.google.com/"); |
| 1310 request.end_stream_on_headers = false; | 1408 request.end_stream_on_headers = false; |
| 1311 request.priority = DEFAULT_PRIORITY; | 1409 request.priority = DEFAULT_PRIORITY; |
| 1312 | 1410 |
| 1313 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1411 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1314 std::unique_ptr<TestDelegateBase> delegate( | 1412 std::unique_ptr<TestDelegateBase> delegate( |
| 1315 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 1413 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 1316 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); | 1414 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); |
| 1415 ConfirmHandshake(); |
| 1317 delegate->WaitUntilNextCallback(); // OnStreamReady | 1416 delegate->WaitUntilNextCallback(); // OnStreamReady |
| 1318 | 1417 |
| 1319 // Server acks the request. | 1418 // Server acks the request. |
| 1320 ProcessPacket(ConstructServerAckPacket(1, 0, 0)); | 1419 ProcessPacket(ConstructServerAckPacket(1, 0, 0)); |
| 1321 | 1420 |
| 1322 // Server sends the response headers. | 1421 // Server sends the response headers. |
| 1323 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); | 1422 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 1324 | 1423 |
| 1325 size_t spdy_response_headers_frame_length; | 1424 size_t spdy_response_headers_frame_length; |
| 1326 QuicStreamOffset offset = 0; | 1425 QuicStreamOffset offset = 0; |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1365 BidirectionalStreamRequestInfo request; | 1464 BidirectionalStreamRequestInfo request; |
| 1366 request.method = "POST"; | 1465 request.method = "POST"; |
| 1367 request.url = GURL("http://www.google.com/"); | 1466 request.url = GURL("http://www.google.com/"); |
| 1368 request.end_stream_on_headers = false; | 1467 request.end_stream_on_headers = false; |
| 1369 request.priority = DEFAULT_PRIORITY; | 1468 request.priority = DEFAULT_PRIORITY; |
| 1370 | 1469 |
| 1371 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1470 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1372 std::unique_ptr<TestDelegateBase> delegate( | 1471 std::unique_ptr<TestDelegateBase> delegate( |
| 1373 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); | 1472 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); |
| 1374 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); | 1473 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); |
| 1474 ConfirmHandshake(); |
| 1375 delegate->WaitUntilNextCallback(); // OnStreamReady | 1475 delegate->WaitUntilNextCallback(); // OnStreamReady |
| 1376 | 1476 |
| 1377 // Server acks the request. | 1477 // Server acks the request. |
| 1378 ProcessPacket(ConstructServerAckPacket(1, 0, 0)); | 1478 ProcessPacket(ConstructServerAckPacket(1, 0, 0)); |
| 1379 | 1479 |
| 1380 // Server sends the response headers. | 1480 // Server sends the response headers. |
| 1381 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); | 1481 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 1382 size_t spdy_response_headers_frame_length; | 1482 size_t spdy_response_headers_frame_length; |
| 1383 ProcessPacket(ConstructResponseHeadersPacket( | 1483 ProcessPacket(ConstructResponseHeadersPacket( |
| 1384 2, !kFin, response_headers, &spdy_response_headers_frame_length, 0)); | 1484 2, !kFin, response_headers, &spdy_response_headers_frame_length, 0)); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 1415 request.method = "POST"; | 1515 request.method = "POST"; |
| 1416 request.url = GURL("http://www.google.com/"); | 1516 request.url = GURL("http://www.google.com/"); |
| 1417 request.end_stream_on_headers = false; | 1517 request.end_stream_on_headers = false; |
| 1418 request.priority = DEFAULT_PRIORITY; | 1518 request.priority = DEFAULT_PRIORITY; |
| 1419 | 1519 |
| 1420 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1520 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1421 std::unique_ptr<DeleteStreamDelegate> delegate( | 1521 std::unique_ptr<DeleteStreamDelegate> delegate( |
| 1422 new DeleteStreamDelegate(read_buffer.get(), kReadBufferSize, | 1522 new DeleteStreamDelegate(read_buffer.get(), kReadBufferSize, |
| 1423 DeleteStreamDelegate::ON_HEADERS_RECEIVED)); | 1523 DeleteStreamDelegate::ON_HEADERS_RECEIVED)); |
| 1424 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); | 1524 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); |
| 1525 ConfirmHandshake(); |
| 1425 delegate->WaitUntilNextCallback(); // OnStreamReady | 1526 delegate->WaitUntilNextCallback(); // OnStreamReady |
| 1426 | 1527 |
| 1427 // Server acks the request. | 1528 // Server acks the request. |
| 1428 ProcessPacket(ConstructServerAckPacket(1, 0, 0)); | 1529 ProcessPacket(ConstructServerAckPacket(1, 0, 0)); |
| 1429 | 1530 |
| 1430 // Server sends the response headers. | 1531 // Server sends the response headers. |
| 1431 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); | 1532 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 1432 | 1533 |
| 1433 size_t spdy_response_headers_frame_length; | 1534 size_t spdy_response_headers_frame_length; |
| 1434 ProcessPacket(ConstructResponseHeadersPacket( | 1535 ProcessPacket(ConstructResponseHeadersPacket( |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1457 BidirectionalStreamRequestInfo request; | 1558 BidirectionalStreamRequestInfo request; |
| 1458 request.method = "POST"; | 1559 request.method = "POST"; |
| 1459 request.url = GURL("http://www.google.com/"); | 1560 request.url = GURL("http://www.google.com/"); |
| 1460 request.end_stream_on_headers = false; | 1561 request.end_stream_on_headers = false; |
| 1461 request.priority = DEFAULT_PRIORITY; | 1562 request.priority = DEFAULT_PRIORITY; |
| 1462 | 1563 |
| 1463 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); | 1564 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); |
| 1464 std::unique_ptr<DeleteStreamDelegate> delegate(new DeleteStreamDelegate( | 1565 std::unique_ptr<DeleteStreamDelegate> delegate(new DeleteStreamDelegate( |
| 1465 read_buffer.get(), kReadBufferSize, DeleteStreamDelegate::ON_DATA_READ)); | 1566 read_buffer.get(), kReadBufferSize, DeleteStreamDelegate::ON_DATA_READ)); |
| 1466 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); | 1567 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); |
| 1568 ConfirmHandshake(); |
| 1467 delegate->WaitUntilNextCallback(); // OnStreamReady | 1569 delegate->WaitUntilNextCallback(); // OnStreamReady |
| 1468 | 1570 |
| 1469 // Server acks the request. | 1571 // Server acks the request. |
| 1470 ProcessPacket(ConstructServerAckPacket(1, 0, 0)); | 1572 ProcessPacket(ConstructServerAckPacket(1, 0, 0)); |
| 1471 | 1573 |
| 1472 // Server sends the response headers. | 1574 // Server sends the response headers. |
| 1473 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); | 1575 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); |
| 1474 | 1576 |
| 1475 size_t spdy_response_headers_frame_length; | 1577 size_t spdy_response_headers_frame_length; |
| 1476 ProcessPacket(ConstructResponseHeadersPacket( | 1578 ProcessPacket(ConstructResponseHeadersPacket( |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1559 | 1661 |
| 1560 base::RunLoop().RunUntilIdle(); | 1662 base::RunLoop().RunUntilIdle(); |
| 1561 | 1663 |
| 1562 EXPECT_EQ(1, delegate->on_data_read_count()); | 1664 EXPECT_EQ(1, delegate->on_data_read_count()); |
| 1563 EXPECT_EQ(0, delegate->on_data_sent_count()); | 1665 EXPECT_EQ(0, delegate->on_data_sent_count()); |
| 1564 } | 1666 } |
| 1565 | 1667 |
| 1566 } // namespace test | 1668 } // namespace test |
| 1567 | 1669 |
| 1568 } // namespace net | 1670 } // namespace net |
| OLD | NEW |