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

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

Powered by Google App Engine
This is Rietveld 408576698