Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(144)

Side by Side Diff: net/quic/bidirectional_stream_quic_impl_unittest.cc

Issue 1856073002: Coalesce small buffers in net::BidirectionalStream (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix javadoc Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/quic/bidirectional_stream_quic_impl.cc ('k') | net/quic/quic_chromium_client_stream.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <stdint.h> 7 #include <stdint.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <vector> 10 #include <vector>
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
67 TestDelegateBase(IOBuffer* read_buf, 67 TestDelegateBase(IOBuffer* read_buf,
68 int read_buf_len, 68 int read_buf_len,
69 std::unique_ptr<base::Timer> timer) 69 std::unique_ptr<base::Timer> timer)
70 : read_buf_(read_buf), 70 : read_buf_(read_buf),
71 read_buf_len_(read_buf_len), 71 read_buf_len_(read_buf_len),
72 timer_(std::move(timer)), 72 timer_(std::move(timer)),
73 loop_(nullptr), 73 loop_(nullptr),
74 error_(OK), 74 error_(OK),
75 on_data_read_count_(0), 75 on_data_read_count_(0),
76 on_data_sent_count_(0), 76 on_data_sent_count_(0),
77 not_expect_callback_(false) { 77 not_expect_callback_(false),
78 disable_auto_flush_(false) {
78 loop_.reset(new base::RunLoop); 79 loop_.reset(new base::RunLoop);
79 } 80 }
80 81
81 ~TestDelegateBase() override {} 82 ~TestDelegateBase() override {}
82 83
83 void OnHeadersSent() override { 84 void OnStreamReady() override {
84 CHECK(!not_expect_callback_); 85 CHECK(!not_expect_callback_);
85 loop_->Quit(); 86 loop_->Quit();
86 } 87 }
87 88
88 void OnHeadersReceived(const SpdyHeaderBlock& response_headers) override { 89 void OnHeadersReceived(const SpdyHeaderBlock& response_headers) override {
89 CHECK(!not_expect_callback_); 90 CHECK(!not_expect_callback_);
90 91
91 response_headers_ = response_headers; 92 response_headers_ = response_headers;
92 loop_->Quit(); 93 loop_->Quit();
93 } 94 }
(...skipping 28 matching lines...) Expand all
122 CHECK_NE(OK, error); 123 CHECK_NE(OK, error);
123 124
124 error_ = error; 125 error_ = error;
125 loop_->Quit(); 126 loop_->Quit();
126 } 127 }
127 128
128 void Start(const BidirectionalStreamRequestInfo* request_info, 129 void Start(const BidirectionalStreamRequestInfo* request_info,
129 const BoundNetLog& net_log, 130 const BoundNetLog& net_log,
130 const base::WeakPtr<QuicChromiumClientSession> session) { 131 const base::WeakPtr<QuicChromiumClientSession> session) {
131 stream_job_.reset(new BidirectionalStreamQuicImpl(session)); 132 stream_job_.reset(new BidirectionalStreamQuicImpl(session));
132 stream_job_->Start(request_info, net_log, this, nullptr); 133 stream_job_->Start(request_info, net_log, disable_auto_flush_, this,
134 nullptr);
133 } 135 }
134 136
135 void SendData(IOBuffer* data, int length, bool end_of_stream) { 137 void SendData(IOBuffer* data, int length, bool end_of_stream) {
136 not_expect_callback_ = true; 138 not_expect_callback_ = true;
137 stream_job_->SendData(data, length, end_of_stream); 139 stream_job_->SendData(data, length, end_of_stream);
138 not_expect_callback_ = false; 140 not_expect_callback_ = false;
139 } 141 }
140 142
143 void SendvData(const std::vector<IOBuffer*>& data,
144 const std::vector<int>& lengths,
145 bool end_of_stream) {
146 not_expect_callback_ = true;
147 stream_job_->SendvData(data, lengths, end_of_stream);
148 not_expect_callback_ = false;
149 }
150
141 // Waits until next Delegate callback. 151 // Waits until next Delegate callback.
142 void WaitUntilNextCallback() { 152 void WaitUntilNextCallback() {
143 loop_->Run(); 153 loop_->Run();
144 loop_.reset(new base::RunLoop); 154 loop_.reset(new base::RunLoop);
145 } 155 }
146 156
147 // Calls ReadData on the |stream_| and updates |data_received_|. 157 // Calls ReadData on the |stream_| and updates |data_received_|.
148 int ReadData(const CompletionCallback& callback) { 158 int ReadData(const CompletionCallback& callback) {
149 not_expect_callback_ = true; 159 not_expect_callback_ = true;
150 int rv = stream_job_->ReadData(read_buf_.get(), read_buf_len_); 160 int rv = stream_job_->ReadData(read_buf_.get(), read_buf_len_);
151 not_expect_callback_ = false; 161 not_expect_callback_ = false;
152 if (rv > 0) 162 if (rv > 0)
153 data_received_.append(read_buf_->data(), rv); 163 data_received_.append(read_buf_->data(), rv);
154 if (rv == ERR_IO_PENDING) 164 if (rv == ERR_IO_PENDING)
155 callback_ = callback; 165 callback_ = callback;
156 return rv; 166 return rv;
157 } 167 }
158 168
159 // Cancels |stream_|. 169 // Cancels |stream_|.
160 void CancelStream() { stream_job_->Cancel(); } 170 void CancelStream() { stream_job_->Cancel(); }
161 171
162 NextProto GetProtocol() const { return stream_job_->GetProtocol(); } 172 NextProto GetProtocol() const { return stream_job_->GetProtocol(); }
163 173
164 int64_t GetTotalReceivedBytes() const { 174 int64_t GetTotalReceivedBytes() const {
165 return stream_job_->GetTotalReceivedBytes(); 175 return stream_job_->GetTotalReceivedBytes();
166 } 176 }
167 177
168 int64_t GetTotalSentBytes() const { return stream_job_->GetTotalSentBytes(); } 178 int64_t GetTotalSentBytes() const { return stream_job_->GetTotalSentBytes(); }
169 179
180 void DisableAutoFlush() { disable_auto_flush_ = true; }
181
170 // Const getters for internal states. 182 // Const getters for internal states.
171 const std::string& data_received() const { return data_received_; } 183 const std::string& data_received() const { return data_received_; }
172 int error() const { return error_; } 184 int error() const { return error_; }
173 const SpdyHeaderBlock& response_headers() const { return response_headers_; } 185 const SpdyHeaderBlock& response_headers() const { return response_headers_; }
174 const SpdyHeaderBlock& trailers() const { return trailers_; } 186 const SpdyHeaderBlock& trailers() const { return trailers_; }
175 int on_data_read_count() const { return on_data_read_count_; } 187 int on_data_read_count() const { return on_data_read_count_; }
176 int on_data_sent_count() const { return on_data_sent_count_; } 188 int on_data_sent_count() const { return on_data_sent_count_; }
177 189
178 protected: 190 protected:
179 // Quits |loop_|. 191 // Quits |loop_|.
(...skipping 11 matching lines...) Expand all
191 std::unique_ptr<base::RunLoop> loop_; 203 std::unique_ptr<base::RunLoop> loop_;
192 SpdyHeaderBlock response_headers_; 204 SpdyHeaderBlock response_headers_;
193 SpdyHeaderBlock trailers_; 205 SpdyHeaderBlock trailers_;
194 int error_; 206 int error_;
195 int on_data_read_count_; 207 int on_data_read_count_;
196 int on_data_sent_count_; 208 int on_data_sent_count_;
197 // This is to ensure that delegate callback is not invoked synchronously when 209 // This is to ensure that delegate callback is not invoked synchronously when
198 // calling into |stream_|. 210 // calling into |stream_|.
199 bool not_expect_callback_; 211 bool not_expect_callback_;
200 CompletionCallback callback_; 212 CompletionCallback callback_;
213 bool disable_auto_flush_;
201 214
202 DISALLOW_COPY_AND_ASSIGN(TestDelegateBase); 215 DISALLOW_COPY_AND_ASSIGN(TestDelegateBase);
203 }; 216 };
204 217
205 // A delegate that deletes the stream in a particular callback. 218 // A delegate that deletes the stream in a particular callback.
206 class DeleteStreamDelegate : public TestDelegateBase { 219 class DeleteStreamDelegate : public TestDelegateBase {
207 public: 220 public:
208 // Specifies in which callback the stream can be deleted. 221 // Specifies in which callback the stream can be deleted.
209 enum Phase { 222 enum Phase {
210 ON_HEADERS_RECEIVED, 223 ON_HEADERS_RECEIVED,
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
370 bool should_include_version, 383 bool should_include_version,
371 bool fin, 384 bool fin,
372 QuicStreamOffset offset, 385 QuicStreamOffset offset,
373 base::StringPiece data) { 386 base::StringPiece data) {
374 std::unique_ptr<QuicReceivedPacket> packet(maker_.MakeDataPacket( 387 std::unique_ptr<QuicReceivedPacket> packet(maker_.MakeDataPacket(
375 packet_number, stream_id_, should_include_version, fin, offset, data)); 388 packet_number, stream_id_, should_include_version, fin, offset, data));
376 DVLOG(2) << "packet(" << packet_number << "): " << std::endl 389 DVLOG(2) << "packet(" << packet_number << "): " << std::endl
377 << QuicUtils::StringToHexASCIIDump(packet->AsStringPiece()); 390 << QuicUtils::StringToHexASCIIDump(packet->AsStringPiece());
378 return packet; 391 return packet;
379 } 392 }
393 // Construct a data packet with multiple data frames
394 std::unique_ptr<QuicReceivedPacket> ConstructMultipleDataFramesPacket(
395 QuicPacketNumber packet_number,
396 bool should_include_version,
397 bool fin,
398 QuicStreamOffset offset,
399 const std::vector<std::string>& data_writes) {
400 std::unique_ptr<QuicReceivedPacket> packet(
401 maker_.MakeMultipleDataFramesPacket(packet_number, stream_id_,
402 should_include_version, fin, offset,
403 data_writes));
404 DVLOG(2) << "packet(" << packet_number << "): " << std::endl
405 << QuicUtils::StringToHexASCIIDump(packet->AsStringPiece());
406 return packet;
407 }
380 408
381 std::unique_ptr<QuicReceivedPacket> ConstructRequestHeadersPacket( 409 std::unique_ptr<QuicReceivedPacket> ConstructRequestHeadersPacket(
382 QuicPacketNumber packet_number, 410 QuicPacketNumber packet_number,
383 bool fin, 411 bool fin,
384 RequestPriority request_priority, 412 RequestPriority request_priority,
385 size_t* spdy_headers_frame_length) { 413 size_t* spdy_headers_frame_length) {
386 SpdyPriority priority = 414 SpdyPriority priority =
387 ConvertRequestPriorityToQuicPriority(request_priority); 415 ConvertRequestPriorityToQuicPriority(request_priority);
388 return maker_.MakeRequestHeadersPacket( 416 return maker_.MakeRequestHeadersPacket(
389 packet_number, stream_id_, kIncludeVersion, fin, priority, 417 packet_number, stream_id_, kIncludeVersion, fin, priority,
390 request_headers_, spdy_headers_frame_length); 418 request_headers_, spdy_headers_frame_length);
391 } 419 }
392 420
421 std::unique_ptr<QuicReceivedPacket>
422 ConstructRequestHeadersAndMultipleDataFramesPacket(
423 QuicPacketNumber packet_number,
424 bool fin,
425 RequestPriority request_priority,
426 size_t* spdy_headers_frame_length,
427 const std::vector<std::string>& data) {
428 SpdyPriority priority =
429 ConvertRequestPriorityToQuicPriority(request_priority);
430 std::unique_ptr<QuicReceivedPacket> packet(
431 maker_.MakeRequestHeadersAndMultipleDataFramesPacket(
432 packet_number, stream_id_, kIncludeVersion, fin, priority,
433 request_headers_, spdy_headers_frame_length, data));
434 DVLOG(2) << "packet(" << packet_number << "): " << std::endl
435 << QuicUtils::StringToHexASCIIDump(packet->AsStringPiece());
436 return packet;
437 }
438
393 std::unique_ptr<QuicReceivedPacket> ConstructResponseHeadersPacket( 439 std::unique_ptr<QuicReceivedPacket> ConstructResponseHeadersPacket(
394 QuicPacketNumber packet_number, 440 QuicPacketNumber packet_number,
395 bool fin, 441 bool fin,
396 const SpdyHeaderBlock& response_headers, 442 const SpdyHeaderBlock& response_headers,
397 size_t* spdy_headers_frame_length, 443 size_t* spdy_headers_frame_length,
398 QuicStreamOffset* offset) { 444 QuicStreamOffset* offset) {
399 return maker_.MakeResponseHeadersPacket( 445 return maker_.MakeResponseHeadersPacket(
400 packet_number, stream_id_, !kIncludeVersion, fin, response_headers, 446 packet_number, stream_id_, !kIncludeVersion, fin, response_headers,
401 spdy_headers_frame_length, offset); 447 spdy_headers_frame_length, offset);
402 } 448 }
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
510 BidirectionalStreamRequestInfo request; 556 BidirectionalStreamRequestInfo request;
511 request.method = "GET"; 557 request.method = "GET";
512 request.url = GURL("http://www.google.com/"); 558 request.url = GURL("http://www.google.com/");
513 request.end_stream_on_headers = true; 559 request.end_stream_on_headers = true;
514 request.priority = DEFAULT_PRIORITY; 560 request.priority = DEFAULT_PRIORITY;
515 561
516 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); 562 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
517 std::unique_ptr<TestDelegateBase> delegate( 563 std::unique_ptr<TestDelegateBase> delegate(
518 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); 564 new TestDelegateBase(read_buffer.get(), kReadBufferSize));
519 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); 565 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr());
520 delegate->WaitUntilNextCallback(); // OnHeadersSent 566 delegate->WaitUntilNextCallback(); // OnStreamReady
521 567
522 // Server acks the request. 568 // Server acks the request.
523 ProcessPacket(ConstructAckPacket(1, 0, 0)); 569 ProcessPacket(ConstructAckPacket(1, 0, 0));
524 570
525 // Server sends the response headers. 571 // Server sends the response headers.
526 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); 572 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200");
527 573
528 size_t spdy_response_headers_frame_length; 574 size_t spdy_response_headers_frame_length;
529 QuicStreamOffset offset = 0; 575 QuicStreamOffset offset = 0;
530 ProcessPacket(ConstructResponseHeadersPacket( 576 ProcessPacket(ConstructResponseHeadersPacket(
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
581 pos = ExpectLogContainsSomewhere( 627 pos = ExpectLogContainsSomewhere(
582 entries, /*min_offset=*/pos, 628 entries, /*min_offset=*/pos,
583 NetLog::TYPE_QUIC_CHROMIUM_CLIENT_STREAM_SEND_REQUEST_HEADERS, 629 NetLog::TYPE_QUIC_CHROMIUM_CLIENT_STREAM_SEND_REQUEST_HEADERS,
584 NetLog::PHASE_NONE); 630 NetLog::PHASE_NONE);
585 ExpectLogContainsSomewhere( 631 ExpectLogContainsSomewhere(
586 entries, /*min_offset=*/pos, 632 entries, /*min_offset=*/pos,
587 NetLog::TYPE_QUIC_CHROMIUM_CLIENT_STREAM_SEND_REQUEST_HEADERS, 633 NetLog::TYPE_QUIC_CHROMIUM_CLIENT_STREAM_SEND_REQUEST_HEADERS,
588 NetLog::PHASE_NONE); 634 NetLog::PHASE_NONE);
589 } 635 }
590 636
637 TEST_P(BidirectionalStreamQuicImplTest, CoalesceSmallBuffers) {
638 SetRequest("POST", "/", DEFAULT_PRIORITY);
639 size_t spdy_request_headers_frame_length;
640
641 const char kBody1[] = "here are some data";
642 const char kBody2[] = "data keep coming";
643 std::vector<std::string> two_writes = {kBody1, kBody2};
644 AddWrite(ConstructRequestHeadersAndMultipleDataFramesPacket(
645 1, !kFin, DEFAULT_PRIORITY, &spdy_request_headers_frame_length,
646 two_writes));
647 // Ack server's data packet.
648 AddWrite(ConstructAckPacket(2, 3, 1));
649 const char kBody3[] = "hello there";
650 const char kBody4[] = "another piece of small data";
651 const char kBody5[] = "really small";
652 QuicStreamOffset data_offset = strlen(kBody1) + strlen(kBody2);
653 AddWrite(ConstructMultipleDataFramesPacket(
654 3, !kIncludeVersion, kFin, data_offset, {kBody3, kBody4, kBody5}));
655
656 Initialize();
657
658 BidirectionalStreamRequestInfo request;
659 request.method = "POST";
660 request.url = GURL("http://www.google.com/");
661 request.end_stream_on_headers = false;
662 request.priority = DEFAULT_PRIORITY;
663
664 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
665 std::unique_ptr<TestDelegateBase> delegate(
666 new TestDelegateBase(read_buffer.get(), kReadBufferSize));
667 delegate->DisableAutoFlush();
668 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr());
669 delegate->WaitUntilNextCallback(); // OnStreamReady
670
671 // Send a Data packet.
672 scoped_refptr<StringIOBuffer> buf1(new StringIOBuffer(kBody1));
673 scoped_refptr<StringIOBuffer> buf2(new StringIOBuffer(kBody2));
674
675 std::vector<IOBuffer*> buffers = {buf1.get(), buf2.get()};
676 std::vector<int> lengths = {buf1->size(), buf2->size()};
677 delegate->SendvData(buffers, lengths, !kFin);
678 delegate->WaitUntilNextCallback(); // OnDataSent
679
680 // Server acks the request.
681 ProcessPacket(ConstructAckPacket(1, 0, 0));
682
683 // Server sends the response headers.
684 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200");
685 size_t spdy_response_headers_frame_length;
686 QuicStreamOffset offset = 0;
687 ProcessPacket(ConstructResponseHeadersPacket(
688 2, !kFin, response_headers, &spdy_response_headers_frame_length,
689 &offset));
690
691 delegate->WaitUntilNextCallback(); // OnHeadersReceived
692 TestCompletionCallback cb;
693 int rv = delegate->ReadData(cb.callback());
694 EXPECT_EQ(ERR_IO_PENDING, rv);
695 EXPECT_EQ("200", delegate->response_headers().find(":status")->second);
696 const char kResponseBody[] = "Hello world!";
697 // Server sends data.
698 ProcessPacket(
699 ConstructDataPacket(3, !kIncludeVersion, !kFin, 0, kResponseBody));
700
701 EXPECT_EQ(static_cast<int>(strlen(kResponseBody)), cb.WaitForResult());
702
703 // Send a second Data packet.
704 scoped_refptr<StringIOBuffer> buf3(new StringIOBuffer(kBody3));
705 scoped_refptr<StringIOBuffer> buf4(new StringIOBuffer(kBody4));
706 scoped_refptr<StringIOBuffer> buf5(new StringIOBuffer(kBody5));
707
708 delegate->SendvData({buf3.get(), buf4.get(), buf5.get()},
709 {buf3->size(), buf4->size(), buf5->size()}, kFin);
710 delegate->WaitUntilNextCallback(); // OnDataSent
711
712 size_t spdy_trailers_frame_length;
713 SpdyHeaderBlock trailers;
714 trailers["foo"] = "bar";
715 trailers[kFinalOffsetHeaderKey] = base::IntToString(strlen(kResponseBody));
716 // Server sends trailers.
717 ProcessPacket(ConstructResponseTrailersPacket(
718 4, kFin, trailers, &spdy_trailers_frame_length, &offset));
719
720 delegate->WaitUntilNextCallback(); // OnTrailersReceived
721 trailers.erase(kFinalOffsetHeaderKey);
722 EXPECT_EQ(trailers, delegate->trailers());
723 EXPECT_EQ(OK, delegate->ReadData(cb.callback()));
724
725 EXPECT_EQ(1, delegate->on_data_read_count());
726 EXPECT_EQ(2, delegate->on_data_sent_count());
727 EXPECT_EQ(kProtoQUIC1SPDY3, delegate->GetProtocol());
728 EXPECT_EQ(
729 static_cast<int64_t>(spdy_request_headers_frame_length + strlen(kBody1) +
730 strlen(kBody2) + strlen(kBody3) + strlen(kBody4) +
731 strlen(kBody5)),
732 delegate->GetTotalSentBytes());
733 EXPECT_EQ(
734 static_cast<int64_t>(spdy_response_headers_frame_length +
735 strlen(kResponseBody) + spdy_trailers_frame_length),
736 delegate->GetTotalReceivedBytes());
737 }
738
591 TEST_P(BidirectionalStreamQuicImplTest, PostRequest) { 739 TEST_P(BidirectionalStreamQuicImplTest, PostRequest) {
592 SetRequest("POST", "/", DEFAULT_PRIORITY); 740 SetRequest("POST", "/", DEFAULT_PRIORITY);
593 size_t spdy_request_headers_frame_length; 741 size_t spdy_request_headers_frame_length;
594 AddWrite(ConstructRequestHeadersPacket(1, !kFin, DEFAULT_PRIORITY, 742 AddWrite(ConstructRequestHeadersPacket(1, !kFin, DEFAULT_PRIORITY,
595 &spdy_request_headers_frame_length)); 743 &spdy_request_headers_frame_length));
596 AddWrite(ConstructDataPacket(2, kIncludeVersion, kFin, 0, kUploadData)); 744 AddWrite(ConstructDataPacket(2, kIncludeVersion, kFin, 0, kUploadData));
597 AddWrite(ConstructAckPacket(3, 3, 1)); 745 AddWrite(ConstructAckPacket(3, 3, 1));
598 746
599 Initialize(); 747 Initialize();
600 748
601 BidirectionalStreamRequestInfo request; 749 BidirectionalStreamRequestInfo request;
602 request.method = "POST"; 750 request.method = "POST";
603 request.url = GURL("http://www.google.com/"); 751 request.url = GURL("http://www.google.com/");
604 request.end_stream_on_headers = false; 752 request.end_stream_on_headers = false;
605 request.priority = DEFAULT_PRIORITY; 753 request.priority = DEFAULT_PRIORITY;
606 754
607 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); 755 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
608 std::unique_ptr<TestDelegateBase> delegate( 756 std::unique_ptr<TestDelegateBase> delegate(
609 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); 757 new TestDelegateBase(read_buffer.get(), kReadBufferSize));
610 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); 758 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr());
611 delegate->WaitUntilNextCallback(); // OnHeadersSent 759 delegate->WaitUntilNextCallback(); // OnStreamReady
612 760
613 // Send a DATA frame. 761 // Send a DATA frame.
614 scoped_refptr<StringIOBuffer> buf(new StringIOBuffer(kUploadData)); 762 scoped_refptr<StringIOBuffer> buf(new StringIOBuffer(kUploadData));
615 763
616 delegate->SendData(buf.get(), buf->size(), true); 764 delegate->SendData(buf.get(), buf->size(), true);
617 delegate->WaitUntilNextCallback(); // OnDataSent 765 delegate->WaitUntilNextCallback(); // OnDataSent
618 766
619 // Server acks the request. 767 // Server acks the request.
620 ProcessPacket(ConstructAckPacket(1, 0, 0)); 768 ProcessPacket(ConstructAckPacket(1, 0, 0));
621 769
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
678 BidirectionalStreamRequestInfo request; 826 BidirectionalStreamRequestInfo request;
679 request.method = "POST"; 827 request.method = "POST";
680 request.url = GURL("http://www.google.com/"); 828 request.url = GURL("http://www.google.com/");
681 request.end_stream_on_headers = false; 829 request.end_stream_on_headers = false;
682 request.priority = DEFAULT_PRIORITY; 830 request.priority = DEFAULT_PRIORITY;
683 831
684 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); 832 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
685 std::unique_ptr<TestDelegateBase> delegate( 833 std::unique_ptr<TestDelegateBase> delegate(
686 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); 834 new TestDelegateBase(read_buffer.get(), kReadBufferSize));
687 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); 835 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr());
688 delegate->WaitUntilNextCallback(); // OnHeadersSent 836 delegate->WaitUntilNextCallback(); // OnStreamReady
689 837
690 // Server acks the request. 838 // Server acks the request.
691 ProcessPacket(ConstructAckPacket(1, 0, 0)); 839 ProcessPacket(ConstructAckPacket(1, 0, 0));
692 840
693 // Server sends the response headers. 841 // Server sends the response headers.
694 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); 842 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200");
695 size_t spdy_response_headers_frame_length; 843 size_t spdy_response_headers_frame_length;
696 ProcessPacket(ConstructResponseHeadersPacket( 844 ProcessPacket(ConstructResponseHeadersPacket(
697 2, !kFin, response_headers, &spdy_response_headers_frame_length, 0)); 845 2, !kFin, response_headers, &spdy_response_headers_frame_length, 0));
698 846
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
755 BidirectionalStreamRequestInfo request; 903 BidirectionalStreamRequestInfo request;
756 request.method = "GET"; 904 request.method = "GET";
757 request.url = GURL("http://www.google.com/"); 905 request.url = GURL("http://www.google.com/");
758 request.end_stream_on_headers = true; 906 request.end_stream_on_headers = true;
759 request.priority = DEFAULT_PRIORITY; 907 request.priority = DEFAULT_PRIORITY;
760 908
761 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); 909 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
762 std::unique_ptr<TestDelegateBase> delegate( 910 std::unique_ptr<TestDelegateBase> delegate(
763 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); 911 new TestDelegateBase(read_buffer.get(), kReadBufferSize));
764 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); 912 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr());
765 delegate->WaitUntilNextCallback(); // OnHeadersSent 913 delegate->WaitUntilNextCallback(); // OnStreamReady
766 914
767 // Server sends a Rst. 915 // Server sends a Rst.
768 ProcessPacket(ConstructRstStreamPacket(1)); 916 ProcessPacket(ConstructRstStreamPacket(1));
769 917
770 delegate->WaitUntilNextCallback(); // OnFailed 918 delegate->WaitUntilNextCallback(); // OnFailed
771 TestCompletionCallback cb; 919 TestCompletionCallback cb;
772 EXPECT_EQ(ERR_QUIC_PROTOCOL_ERROR, delegate->ReadData(cb.callback())); 920 EXPECT_EQ(ERR_QUIC_PROTOCOL_ERROR, delegate->ReadData(cb.callback()));
773 921
774 base::MessageLoop::current()->RunUntilIdle(); 922 base::MessageLoop::current()->RunUntilIdle();
775 923
(...skipping 18 matching lines...) Expand all
794 BidirectionalStreamRequestInfo request; 942 BidirectionalStreamRequestInfo request;
795 request.method = "GET"; 943 request.method = "GET";
796 request.url = GURL("http://www.google.com/"); 944 request.url = GURL("http://www.google.com/");
797 request.end_stream_on_headers = true; 945 request.end_stream_on_headers = true;
798 request.priority = DEFAULT_PRIORITY; 946 request.priority = DEFAULT_PRIORITY;
799 947
800 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); 948 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
801 std::unique_ptr<TestDelegateBase> delegate( 949 std::unique_ptr<TestDelegateBase> delegate(
802 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); 950 new TestDelegateBase(read_buffer.get(), kReadBufferSize));
803 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); 951 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr());
804 delegate->WaitUntilNextCallback(); // OnHeadersSent 952 delegate->WaitUntilNextCallback(); // OnStreamReady
805 953
806 // Server acks the request. 954 // Server acks the request.
807 ProcessPacket(ConstructAckPacket(1, 0, 0)); 955 ProcessPacket(ConstructAckPacket(1, 0, 0));
808 956
809 // Server sends the response headers. 957 // Server sends the response headers.
810 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); 958 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200");
811 959
812 size_t spdy_response_headers_frame_length; 960 size_t spdy_response_headers_frame_length;
813 QuicStreamOffset offset = 0; 961 QuicStreamOffset offset = 0;
814 ProcessPacket(ConstructResponseHeadersPacket( 962 ProcessPacket(ConstructResponseHeadersPacket(
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
851 BidirectionalStreamRequestInfo request; 999 BidirectionalStreamRequestInfo request;
852 request.method = "POST"; 1000 request.method = "POST";
853 request.url = GURL("http://www.google.com/"); 1001 request.url = GURL("http://www.google.com/");
854 request.end_stream_on_headers = false; 1002 request.end_stream_on_headers = false;
855 request.priority = DEFAULT_PRIORITY; 1003 request.priority = DEFAULT_PRIORITY;
856 1004
857 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); 1005 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
858 std::unique_ptr<TestDelegateBase> delegate( 1006 std::unique_ptr<TestDelegateBase> delegate(
859 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); 1007 new TestDelegateBase(read_buffer.get(), kReadBufferSize));
860 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); 1008 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr());
861 delegate->WaitUntilNextCallback(); // OnHeadersSent 1009 delegate->WaitUntilNextCallback(); // OnStreamReady
862 1010
863 // Server acks the request. 1011 // Server acks the request.
864 ProcessPacket(ConstructAckPacket(1, 0, 0)); 1012 ProcessPacket(ConstructAckPacket(1, 0, 0));
865 1013
866 // Server sends the response headers. 1014 // Server sends the response headers.
867 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); 1015 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200");
868 size_t spdy_response_headers_frame_length; 1016 size_t spdy_response_headers_frame_length;
869 ProcessPacket(ConstructResponseHeadersPacket( 1017 ProcessPacket(ConstructResponseHeadersPacket(
870 2, !kFin, response_headers, &spdy_response_headers_frame_length, 0)); 1018 2, !kFin, response_headers, &spdy_response_headers_frame_length, 0));
871 1019
(...skipping 29 matching lines...) Expand all
901 BidirectionalStreamRequestInfo request; 1049 BidirectionalStreamRequestInfo request;
902 request.method = "GET"; 1050 request.method = "GET";
903 request.url = GURL("http://www.google.com/"); 1051 request.url = GURL("http://www.google.com/");
904 request.end_stream_on_headers = true; 1052 request.end_stream_on_headers = true;
905 request.priority = DEFAULT_PRIORITY; 1053 request.priority = DEFAULT_PRIORITY;
906 1054
907 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); 1055 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
908 std::unique_ptr<TestDelegateBase> delegate( 1056 std::unique_ptr<TestDelegateBase> delegate(
909 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); 1057 new TestDelegateBase(read_buffer.get(), kReadBufferSize));
910 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); 1058 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr());
911 delegate->WaitUntilNextCallback(); // OnHeadersSent 1059 delegate->WaitUntilNextCallback(); // OnStreamReady
912 1060
913 // Server acks the request. 1061 // Server acks the request.
914 ProcessPacket(ConstructAckPacket(1, 0, 0)); 1062 ProcessPacket(ConstructAckPacket(1, 0, 0));
915 1063
916 // Server sends the response headers. 1064 // Server sends the response headers.
917 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); 1065 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200");
918 1066
919 size_t spdy_response_headers_frame_length; 1067 size_t spdy_response_headers_frame_length;
920 QuicStreamOffset offset = 0; 1068 QuicStreamOffset offset = 0;
921 ProcessPacket(ConstructResponseHeadersPacket( 1069 ProcessPacket(ConstructResponseHeadersPacket(
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
955 BidirectionalStreamRequestInfo request; 1103 BidirectionalStreamRequestInfo request;
956 request.method = "POST"; 1104 request.method = "POST";
957 request.url = GURL("http://www.google.com/"); 1105 request.url = GURL("http://www.google.com/");
958 request.end_stream_on_headers = false; 1106 request.end_stream_on_headers = false;
959 request.priority = DEFAULT_PRIORITY; 1107 request.priority = DEFAULT_PRIORITY;
960 1108
961 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); 1109 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
962 std::unique_ptr<TestDelegateBase> delegate( 1110 std::unique_ptr<TestDelegateBase> delegate(
963 new TestDelegateBase(read_buffer.get(), kReadBufferSize)); 1111 new TestDelegateBase(read_buffer.get(), kReadBufferSize));
964 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); 1112 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr());
965 delegate->WaitUntilNextCallback(); // OnHeadersSent 1113 delegate->WaitUntilNextCallback(); // OnStreamReady
966 1114
967 // Server acks the request. 1115 // Server acks the request.
968 ProcessPacket(ConstructAckPacket(1, 0, 0)); 1116 ProcessPacket(ConstructAckPacket(1, 0, 0));
969 1117
970 // Server sends the response headers. 1118 // Server sends the response headers.
971 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); 1119 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200");
972 size_t spdy_response_headers_frame_length; 1120 size_t spdy_response_headers_frame_length;
973 ProcessPacket(ConstructResponseHeadersPacket( 1121 ProcessPacket(ConstructResponseHeadersPacket(
974 2, !kFin, response_headers, &spdy_response_headers_frame_length, 0)); 1122 2, !kFin, response_headers, &spdy_response_headers_frame_length, 0));
975 1123
(...skipping 29 matching lines...) Expand all
1005 request.method = "POST"; 1153 request.method = "POST";
1006 request.url = GURL("http://www.google.com/"); 1154 request.url = GURL("http://www.google.com/");
1007 request.end_stream_on_headers = false; 1155 request.end_stream_on_headers = false;
1008 request.priority = DEFAULT_PRIORITY; 1156 request.priority = DEFAULT_PRIORITY;
1009 1157
1010 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); 1158 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
1011 std::unique_ptr<DeleteStreamDelegate> delegate(new DeleteStreamDelegate( 1159 std::unique_ptr<DeleteStreamDelegate> delegate(new DeleteStreamDelegate(
1012 read_buffer.get(), kReadBufferSize, 1160 read_buffer.get(), kReadBufferSize,
1013 DeleteStreamDelegate::ON_HEADERS_RECEIVED, true)); 1161 DeleteStreamDelegate::ON_HEADERS_RECEIVED, true));
1014 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); 1162 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr());
1015 delegate->WaitUntilNextCallback(); // OnHeadersSent 1163 delegate->WaitUntilNextCallback(); // OnStreamReady
1016 1164
1017 // Server acks the request. 1165 // Server acks the request.
1018 ProcessPacket(ConstructAckPacket(1, 0, 0)); 1166 ProcessPacket(ConstructAckPacket(1, 0, 0));
1019 1167
1020 // Server sends the response headers. 1168 // Server sends the response headers.
1021 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); 1169 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200");
1022 1170
1023 size_t spdy_response_headers_frame_length; 1171 size_t spdy_response_headers_frame_length;
1024 ProcessPacket(ConstructResponseHeadersPacket( 1172 ProcessPacket(ConstructResponseHeadersPacket(
1025 2, !kFin, response_headers, &spdy_response_headers_frame_length, 1173 2, !kFin, response_headers, &spdy_response_headers_frame_length,
(...skipping 22 matching lines...) Expand all
1048 request.method = "POST"; 1196 request.method = "POST";
1049 request.url = GURL("http://www.google.com/"); 1197 request.url = GURL("http://www.google.com/");
1050 request.end_stream_on_headers = false; 1198 request.end_stream_on_headers = false;
1051 request.priority = DEFAULT_PRIORITY; 1199 request.priority = DEFAULT_PRIORITY;
1052 1200
1053 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); 1201 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
1054 std::unique_ptr<DeleteStreamDelegate> delegate( 1202 std::unique_ptr<DeleteStreamDelegate> delegate(
1055 new DeleteStreamDelegate(read_buffer.get(), kReadBufferSize, 1203 new DeleteStreamDelegate(read_buffer.get(), kReadBufferSize,
1056 DeleteStreamDelegate::ON_DATA_READ, true)); 1204 DeleteStreamDelegate::ON_DATA_READ, true));
1057 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); 1205 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr());
1058 delegate->WaitUntilNextCallback(); // OnHeadersSent 1206 delegate->WaitUntilNextCallback(); // OnStreamReady
1059 1207
1060 // Server acks the request. 1208 // Server acks the request.
1061 ProcessPacket(ConstructAckPacket(1, 0, 0)); 1209 ProcessPacket(ConstructAckPacket(1, 0, 0));
1062 1210
1063 // Server sends the response headers. 1211 // Server sends the response headers.
1064 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); 1212 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200");
1065 1213
1066 size_t spdy_response_headers_frame_length; 1214 size_t spdy_response_headers_frame_length;
1067 ProcessPacket(ConstructResponseHeadersPacket( 1215 ProcessPacket(ConstructResponseHeadersPacket(
1068 2, !kFin, response_headers, &spdy_response_headers_frame_length, 1216 2, !kFin, response_headers, &spdy_response_headers_frame_length,
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1100 request.method = "GET"; 1248 request.method = "GET";
1101 request.url = GURL("http://www.google.com/"); 1249 request.url = GURL("http://www.google.com/");
1102 request.end_stream_on_headers = true; 1250 request.end_stream_on_headers = true;
1103 request.priority = DEFAULT_PRIORITY; 1251 request.priority = DEFAULT_PRIORITY;
1104 1252
1105 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize)); 1253 scoped_refptr<IOBuffer> read_buffer(new IOBuffer(kReadBufferSize));
1106 std::unique_ptr<DeleteStreamDelegate> delegate(new DeleteStreamDelegate( 1254 std::unique_ptr<DeleteStreamDelegate> delegate(new DeleteStreamDelegate(
1107 read_buffer.get(), kReadBufferSize, 1255 read_buffer.get(), kReadBufferSize,
1108 DeleteStreamDelegate::ON_TRAILERS_RECEIVED, true)); 1256 DeleteStreamDelegate::ON_TRAILERS_RECEIVED, true));
1109 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr()); 1257 delegate->Start(&request, net_log().bound(), session()->GetWeakPtr());
1110 delegate->WaitUntilNextCallback(); // OnHeadersSent 1258 delegate->WaitUntilNextCallback(); // OnStreamReady
1111 1259
1112 // Server acks the request. 1260 // Server acks the request.
1113 ProcessPacket(ConstructAckPacket(1, 0, 0)); 1261 ProcessPacket(ConstructAckPacket(1, 0, 0));
1114 1262
1115 // Server sends the response headers. 1263 // Server sends the response headers.
1116 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200"); 1264 SpdyHeaderBlock response_headers = ConstructResponseHeaders("200");
1117 1265
1118 QuicStreamOffset offset = 0; 1266 QuicStreamOffset offset = 0;
1119 size_t spdy_response_headers_frame_length; 1267 size_t spdy_response_headers_frame_length;
1120 ProcessPacket(ConstructResponseHeadersPacket( 1268 ProcessPacket(ConstructResponseHeadersPacket(
(...skipping 29 matching lines...) Expand all
1150 1298
1151 base::MessageLoop::current()->RunUntilIdle(); 1299 base::MessageLoop::current()->RunUntilIdle();
1152 1300
1153 EXPECT_EQ(1, delegate->on_data_read_count()); 1301 EXPECT_EQ(1, delegate->on_data_read_count());
1154 EXPECT_EQ(0, delegate->on_data_sent_count()); 1302 EXPECT_EQ(0, delegate->on_data_sent_count());
1155 } 1303 }
1156 1304
1157 } // namespace test 1305 } // namespace test
1158 1306
1159 } // namespace net 1307 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/bidirectional_stream_quic_impl.cc ('k') | net/quic/quic_chromium_client_stream.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698