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

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

Issue 12326073: Remove the --use-spdy-over-quic command line option. Always use SPDY over QUIC. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase 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_http_stream.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 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 MockClock clock_; 76 MockClock clock_;
77 QuicCongestionFeedbackFrame* feedback_; 77 QuicCongestionFeedbackFrame* feedback_;
78 78
79 DISALLOW_COPY_AND_ASSIGN(TestReceiveAlgorithm); 79 DISALLOW_COPY_AND_ASSIGN(TestReceiveAlgorithm);
80 }; 80 };
81 81
82 // Subclass of QuicHttpStream that closes itself when the first piece of data 82 // Subclass of QuicHttpStream that closes itself when the first piece of data
83 // is received. 83 // is received.
84 class AutoClosingStream : public QuicHttpStream { 84 class AutoClosingStream : public QuicHttpStream {
85 public: 85 public:
86 AutoClosingStream(QuicReliableClientStream* stream, bool use_spdy) 86 explicit AutoClosingStream(QuicReliableClientStream* stream)
87 : QuicHttpStream(stream, use_spdy) { 87 : QuicHttpStream(stream) {
88 } 88 }
89 89
90 virtual int OnDataReceived(const char* data, int length) OVERRIDE { 90 virtual int OnDataReceived(const char* data, int length) OVERRIDE {
91 Close(false); 91 Close(false);
92 return OK; 92 return OK;
93 } 93 }
94 }; 94 };
95 95
96 } // namespace 96 } // namespace
97 97
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
176 connection_->SetReceiveAlgorithm(receive_algorithm_); 176 connection_->SetReceiveAlgorithm(receive_algorithm_);
177 session_.reset(new QuicClientSession(connection_, helper_, NULL, 177 session_.reset(new QuicClientSession(connection_, helper_, NULL,
178 "www.google.com", NULL)); 178 "www.google.com", NULL));
179 CryptoHandshakeMessage message; 179 CryptoHandshakeMessage message;
180 message.tag = kSHLO; 180 message.tag = kSHLO;
181 session_->GetCryptoStream()->OnHandshakeMessage(message); 181 session_->GetCryptoStream()->OnHandshakeMessage(message);
182 EXPECT_TRUE(session_->IsCryptoHandshakeComplete()); 182 EXPECT_TRUE(session_->IsCryptoHandshakeComplete());
183 QuicReliableClientStream* stream = 183 QuicReliableClientStream* stream =
184 session_->CreateOutgoingReliableStream(); 184 session_->CreateOutgoingReliableStream();
185 stream_.reset(use_closing_stream_ ? 185 stream_.reset(use_closing_stream_ ?
186 new AutoClosingStream(stream, GetParam()) : 186 new AutoClosingStream(stream) :
187 new QuicHttpStream(stream, GetParam())); 187 new QuicHttpStream(stream));
188 } 188 }
189 189
190 void SetRequestString(const std::string& method, const std::string& path) { 190 void SetRequestString(const std::string& method, const std::string& path) {
191 if (GetParam() == true) { 191 SpdyHeaderBlock headers;
192 SpdyHeaderBlock headers; 192 headers[":method"] = method;
193 headers[":method"] = method; 193 headers[":host"] = "www.google.com";
194 headers[":host"] = "www.google.com"; 194 headers[":path"] = path;
195 headers[":path"] = path; 195 headers[":scheme"] = "http";
196 headers[":scheme"] = "http"; 196 headers[":version"] = "HTTP/1.1";
197 headers[":version"] = "HTTP/1.1"; 197 request_data_ = SerializeHeaderBlock(headers);
198 request_data_ = SerializeHeaderBlock(headers);
199 } else {
200 request_data_ = method + " " + path + " HTTP/1.1\r\n\r\n";
201 }
202 } 198 }
203 199
204 void SetResponseString(const std::string& status, const std::string& body) { 200 void SetResponseString(const std::string& status, const std::string& body) {
205 if (GetParam() == true) { 201 SpdyHeaderBlock headers;
206 SpdyHeaderBlock headers; 202 headers[":status"] = status;
207 headers[":status"] = status; 203 headers[":version"] = "HTTP/1.1";
208 headers[":version"] = "HTTP/1.1"; 204 headers["content-type"] = "text/plain";
209 headers["content-type"] = "text/plain"; 205 response_data_ = SerializeHeaderBlock(headers) + body;
210 response_data_ = SerializeHeaderBlock(headers) + body;
211 } else {
212 response_data_ = "HTTP/1.1 " + status + " \r\n"
213 "Content-Type: text/plain\r\n\r\n" + body;
214 }
215 } 206 }
216 207
217 std::string SerializeHeaderBlock(const SpdyHeaderBlock& headers) { 208 std::string SerializeHeaderBlock(const SpdyHeaderBlock& headers) {
218 size_t len = SpdyFramer::GetSerializedLength(3, &headers); 209 size_t len = SpdyFramer::GetSerializedLength(3, &headers);
219 SpdyFrameBuilder builder(len); 210 SpdyFrameBuilder builder(len);
220 SpdyFramer::WriteHeaderBlock(&builder, 3, &headers); 211 SpdyFramer::WriteHeaderBlock(&builder, 3, &headers);
221 scoped_ptr<SpdyFrame> frame(builder.take()); 212 scoped_ptr<SpdyFrame> frame(builder.take());
222 return std::string(frame->data(), len); 213 return std::string(frame->data(), len);
223 } 214 }
224 215
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
303 QuicFramer framer_; 294 QuicFramer framer_;
304 IPEndPoint self_addr_; 295 IPEndPoint self_addr_;
305 IPEndPoint peer_addr_; 296 IPEndPoint peer_addr_;
306 MockRandom random_; 297 MockRandom random_;
307 QuicPacketCreator creator_; 298 QuicPacketCreator creator_;
308 QuicPacketHeader header_; 299 QuicPacketHeader header_;
309 scoped_ptr<StaticSocketDataProvider> socket_data_; 300 scoped_ptr<StaticSocketDataProvider> socket_data_;
310 std::vector<PacketToWrite> writes_; 301 std::vector<PacketToWrite> writes_;
311 }; 302 };
312 303
313 // All tests are run with two different serializations, HTTP/SPDY 304 TEST_F(QuicHttpStreamTest, RenewStreamForAuth) {
314 INSTANTIATE_TEST_CASE_P(QuicHttpStreamTests,
315 QuicHttpStreamTest,
316 ::testing::Values(true, false));
317
318 TEST_P(QuicHttpStreamTest, RenewStreamForAuth) {
319 EXPECT_EQ(NULL, stream_->RenewStreamForAuth()); 305 EXPECT_EQ(NULL, stream_->RenewStreamForAuth());
320 } 306 }
321 307
322 TEST_P(QuicHttpStreamTest, CanFindEndOfResponse) { 308 TEST_F(QuicHttpStreamTest, CanFindEndOfResponse) {
323 EXPECT_TRUE(stream_->CanFindEndOfResponse()); 309 EXPECT_TRUE(stream_->CanFindEndOfResponse());
324 } 310 }
325 311
326 TEST_P(QuicHttpStreamTest, IsMoreDataBuffered) { 312 TEST_F(QuicHttpStreamTest, IsMoreDataBuffered) {
327 EXPECT_FALSE(stream_->IsMoreDataBuffered()); 313 EXPECT_FALSE(stream_->IsMoreDataBuffered());
328 } 314 }
329 315
330 TEST_P(QuicHttpStreamTest, IsConnectionReusable) { 316 TEST_F(QuicHttpStreamTest, IsConnectionReusable) {
331 EXPECT_FALSE(stream_->IsConnectionReusable()); 317 EXPECT_FALSE(stream_->IsConnectionReusable());
332 } 318 }
333 319
334 TEST_P(QuicHttpStreamTest, GetRequest) { 320 TEST_F(QuicHttpStreamTest, GetRequest) {
335 SetRequestString("GET", "/"); 321 SetRequestString("GET", "/");
336 AddWrite(SYNCHRONOUS, ConstructDataPacket(1, kFin, 0, 322 AddWrite(SYNCHRONOUS, ConstructDataPacket(1, kFin, 0,
337 request_data_)); 323 request_data_));
338 AddWrite(SYNCHRONOUS, ConstructAckPacket(2, 2, 2)); 324 AddWrite(SYNCHRONOUS, ConstructAckPacket(2, 2, 2));
339 Initialize(); 325 Initialize();
340 326
341 request_.method = "GET"; 327 request_.method = "GET";
342 request_.url = GURL("http://www.google.com/"); 328 request_.url = GURL("http://www.google.com/");
343 329
344 EXPECT_EQ(OK, stream_->InitializeStream(&request_, net_log_, 330 EXPECT_EQ(OK, stream_->InitializeStream(&request_, net_log_,
(...skipping 22 matching lines...) Expand all
367 EXPECT_TRUE(response_.headers->HasHeaderValue("Content-Type", "text/plain")); 353 EXPECT_TRUE(response_.headers->HasHeaderValue("Content-Type", "text/plain"));
368 354
369 // There is no body, so this should return immediately. 355 // There is no body, so this should return immediately.
370 EXPECT_EQ(0, stream_->ReadResponseBody(read_buffer_.get(), 356 EXPECT_EQ(0, stream_->ReadResponseBody(read_buffer_.get(),
371 read_buffer_->size(), 357 read_buffer_->size(),
372 callback_.callback())); 358 callback_.callback()));
373 EXPECT_TRUE(stream_->IsResponseBodyComplete()); 359 EXPECT_TRUE(stream_->IsResponseBodyComplete());
374 EXPECT_TRUE(AtEof()); 360 EXPECT_TRUE(AtEof());
375 } 361 }
376 362
377 TEST_P(QuicHttpStreamTest, GetRequestFullResponseInSinglePacket) { 363 TEST_F(QuicHttpStreamTest, GetRequestFullResponseInSinglePacket) {
378 SetRequestString("GET", "/"); 364 SetRequestString("GET", "/");
379 AddWrite(SYNCHRONOUS, ConstructDataPacket(1, kFin, 0, request_data_)); 365 AddWrite(SYNCHRONOUS, ConstructDataPacket(1, kFin, 0, request_data_));
380 AddWrite(SYNCHRONOUS, ConstructAckPacket(2, 2, 2)); 366 AddWrite(SYNCHRONOUS, ConstructAckPacket(2, 2, 2));
381 Initialize(); 367 Initialize();
382 368
383 request_.method = "GET"; 369 request_.method = "GET";
384 request_.url = GURL("http://www.google.com/"); 370 request_.url = GURL("http://www.google.com/");
385 371
386 EXPECT_EQ(OK, stream_->InitializeStream(&request_, net_log_, 372 EXPECT_EQ(OK, stream_->InitializeStream(&request_, net_log_,
387 callback_.callback())); 373 callback_.callback()));
(...skipping 22 matching lines...) Expand all
410 396
411 // There is no body, so this should return immediately. 397 // There is no body, so this should return immediately.
412 // Since the body has already arrived, this should return immediately. 398 // Since the body has already arrived, this should return immediately.
413 EXPECT_EQ(12, stream_->ReadResponseBody(read_buffer_.get(), 399 EXPECT_EQ(12, stream_->ReadResponseBody(read_buffer_.get(),
414 read_buffer_->size(), 400 read_buffer_->size(),
415 callback_.callback())); 401 callback_.callback()));
416 EXPECT_TRUE(stream_->IsResponseBodyComplete()); 402 EXPECT_TRUE(stream_->IsResponseBodyComplete());
417 EXPECT_TRUE(AtEof()); 403 EXPECT_TRUE(AtEof());
418 } 404 }
419 405
420 TEST_P(QuicHttpStreamTest, SendPostRequest) { 406 TEST_F(QuicHttpStreamTest, SendPostRequest) {
421 SetRequestString("POST", "/"); 407 SetRequestString("POST", "/");
422 AddWrite(SYNCHRONOUS, ConstructDataPacket(1, !kFin, 0, request_data_)); 408 AddWrite(SYNCHRONOUS, ConstructDataPacket(1, !kFin, 0, request_data_));
423 AddWrite(SYNCHRONOUS, ConstructDataPacket(2, kFin, request_data_.length(), 409 AddWrite(SYNCHRONOUS, ConstructDataPacket(2, kFin, request_data_.length(),
424 kUploadData)); 410 kUploadData));
425 AddWrite(SYNCHRONOUS, ConstructAckPacket(3, 2, 3)); 411 AddWrite(SYNCHRONOUS, ConstructAckPacket(3, 2, 3));
426 412
427 Initialize(); 413 Initialize();
428 414
429 ScopedVector<UploadElementReader> element_readers; 415 ScopedVector<UploadElementReader> element_readers;
430 element_readers.push_back( 416 element_readers.push_back(
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
465 451
466 // Since the body has already arrived, this should return immediately. 452 // Since the body has already arrived, this should return immediately.
467 EXPECT_EQ(static_cast<int>(strlen(kResponseBody)), 453 EXPECT_EQ(static_cast<int>(strlen(kResponseBody)),
468 stream_->ReadResponseBody(read_buffer_.get(), read_buffer_->size(), 454 stream_->ReadResponseBody(read_buffer_.get(), read_buffer_->size(),
469 callback_.callback())); 455 callback_.callback()));
470 456
471 EXPECT_TRUE(stream_->IsResponseBodyComplete()); 457 EXPECT_TRUE(stream_->IsResponseBodyComplete());
472 EXPECT_TRUE(AtEof()); 458 EXPECT_TRUE(AtEof());
473 } 459 }
474 460
475 TEST_P(QuicHttpStreamTest, DestroyedEarly) { 461 TEST_F(QuicHttpStreamTest, DestroyedEarly) {
476 SetRequestString("GET", "/"); 462 SetRequestString("GET", "/");
477 AddWrite(SYNCHRONOUS, ConstructDataPacket(1, kFin, 0, request_data_)); 463 AddWrite(SYNCHRONOUS, ConstructDataPacket(1, kFin, 0, request_data_));
478 AddWrite(SYNCHRONOUS, ConstructRstPacket(2, 3)); 464 AddWrite(SYNCHRONOUS, ConstructRstPacket(2, 3));
479 AddWrite(SYNCHRONOUS, ConstructAckPacket(3, 2, 2)); 465 AddWrite(SYNCHRONOUS, ConstructAckPacket(3, 2, 2));
480 use_closing_stream_ = true; 466 use_closing_stream_ = true;
481 Initialize(); 467 Initialize();
482 468
483 request_.method = "GET"; 469 request_.method = "GET";
484 request_.url = GURL("http://www.google.com/"); 470 request_.url = GURL("http://www.google.com/");
485 471
(...skipping 17 matching lines...) Expand all
503 489
504 // In the course of processing this packet, the QuicHttpStream close itself. 490 // In the course of processing this packet, the QuicHttpStream close itself.
505 ProcessPacket(*resp); 491 ProcessPacket(*resp);
506 492
507 EXPECT_TRUE(AtEof()); 493 EXPECT_TRUE(AtEof());
508 } 494 }
509 495
510 } // namespace test 496 } // namespace test
511 497
512 } // namespace net 498 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_http_stream.cc ('k') | net/quic/quic_network_transaction_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698