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

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

Issue 17247006: Fix QUIC alternate protocol behavior so that that main job does not wait (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 6 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
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 "base/stl_util.h" 8 #include "base/stl_util.h"
9 #include "net/base/capturing_net_log.h" 9 #include "net/base/capturing_net_log.h"
10 #include "net/base/net_log_unittest.h" 10 #include "net/base/net_log_unittest.h"
(...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after
204 header_.public_header.guid = random_generator_.RandUint64(); 204 header_.public_header.guid = random_generator_.RandUint64();
205 header_.public_header.reset_flag = false; 205 header_.public_header.reset_flag = false;
206 header_.public_header.version_flag = should_include_version; 206 header_.public_header.version_flag = should_include_version;
207 header_.packet_sequence_number = sequence_number; 207 header_.packet_sequence_number = sequence_number;
208 header_.fec_group = 0; 208 header_.fec_group = 0;
209 header_.entropy_flag = false; 209 header_.entropy_flag = false;
210 header_.fec_flag = false; 210 header_.fec_flag = false;
211 } 211 }
212 212
213 void CreateSession() { 213 void CreateSession() {
214 CreateSessionWithFactory(&socket_factory_);
215 }
216
217 void CreateSessionWithFactory(ClientSocketFactory* socket_factory) {
214 params_.enable_quic = true; 218 params_.enable_quic = true;
215 params_.quic_clock = clock_; 219 params_.quic_clock = clock_;
216 params_.quic_random = &random_generator_; 220 params_.quic_random = &random_generator_;
217 params_.client_socket_factory = &socket_factory_; 221 params_.client_socket_factory = socket_factory;
218 params_.quic_crypto_client_stream_factory = &crypto_client_stream_factory_; 222 params_.quic_crypto_client_stream_factory = &crypto_client_stream_factory_;
219 params_.host_resolver = &host_resolver_; 223 params_.host_resolver = &host_resolver_;
220 params_.cert_verifier = &cert_verifier_; 224 params_.cert_verifier = &cert_verifier_;
221 params_.transport_security_state = &transport_security_state_; 225 params_.transport_security_state = &transport_security_state_;
222 params_.proxy_service = proxy_service_.get(); 226 params_.proxy_service = proxy_service_.get();
223 params_.ssl_config_service = ssl_config_service_.get(); 227 params_.ssl_config_service = ssl_config_service_.get();
224 params_.http_auth_handler_factory = auth_handler_factory_.get(); 228 params_.http_auth_handler_factory = auth_handler_factory_.get();
225 params_.http_server_properties = &http_server_properties; 229 params_.http_server_properties = &http_server_properties;
226 230
227 session_ = new HttpNetworkSession(params_); 231 session_ = new HttpNetworkSession(params_);
(...skipping 252 matching lines...) Expand 10 before | Expand all | Expand 10 after
480 // The non-alternate protocol job needs to hang in order to guarantee that 484 // The non-alternate protocol job needs to hang in order to guarantee that
481 // the alternate-protocol job will "win". 485 // the alternate-protocol job will "win".
482 AddHangingNonAlternateProtocolSocketData(); 486 AddHangingNonAlternateProtocolSocketData();
483 487
484 CreateSession(); 488 CreateSession();
485 489
486 SendRequestAndExpectHttpResponse("hello world"); 490 SendRequestAndExpectHttpResponse("hello world");
487 SendRequestAndExpectQuicResponse("hello!"); 491 SendRequestAndExpectQuicResponse("hello!");
488 } 492 }
489 493
494 TEST_F(QuicNetworkTransactionTest, HungAlternateProtocol) {
495 HttpStreamFactory::EnableNpnSpdy(); // Enables QUIC too.
496 crypto_client_stream_factory_.set_handshake_mode(
497 MockCryptoClientStream::COLD_START);
498
499 MockWrite http_writes[] = {
500 MockWrite(SYNCHRONOUS, 0, "GET / HTTP/1.1\r\n"),
501 MockWrite(SYNCHRONOUS, 1, "Host: www.google.com\r\n"),
502 MockWrite(SYNCHRONOUS, 2, "Connection: keep-alive\r\n\r\n")
503 };
504
505 MockRead http_reads[] = {
506 MockRead(SYNCHRONOUS, 3, "HTTP/1.1 200 OK\r\n"),
507 MockRead(SYNCHRONOUS, 4, kQuicAlternateProtocolHttpHeader),
508 MockRead(SYNCHRONOUS, 5, "hello world"),
509 MockRead(SYNCHRONOUS, OK, 6)
510 };
511
512 DeterministicMockClientSocketFactory socket_factory;
513
514 DeterministicSocketData http_data(http_reads, arraysize(http_reads),
515 http_writes, arraysize(http_writes));
516 socket_factory.AddSocketDataProvider(&http_data);
517
518 // The QUIC transaction will not be allowed to complete.
519 MockWrite quic_writes[] = {
520 MockWrite(ASYNC, ERR_IO_PENDING, 0)
521 };
522 MockRead quic_reads[] = {
523 MockRead(ASYNC, ERR_IO_PENDING, 1),
524 };
525 DeterministicSocketData quic_data(quic_reads, arraysize(quic_reads),
526 quic_writes, arraysize(quic_writes));
527 socket_factory.AddSocketDataProvider(&quic_data);
528
529 // The HTTP transaction will complete.
530 DeterministicSocketData http_data2(http_reads, arraysize(http_reads),
531 http_writes, arraysize(http_writes));
532 socket_factory.AddSocketDataProvider(&http_data2);
533
534 CreateSessionWithFactory(&socket_factory);
535
536 // Run the first request.
537 http_data.StopAfter(arraysize(http_reads) + arraysize(http_writes));
538 SendRequestAndExpectHttpResponse("hello world");
539 ASSERT_TRUE(http_data.at_read_eof());
540 ASSERT_TRUE(http_data.at_write_eof());
541
542 // Now run the second request in which the QUIC socket hangs,
543 // and verify the the transaction continues over HTTP.
544 http_data2.StopAfter(arraysize(http_reads) + arraysize(http_writes));
545 SendRequestAndExpectHttpResponse("hello world");
546
547 ASSERT_TRUE(http_data2.at_read_eof());
548 ASSERT_TRUE(http_data2.at_write_eof());
549 ASSERT_TRUE(!quic_data.at_read_eof());
550 ASSERT_TRUE(!quic_data.at_write_eof());
551 }
552
490 TEST_F(QuicNetworkTransactionTest, DontUseAlternateProtocolForQuicHttps) { 553 TEST_F(QuicNetworkTransactionTest, DontUseAlternateProtocolForQuicHttps) {
491 HttpStreamFactory::EnableNpnSpdy(); // Enables QUIC too. 554 HttpStreamFactory::EnableNpnSpdy(); // Enables QUIC too.
492 555
493 MockRead http_reads[] = { 556 MockRead http_reads[] = {
494 MockRead("HTTP/1.1 200 OK\r\n"), 557 MockRead("HTTP/1.1 200 OK\r\n"),
495 MockRead("Content-length: 11\r\n"), 558 MockRead("Content-length: 11\r\n"),
496 MockRead(kQuicAlternateProtocolHttpHeader), 559 MockRead(kQuicAlternateProtocolHttpHeader),
497 MockRead("hello world"), 560 MockRead("hello world"),
498 561
499 MockRead("HTTP/1.1 200 OK\r\n"), 562 MockRead("HTTP/1.1 200 OK\r\n"),
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
603 666
604 CreateSession(); 667 CreateSession();
605 668
606 AddQuicAlternateProtocolMapping(MockCryptoClientStream::COLD_START); 669 AddQuicAlternateProtocolMapping(MockCryptoClientStream::COLD_START);
607 SendRequestAndExpectHttpResponse("hello from http"); 670 SendRequestAndExpectHttpResponse("hello from http");
608 ExpectBrokenAlternateProtocolMapping(); 671 ExpectBrokenAlternateProtocolMapping();
609 } 672 }
610 673
611 } // namespace test 674 } // namespace test
612 } // namespace net 675 } // namespace net
OLDNEW
« net/quic/quic_client_session.cc ('K') | « net/quic/quic_client_session.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698