Chromium Code Reviews| 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 |