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 "net/quic/chromium/quic_stream_factory.h" | 5 #include "net/quic/chromium/quic_stream_factory.h" |
6 | 6 |
| 7 #include <memory> |
7 #include <ostream> | 8 #include <ostream> |
8 #include <utility> | 9 #include <utility> |
9 | 10 |
10 #include "base/bind.h" | 11 #include "base/bind.h" |
11 #include "base/callback.h" | 12 #include "base/callback.h" |
| 13 #include "base/memory/ptr_util.h" |
12 #include "base/run_loop.h" | 14 #include "base/run_loop.h" |
13 #include "base/strings/string_util.h" | 15 #include "base/strings/string_util.h" |
14 #include "base/threading/thread_task_runner_handle.h" | 16 #include "base/threading/thread_task_runner_handle.h" |
15 #include "net/cert/cert_verifier.h" | 17 #include "net/cert/cert_verifier.h" |
16 #include "net/cert/ct_policy_enforcer.h" | 18 #include "net/cert/ct_policy_enforcer.h" |
17 #include "net/cert/multi_log_ct_verifier.h" | 19 #include "net/cert/multi_log_ct_verifier.h" |
18 #include "net/dns/mock_host_resolver.h" | 20 #include "net/dns/mock_host_resolver.h" |
19 #include "net/http/http_response_headers.h" | 21 #include "net/http/http_response_headers.h" |
20 #include "net/http/http_response_info.h" | 22 #include "net/http/http_response_info.h" |
21 #include "net/http/http_server_properties_impl.h" | 23 #include "net/http/http_server_properties_impl.h" |
(...skipping 1189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1211 QuicStreamId stream_id = kClientDataStreamId1; | 1213 QuicStreamId stream_id = kClientDataStreamId1; |
1212 MockQuicData socket_data; | 1214 MockQuicData socket_data; |
1213 socket_data.AddWrite( | 1215 socket_data.AddWrite( |
1214 client_maker_.MakeRstPacket(1, true, stream_id, QUIC_STREAM_CANCELLED)); | 1216 client_maker_.MakeRstPacket(1, true, stream_id, QUIC_STREAM_CANCELLED)); |
1215 socket_data.AddRead( | 1217 socket_data.AddRead( |
1216 server_maker_.MakeRstPacket(1, false, stream_id, QUIC_STREAM_CANCELLED)); | 1218 server_maker_.MakeRstPacket(1, false, stream_id, QUIC_STREAM_CANCELLED)); |
1217 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); | 1219 socket_data.AddRead(SYNCHRONOUS, ERR_IO_PENDING); |
1218 socket_data.AddSocketDataToFactory(&socket_factory_); | 1220 socket_data.AddSocketDataToFactory(&socket_factory_); |
1219 | 1221 |
1220 HttpRequestInfo request_info; | 1222 HttpRequestInfo request_info; |
1221 vector<QuicHttpStream*> streams; | 1223 vector<std::unique_ptr<QuicHttpStream>> streams; |
1222 // The MockCryptoClientStream sets max_open_streams to be | 1224 // The MockCryptoClientStream sets max_open_streams to be |
1223 // kDefaultMaxStreamsPerConnection / 2. | 1225 // kDefaultMaxStreamsPerConnection / 2. |
1224 for (size_t i = 0; i < kDefaultMaxStreamsPerConnection / 2; i++) { | 1226 for (size_t i = 0; i < kDefaultMaxStreamsPerConnection / 2; i++) { |
1225 QuicStreamRequest request(factory_.get()); | 1227 QuicStreamRequest request(factory_.get()); |
1226 int rv = request.Request(host_port_pair_, privacy_mode_, | 1228 int rv = request.Request(host_port_pair_, privacy_mode_, |
1227 /*cert_verify_flags=*/0, url_, "GET", net_log_, | 1229 /*cert_verify_flags=*/0, url_, "GET", net_log_, |
1228 callback_.callback()); | 1230 callback_.callback()); |
1229 if (i == 0) { | 1231 if (i == 0) { |
1230 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); | 1232 EXPECT_THAT(rv, IsError(ERR_IO_PENDING)); |
1231 EXPECT_THAT(callback_.WaitForResult(), IsOk()); | 1233 EXPECT_THAT(callback_.WaitForResult(), IsOk()); |
1232 } else { | 1234 } else { |
1233 EXPECT_THAT(rv, IsOk()); | 1235 EXPECT_THAT(rv, IsOk()); |
1234 } | 1236 } |
1235 std::unique_ptr<QuicHttpStream> stream = request.CreateStream(); | 1237 std::unique_ptr<QuicHttpStream> stream = request.CreateStream(); |
1236 EXPECT_TRUE(stream); | 1238 EXPECT_TRUE(stream); |
1237 EXPECT_EQ(OK, stream->InitializeStream(&request_info, DEFAULT_PRIORITY, | 1239 EXPECT_EQ(OK, stream->InitializeStream(&request_info, DEFAULT_PRIORITY, |
1238 net_log_, CompletionCallback())); | 1240 net_log_, CompletionCallback())); |
1239 streams.push_back(stream.release()); | 1241 streams.push_back(std::move(stream)); |
1240 } | 1242 } |
1241 | 1243 |
1242 QuicStreamRequest request(factory_.get()); | 1244 QuicStreamRequest request(factory_.get()); |
1243 EXPECT_EQ(OK, request.Request(host_port_pair_, privacy_mode_, | 1245 EXPECT_EQ(OK, request.Request(host_port_pair_, privacy_mode_, |
1244 /*cert_verify_flags=*/0, url_, "GET", net_log_, | 1246 /*cert_verify_flags=*/0, url_, "GET", net_log_, |
1245 CompletionCallback())); | 1247 CompletionCallback())); |
1246 std::unique_ptr<QuicHttpStream> stream = request.CreateStream(); | 1248 std::unique_ptr<QuicHttpStream> stream = request.CreateStream(); |
1247 EXPECT_TRUE(stream); | 1249 EXPECT_TRUE(stream); |
1248 EXPECT_EQ(ERR_IO_PENDING, | 1250 EXPECT_EQ(ERR_IO_PENDING, |
1249 stream->InitializeStream(&request_info, DEFAULT_PRIORITY, net_log_, | 1251 stream->InitializeStream(&request_info, DEFAULT_PRIORITY, net_log_, |
1250 callback_.callback())); | 1252 callback_.callback())); |
1251 | 1253 |
1252 // Close the first stream. | 1254 // Close the first stream. |
1253 streams.front()->Close(false); | 1255 streams.front()->Close(false); |
1254 // Trigger exchange of RSTs that in turn allow progress for the last | 1256 // Trigger exchange of RSTs that in turn allow progress for the last |
1255 // stream. | 1257 // stream. |
1256 EXPECT_THAT(callback_.WaitForResult(), IsOk()); | 1258 EXPECT_THAT(callback_.WaitForResult(), IsOk()); |
1257 | 1259 |
1258 EXPECT_TRUE(socket_data.AllReadDataConsumed()); | 1260 EXPECT_TRUE(socket_data.AllReadDataConsumed()); |
1259 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); | 1261 EXPECT_TRUE(socket_data.AllWriteDataConsumed()); |
1260 | 1262 |
1261 // Force close of the connection to suppress the generation of RST | 1263 // Force close of the connection to suppress the generation of RST |
1262 // packets when streams are torn down, which wouldn't be relevant to | 1264 // packets when streams are torn down, which wouldn't be relevant to |
1263 // this test anyway. | 1265 // this test anyway. |
1264 QuicChromiumClientSession* session = GetActiveSession(host_port_pair_); | 1266 QuicChromiumClientSession* session = GetActiveSession(host_port_pair_); |
1265 session->connection()->CloseConnection(QUIC_PUBLIC_RESET, "test", | 1267 session->connection()->CloseConnection(QUIC_PUBLIC_RESET, "test", |
1266 ConnectionCloseBehavior::SILENT_CLOSE); | 1268 ConnectionCloseBehavior::SILENT_CLOSE); |
1267 | |
1268 base::STLDeleteElements(&streams); | |
1269 } | 1269 } |
1270 | 1270 |
1271 TEST_P(QuicStreamFactoryTest, ResolutionErrorInCreate) { | 1271 TEST_P(QuicStreamFactoryTest, ResolutionErrorInCreate) { |
1272 Initialize(); | 1272 Initialize(); |
1273 MockQuicData socket_data; | 1273 MockQuicData socket_data; |
1274 socket_data.AddSocketDataToFactory(&socket_factory_); | 1274 socket_data.AddSocketDataToFactory(&socket_factory_); |
1275 | 1275 |
1276 host_resolver_.rules()->AddSimulatedFailure(kDefaultServerHostName); | 1276 host_resolver_.rules()->AddSimulatedFailure(kDefaultServerHostName); |
1277 | 1277 |
1278 QuicStreamRequest request(factory_.get()); | 1278 QuicStreamRequest request(factory_.get()); |
(...skipping 3943 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5222 // Clear all cached states. | 5222 // Clear all cached states. |
5223 factory_->ClearCachedStatesInCryptoConfig( | 5223 factory_->ClearCachedStatesInCryptoConfig( |
5224 base::Callback<bool(const GURL&)>()); | 5224 base::Callback<bool(const GURL&)>()); |
5225 EXPECT_TRUE(test_cases[0].state->certs().empty()); | 5225 EXPECT_TRUE(test_cases[0].state->certs().empty()); |
5226 EXPECT_TRUE(test_cases[1].state->certs().empty()); | 5226 EXPECT_TRUE(test_cases[1].state->certs().empty()); |
5227 EXPECT_TRUE(test_cases[2].state->certs().empty()); | 5227 EXPECT_TRUE(test_cases[2].state->certs().empty()); |
5228 } | 5228 } |
5229 | 5229 |
5230 } // namespace test | 5230 } // namespace test |
5231 } // namespace net | 5231 } // namespace net |
OLD | NEW |