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

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

Issue 14718011: Land Recent QUIC Changes (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 7 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_http_stream_test.cc ('k') | net/quic/quic_packet_creator_test.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 "base/basictypes.h" 5 #include "base/basictypes.h"
6 #include "base/compiler_specific.h" 6 #include "base/compiler_specific.h"
7 #include "base/memory/scoped_ptr.h" 7 #include "base/memory/scoped_ptr.h"
8 #include "net/base/test_completion_callback.h" 8 #include "net/base/test_completion_callback.h"
9 #include "net/cert/mock_cert_verifier.h" 9 #include "net/cert/mock_cert_verifier.h"
10 #include "net/dns/mock_host_resolver.h" 10 #include "net/dns/mock_host_resolver.h"
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 header.fec_entropy_flag = false; 114 header.fec_entropy_flag = false;
115 header.fec_group = 0; 115 header.fec_group = 0;
116 116
117 QuicAckFrame ack(largest_received, QuicTime::Zero(), least_unacked); 117 QuicAckFrame ack(largest_received, QuicTime::Zero(), least_unacked);
118 118
119 QuicCongestionFeedbackFrame feedback; 119 QuicCongestionFeedbackFrame feedback;
120 feedback.type = kTCP; 120 feedback.type = kTCP;
121 feedback.tcp.accumulated_number_of_lost_packets = 0; 121 feedback.tcp.accumulated_number_of_lost_packets = 0;
122 feedback.tcp.receive_window = 256000; 122 feedback.tcp.receive_window = 256000;
123 123
124 QuicFramer framer(kQuicVersion1, 124 QuicFramer framer(kQuicVersion1, QuicTime::Zero(), false);
125 QuicDecrypter::Create(kNULL),
126 QuicEncrypter::Create(kNULL),
127 QuicTime::Zero(),
128 false);
129 QuicFrames frames; 125 QuicFrames frames;
130 frames.push_back(QuicFrame(&ack)); 126 frames.push_back(QuicFrame(&ack));
131 frames.push_back(QuicFrame(&feedback)); 127 frames.push_back(QuicFrame(&feedback));
132 scoped_ptr<QuicPacket> packet( 128 scoped_ptr<QuicPacket> packet(
133 framer.ConstructFrameDataPacket(header, frames).packet); 129 framer.ConstructFrameDataPacket(header, frames).packet);
134 return scoped_ptr<QuicEncryptedPacket>( 130 return scoped_ptr<QuicEncryptedPacket>(framer.EncryptPacket(
135 framer.EncryptPacket(header.packet_sequence_number, *packet)); 131 ENCRYPTION_NONE, header.packet_sequence_number, *packet));
136 } 132 }
137 133
138 std::string GetRequestString(const std::string& method, 134 std::string GetRequestString(const std::string& method,
139 const std::string& path) { 135 const std::string& path) {
140 SpdyHeaderBlock headers; 136 SpdyHeaderBlock headers;
141 headers[":method"] = method; 137 headers[":method"] = method;
142 headers[":host"] = "www.google.com"; 138 headers[":host"] = "www.google.com";
143 headers[":path"] = path; 139 headers[":path"] = path;
144 headers[":scheme"] = "http"; 140 headers[":scheme"] = "http";
145 headers[":version"] = "HTTP/1.1"; 141 headers[":version"] = "HTTP/1.1";
(...skipping 25 matching lines...) Expand all
171 QuicStreamOffset offset, 167 QuicStreamOffset offset,
172 base::StringPiece data) { 168 base::StringPiece data) {
173 InitializeHeader(sequence_number, should_include_version); 169 InitializeHeader(sequence_number, should_include_version);
174 QuicStreamFrame frame(3, fin, offset, data); 170 QuicStreamFrame frame(3, fin, offset, data);
175 return ConstructPacket(header_, QuicFrame(&frame)).release(); 171 return ConstructPacket(header_, QuicFrame(&frame)).release();
176 } 172 }
177 173
178 scoped_ptr<QuicEncryptedPacket> ConstructPacket( 174 scoped_ptr<QuicEncryptedPacket> ConstructPacket(
179 const QuicPacketHeader& header, 175 const QuicPacketHeader& header,
180 const QuicFrame& frame) { 176 const QuicFrame& frame) {
181 QuicFramer framer(kQuicVersion1, 177 QuicFramer framer(kQuicVersion1, QuicTime::Zero(), false);
182 QuicDecrypter::Create(kNULL),
183 QuicEncrypter::Create(kNULL),
184 QuicTime::Zero(),
185 false);
186 QuicFrames frames; 178 QuicFrames frames;
187 frames.push_back(frame); 179 frames.push_back(frame);
188 scoped_ptr<QuicPacket> packet( 180 scoped_ptr<QuicPacket> packet(
189 framer.ConstructFrameDataPacket(header, frames).packet); 181 framer.ConstructFrameDataPacket(header, frames).packet);
190 return scoped_ptr<QuicEncryptedPacket>( 182 return scoped_ptr<QuicEncryptedPacket>(framer.EncryptPacket(
191 framer.EncryptPacket(header.packet_sequence_number, *packet)); 183 ENCRYPTION_NONE, header.packet_sequence_number, *packet));
192 } 184 }
193 185
194 void InitializeHeader(QuicPacketSequenceNumber sequence_number, 186 void InitializeHeader(QuicPacketSequenceNumber sequence_number,
195 bool should_include_version) { 187 bool should_include_version) {
196 header_.public_header.guid = random_generator_.RandUint64(); 188 header_.public_header.guid = random_generator_.RandUint64();
197 header_.public_header.reset_flag = false; 189 header_.public_header.reset_flag = false;
198 header_.public_header.version_flag = should_include_version; 190 header_.public_header.version_flag = should_include_version;
199 header_.packet_sequence_number = sequence_number; 191 header_.packet_sequence_number = sequence_number;
200 header_.fec_group = 0; 192 header_.fec_group = 0;
201 header_.entropy_flag = false; 193 header_.entropy_flag = false;
(...skipping 287 matching lines...) Expand 10 before | Expand all | Expand 10 after
489 response = trans->GetResponseInfo(); 481 response = trans->GetResponseInfo();
490 ASSERT_TRUE(response != NULL); 482 ASSERT_TRUE(response != NULL);
491 ASSERT_TRUE(response->headers != NULL); 483 ASSERT_TRUE(response->headers != NULL);
492 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); 484 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine());
493 EXPECT_FALSE(response->was_fetched_via_spdy); 485 EXPECT_FALSE(response->was_fetched_via_spdy);
494 486
495 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); 487 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data));
496 EXPECT_EQ("hello!", response_data); 488 EXPECT_EQ("hello!", response_data);
497 } 489 }
498 490
491 TEST_F(QuicNetworkTransactionTest, ZeroRTT) {
492 HttpStreamFactory::set_use_alternate_protocols(true);
493 HttpStreamFactory::SetNextProtos(QuicNextProtos());
494
495 HttpRequestInfo request;
496 request.method = "GET";
497 request.url = GURL("http://www.google.com/");
498 request.load_flags = 0;
499
500 scoped_ptr<QuicEncryptedPacket> data(
501 ConstructDataPacket(1, true, true, 0, GetRequestString("GET", "/")));
502 scoped_ptr<QuicEncryptedPacket> ack(ConstructAckPacket(1, 0));
503
504 MockWrite quic_writes[] = {
505 MockWrite(SYNCHRONOUS, data->data(), data->length()),
506 MockWrite(SYNCHRONOUS, ack->data(), ack->length()),
507 };
508
509 scoped_ptr<QuicEncryptedPacket> resp(
510 ConstructDataPacket(
511 1, false, true, 0, GetResponseString("200 OK", "hello!")));
512 MockRead quic_reads[] = {
513 MockRead(SYNCHRONOUS, resp->data(), resp->length()),
514 MockRead(ASYNC, OK), // EOF
515 };
516
517 DelayedSocketData quic_data(
518 1, // wait for one write to finish before reading.
519 quic_reads, arraysize(quic_reads),
520 quic_writes, arraysize(quic_writes));
521
522 socket_factory_.AddSocketDataProvider(&quic_data);
523
524 TestCompletionCallback callback;
525
526 CreateSession();
527 crypto_client_stream_factory_.set_handshake_mode(
528 MockCryptoClientStream::ZERO_RTT);
529
530 HttpServerProperties* http_server_properties =
531 session_->http_server_properties();
532 http_server_properties->SetAlternateProtocol(
533 HostPortPair("www.google.com", 80), 80, QUIC);
534
535 scoped_ptr<HttpNetworkTransaction> trans(
536 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_));
537
538 int rv = trans->Start(&request, callback.callback(), BoundNetLog());
539 EXPECT_EQ(ERR_IO_PENDING, rv);
540 EXPECT_EQ(OK, callback.WaitForResult());
541
542 const HttpResponseInfo* response = trans->GetResponseInfo();
543 ASSERT_TRUE(response != NULL);
544 ASSERT_TRUE(response->headers != NULL);
545 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine());
546 EXPECT_TRUE(response->was_fetched_via_spdy);
547 EXPECT_TRUE(response->was_npn_negotiated);
548 EXPECT_EQ("quic/1+spdy/3", response->npn_negotiated_protocol);
549
550 std::string response_data;
551 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data));
552 EXPECT_EQ("hello!", response_data);
553 }
554
499 } // namespace test 555 } // namespace test
500 } // namespace net 556 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_http_stream_test.cc ('k') | net/quic/quic_packet_creator_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698