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_http_stream_test.cc

Issue 12334063: Land recent QUIC changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: more EXPECT_FALSE Created 7 years, 10 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"
11 #include "net/base/upload_bytes_element_reader.h" 11 #include "net/base/upload_bytes_element_reader.h"
12 #include "net/base/upload_data_stream.h" 12 #include "net/base/upload_data_stream.h"
13 #include "net/http/http_response_headers.h" 13 #include "net/http/http_response_headers.h"
14 #include "net/quic/congestion_control/receive_algorithm_interface.h" 14 #include "net/quic/congestion_control/receive_algorithm_interface.h"
15 #include "net/quic/congestion_control/send_algorithm_interface.h" 15 #include "net/quic/congestion_control/send_algorithm_interface.h"
16 #include "net/quic/quic_client_session.h" 16 #include "net/quic/quic_client_session.h"
17 #include "net/quic/quic_connection.h" 17 #include "net/quic/quic_connection.h"
18 #include "net/quic/quic_connection_helper.h" 18 #include "net/quic/quic_connection_helper.h"
19 #include "net/quic/test_tools/mock_clock.h" 19 #include "net/quic/test_tools/mock_clock.h"
20 #include "net/quic/test_tools/mock_random.h"
20 #include "net/quic/test_tools/quic_connection_peer.h" 21 #include "net/quic/test_tools/quic_connection_peer.h"
21 #include "net/quic/test_tools/quic_test_utils.h" 22 #include "net/quic/test_tools/quic_test_utils.h"
22 #include "net/quic/test_tools/test_task_runner.h" 23 #include "net/quic/test_tools/test_task_runner.h"
23 #include "net/socket/socket_test_util.h" 24 #include "net/socket/socket_test_util.h"
24 #include "net/spdy/spdy_frame_builder.h" 25 #include "net/spdy/spdy_frame_builder.h"
25 #include "net/spdy/spdy_framer.h" 26 #include "net/spdy/spdy_framer.h"
26 #include "net/spdy/spdy_http_utils.h" 27 #include "net/spdy/spdy_http_utils.h"
27 #include "net/spdy/spdy_protocol.h" 28 #include "net/spdy/spdy_protocol.h"
28 #include "testing/gmock/include/gmock/gmock.h" 29 #include "testing/gmock/include/gmock/gmock.h"
29 #include "testing/gtest/include/gtest/gtest.h" 30 #include "testing/gtest/include/gtest/gtest.h"
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 IoMode mode; 108 IoMode mode;
108 QuicEncryptedPacket* packet; 109 QuicEncryptedPacket* packet;
109 }; 110 };
110 111
111 QuicHttpStreamTest() 112 QuicHttpStreamTest()
112 : net_log_(BoundNetLog()), 113 : net_log_(BoundNetLog()),
113 use_closing_stream_(false), 114 use_closing_stream_(false),
114 read_buffer_(new IOBufferWithSize(4096)), 115 read_buffer_(new IOBufferWithSize(4096)),
115 guid_(2), 116 guid_(2),
116 framer_(QuicDecrypter::Create(kNULL), QuicEncrypter::Create(kNULL)), 117 framer_(QuicDecrypter::Create(kNULL), QuicEncrypter::Create(kNULL)),
117 creator_(guid_, &framer_) { 118 creator_(guid_, &framer_, &random_) {
118 IPAddressNumber ip; 119 IPAddressNumber ip;
119 CHECK(ParseIPLiteralToNumber("192.0.2.33", &ip)); 120 CHECK(ParseIPLiteralToNumber("192.0.2.33", &ip));
120 peer_addr_ = IPEndPoint(ip, 443); 121 peer_addr_ = IPEndPoint(ip, 443);
121 self_addr_ = IPEndPoint(ip, 8435); 122 self_addr_ = IPEndPoint(ip, 8435);
122 // Do null initialization for simple tests. 123 // Do null initialization for simple tests.
123 Initialize(); 124 Initialize();
124 } 125 }
125 126
126 ~QuicHttpStreamTest() { 127 ~QuicHttpStreamTest() {
127 for (size_t i = 0; i < writes_.size(); i++) { 128 for (size_t i = 0; i < writes_.size(); i++) {
(...skipping 30 matching lines...) Expand all
158 159
159 socket_data_.reset(new StaticSocketDataProvider(NULL, 0, mock_writes_.get(), 160 socket_data_.reset(new StaticSocketDataProvider(NULL, 0, mock_writes_.get(),
160 writes_.size())); 161 writes_.size()));
161 162
162 MockUDPClientSocket* socket = new MockUDPClientSocket(socket_data_.get(), 163 MockUDPClientSocket* socket = new MockUDPClientSocket(socket_data_.get(),
163 net_log_.net_log()); 164 net_log_.net_log());
164 socket->Connect(peer_addr_); 165 socket->Connect(peer_addr_);
165 runner_ = new TestTaskRunner(&clock_); 166 runner_ = new TestTaskRunner(&clock_);
166 send_algorithm_ = new MockSendAlgorithm(); 167 send_algorithm_ = new MockSendAlgorithm();
167 receive_algorithm_ = new TestReceiveAlgorithm(NULL); 168 receive_algorithm_ = new TestReceiveAlgorithm(NULL);
168 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_)). 169 EXPECT_CALL(*send_algorithm_, TimeUntilSend(_, _)).
169 WillRepeatedly(testing::Return(QuicTime::Delta::Zero())); 170 WillRepeatedly(testing::Return(QuicTime::Delta::Zero()));
170 helper_ = new QuicConnectionHelper(runner_.get(), &clock_, 171 helper_ = new QuicConnectionHelper(runner_.get(), &clock_,
171 &random_generator_, socket); 172 &random_generator_, socket);
172 connection_ = new TestQuicConnection(guid_, peer_addr_, helper_); 173 connection_ = new TestQuicConnection(guid_, peer_addr_, helper_);
173 connection_->set_visitor(&visitor_); 174 connection_->set_visitor(&visitor_);
174 connection_->SetSendAlgorithm(send_algorithm_); 175 connection_->SetSendAlgorithm(send_algorithm_);
175 connection_->SetReceiveAlgorithm(receive_algorithm_); 176 connection_->SetReceiveAlgorithm(receive_algorithm_);
176 session_.reset(new QuicClientSession(connection_, helper_, NULL, 177 session_.reset(new QuicClientSession(connection_, helper_, NULL,
177 "www.google.com", NULL)); 178 "www.google.com", NULL));
178 CryptoHandshakeMessage message; 179 CryptoHandshakeMessage message;
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 } 234 }
234 235
235 // Returns a newly created packet to send ack data. 236 // Returns a newly created packet to send ack data.
236 QuicEncryptedPacket* ConstructAckPacket( 237 QuicEncryptedPacket* ConstructAckPacket(
237 QuicPacketSequenceNumber sequence_number, 238 QuicPacketSequenceNumber sequence_number,
238 QuicPacketSequenceNumber largest_received, 239 QuicPacketSequenceNumber largest_received,
239 QuicPacketSequenceNumber least_unacked) { 240 QuicPacketSequenceNumber least_unacked) {
240 InitializeHeader(sequence_number); 241 InitializeHeader(sequence_number);
241 242
242 QuicAckFrame ack(largest_received, least_unacked); 243 QuicAckFrame ack(largest_received, least_unacked);
244 ack.sent_info.entropy_hash = 0;
245 ack.received_info.entropy_hash = 0;
246
243 return ConstructPacket(header_, QuicFrame(&ack)); 247 return ConstructPacket(header_, QuicFrame(&ack));
244 } 248 }
245 249
246 // Returns a newly created packet to send ack data. 250 // Returns a newly created packet to send ack data.
247 QuicEncryptedPacket* ConstructRstPacket( 251 QuicEncryptedPacket* ConstructRstPacket(
248 QuicPacketSequenceNumber sequence_number, 252 QuicPacketSequenceNumber sequence_number,
249 QuicStreamId stream_id, 253 QuicStreamId stream_id) {
250 QuicStreamOffset offset) {
251 InitializeHeader(sequence_number); 254 InitializeHeader(sequence_number);
252 255
253 QuicRstStreamFrame rst(stream_id, offset, QUIC_NO_ERROR); 256 QuicRstStreamFrame rst(stream_id, QUIC_NO_ERROR);
254 return ConstructPacket(header_, QuicFrame(&rst)); 257 return ConstructPacket(header_, QuicFrame(&rst));
255 } 258 }
256 259
257 BoundNetLog net_log_; 260 BoundNetLog net_log_;
258 bool use_closing_stream_; 261 bool use_closing_stream_;
259 MockSendAlgorithm* send_algorithm_; 262 MockSendAlgorithm* send_algorithm_;
260 TestReceiveAlgorithm* receive_algorithm_; 263 TestReceiveAlgorithm* receive_algorithm_;
261 scoped_refptr<TestTaskRunner> runner_; 264 scoped_refptr<TestTaskRunner> runner_;
262 scoped_array<MockWrite> mock_writes_; 265 scoped_array<MockWrite> mock_writes_;
263 MockClock clock_; 266 MockClock clock_;
264 MockRandom random_generator_; 267 MockRandom random_generator_;
265 TestQuicConnection* connection_; 268 TestQuicConnection* connection_;
266 QuicConnectionHelper* helper_; 269 QuicConnectionHelper* helper_;
267 testing::StrictMock<MockConnectionVisitor> visitor_; 270 testing::StrictMock<MockConnectionVisitor> visitor_;
268 scoped_ptr<QuicHttpStream> stream_; 271 scoped_ptr<QuicHttpStream> stream_;
269 scoped_ptr<QuicClientSession> session_; 272 scoped_ptr<QuicClientSession> session_;
270 TestCompletionCallback callback_; 273 TestCompletionCallback callback_;
271 HttpRequestInfo request_; 274 HttpRequestInfo request_;
272 HttpRequestHeaders headers_; 275 HttpRequestHeaders headers_;
273 HttpResponseInfo response_; 276 HttpResponseInfo response_;
274 scoped_refptr<IOBufferWithSize> read_buffer_; 277 scoped_refptr<IOBufferWithSize> read_buffer_;
275 std::string request_data_; 278 std::string request_data_;
276 std::string response_data_; 279 std::string response_data_;
277 280
278 private: 281 private:
279 void InitializeHeader(QuicPacketSequenceNumber sequence_number) { 282 void InitializeHeader(QuicPacketSequenceNumber sequence_number) {
280 header_.public_header.guid = guid_; 283 header_.public_header.guid = guid_;
281 header_.public_header.flags = PACKET_PUBLIC_FLAGS_NONE; 284 header_.public_header.reset_flag = false;
285 header_.public_header.version_flag = false;
282 header_.packet_sequence_number = sequence_number; 286 header_.packet_sequence_number = sequence_number;
283 header_.fec_group = 0; 287 header_.fec_group = 0;
284 header_.private_flags = PACKET_PRIVATE_FLAGS_NONE; 288 header_.fec_entropy_flag = false;
289 header_.entropy_flag = false;
290 header_.fec_flag = false;
285 } 291 }
286 292
287 QuicEncryptedPacket* ConstructPacket(const QuicPacketHeader& header, 293 QuicEncryptedPacket* ConstructPacket(const QuicPacketHeader& header,
288 const QuicFrame& frame) { 294 const QuicFrame& frame) {
289 QuicFrames frames; 295 QuicFrames frames;
290 frames.push_back(frame); 296 frames.push_back(frame);
291 scoped_ptr<QuicPacket> packet( 297 scoped_ptr<QuicPacket> packet(
292 framer_.ConstructFrameDataPacket(header_, frames)); 298 framer_.ConstructFrameDataPacket(header_, frames).packet);
293 return framer_.EncryptPacket(*packet); 299 return framer_.EncryptPacket(header.packet_sequence_number, *packet);
294 } 300 }
295 301
296 const QuicGuid guid_; 302 const QuicGuid guid_;
297 QuicFramer framer_; 303 QuicFramer framer_;
298 IPEndPoint self_addr_; 304 IPEndPoint self_addr_;
299 IPEndPoint peer_addr_; 305 IPEndPoint peer_addr_;
306 MockRandom random_;
300 QuicPacketCreator creator_; 307 QuicPacketCreator creator_;
301 QuicPacketHeader header_; 308 QuicPacketHeader header_;
302 scoped_ptr<StaticSocketDataProvider> socket_data_; 309 scoped_ptr<StaticSocketDataProvider> socket_data_;
303 std::vector<PacketToWrite> writes_; 310 std::vector<PacketToWrite> writes_;
304 }; 311 };
305 312
306 // All tests are run with two different serializations, HTTP/SPDY 313 // All tests are run with two different serializations, HTTP/SPDY
307 INSTANTIATE_TEST_CASE_P(QuicHttpStreamTests, 314 INSTANTIATE_TEST_CASE_P(QuicHttpStreamTests,
308 QuicHttpStreamTest, 315 QuicHttpStreamTest,
309 ::testing::Values(true, false)); 316 ::testing::Values(true, false));
(...skipping 151 matching lines...) Expand 10 before | Expand all | Expand 10 after
461 stream_->ReadResponseBody(read_buffer_.get(), read_buffer_->size(), 468 stream_->ReadResponseBody(read_buffer_.get(), read_buffer_->size(),
462 callback_.callback())); 469 callback_.callback()));
463 470
464 EXPECT_TRUE(stream_->IsResponseBodyComplete()); 471 EXPECT_TRUE(stream_->IsResponseBodyComplete());
465 EXPECT_TRUE(AtEof()); 472 EXPECT_TRUE(AtEof());
466 } 473 }
467 474
468 TEST_P(QuicHttpStreamTest, DestroyedEarly) { 475 TEST_P(QuicHttpStreamTest, DestroyedEarly) {
469 SetRequestString("GET", "/"); 476 SetRequestString("GET", "/");
470 AddWrite(SYNCHRONOUS, ConstructDataPacket(1, kFin, 0, request_data_)); 477 AddWrite(SYNCHRONOUS, ConstructDataPacket(1, kFin, 0, request_data_));
471 AddWrite(SYNCHRONOUS, ConstructRstPacket(2, 3, request_data_.length())); 478 AddWrite(SYNCHRONOUS, ConstructRstPacket(2, 3));
472 AddWrite(SYNCHRONOUS, ConstructAckPacket(3, 2, 2)); 479 AddWrite(SYNCHRONOUS, ConstructAckPacket(3, 2, 2));
473 use_closing_stream_ = true; 480 use_closing_stream_ = true;
474 Initialize(); 481 Initialize();
475 482
476 request_.method = "GET"; 483 request_.method = "GET";
477 request_.url = GURL("http://www.google.com/"); 484 request_.url = GURL("http://www.google.com/");
478 485
479 EXPECT_EQ(OK, stream_->InitializeStream(&request_, net_log_, 486 EXPECT_EQ(OK, stream_->InitializeStream(&request_, net_log_,
480 callback_.callback())); 487 callback_.callback()));
481 EXPECT_EQ(OK, stream_->SendRequest(headers_, &response_, 488 EXPECT_EQ(OK, stream_->SendRequest(headers_, &response_,
(...skipping 14 matching lines...) Expand all
496 503
497 // In the course of processing this packet, the QuicHttpStream close itself. 504 // In the course of processing this packet, the QuicHttpStream close itself.
498 ProcessPacket(*resp); 505 ProcessPacket(*resp);
499 506
500 EXPECT_TRUE(AtEof()); 507 EXPECT_TRUE(AtEof());
501 } 508 }
502 509
503 } // namespace test 510 } // namespace test
504 511
505 } // namespace net 512 } // 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