| 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 HttpPipelinedHostCapability capability)); | 35 HttpPipelinedHost::Capability 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 PIPELINE_CAPABLE)) { | 86 HttpPipelinedHost::CAPABLE)) { |
| 87 } | 87 } |
| 88 | 88 |
| 89 void SetCapability(HttpPipelinedHostCapability capability) { | 89 void SetCapability(HttpPipelinedHost::Capability 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(PIPELINE_UNKNOWN); | 203 SetCapability(HttpPipelinedHost::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(PIPELINE_UNKNOWN); | 222 SetCapability(HttpPipelinedHost::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(PIPELINE_UNKNOWN); | 243 SetCapability(HttpPipelinedHost::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(), PIPELINE_INCAPABLE)) | 250 OnHostDeterminedCapability(host_.get(), |
| 251 HttpPipelinedHost::INCAPABLE)) |
| 251 .Times(1); | 252 .Times(1); |
| 252 host_->OnPipelineFeedback(pipeline, | 253 host_->OnPipelineFeedback(pipeline, |
| 253 HttpPipelinedConnection::OLD_HTTP_VERSION); | 254 HttpPipelinedConnection::OLD_HTTP_VERSION); |
| 254 | 255 |
| 255 ClearTestPipeline(pipeline); | 256 ClearTestPipeline(pipeline); |
| 256 EXPECT_EQ(NULL, host_->CreateStreamOnNewPipeline( | 257 EXPECT_EQ(NULL, host_->CreateStreamOnNewPipeline( |
| 257 kDummyConnection, ssl_config_, proxy_info_, net_log_, true)); | 258 kDummyConnection, ssl_config_, proxy_info_, net_log_, true)); |
| 258 } | 259 } |
| 259 | 260 |
| 260 TEST_F(HttpPipelinedHostImplTest, ConnectionCloseHasNoEffect) { | 261 TEST_F(HttpPipelinedHostImplTest, ConnectionCloseHasNoEffect) { |
| 261 SetCapability(PIPELINE_UNKNOWN); | 262 SetCapability(HttpPipelinedHost::UNKNOWN); |
| 262 MockPipeline* pipeline = AddTestPipeline(1, true, true); | 263 MockPipeline* pipeline = AddTestPipeline(1, true, true); |
| 263 | 264 |
| 264 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) | 265 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) |
| 265 .Times(0); | 266 .Times(0); |
| 266 EXPECT_CALL(delegate_, OnHostDeterminedCapability(host_.get(), _)) | 267 EXPECT_CALL(delegate_, OnHostDeterminedCapability(host_.get(), _)) |
| 267 .Times(0); | 268 .Times(0); |
| 268 host_->OnPipelineFeedback(pipeline, | 269 host_->OnPipelineFeedback(pipeline, |
| 269 HttpPipelinedConnection::MUST_CLOSE_CONNECTION); | 270 HttpPipelinedConnection::MUST_CLOSE_CONNECTION); |
| 270 EXPECT_EQ(NULL, host_->CreateStreamOnExistingPipeline()); | 271 EXPECT_EQ(NULL, host_->CreateStreamOnExistingPipeline()); |
| 271 | 272 |
| 272 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) | 273 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) |
| 273 .Times(1); | 274 .Times(1); |
| 274 ClearTestPipeline(pipeline); | 275 ClearTestPipeline(pipeline); |
| 275 } | 276 } |
| 276 | 277 |
| 277 TEST_F(HttpPipelinedHostImplTest, SuccessesLeadToCapable) { | 278 TEST_F(HttpPipelinedHostImplTest, SuccessesLeadToCapable) { |
| 278 SetCapability(PIPELINE_UNKNOWN); | 279 SetCapability(HttpPipelinedHost::UNKNOWN); |
| 279 MockPipeline* pipeline = AddTestPipeline(1, true, true); | 280 MockPipeline* pipeline = AddTestPipeline(1, true, true); |
| 280 | 281 |
| 281 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) | 282 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) |
| 282 .Times(1); | 283 .Times(1); |
| 283 EXPECT_CALL(delegate_, | 284 EXPECT_CALL(delegate_, |
| 284 OnHostDeterminedCapability(host_.get(), PIPELINE_CAPABLE)) | 285 OnHostDeterminedCapability(host_.get(), |
| 286 HttpPipelinedHost::CAPABLE)) |
| 285 .Times(1); | 287 .Times(1); |
| 286 host_->OnPipelineFeedback(pipeline, HttpPipelinedConnection::OK); | 288 host_->OnPipelineFeedback(pipeline, HttpPipelinedConnection::OK); |
| 287 | 289 |
| 288 pipeline->SetState(3, true, true); | 290 pipeline->SetState(3, true, true); |
| 289 host_->OnPipelineFeedback(pipeline, HttpPipelinedConnection::OK); | 291 host_->OnPipelineFeedback(pipeline, HttpPipelinedConnection::OK); |
| 290 host_->OnPipelineFeedback(pipeline, HttpPipelinedConnection::OK); | 292 host_->OnPipelineFeedback(pipeline, HttpPipelinedConnection::OK); |
| 291 | 293 |
| 292 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) | 294 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) |
| 293 .Times(1); | 295 .Times(1); |
| 294 ClearTestPipeline(pipeline); | 296 ClearTestPipeline(pipeline); |
| 295 } | 297 } |
| 296 | 298 |
| 297 } // anonymous namespace | 299 } // anonymous namespace |
| 298 | 300 |
| 299 } // namespace net | 301 } // namespace net |
| OLD | NEW |