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

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

Issue 12806002: Land Recent QUIC Changes (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: minor comment fix Created 7 years, 9 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 | Annotate | Revision Log
« no previous file with comments | « net/quic/quic_framer_test.cc ('k') | net/quic/quic_network_transaction_unittest.cc » ('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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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/quic_http_stream.h" 5 #include "net/quic/quic_http_stream.h"
6 6
7 #include <vector> 7 #include <vector>
8 8
9 #include "net/base/net_errors.h" 9 #include "net/base/net_errors.h"
10 #include "net/base/test_completion_callback.h" 10 #include "net/base/test_completion_callback.h"
(...skipping 26 matching lines...) Expand all
37 namespace test { 37 namespace test {
38 namespace { 38 namespace {
39 39
40 const char kUploadData[] = "hello world!"; 40 const char kUploadData[] = "hello world!";
41 41
42 class TestQuicConnection : public QuicConnection { 42 class TestQuicConnection : public QuicConnection {
43 public: 43 public:
44 TestQuicConnection(QuicGuid guid, 44 TestQuicConnection(QuicGuid guid,
45 IPEndPoint address, 45 IPEndPoint address,
46 QuicConnectionHelper* helper) 46 QuicConnectionHelper* helper)
47 : QuicConnection(guid, address, helper) { 47 : QuicConnection(guid, address, helper, false) {
48 } 48 }
49 49
50 void SetSendAlgorithm(SendAlgorithmInterface* send_algorithm) { 50 void SetSendAlgorithm(SendAlgorithmInterface* send_algorithm) {
51 QuicConnectionPeer::SetSendAlgorithm(this, send_algorithm); 51 QuicConnectionPeer::SetSendAlgorithm(this, send_algorithm);
52 } 52 }
53 53
54 void SetReceiveAlgorithm(ReceiveAlgorithmInterface* receive_algorithm) { 54 void SetReceiveAlgorithm(ReceiveAlgorithmInterface* receive_algorithm) {
55 QuicConnectionPeer::SetReceiveAlgorithm(this, receive_algorithm); 55 QuicConnectionPeer::SetReceiveAlgorithm(this, receive_algorithm);
56 } 56 }
57 }; 57 };
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 QuicEncryptedPacket* packet; 111 QuicEncryptedPacket* packet;
112 }; 112 };
113 113
114 QuicHttpStreamTest() 114 QuicHttpStreamTest()
115 : net_log_(BoundNetLog()), 115 : net_log_(BoundNetLog()),
116 use_closing_stream_(false), 116 use_closing_stream_(false),
117 read_buffer_(new IOBufferWithSize(4096)), 117 read_buffer_(new IOBufferWithSize(4096)),
118 guid_(2), 118 guid_(2),
119 framer_(kQuicVersion1, 119 framer_(kQuicVersion1,
120 QuicDecrypter::Create(kNULL), 120 QuicDecrypter::Create(kNULL),
121 QuicEncrypter::Create(kNULL)), 121 QuicEncrypter::Create(kNULL),
122 creator_(guid_, &framer_, &random_) { 122 false),
123 creator_(guid_, &framer_, &random_, false) {
123 IPAddressNumber ip; 124 IPAddressNumber ip;
124 CHECK(ParseIPLiteralToNumber("192.0.2.33", &ip)); 125 CHECK(ParseIPLiteralToNumber("192.0.2.33", &ip));
125 peer_addr_ = IPEndPoint(ip, 443); 126 peer_addr_ = IPEndPoint(ip, 443);
126 self_addr_ = IPEndPoint(ip, 8435); 127 self_addr_ = IPEndPoint(ip, 8435);
127 } 128 }
128 129
129 ~QuicHttpStreamTest() { 130 ~QuicHttpStreamTest() {
130 for (size_t i = 0; i < writes_.size(); i++) { 131 for (size_t i = 0; i < writes_.size(); i++) {
131 delete writes_[i].packet; 132 delete writes_[i].packet;
132 } 133 }
(...skipping 28 matching lines...) Expand all
161 162
162 socket_data_.reset(new StaticSocketDataProvider(NULL, 0, mock_writes_.get(), 163 socket_data_.reset(new StaticSocketDataProvider(NULL, 0, mock_writes_.get(),
163 writes_.size())); 164 writes_.size()));
164 165
165 MockUDPClientSocket* socket = new MockUDPClientSocket(socket_data_.get(), 166 MockUDPClientSocket* socket = new MockUDPClientSocket(socket_data_.get(),
166 net_log_.net_log()); 167 net_log_.net_log());
167 socket->Connect(peer_addr_); 168 socket->Connect(peer_addr_);
168 runner_ = new TestTaskRunner(&clock_); 169 runner_ = new TestTaskRunner(&clock_);
169 send_algorithm_ = new MockSendAlgorithm(); 170 send_algorithm_ = new MockSendAlgorithm();
170 receive_algorithm_ = new TestReceiveAlgorithm(NULL); 171 receive_algorithm_ = new TestReceiveAlgorithm(NULL);
171 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)). 172 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _, _)).
172 WillRepeatedly(testing::Return(QuicTime::Delta::Zero())); 173 WillRepeatedly(testing::Return(QuicTime::Delta::Zero()));
173 helper_ = new QuicConnectionHelper(runner_.get(), &clock_, 174 helper_ = new QuicConnectionHelper(runner_.get(), &clock_,
174 &random_generator_, socket); 175 &random_generator_, socket);
175 connection_ = new TestQuicConnection(guid_, peer_addr_, helper_); 176 connection_ = new TestQuicConnection(guid_, peer_addr_, helper_);
176 connection_->set_visitor(&visitor_); 177 connection_->set_visitor(&visitor_);
177 connection_->SetSendAlgorithm(send_algorithm_); 178 connection_->SetSendAlgorithm(send_algorithm_);
178 connection_->SetReceiveAlgorithm(receive_algorithm_); 179 connection_->SetReceiveAlgorithm(receive_algorithm_);
179 session_.reset(new QuicClientSession(connection_, helper_, NULL, 180 session_.reset(new QuicClientSession(connection_, helper_, NULL,
180 "www.google.com", NULL)); 181 "www.google.com", NULL));
181 CryptoHandshakeMessage message = 182 scoped_ptr<QuicPacket> shlo(ConstructServerHelloPacket(
182 CreateShloMessage(&clock_, &random_generator_, "www.google.com"); 183 guid_, &clock_, &random_generator_, "www.google.com"));
184 scoped_ptr<QuicEncryptedPacket> shlo_packet(
185 framer_.EncryptPacket(1, *shlo));
183 session_->GetCryptoStream()->CryptoConnect(); 186 session_->GetCryptoStream()->CryptoConnect();
184 session_->GetCryptoStream()->OnHandshakeMessage(message); 187 ProcessPacket(*shlo_packet);
185 EXPECT_TRUE(session_->IsCryptoHandshakeComplete()); 188 EXPECT_TRUE(session_->IsCryptoHandshakeComplete());
186 QuicReliableClientStream* stream = 189 QuicReliableClientStream* stream =
187 session_->CreateOutgoingReliableStream(); 190 session_->CreateOutgoingReliableStream();
188 stream_.reset(use_closing_stream_ ? 191 stream_.reset(use_closing_stream_ ?
189 new AutoClosingStream(stream) : 192 new AutoClosingStream(stream) :
190 new QuicHttpStream(stream)); 193 new QuicHttpStream(stream));
191 } 194 }
192 195
193 void SetRequestString(const std::string& method, const std::string& path) { 196 void SetRequestString(const std::string& method, const std::string& path) {
194 SpdyHeaderBlock headers; 197 SpdyHeaderBlock headers;
(...skipping 17 matching lines...) Expand all
212 size_t len = SpdyFramer::GetSerializedLength(3, &headers); 215 size_t len = SpdyFramer::GetSerializedLength(3, &headers);
213 SpdyFrameBuilder builder(len); 216 SpdyFrameBuilder builder(len);
214 SpdyFramer::WriteHeaderBlock(&builder, 3, &headers); 217 SpdyFramer::WriteHeaderBlock(&builder, 3, &headers);
215 scoped_ptr<SpdyFrame> frame(builder.take()); 218 scoped_ptr<SpdyFrame> frame(builder.take());
216 return std::string(frame->data(), len); 219 return std::string(frame->data(), len);
217 } 220 }
218 221
219 QuicEncryptedPacket* ConstructChloPacket() { 222 QuicEncryptedPacket* ConstructChloPacket() {
220 scoped_ptr<QuicPacket> chlo( 223 scoped_ptr<QuicPacket> chlo(
221 ConstructClientHelloPacket(guid_, &clock_, &random_generator_, 224 ConstructClientHelloPacket(guid_, &clock_, &random_generator_,
222 "www.google.com")); 225 "www.google.com", true));
223 return framer_.EncryptPacket(1, *chlo); 226 return framer_.EncryptPacket(1, *chlo);
224 } 227 }
225 228
226 // Returns a newly created packet to send kData on stream 1. 229 // Returns a newly created packet to send kData on stream 1.
227 QuicEncryptedPacket* ConstructDataPacket( 230 QuicEncryptedPacket* ConstructDataPacket(
228 QuicPacketSequenceNumber sequence_number, 231 QuicPacketSequenceNumber sequence_number,
229 bool fin, 232 bool fin,
230 QuicStreamOffset offset, 233 QuicStreamOffset offset,
231 base::StringPiece data) { 234 base::StringPiece data) {
232 InitializeHeader(sequence_number); 235 InitializeHeader(sequence_number);
233 QuicStreamFrame frame(3, fin, offset, data); 236 QuicStreamFrame frame(3, fin, offset, data);
234 return ConstructPacket(header_, QuicFrame(&frame)); 237 return ConstructPacket(header_, QuicFrame(&frame));
235 } 238 }
236 239
237 // Returns a newly created packet to send ack data. 240 // Returns a newly created packet to send ack data.
238 QuicEncryptedPacket* ConstructAckPacket( 241 QuicEncryptedPacket* ConstructAckPacket(
239 QuicPacketSequenceNumber sequence_number, 242 QuicPacketSequenceNumber sequence_number,
240 QuicPacketSequenceNumber largest_received, 243 QuicPacketSequenceNumber largest_received,
241 QuicPacketSequenceNumber least_unacked) { 244 QuicPacketSequenceNumber least_unacked) {
242 InitializeHeader(sequence_number); 245 InitializeHeader(sequence_number);
243 246
244 QuicAckFrame ack(largest_received, least_unacked); 247 QuicAckFrame ack(largest_received, QuicTime::Zero(), least_unacked);
245 ack.sent_info.entropy_hash = 0; 248 ack.sent_info.entropy_hash = 0;
246 ack.received_info.entropy_hash = 0; 249 ack.received_info.entropy_hash = 0;
247 250
248 return ConstructPacket(header_, QuicFrame(&ack)); 251 return ConstructPacket(header_, QuicFrame(&ack));
249 } 252 }
250 253
251 // Returns a newly created packet to send ack data. 254 // Returns a newly created packet to send ack data.
252 QuicEncryptedPacket* ConstructRstPacket( 255 QuicEncryptedPacket* ConstructRstPacket(
253 QuicPacketSequenceNumber sequence_number, 256 QuicPacketSequenceNumber sequence_number,
254 QuicStreamId stream_id) { 257 QuicStreamId stream_id) {
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
333 AddWrite(SYNCHRONOUS, ConstructChloPacket()); 336 AddWrite(SYNCHRONOUS, ConstructChloPacket());
334 Initialize(); 337 Initialize();
335 EXPECT_FALSE(stream_->IsConnectionReusable()); 338 EXPECT_FALSE(stream_->IsConnectionReusable());
336 } 339 }
337 340
338 TEST_F(QuicHttpStreamTest, GetRequest) { 341 TEST_F(QuicHttpStreamTest, GetRequest) {
339 SetRequestString("GET", "/"); 342 SetRequestString("GET", "/");
340 AddWrite(SYNCHRONOUS, ConstructChloPacket()); 343 AddWrite(SYNCHRONOUS, ConstructChloPacket());
341 AddWrite(SYNCHRONOUS, ConstructDataPacket(2, kFin, 0, 344 AddWrite(SYNCHRONOUS, ConstructDataPacket(2, kFin, 0,
342 request_data_)); 345 request_data_));
343 AddWrite(SYNCHRONOUS, ConstructAckPacket(3, 2, 2)); 346 AddWrite(SYNCHRONOUS, ConstructAckPacket(3, 2, 1));
344 Initialize(); 347 Initialize();
345 348
346 request_.method = "GET"; 349 request_.method = "GET";
347 request_.url = GURL("http://www.google.com/"); 350 request_.url = GURL("http://www.google.com/");
348 351
349 EXPECT_EQ(OK, stream_->InitializeStream(&request_, net_log_, 352 EXPECT_EQ(OK, stream_->InitializeStream(&request_, net_log_,
350 callback_.callback())); 353 callback_.callback()));
351 EXPECT_EQ(OK, stream_->SendRequest(headers_, &response_, 354 EXPECT_EQ(OK, stream_->SendRequest(headers_, &response_,
352 callback_.callback())); 355 callback_.callback()));
353 EXPECT_EQ(&response_, stream_->GetResponseInfo()); 356 EXPECT_EQ(&response_, stream_->GetResponseInfo());
(...skipping 22 matching lines...) Expand all
376 read_buffer_->size(), 379 read_buffer_->size(),
377 callback_.callback())); 380 callback_.callback()));
378 EXPECT_TRUE(stream_->IsResponseBodyComplete()); 381 EXPECT_TRUE(stream_->IsResponseBodyComplete());
379 EXPECT_TRUE(AtEof()); 382 EXPECT_TRUE(AtEof());
380 } 383 }
381 384
382 TEST_F(QuicHttpStreamTest, GetRequestFullResponseInSinglePacket) { 385 TEST_F(QuicHttpStreamTest, GetRequestFullResponseInSinglePacket) {
383 SetRequestString("GET", "/"); 386 SetRequestString("GET", "/");
384 AddWrite(SYNCHRONOUS, ConstructChloPacket()); 387 AddWrite(SYNCHRONOUS, ConstructChloPacket());
385 AddWrite(SYNCHRONOUS, ConstructDataPacket(2, kFin, 0, request_data_)); 388 AddWrite(SYNCHRONOUS, ConstructDataPacket(2, kFin, 0, request_data_));
386 AddWrite(SYNCHRONOUS, ConstructAckPacket(3, 2, 2)); 389 AddWrite(SYNCHRONOUS, ConstructAckPacket(3, 2, 1));
387 Initialize(); 390 Initialize();
388 391
389 request_.method = "GET"; 392 request_.method = "GET";
390 request_.url = GURL("http://www.google.com/"); 393 request_.url = GURL("http://www.google.com/");
391 394
392 EXPECT_EQ(OK, stream_->InitializeStream(&request_, net_log_, 395 EXPECT_EQ(OK, stream_->InitializeStream(&request_, net_log_,
393 callback_.callback())); 396 callback_.callback()));
394 EXPECT_EQ(OK, stream_->SendRequest(headers_, &response_, 397 EXPECT_EQ(OK, stream_->SendRequest(headers_, &response_,
395 callback_.callback())); 398 callback_.callback()));
396 EXPECT_EQ(&response_, stream_->GetResponseInfo()); 399 EXPECT_EQ(&response_, stream_->GetResponseInfo());
(...skipping 25 matching lines...) Expand all
422 EXPECT_TRUE(stream_->IsResponseBodyComplete()); 425 EXPECT_TRUE(stream_->IsResponseBodyComplete());
423 EXPECT_TRUE(AtEof()); 426 EXPECT_TRUE(AtEof());
424 } 427 }
425 428
426 TEST_F(QuicHttpStreamTest, SendPostRequest) { 429 TEST_F(QuicHttpStreamTest, SendPostRequest) {
427 SetRequestString("POST", "/"); 430 SetRequestString("POST", "/");
428 AddWrite(SYNCHRONOUS, ConstructChloPacket()); 431 AddWrite(SYNCHRONOUS, ConstructChloPacket());
429 AddWrite(SYNCHRONOUS, ConstructDataPacket(2, !kFin, 0, request_data_)); 432 AddWrite(SYNCHRONOUS, ConstructDataPacket(2, !kFin, 0, request_data_));
430 AddWrite(SYNCHRONOUS, ConstructDataPacket(3, kFin, request_data_.length(), 433 AddWrite(SYNCHRONOUS, ConstructDataPacket(3, kFin, request_data_.length(),
431 kUploadData)); 434 kUploadData));
432 AddWrite(SYNCHRONOUS, ConstructAckPacket(4, 2, 3)); 435 AddWrite(SYNCHRONOUS, ConstructAckPacket(4, 2, 1));
433 436
434 Initialize(); 437 Initialize();
435 438
436 ScopedVector<UploadElementReader> element_readers; 439 ScopedVector<UploadElementReader> element_readers;
437 element_readers.push_back( 440 element_readers.push_back(
438 new UploadBytesElementReader(kUploadData, strlen(kUploadData))); 441 new UploadBytesElementReader(kUploadData, strlen(kUploadData)));
439 UploadDataStream upload_data_stream(&element_readers, 0); 442 UploadDataStream upload_data_stream(&element_readers, 0);
440 request_.method = "POST"; 443 request_.method = "POST";
441 request_.url = GURL("http://www.google.com/"); 444 request_.url = GURL("http://www.google.com/");
442 request_.upload_data_stream = &upload_data_stream; 445 request_.upload_data_stream = &upload_data_stream;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
482 TEST_F(QuicHttpStreamTest, SendChunkedPostRequest) { 485 TEST_F(QuicHttpStreamTest, SendChunkedPostRequest) {
483 SetRequestString("POST", "/"); 486 SetRequestString("POST", "/");
484 size_t chunk_size = strlen(kUploadData); 487 size_t chunk_size = strlen(kUploadData);
485 AddWrite(SYNCHRONOUS, ConstructChloPacket()); 488 AddWrite(SYNCHRONOUS, ConstructChloPacket());
486 AddWrite(SYNCHRONOUS, ConstructDataPacket(2, !kFin, 0, request_data_)); 489 AddWrite(SYNCHRONOUS, ConstructDataPacket(2, !kFin, 0, request_data_));
487 AddWrite(SYNCHRONOUS, ConstructDataPacket(3, !kFin, request_data_.length(), 490 AddWrite(SYNCHRONOUS, ConstructDataPacket(3, !kFin, request_data_.length(),
488 kUploadData)); 491 kUploadData));
489 AddWrite(SYNCHRONOUS, ConstructDataPacket(4, kFin, 492 AddWrite(SYNCHRONOUS, ConstructDataPacket(4, kFin,
490 request_data_.length() + chunk_size, 493 request_data_.length() + chunk_size,
491 kUploadData)); 494 kUploadData));
492 AddWrite(SYNCHRONOUS, ConstructAckPacket(5, 2, 3)); 495 AddWrite(SYNCHRONOUS, ConstructAckPacket(5, 2, 1));
493 496
494 Initialize(); 497 Initialize();
495 498
496 UploadDataStream upload_data_stream(UploadDataStream::CHUNKED, 0); 499 UploadDataStream upload_data_stream(UploadDataStream::CHUNKED, 0);
497 upload_data_stream.AppendChunk(kUploadData, chunk_size, false); 500 upload_data_stream.AppendChunk(kUploadData, chunk_size, false);
498 501
499 request_.method = "POST"; 502 request_.method = "POST";
500 request_.url = GURL("http://www.google.com/"); 503 request_.url = GURL("http://www.google.com/");
501 request_.upload_data_stream = &upload_data_stream; 504 request_.upload_data_stream = &upload_data_stream;
502 ASSERT_EQ(OK, request_.upload_data_stream->Init(CompletionCallback())); 505 ASSERT_EQ(OK, request_.upload_data_stream->Init(CompletionCallback()));
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
538 541
539 EXPECT_TRUE(stream_->IsResponseBodyComplete()); 542 EXPECT_TRUE(stream_->IsResponseBodyComplete());
540 EXPECT_TRUE(AtEof()); 543 EXPECT_TRUE(AtEof());
541 } 544 }
542 545
543 TEST_F(QuicHttpStreamTest, DestroyedEarly) { 546 TEST_F(QuicHttpStreamTest, DestroyedEarly) {
544 SetRequestString("GET", "/"); 547 SetRequestString("GET", "/");
545 AddWrite(SYNCHRONOUS, ConstructChloPacket()); 548 AddWrite(SYNCHRONOUS, ConstructChloPacket());
546 AddWrite(SYNCHRONOUS, ConstructDataPacket(2, kFin, 0, request_data_)); 549 AddWrite(SYNCHRONOUS, ConstructDataPacket(2, kFin, 0, request_data_));
547 AddWrite(SYNCHRONOUS, ConstructRstPacket(3, 3)); 550 AddWrite(SYNCHRONOUS, ConstructRstPacket(3, 3));
548 AddWrite(SYNCHRONOUS, ConstructAckPacket(4, 2, 2)); 551 AddWrite(SYNCHRONOUS, ConstructAckPacket(4, 2, 1));
549 use_closing_stream_ = true; 552 use_closing_stream_ = true;
550 Initialize(); 553 Initialize();
551 554
552 request_.method = "GET"; 555 request_.method = "GET";
553 request_.url = GURL("http://www.google.com/"); 556 request_.url = GURL("http://www.google.com/");
554 557
555 EXPECT_EQ(OK, stream_->InitializeStream(&request_, net_log_, 558 EXPECT_EQ(OK, stream_->InitializeStream(&request_, net_log_,
556 callback_.callback())); 559 callback_.callback()));
557 EXPECT_EQ(OK, stream_->SendRequest(headers_, &response_, 560 EXPECT_EQ(OK, stream_->SendRequest(headers_, &response_,
558 callback_.callback())); 561 callback_.callback()));
(...skipping 13 matching lines...) Expand all
572 575
573 // In the course of processing this packet, the QuicHttpStream close itself. 576 // In the course of processing this packet, the QuicHttpStream close itself.
574 ProcessPacket(*resp); 577 ProcessPacket(*resp);
575 578
576 EXPECT_TRUE(AtEof()); 579 EXPECT_TRUE(AtEof());
577 } 580 }
578 581
579 } // namespace test 582 } // namespace test
580 583
581 } // namespace net 584 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_framer_test.cc ('k') | net/quic/quic_network_transaction_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698