OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/http/http_pipelined_host_impl.h" | 5 #include "net/http/http_pipelined_host_impl.h" |
6 | 6 |
7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
8 #include "net/base/ssl_config_service.h" | 8 #include "net/base/ssl_config_service.h" |
9 #include "net/http/http_pipelined_connection.h" | 9 #include "net/http/http_pipelined_connection.h" |
10 #include "net/proxy/proxy_info.h" | 10 #include "net/proxy/proxy_info.h" |
(...skipping 14 matching lines...) Expand all Loading... |
25 reinterpret_cast<ClientSocketHandle*>(84); | 25 reinterpret_cast<ClientSocketHandle*>(84); |
26 HttpPipelinedStream* kDummyStream = | 26 HttpPipelinedStream* kDummyStream = |
27 reinterpret_cast<HttpPipelinedStream*>(42); | 27 reinterpret_cast<HttpPipelinedStream*>(42); |
28 | 28 |
29 class MockHostDelegate : public HttpPipelinedHost::Delegate { | 29 class MockHostDelegate : public HttpPipelinedHost::Delegate { |
30 public: | 30 public: |
31 MOCK_METHOD1(OnHostIdle, void(HttpPipelinedHost* host)); | 31 MOCK_METHOD1(OnHostIdle, void(HttpPipelinedHost* host)); |
32 MOCK_METHOD1(OnHostHasAdditionalCapacity, void(HttpPipelinedHost* host)); | 32 MOCK_METHOD1(OnHostHasAdditionalCapacity, void(HttpPipelinedHost* host)); |
33 MOCK_METHOD2(OnHostDeterminedCapability, | 33 MOCK_METHOD2(OnHostDeterminedCapability, |
34 void(HttpPipelinedHost* host, | 34 void(HttpPipelinedHost* host, |
35 HttpPipelinedHost::Capability capability)); | 35 HttpPipelinedHostCapability capability)); |
36 }; | 36 }; |
37 | 37 |
38 class MockPipelineFactory : public HttpPipelinedConnection::Factory { | 38 class MockPipelineFactory : public HttpPipelinedConnection::Factory { |
39 public: | 39 public: |
40 MOCK_METHOD6(CreateNewPipeline, HttpPipelinedConnection*( | 40 MOCK_METHOD6(CreateNewPipeline, HttpPipelinedConnection*( |
41 ClientSocketHandle* connection, | 41 ClientSocketHandle* connection, |
42 HttpPipelinedConnection::Delegate* delegate, | 42 HttpPipelinedConnection::Delegate* delegate, |
43 const SSLConfig& used_ssl_config, | 43 const SSLConfig& used_ssl_config, |
44 const ProxyInfo& used_proxy_info, | 44 const ProxyInfo& used_proxy_info, |
45 const BoundNetLog& net_log, | 45 const BoundNetLog& net_log, |
(...skipping 30 matching lines...) Expand all Loading... |
76 bool usable_; | 76 bool usable_; |
77 bool active_; | 77 bool active_; |
78 }; | 78 }; |
79 | 79 |
80 class HttpPipelinedHostImplTest : public testing::Test { | 80 class HttpPipelinedHostImplTest : public testing::Test { |
81 public: | 81 public: |
82 HttpPipelinedHostImplTest() | 82 HttpPipelinedHostImplTest() |
83 : origin_("host", 123), | 83 : origin_("host", 123), |
84 factory_(new MockPipelineFactory), // Owned by host_. | 84 factory_(new MockPipelineFactory), // Owned by host_. |
85 host_(new HttpPipelinedHostImpl(&delegate_, origin_, factory_, | 85 host_(new HttpPipelinedHostImpl(&delegate_, origin_, factory_, |
86 HttpPipelinedHost::CAPABLE)) { | 86 PIPELINE_CAPABLE)) { |
87 } | 87 } |
88 | 88 |
89 void SetCapability(HttpPipelinedHost::Capability capability) { | 89 void SetCapability(HttpPipelinedHostCapability capability) { |
90 factory_ = new MockPipelineFactory; | 90 factory_ = new MockPipelineFactory; |
91 host_.reset(new HttpPipelinedHostImpl( | 91 host_.reset(new HttpPipelinedHostImpl( |
92 &delegate_, origin_, factory_, capability)); | 92 &delegate_, origin_, factory_, capability)); |
93 } | 93 } |
94 | 94 |
95 MockPipeline* AddTestPipeline(int depth, bool usable, bool active) { | 95 MockPipeline* AddTestPipeline(int depth, bool usable, bool active) { |
96 MockPipeline* pipeline = new MockPipeline(depth, usable, active); | 96 MockPipeline* pipeline = new MockPipeline(depth, usable, active); |
97 EXPECT_CALL(*factory_, CreateNewPipeline(kDummyConnection, host_.get(), | 97 EXPECT_CALL(*factory_, CreateNewPipeline(kDummyConnection, host_.get(), |
98 Ref(ssl_config_), Ref(proxy_info_), | 98 Ref(ssl_config_), Ref(proxy_info_), |
99 Ref(net_log_), true)) | 99 Ref(net_log_), true)) |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
193 .Times(1) | 193 .Times(1) |
194 .WillOnce(ReturnNull()); | 194 .WillOnce(ReturnNull()); |
195 EXPECT_EQ(NULL, host_->CreateStreamOnExistingPipeline()); | 195 EXPECT_EQ(NULL, host_->CreateStreamOnExistingPipeline()); |
196 | 196 |
197 ClearTestPipeline(full_pipeline); | 197 ClearTestPipeline(full_pipeline); |
198 ClearTestPipeline(usable_pipeline); | 198 ClearTestPipeline(usable_pipeline); |
199 ClearTestPipeline(empty_pipeline); | 199 ClearTestPipeline(empty_pipeline); |
200 } | 200 } |
201 | 201 |
202 TEST_F(HttpPipelinedHostImplTest, OpensUpOnPipelineSuccess) { | 202 TEST_F(HttpPipelinedHostImplTest, OpensUpOnPipelineSuccess) { |
203 SetCapability(HttpPipelinedHost::UNKNOWN); | 203 SetCapability(PIPELINE_UNKNOWN); |
204 MockPipeline* pipeline = AddTestPipeline(1, true, true); | 204 MockPipeline* pipeline = AddTestPipeline(1, true, true); |
205 | 205 |
206 EXPECT_EQ(NULL, host_->CreateStreamOnExistingPipeline()); | 206 EXPECT_EQ(NULL, host_->CreateStreamOnExistingPipeline()); |
207 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) | 207 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) |
208 .Times(1); | 208 .Times(1); |
209 host_->OnPipelineFeedback(pipeline, HttpPipelinedConnection::OK); | 209 host_->OnPipelineFeedback(pipeline, HttpPipelinedConnection::OK); |
210 | 210 |
211 EXPECT_CALL(*pipeline, CreateNewStream()) | 211 EXPECT_CALL(*pipeline, CreateNewStream()) |
212 .Times(1) | 212 .Times(1) |
213 .WillOnce(Return(kDummyStream)); | 213 .WillOnce(Return(kDummyStream)); |
214 EXPECT_EQ(kDummyStream, host_->CreateStreamOnExistingPipeline()); | 214 EXPECT_EQ(kDummyStream, host_->CreateStreamOnExistingPipeline()); |
215 | 215 |
216 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) | 216 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) |
217 .Times(1); | 217 .Times(1); |
218 ClearTestPipeline(pipeline); | 218 ClearTestPipeline(pipeline); |
219 } | 219 } |
220 | 220 |
221 TEST_F(HttpPipelinedHostImplTest, OpensAllPipelinesOnPipelineSuccess) { | 221 TEST_F(HttpPipelinedHostImplTest, OpensAllPipelinesOnPipelineSuccess) { |
222 SetCapability(HttpPipelinedHost::UNKNOWN); | 222 SetCapability(PIPELINE_UNKNOWN); |
223 MockPipeline* pipeline1 = AddTestPipeline(1, false, true); | 223 MockPipeline* pipeline1 = AddTestPipeline(1, false, true); |
224 MockPipeline* pipeline2 = AddTestPipeline(1, true, true); | 224 MockPipeline* pipeline2 = AddTestPipeline(1, true, true); |
225 | 225 |
226 EXPECT_EQ(NULL, host_->CreateStreamOnExistingPipeline()); | 226 EXPECT_EQ(NULL, host_->CreateStreamOnExistingPipeline()); |
227 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) | 227 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) |
228 .Times(1); | 228 .Times(1); |
229 host_->OnPipelineFeedback(pipeline1, HttpPipelinedConnection::OK); | 229 host_->OnPipelineFeedback(pipeline1, HttpPipelinedConnection::OK); |
230 | 230 |
231 EXPECT_CALL(*pipeline2, CreateNewStream()) | 231 EXPECT_CALL(*pipeline2, CreateNewStream()) |
232 .Times(1) | 232 .Times(1) |
233 .WillOnce(Return(kDummyStream)); | 233 .WillOnce(Return(kDummyStream)); |
234 EXPECT_EQ(kDummyStream, host_->CreateStreamOnExistingPipeline()); | 234 EXPECT_EQ(kDummyStream, host_->CreateStreamOnExistingPipeline()); |
235 | 235 |
236 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) | 236 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) |
237 .Times(2); | 237 .Times(2); |
238 ClearTestPipeline(pipeline1); | 238 ClearTestPipeline(pipeline1); |
239 ClearTestPipeline(pipeline2); | 239 ClearTestPipeline(pipeline2); |
240 } | 240 } |
241 | 241 |
242 TEST_F(HttpPipelinedHostImplTest, ShutsDownOnOldVersion) { | 242 TEST_F(HttpPipelinedHostImplTest, ShutsDownOnOldVersion) { |
243 SetCapability(HttpPipelinedHost::UNKNOWN); | 243 SetCapability(PIPELINE_UNKNOWN); |
244 MockPipeline* pipeline = AddTestPipeline(1, true, true); | 244 MockPipeline* pipeline = AddTestPipeline(1, true, true); |
245 | 245 |
246 EXPECT_EQ(NULL, host_->CreateStreamOnExistingPipeline()); | 246 EXPECT_EQ(NULL, host_->CreateStreamOnExistingPipeline()); |
247 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) | 247 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) |
248 .Times(0); | 248 .Times(0); |
249 EXPECT_CALL(delegate_, | 249 EXPECT_CALL(delegate_, |
250 OnHostDeterminedCapability(host_.get(), | 250 OnHostDeterminedCapability(host_.get(), PIPELINE_INCAPABLE)) |
251 HttpPipelinedHost::INCAPABLE)) | |
252 .Times(1); | 251 .Times(1); |
253 host_->OnPipelineFeedback(pipeline, | 252 host_->OnPipelineFeedback(pipeline, |
254 HttpPipelinedConnection::OLD_HTTP_VERSION); | 253 HttpPipelinedConnection::OLD_HTTP_VERSION); |
255 | 254 |
256 ClearTestPipeline(pipeline); | 255 ClearTestPipeline(pipeline); |
257 EXPECT_EQ(NULL, host_->CreateStreamOnNewPipeline( | 256 EXPECT_EQ(NULL, host_->CreateStreamOnNewPipeline( |
258 kDummyConnection, ssl_config_, proxy_info_, net_log_, true)); | 257 kDummyConnection, ssl_config_, proxy_info_, net_log_, true)); |
259 } | 258 } |
260 | 259 |
261 TEST_F(HttpPipelinedHostImplTest, ConnectionCloseHasNoEffect) { | 260 TEST_F(HttpPipelinedHostImplTest, ConnectionCloseHasNoEffect) { |
262 SetCapability(HttpPipelinedHost::UNKNOWN); | 261 SetCapability(PIPELINE_UNKNOWN); |
263 MockPipeline* pipeline = AddTestPipeline(1, true, true); | 262 MockPipeline* pipeline = AddTestPipeline(1, true, true); |
264 | 263 |
265 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) | 264 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) |
266 .Times(0); | 265 .Times(0); |
267 EXPECT_CALL(delegate_, OnHostDeterminedCapability(host_.get(), _)) | 266 EXPECT_CALL(delegate_, OnHostDeterminedCapability(host_.get(), _)) |
268 .Times(0); | 267 .Times(0); |
269 host_->OnPipelineFeedback(pipeline, | 268 host_->OnPipelineFeedback(pipeline, |
270 HttpPipelinedConnection::MUST_CLOSE_CONNECTION); | 269 HttpPipelinedConnection::MUST_CLOSE_CONNECTION); |
271 EXPECT_EQ(NULL, host_->CreateStreamOnExistingPipeline()); | 270 EXPECT_EQ(NULL, host_->CreateStreamOnExistingPipeline()); |
272 | 271 |
273 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) | 272 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) |
274 .Times(1); | 273 .Times(1); |
275 ClearTestPipeline(pipeline); | 274 ClearTestPipeline(pipeline); |
276 } | 275 } |
277 | 276 |
278 TEST_F(HttpPipelinedHostImplTest, SuccessesLeadToCapable) { | 277 TEST_F(HttpPipelinedHostImplTest, SuccessesLeadToCapable) { |
279 SetCapability(HttpPipelinedHost::UNKNOWN); | 278 SetCapability(PIPELINE_UNKNOWN); |
280 MockPipeline* pipeline = AddTestPipeline(1, true, true); | 279 MockPipeline* pipeline = AddTestPipeline(1, true, true); |
281 | 280 |
282 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) | 281 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) |
283 .Times(1); | 282 .Times(1); |
284 EXPECT_CALL(delegate_, | 283 EXPECT_CALL(delegate_, |
285 OnHostDeterminedCapability(host_.get(), | 284 OnHostDeterminedCapability(host_.get(), PIPELINE_CAPABLE)) |
286 HttpPipelinedHost::CAPABLE)) | |
287 .Times(1); | 285 .Times(1); |
288 host_->OnPipelineFeedback(pipeline, HttpPipelinedConnection::OK); | 286 host_->OnPipelineFeedback(pipeline, HttpPipelinedConnection::OK); |
289 | 287 |
290 pipeline->SetState(3, true, true); | 288 pipeline->SetState(3, true, true); |
291 host_->OnPipelineFeedback(pipeline, HttpPipelinedConnection::OK); | 289 host_->OnPipelineFeedback(pipeline, HttpPipelinedConnection::OK); |
292 host_->OnPipelineFeedback(pipeline, HttpPipelinedConnection::OK); | 290 host_->OnPipelineFeedback(pipeline, HttpPipelinedConnection::OK); |
293 | 291 |
294 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) | 292 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) |
295 .Times(1); | 293 .Times(1); |
296 ClearTestPipeline(pipeline); | 294 ClearTestPipeline(pipeline); |
297 } | 295 } |
298 | 296 |
299 } // anonymous namespace | 297 } // anonymous namespace |
300 | 298 |
301 } // namespace net | 299 } // namespace net |
OLD | NEW |