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

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

Powered by Google App Engine
This is Rietveld 408576698