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

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

Issue 881133004: QUIC - Race two connections. One connection which loads data from disk (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Cancel the job if disk cache doesn't have a server config Created 5 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
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 <vector> 5 #include <vector>
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "base/compiler_specific.h" 8 #include "base/compiler_specific.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/stl_util.h" 10 #include "base/stl_util.h"
(...skipping 26 matching lines...) Expand all
37 #include "net/socket/client_socket_factory.h" 37 #include "net/socket/client_socket_factory.h"
38 #include "net/socket/mock_client_socket_pool_manager.h" 38 #include "net/socket/mock_client_socket_pool_manager.h"
39 #include "net/socket/socket_test_util.h" 39 #include "net/socket/socket_test_util.h"
40 #include "net/socket/ssl_client_socket.h" 40 #include "net/socket/ssl_client_socket.h"
41 #include "net/spdy/spdy_frame_builder.h" 41 #include "net/spdy/spdy_frame_builder.h"
42 #include "net/spdy/spdy_framer.h" 42 #include "net/spdy/spdy_framer.h"
43 #include "net/ssl/ssl_config_service_defaults.h" 43 #include "net/ssl/ssl_config_service_defaults.h"
44 #include "testing/gtest/include/gtest/gtest.h" 44 #include "testing/gtest/include/gtest/gtest.h"
45 #include "testing/platform_test.h" 45 #include "testing/platform_test.h"
46 46
47 using std::ostream;
48 using std::vector;
49
47 //----------------------------------------------------------------------------- 50 //-----------------------------------------------------------------------------
48 51
49 namespace { 52 namespace {
50 53
51 // This is the expected return from a current server advertising QUIC. 54 // This is the expected return from a current server advertising QUIC.
52 static const char kQuicAlternateProtocolHttpHeader[] = 55 static const char kQuicAlternateProtocolHttpHeader[] =
53 "Alternate-Protocol: 80:quic\r\n\r\n"; 56 "Alternate-Protocol: 80:quic\r\n\r\n";
54 static const char kQuicAlternateProtocol50pctHttpHeader[] = 57 static const char kQuicAlternateProtocol50pctHttpHeader[] =
55 "Alternate-Protocol: 80:quic,p=.5\r\n\r\n"; 58 "Alternate-Protocol: 80:quic,p=.5\r\n\r\n";
56 static const char kQuicAlternateProtocolHttpsHeader[] = 59 static const char kQuicAlternateProtocolHttpsHeader[] =
57 "Alternate-Protocol: 443:quic\r\n\r\n"; 60 "Alternate-Protocol: 443:quic\r\n\r\n";
58 61
59 } // namespace 62 } // namespace
60 63
61 namespace net { 64 namespace net {
62 namespace test { 65 namespace test {
63 66
67 namespace {
68
69 // Run all tests with all the combinations of versions and
70 // enable_connection_racing.
71 struct TestParams {
72 TestParams(const QuicVersion version, bool enable_connection_racing)
73 : version(version), enable_connection_racing(enable_connection_racing) {}
74
75 friend ostream& operator<<(ostream& os, const TestParams& p) {
76 os << "{ version: " << QuicVersionToString(p.version);
77 os << " enable_connection_racing: " << p.enable_connection_racing << " }";
78 return os;
79 }
80
81 QuicVersion version;
82 bool enable_connection_racing;
83 };
84
85 // Constructs various test permutations.
86 vector<TestParams> GetTestParams() {
87 vector<TestParams> params;
88 QuicVersionVector all_supported_versions = QuicSupportedVersions();
89 for (const QuicVersion version : all_supported_versions) {
90 params.push_back(TestParams(version, false));
91 params.push_back(TestParams(version, true));
92 }
93 return params;
94 }
95
96 } // namespace anonymous
97
64 // Helper class to encapsulate MockReads and MockWrites for QUIC. 98 // Helper class to encapsulate MockReads and MockWrites for QUIC.
65 // Simplify ownership issues and the interaction with the MockSocketFactory. 99 // Simplify ownership issues and the interaction with the MockSocketFactory.
66 class MockQuicData { 100 class MockQuicData {
67 public: 101 public:
68 ~MockQuicData() { 102 ~MockQuicData() {
69 STLDeleteElements(&packets_); 103 STLDeleteElements(&packets_);
70 } 104 }
71 105
72 void AddRead(scoped_ptr<QuicEncryptedPacket> packet) { 106 void AddRead(scoped_ptr<QuicEncryptedPacket> packet) {
73 reads_.push_back(MockRead(SYNCHRONOUS, packet->data(), packet->length(), 107 reads_.push_back(MockRead(SYNCHRONOUS, packet->data(), packet->length(),
(...skipping 23 matching lines...) Expand all
97 private: 131 private:
98 std::vector<QuicEncryptedPacket*> packets_; 132 std::vector<QuicEncryptedPacket*> packets_;
99 std::vector<MockWrite> writes_; 133 std::vector<MockWrite> writes_;
100 std::vector<MockRead> reads_; 134 std::vector<MockRead> reads_;
101 size_t sequence_number_; 135 size_t sequence_number_;
102 scoped_ptr<SocketDataProvider> socket_data_; 136 scoped_ptr<SocketDataProvider> socket_data_;
103 }; 137 };
104 138
105 class QuicNetworkTransactionTest 139 class QuicNetworkTransactionTest
106 : public PlatformTest, 140 : public PlatformTest,
107 public ::testing::WithParamInterface<QuicVersion> { 141 public ::testing::WithParamInterface<TestParams> {
108 protected: 142 protected:
109 QuicNetworkTransactionTest() 143 QuicNetworkTransactionTest()
110 : clock_(new MockClock), 144 : clock_(new MockClock),
111 maker_(GetParam(), 0, clock_), 145 maker_(GetParam().version, 0, clock_),
112 ssl_config_service_(new SSLConfigServiceDefaults), 146 ssl_config_service_(new SSLConfigServiceDefaults),
113 proxy_service_(ProxyService::CreateDirect()), 147 proxy_service_(ProxyService::CreateDirect()),
114 auth_handler_factory_( 148 auth_handler_factory_(
115 HttpAuthHandlerFactory::CreateDefault(&host_resolver_)), 149 HttpAuthHandlerFactory::CreateDefault(&host_resolver_)),
116 random_generator_(0), 150 random_generator_(0),
117 hanging_data_(nullptr, 0, nullptr, 0) { 151 hanging_data_(nullptr, 0, nullptr, 0) {
118 request_.method = "GET"; 152 request_.method = "GET";
119 request_.url = GURL("http://www.google.com/"); 153 request_.url = GURL("http://www.google.com/");
120 request_.load_flags = 0; 154 request_.load_flags = 0;
121 clock_->AdvanceTime(QuicTime::Delta::FromMilliseconds(20)); 155 clock_->AdvanceTime(QuicTime::Delta::FromMilliseconds(20));
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 params_.quic_random = &random_generator_; 240 params_.quic_random = &random_generator_;
207 params_.client_socket_factory = socket_factory; 241 params_.client_socket_factory = socket_factory;
208 params_.quic_crypto_client_stream_factory = &crypto_client_stream_factory_; 242 params_.quic_crypto_client_stream_factory = &crypto_client_stream_factory_;
209 params_.host_resolver = &host_resolver_; 243 params_.host_resolver = &host_resolver_;
210 params_.cert_verifier = &cert_verifier_; 244 params_.cert_verifier = &cert_verifier_;
211 params_.transport_security_state = &transport_security_state_; 245 params_.transport_security_state = &transport_security_state_;
212 params_.proxy_service = proxy_service_.get(); 246 params_.proxy_service = proxy_service_.get();
213 params_.ssl_config_service = ssl_config_service_.get(); 247 params_.ssl_config_service = ssl_config_service_.get();
214 params_.http_auth_handler_factory = auth_handler_factory_.get(); 248 params_.http_auth_handler_factory = auth_handler_factory_.get();
215 params_.http_server_properties = http_server_properties.GetWeakPtr(); 249 params_.http_server_properties = http_server_properties.GetWeakPtr();
216 params_.quic_supported_versions = SupportedVersions(GetParam()); 250 params_.quic_supported_versions = SupportedVersions(GetParam().version);
217 251
218 if (use_next_protos) { 252 if (use_next_protos) {
219 params_.use_alternate_protocols = true; 253 params_.use_alternate_protocols = true;
220 params_.next_protos = NextProtosWithSpdyAndQuic(true, true); 254 params_.next_protos = NextProtosWithSpdyAndQuic(true, true);
221 } 255 }
222 256
223 session_ = new HttpNetworkSession(params_); 257 session_ = new HttpNetworkSession(params_);
224 session_->quic_stream_factory()->set_require_confirmation(false); 258 session_->quic_stream_factory()->set_require_confirmation(false);
259 session_->quic_stream_factory()->set_enable_connection_racing(
260 GetParam().enable_connection_racing);
Ryan Hamilton 2015/02/04 20:10:29 I'm a bit surprised that these tests pass with con
ramant (doing other things) 2015/02/05 03:39:41 Acknowledged.
ramant (doing other things) 2015/02/05 20:06:28 Undid the changes to this file.
225 } 261 }
226 262
227 void CheckWasQuicResponse(const scoped_ptr<HttpNetworkTransaction>& trans) { 263 void CheckWasQuicResponse(const scoped_ptr<HttpNetworkTransaction>& trans) {
228 const HttpResponseInfo* response = trans->GetResponseInfo(); 264 const HttpResponseInfo* response = trans->GetResponseInfo();
229 ASSERT_TRUE(response != nullptr); 265 ASSERT_TRUE(response != nullptr);
230 ASSERT_TRUE(response->headers.get() != nullptr); 266 ASSERT_TRUE(response->headers.get() != nullptr);
231 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); 267 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine());
232 EXPECT_TRUE(response->was_fetched_via_spdy); 268 EXPECT_TRUE(response->was_fetched_via_spdy);
233 EXPECT_TRUE(response->was_npn_negotiated); 269 EXPECT_TRUE(response->was_npn_negotiated);
234 EXPECT_EQ(HttpResponseInfo::CONNECTION_INFO_QUIC1_SPDY3, 270 EXPECT_EQ(HttpResponseInfo::CONNECTION_INFO_QUIC1_SPDY3,
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
319 scoped_ptr<ProxyService> proxy_service_; 355 scoped_ptr<ProxyService> proxy_service_;
320 scoped_ptr<HttpAuthHandlerFactory> auth_handler_factory_; 356 scoped_ptr<HttpAuthHandlerFactory> auth_handler_factory_;
321 MockRandom random_generator_; 357 MockRandom random_generator_;
322 HttpServerPropertiesImpl http_server_properties; 358 HttpServerPropertiesImpl http_server_properties;
323 HttpNetworkSession::Params params_; 359 HttpNetworkSession::Params params_;
324 HttpRequestInfo request_; 360 HttpRequestInfo request_;
325 CapturingBoundNetLog net_log_; 361 CapturingBoundNetLog net_log_;
326 StaticSocketDataProvider hanging_data_; 362 StaticSocketDataProvider hanging_data_;
327 }; 363 };
328 364
329 INSTANTIATE_TEST_CASE_P(Version, QuicNetworkTransactionTest, 365 INSTANTIATE_TEST_CASE_P(Version,
330 ::testing::ValuesIn(QuicSupportedVersions())); 366 QuicNetworkTransactionTest,
367 ::testing::ValuesIn(GetTestParams()));
331 368
332 TEST_P(QuicNetworkTransactionTest, ForceQuic) { 369 TEST_P(QuicNetworkTransactionTest, ForceQuic) {
333 params_.origin_to_force_quic_on = 370 params_.origin_to_force_quic_on =
334 HostPortPair::FromString("www.google.com:80"); 371 HostPortPair::FromString("www.google.com:80");
335 372
336 MockQuicData mock_quic_data; 373 MockQuicData mock_quic_data;
337 mock_quic_data.AddWrite( 374 mock_quic_data.AddWrite(
338 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, 375 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true,
339 GetRequestHeaders("GET", "http", "/"))); 376 GetRequestHeaders("GET", "http", "/")));
340 mock_quic_data.AddRead( 377 mock_quic_data.AddRead(
(...skipping 694 matching lines...) Expand 10 before | Expand all | Expand 10 after
1035 nullptr, 1072 nullptr,
1036 net_log_.bound()); 1073 net_log_.bound());
1037 1074
1038 CreateSessionWithNextProtos(); 1075 CreateSessionWithNextProtos();
1039 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); 1076 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT);
1040 SendRequestAndExpectHttpResponse("hello world"); 1077 SendRequestAndExpectHttpResponse("hello world");
1041 } 1078 }
1042 1079
1043 } // namespace test 1080 } // namespace test
1044 } // namespace net 1081 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698