OLD | NEW |
---|---|
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 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
56 // This is the expected return from a current server advertising QUIC. | 56 // This is the expected return from a current server advertising QUIC. |
57 static const char kQuicAlternateProtocolHttpHeader[] = | 57 static const char kQuicAlternateProtocolHttpHeader[] = |
58 "Alternate-Protocol: 80:quic\r\n\r\n"; | 58 "Alternate-Protocol: 80:quic\r\n\r\n"; |
59 static const char kQuicAlternateProtocol50pctHttpHeader[] = | 59 static const char kQuicAlternateProtocol50pctHttpHeader[] = |
60 "Alternate-Protocol: 80:quic,p=.5\r\n\r\n"; | 60 "Alternate-Protocol: 80:quic,p=.5\r\n\r\n"; |
61 static const char kQuicAlternateProtocolDifferentPortHttpHeader[] = | 61 static const char kQuicAlternateProtocolDifferentPortHttpHeader[] = |
62 "Alternate-Protocol: 137:quic\r\n\r\n"; | 62 "Alternate-Protocol: 137:quic\r\n\r\n"; |
63 static const char kQuicAlternateProtocolHttpsHeader[] = | 63 static const char kQuicAlternateProtocolHttpsHeader[] = |
64 "Alternate-Protocol: 443:quic\r\n\r\n"; | 64 "Alternate-Protocol: 443:quic\r\n\r\n"; |
65 | 65 |
66 const char kDefaultServerHostName[] = "www.google.com"; | |
67 | |
66 } // namespace | 68 } // namespace |
67 | 69 |
68 // Helper class to encapsulate MockReads and MockWrites for QUIC. | 70 // Helper class to encapsulate MockReads and MockWrites for QUIC. |
69 // Simplify ownership issues and the interaction with the MockSocketFactory. | 71 // Simplify ownership issues and the interaction with the MockSocketFactory. |
70 class MockQuicData { | 72 class MockQuicData { |
71 public: | 73 public: |
72 MockQuicData() : sequence_number_(0) {} | 74 MockQuicData() : sequence_number_(0) {} |
73 | 75 |
74 ~MockQuicData() { | 76 ~MockQuicData() { |
75 STLDeleteElements(&packets_); | 77 STLDeleteElements(&packets_); |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
127 private: | 129 private: |
128 bool was_called_; | 130 bool was_called_; |
129 }; | 131 }; |
130 | 132 |
131 class QuicNetworkTransactionTest | 133 class QuicNetworkTransactionTest |
132 : public PlatformTest, | 134 : public PlatformTest, |
133 public ::testing::WithParamInterface<QuicVersion> { | 135 public ::testing::WithParamInterface<QuicVersion> { |
134 protected: | 136 protected: |
135 QuicNetworkTransactionTest() | 137 QuicNetworkTransactionTest() |
136 : clock_(new MockClock), | 138 : clock_(new MockClock), |
137 maker_(GetParam(), 0, clock_), | 139 maker_(GetParam(), 0, clock_, kDefaultServerHostName), |
138 ssl_config_service_(new SSLConfigServiceDefaults), | 140 ssl_config_service_(new SSLConfigServiceDefaults), |
139 proxy_service_(ProxyService::CreateDirect()), | 141 proxy_service_(ProxyService::CreateDirect()), |
140 auth_handler_factory_( | 142 auth_handler_factory_( |
141 HttpAuthHandlerFactory::CreateDefault(&host_resolver_)), | 143 HttpAuthHandlerFactory::CreateDefault(&host_resolver_)), |
142 random_generator_(0), | 144 random_generator_(0), |
143 hanging_data_(nullptr, 0, nullptr, 0) { | 145 hanging_data_(nullptr, 0, nullptr, 0) { |
144 request_.method = "GET"; | 146 request_.method = "GET"; |
145 request_.url = GURL("http://www.google.com/"); | 147 std::string url("http://"); |
148 url.append(kDefaultServerHostName); | |
149 request_.url = GURL(url); | |
146 request_.load_flags = 0; | 150 request_.load_flags = 0; |
147 clock_->AdvanceTime(QuicTime::Delta::FromMilliseconds(20)); | 151 clock_->AdvanceTime(QuicTime::Delta::FromMilliseconds(20)); |
148 } | 152 } |
149 | 153 |
150 void SetUp() override { | 154 void SetUp() override { |
151 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); | 155 NetworkChangeNotifier::NotifyObserversOfIPAddressChangeForTests(); |
152 base::MessageLoop::current()->RunUntilIdle(); | 156 base::MessageLoop::current()->RunUntilIdle(); |
153 } | 157 } |
154 | 158 |
155 void TearDown() override { | 159 void TearDown() override { |
(...skipping 1042 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1198 | 1202 |
1199 CreateSessionWithNextProtos(); | 1203 CreateSessionWithNextProtos(); |
1200 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); | 1204 AddQuicAlternateProtocolMapping(MockCryptoClientStream::ZERO_RTT); |
1201 SendRequestAndExpectHttpResponse("hello world"); | 1205 SendRequestAndExpectHttpResponse("hello world"); |
1202 } | 1206 } |
1203 | 1207 |
1204 // Test that a secure request over an insecure QUIC connection fails with | 1208 // Test that a secure request over an insecure QUIC connection fails with |
1205 // the appropriate error code. Note that this never happens in production, | 1209 // the appropriate error code. Note that this never happens in production, |
1206 // because the handshake (which this test mocks) would fail in this scenario. | 1210 // because the handshake (which this test mocks) would fail in this scenario. |
1207 TEST_P(QuicNetworkTransactionTest, SecureResourceOverInsecureQuic) { | 1211 TEST_P(QuicNetworkTransactionTest, SecureResourceOverInsecureQuic) { |
1212 QuicTestPacketMaker maker(GetParam(), 0, clock_, "www.example.org"); | |
Ryan Hamilton
2015/05/14 18:17:02
So is the reason you need this maker so that you c
Bence
2015/05/14 18:33:00
Done.
| |
1208 MockQuicData mock_quic_data; | 1213 MockQuicData mock_quic_data; |
1209 mock_quic_data.AddWrite( | 1214 mock_quic_data.AddWrite(ConstructRequestHeadersPacket( |
1210 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, | 1215 1, kClientDataStreamId1, true, true, |
1211 GetRequestHeaders("GET", "https", "/"))); | 1216 maker.GetRequestHeaders("GET", "https", "/"))); |
1212 mock_quic_data.AddRead(ConstructResponseHeadersPacket( | 1217 mock_quic_data.AddRead( |
1213 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 1218 ConstructResponseHeadersPacket(1, kClientDataStreamId1, false, false, |
1219 maker.GetResponseHeaders("200 OK"))); | |
1214 mock_quic_data.AddRead( | 1220 mock_quic_data.AddRead( |
1215 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); | 1221 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); |
1216 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 1222 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
1217 mock_quic_data.AddRead(SYNCHRONOUS, 0); | 1223 mock_quic_data.AddRead(SYNCHRONOUS, 0); |
1218 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1224 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
1219 | 1225 |
1220 request_.url = GURL("https://www.google.com:443"); | 1226 request_.url = GURL("https://www.example.org:443"); |
1221 AddHangingNonAlternateProtocolSocketData(); | 1227 AddHangingNonAlternateProtocolSocketData(); |
1222 CreateSessionWithNextProtos(); | 1228 CreateSessionWithNextProtos(); |
1223 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); | 1229 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); |
1224 scoped_ptr<HttpNetworkTransaction> trans( | 1230 scoped_ptr<HttpNetworkTransaction> trans( |
1225 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); | 1231 new HttpNetworkTransaction(DEFAULT_PRIORITY, session_.get())); |
1226 TestCompletionCallback callback; | 1232 TestCompletionCallback callback; |
1227 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); | 1233 int rv = trans->Start(&request_, callback.callback(), net_log_.bound()); |
1228 EXPECT_EQ(ERR_REQUEST_FOR_SECURE_RESOURCE_OVER_INSECURE_QUIC, | 1234 EXPECT_EQ(ERR_REQUEST_FOR_SECURE_RESOURCE_OVER_INSECURE_QUIC, |
1229 callback.GetResult(rv)); | 1235 callback.GetResult(rv)); |
1230 } | 1236 } |
1231 | 1237 |
1232 TEST_P(QuicNetworkTransactionTest, SecureResourceOverSecureQuic) { | 1238 TEST_P(QuicNetworkTransactionTest, SecureResourceOverSecureQuic) { |
1239 QuicTestPacketMaker maker(GetParam(), 0, clock_, "www.example.org"); | |
1233 MockQuicData mock_quic_data; | 1240 MockQuicData mock_quic_data; |
1234 mock_quic_data.AddWrite( | 1241 mock_quic_data.AddWrite(ConstructRequestHeadersPacket( |
1235 ConstructRequestHeadersPacket(1, kClientDataStreamId1, true, true, | 1242 1, kClientDataStreamId1, true, true, |
1236 GetRequestHeaders("GET", "https", "/"))); | 1243 maker.GetRequestHeaders("GET", "https", "/"))); |
1237 mock_quic_data.AddRead(ConstructResponseHeadersPacket( | 1244 mock_quic_data.AddRead( |
1238 1, kClientDataStreamId1, false, false, GetResponseHeaders("200 OK"))); | 1245 ConstructResponseHeadersPacket(1, kClientDataStreamId1, false, false, |
1246 maker.GetResponseHeaders("200 OK"))); | |
1239 mock_quic_data.AddRead( | 1247 mock_quic_data.AddRead( |
1240 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); | 1248 ConstructDataPacket(2, kClientDataStreamId1, false, true, 0, "hello!")); |
1241 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); | 1249 mock_quic_data.AddWrite(ConstructAckPacket(2, 1)); |
1242 mock_quic_data.AddRead(SYNCHRONOUS, 0); | 1250 mock_quic_data.AddRead(SYNCHRONOUS, 0); |
1243 mock_quic_data.AddSocketDataToFactory(&socket_factory_); | 1251 mock_quic_data.AddSocketDataToFactory(&socket_factory_); |
1244 | 1252 |
1245 scoped_refptr<X509Certificate> cert( | 1253 scoped_refptr<X509Certificate> cert( |
1246 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem")); | 1254 ImportCertFromFile(GetTestCertsDirectory(), "spdy_pooling.pem")); |
1247 ASSERT_TRUE(cert.get()); | 1255 ASSERT_TRUE(cert.get()); |
1256 bool common_name_fallback_used; | |
1257 EXPECT_TRUE( | |
1258 cert->VerifyNameMatch("www.example.org", &common_name_fallback_used)); | |
1248 ProofVerifyDetailsChromium verify_details; | 1259 ProofVerifyDetailsChromium verify_details; |
1249 verify_details.cert_verify_result.verified_cert = cert; | 1260 verify_details.cert_verify_result.verified_cert = cert; |
1250 crypto_client_stream_factory_.set_proof_verify_details(&verify_details); | 1261 crypto_client_stream_factory_.set_proof_verify_details(&verify_details); |
1251 | 1262 |
1252 request_.url = GURL("https://www.google.com:443"); | 1263 request_.url = GURL("https://www.example.org:443"); |
1253 AddHangingNonAlternateProtocolSocketData(); | 1264 AddHangingNonAlternateProtocolSocketData(); |
1254 CreateSessionWithNextProtos(); | 1265 CreateSessionWithNextProtos(); |
1255 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); | 1266 AddQuicAlternateProtocolMapping(MockCryptoClientStream::CONFIRM_HANDSHAKE); |
1256 SendRequestAndExpectQuicResponse("hello!"); | 1267 SendRequestAndExpectQuicResponse("hello!"); |
1257 } | 1268 } |
1258 | 1269 |
1259 } // namespace test | 1270 } // namespace test |
1260 } // namespace net | 1271 } // namespace net |
OLD | NEW |