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/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/http/http_pipelined_connection.h" | 8 #include "net/http/http_pipelined_connection.h" |
9 #include "net/http/http_pipelined_host_test_util.h" | 9 #include "net/http/http_pipelined_host_test_util.h" |
10 #include "net/proxy/proxy_info.h" | 10 #include "net/proxy/proxy_info.h" |
11 #include "net/ssl/ssl_config_service.h" | 11 #include "net/ssl/ssl_config_service.h" |
12 #include "testing/gmock/include/gmock/gmock.h" | 12 #include "testing/gmock/include/gmock/gmock.h" |
13 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
14 | 14 |
15 using testing::_; | 15 using testing::_; |
16 using testing::NiceMock; | 16 using testing::NiceMock; |
17 using testing::Ref; | 17 using testing::Ref; |
18 using testing::Return; | 18 using testing::Return; |
19 using testing::ReturnNull; | 19 using testing::ReturnNull; |
20 | 20 |
21 namespace net { | 21 namespace net { |
22 | 22 |
23 namespace { | 23 namespace { |
24 | 24 |
25 ClientSocketHandle* kDummyConnection = | 25 ClientSocketHandle* kDummyConnection = |
26 reinterpret_cast<ClientSocketHandle*>(84); | 26 reinterpret_cast<ClientSocketHandle*>(84); |
27 HttpPipelinedStream* kDummyStream = | 27 HttpPipelinedStream* kDummyStream = reinterpret_cast<HttpPipelinedStream*>(42); |
28 reinterpret_cast<HttpPipelinedStream*>(42); | |
29 | 28 |
30 class HttpPipelinedHostImplTest : public testing::Test { | 29 class HttpPipelinedHostImplTest : public testing::Test { |
31 public: | 30 public: |
32 HttpPipelinedHostImplTest() | 31 HttpPipelinedHostImplTest() |
33 : key_(HostPortPair("host", 123)), | 32 : key_(HostPortPair("host", 123)), |
34 factory_(new MockPipelineFactory), // Owned by host_. | 33 factory_(new MockPipelineFactory), // Owned by host_. |
35 host_(new HttpPipelinedHostImpl(&delegate_, key_, factory_, | 34 host_(new HttpPipelinedHostImpl(&delegate_, |
36 PIPELINE_CAPABLE)) { | 35 key_, |
37 } | 36 factory_, |
| 37 PIPELINE_CAPABLE)) {} |
38 | 38 |
39 void SetCapability(HttpPipelinedHostCapability capability) { | 39 void SetCapability(HttpPipelinedHostCapability capability) { |
40 factory_ = new MockPipelineFactory; | 40 factory_ = new MockPipelineFactory; |
41 host_.reset(new HttpPipelinedHostImpl( | 41 host_.reset( |
42 &delegate_, key_, factory_, capability)); | 42 new HttpPipelinedHostImpl(&delegate_, key_, factory_, capability)); |
43 } | 43 } |
44 | 44 |
45 MockPipeline* AddTestPipeline(int depth, bool usable, bool active) { | 45 MockPipeline* AddTestPipeline(int depth, bool usable, bool active) { |
46 MockPipeline* pipeline = new MockPipeline(depth, usable, active); | 46 MockPipeline* pipeline = new MockPipeline(depth, usable, active); |
47 EXPECT_CALL(*factory_, CreateNewPipeline(kDummyConnection, host_.get(), | 47 EXPECT_CALL(*factory_, |
48 MatchesOrigin(key_.origin()), | 48 CreateNewPipeline(kDummyConnection, |
49 Ref(ssl_config_), Ref(proxy_info_), | 49 host_.get(), |
50 Ref(net_log_), true, | 50 MatchesOrigin(key_.origin()), |
51 kProtoSPDY3)) | 51 Ref(ssl_config_), |
| 52 Ref(proxy_info_), |
| 53 Ref(net_log_), |
| 54 true, |
| 55 kProtoSPDY3)) |
52 .Times(1) | 56 .Times(1) |
53 .WillOnce(Return(pipeline)); | 57 .WillOnce(Return(pipeline)); |
54 EXPECT_CALL(*pipeline, CreateNewStream()) | 58 EXPECT_CALL(*pipeline, CreateNewStream()).Times(1).WillOnce( |
55 .Times(1) | 59 Return(kDummyStream)); |
56 .WillOnce(Return(kDummyStream)); | 60 EXPECT_EQ(kDummyStream, |
57 EXPECT_EQ(kDummyStream, host_->CreateStreamOnNewPipeline( | 61 host_->CreateStreamOnNewPipeline(kDummyConnection, |
58 kDummyConnection, ssl_config_, proxy_info_, net_log_, true, | 62 ssl_config_, |
59 kProtoSPDY3)); | 63 proxy_info_, |
| 64 net_log_, |
| 65 true, |
| 66 kProtoSPDY3)); |
60 return pipeline; | 67 return pipeline; |
61 } | 68 } |
62 | 69 |
63 void ClearTestPipeline(MockPipeline* pipeline) { | 70 void ClearTestPipeline(MockPipeline* pipeline) { |
64 pipeline->SetState(0, true, true); | 71 pipeline->SetState(0, true, true); |
65 host_->OnPipelineHasCapacity(pipeline); | 72 host_->OnPipelineHasCapacity(pipeline); |
66 } | 73 } |
67 | 74 |
68 NiceMock<MockHostDelegate> delegate_; | 75 NiceMock<MockHostDelegate> delegate_; |
69 HttpPipelinedHost::Key key_; | 76 HttpPipelinedHost::Key key_; |
70 MockPipelineFactory* factory_; | 77 MockPipelineFactory* factory_; |
71 scoped_ptr<HttpPipelinedHostImpl> host_; | 78 scoped_ptr<HttpPipelinedHostImpl> host_; |
72 | 79 |
73 SSLConfig ssl_config_; | 80 SSLConfig ssl_config_; |
74 ProxyInfo proxy_info_; | 81 ProxyInfo proxy_info_; |
75 BoundNetLog net_log_; | 82 BoundNetLog net_log_; |
76 }; | 83 }; |
77 | 84 |
78 TEST_F(HttpPipelinedHostImplTest, Delegate) { | 85 TEST_F(HttpPipelinedHostImplTest, Delegate) { |
79 EXPECT_TRUE(key_.origin().Equals(host_->GetKey().origin())); | 86 EXPECT_TRUE(key_.origin().Equals(host_->GetKey().origin())); |
80 } | 87 } |
81 | 88 |
82 TEST_F(HttpPipelinedHostImplTest, OnUnusablePipelineHasCapacity) { | 89 TEST_F(HttpPipelinedHostImplTest, OnUnusablePipelineHasCapacity) { |
83 MockPipeline* pipeline = AddTestPipeline(0, false, true); | 90 MockPipeline* pipeline = AddTestPipeline(0, false, true); |
84 | 91 |
85 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) | 92 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())).Times(0); |
86 .Times(0); | 93 EXPECT_CALL(delegate_, OnHostIdle(host_.get())).Times(1); |
87 EXPECT_CALL(delegate_, OnHostIdle(host_.get())) | |
88 .Times(1); | |
89 host_->OnPipelineHasCapacity(pipeline); | 94 host_->OnPipelineHasCapacity(pipeline); |
90 } | 95 } |
91 | 96 |
92 TEST_F(HttpPipelinedHostImplTest, OnUsablePipelineHasCapacity) { | 97 TEST_F(HttpPipelinedHostImplTest, OnUsablePipelineHasCapacity) { |
93 MockPipeline* pipeline = AddTestPipeline(1, true, true); | 98 MockPipeline* pipeline = AddTestPipeline(1, true, true); |
94 | 99 |
95 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) | 100 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())).Times(1); |
96 .Times(1); | 101 EXPECT_CALL(delegate_, OnHostIdle(host_.get())).Times(0); |
97 EXPECT_CALL(delegate_, OnHostIdle(host_.get())) | |
98 .Times(0); | |
99 | 102 |
100 host_->OnPipelineHasCapacity(pipeline); | 103 host_->OnPipelineHasCapacity(pipeline); |
101 | 104 |
102 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) | 105 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())).Times(1); |
103 .Times(1); | 106 EXPECT_CALL(delegate_, OnHostIdle(host_.get())).Times(1); |
104 EXPECT_CALL(delegate_, OnHostIdle(host_.get())) | |
105 .Times(1); | |
106 ClearTestPipeline(pipeline); | 107 ClearTestPipeline(pipeline); |
107 } | 108 } |
108 | 109 |
109 TEST_F(HttpPipelinedHostImplTest, IgnoresUnusablePipeline) { | 110 TEST_F(HttpPipelinedHostImplTest, IgnoresUnusablePipeline) { |
110 MockPipeline* pipeline = AddTestPipeline(1, false, true); | 111 MockPipeline* pipeline = AddTestPipeline(1, false, true); |
111 | 112 |
112 EXPECT_FALSE(host_->IsExistingPipelineAvailable()); | 113 EXPECT_FALSE(host_->IsExistingPipelineAvailable()); |
113 EXPECT_EQ(NULL, host_->CreateStreamOnExistingPipeline()); | 114 EXPECT_EQ(NULL, host_->CreateStreamOnExistingPipeline()); |
114 | 115 |
115 ClearTestPipeline(pipeline); | 116 ClearTestPipeline(pipeline); |
116 } | 117 } |
117 | 118 |
118 TEST_F(HttpPipelinedHostImplTest, IgnoresInactivePipeline) { | 119 TEST_F(HttpPipelinedHostImplTest, IgnoresInactivePipeline) { |
119 MockPipeline* pipeline = AddTestPipeline(1, true, false); | 120 MockPipeline* pipeline = AddTestPipeline(1, true, false); |
120 | 121 |
121 EXPECT_FALSE(host_->IsExistingPipelineAvailable()); | 122 EXPECT_FALSE(host_->IsExistingPipelineAvailable()); |
122 EXPECT_EQ(NULL, host_->CreateStreamOnExistingPipeline()); | 123 EXPECT_EQ(NULL, host_->CreateStreamOnExistingPipeline()); |
123 | 124 |
124 ClearTestPipeline(pipeline); | 125 ClearTestPipeline(pipeline); |
125 } | 126 } |
126 | 127 |
127 TEST_F(HttpPipelinedHostImplTest, IgnoresFullPipeline) { | 128 TEST_F(HttpPipelinedHostImplTest, IgnoresFullPipeline) { |
128 MockPipeline* pipeline = AddTestPipeline( | 129 MockPipeline* pipeline = |
129 HttpPipelinedHostImpl::max_pipeline_depth(), true, true); | 130 AddTestPipeline(HttpPipelinedHostImpl::max_pipeline_depth(), true, true); |
130 | 131 |
131 EXPECT_FALSE(host_->IsExistingPipelineAvailable()); | 132 EXPECT_FALSE(host_->IsExistingPipelineAvailable()); |
132 EXPECT_EQ(NULL, host_->CreateStreamOnExistingPipeline()); | 133 EXPECT_EQ(NULL, host_->CreateStreamOnExistingPipeline()); |
133 | 134 |
134 ClearTestPipeline(pipeline); | 135 ClearTestPipeline(pipeline); |
135 } | 136 } |
136 | 137 |
137 TEST_F(HttpPipelinedHostImplTest, PicksLeastLoadedPipeline) { | 138 TEST_F(HttpPipelinedHostImplTest, PicksLeastLoadedPipeline) { |
138 MockPipeline* full_pipeline = AddTestPipeline( | 139 MockPipeline* full_pipeline = |
139 HttpPipelinedHostImpl::max_pipeline_depth(), true, true); | 140 AddTestPipeline(HttpPipelinedHostImpl::max_pipeline_depth(), true, true); |
140 MockPipeline* usable_pipeline = AddTestPipeline( | 141 MockPipeline* usable_pipeline = AddTestPipeline( |
141 HttpPipelinedHostImpl::max_pipeline_depth() - 1, true, true); | 142 HttpPipelinedHostImpl::max_pipeline_depth() - 1, true, true); |
142 MockPipeline* empty_pipeline = AddTestPipeline(0, true, true); | 143 MockPipeline* empty_pipeline = AddTestPipeline(0, true, true); |
143 | 144 |
144 EXPECT_TRUE(host_->IsExistingPipelineAvailable()); | 145 EXPECT_TRUE(host_->IsExistingPipelineAvailable()); |
145 EXPECT_CALL(*empty_pipeline, CreateNewStream()) | 146 EXPECT_CALL(*empty_pipeline, CreateNewStream()).Times(1).WillOnce( |
146 .Times(1) | 147 ReturnNull()); |
147 .WillOnce(ReturnNull()); | |
148 EXPECT_EQ(NULL, host_->CreateStreamOnExistingPipeline()); | 148 EXPECT_EQ(NULL, host_->CreateStreamOnExistingPipeline()); |
149 | 149 |
150 ClearTestPipeline(full_pipeline); | 150 ClearTestPipeline(full_pipeline); |
151 ClearTestPipeline(usable_pipeline); | 151 ClearTestPipeline(usable_pipeline); |
152 ClearTestPipeline(empty_pipeline); | 152 ClearTestPipeline(empty_pipeline); |
153 } | 153 } |
154 | 154 |
155 TEST_F(HttpPipelinedHostImplTest, OpensUpOnPipelineSuccess) { | 155 TEST_F(HttpPipelinedHostImplTest, OpensUpOnPipelineSuccess) { |
156 SetCapability(PIPELINE_UNKNOWN); | 156 SetCapability(PIPELINE_UNKNOWN); |
157 MockPipeline* pipeline = AddTestPipeline(1, true, true); | 157 MockPipeline* pipeline = AddTestPipeline(1, true, true); |
158 | 158 |
159 EXPECT_EQ(NULL, host_->CreateStreamOnExistingPipeline()); | 159 EXPECT_EQ(NULL, host_->CreateStreamOnExistingPipeline()); |
160 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) | 160 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())).Times(1); |
161 .Times(1); | |
162 host_->OnPipelineFeedback(pipeline, HttpPipelinedConnection::OK); | 161 host_->OnPipelineFeedback(pipeline, HttpPipelinedConnection::OK); |
163 | 162 |
164 EXPECT_CALL(*pipeline, CreateNewStream()) | 163 EXPECT_CALL(*pipeline, CreateNewStream()).Times(1).WillOnce( |
165 .Times(1) | 164 Return(kDummyStream)); |
166 .WillOnce(Return(kDummyStream)); | |
167 EXPECT_EQ(kDummyStream, host_->CreateStreamOnExistingPipeline()); | 165 EXPECT_EQ(kDummyStream, host_->CreateStreamOnExistingPipeline()); |
168 | 166 |
169 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) | 167 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())).Times(1); |
170 .Times(1); | |
171 ClearTestPipeline(pipeline); | 168 ClearTestPipeline(pipeline); |
172 } | 169 } |
173 | 170 |
174 TEST_F(HttpPipelinedHostImplTest, OpensAllPipelinesOnPipelineSuccess) { | 171 TEST_F(HttpPipelinedHostImplTest, OpensAllPipelinesOnPipelineSuccess) { |
175 SetCapability(PIPELINE_UNKNOWN); | 172 SetCapability(PIPELINE_UNKNOWN); |
176 MockPipeline* pipeline1 = AddTestPipeline(1, false, true); | 173 MockPipeline* pipeline1 = AddTestPipeline(1, false, true); |
177 MockPipeline* pipeline2 = AddTestPipeline(1, true, true); | 174 MockPipeline* pipeline2 = AddTestPipeline(1, true, true); |
178 | 175 |
179 EXPECT_EQ(NULL, host_->CreateStreamOnExistingPipeline()); | 176 EXPECT_EQ(NULL, host_->CreateStreamOnExistingPipeline()); |
180 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) | 177 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())).Times(1); |
181 .Times(1); | |
182 host_->OnPipelineFeedback(pipeline1, HttpPipelinedConnection::OK); | 178 host_->OnPipelineFeedback(pipeline1, HttpPipelinedConnection::OK); |
183 | 179 |
184 EXPECT_CALL(*pipeline2, CreateNewStream()) | 180 EXPECT_CALL(*pipeline2, CreateNewStream()).Times(1).WillOnce( |
185 .Times(1) | 181 Return(kDummyStream)); |
186 .WillOnce(Return(kDummyStream)); | |
187 EXPECT_EQ(kDummyStream, host_->CreateStreamOnExistingPipeline()); | 182 EXPECT_EQ(kDummyStream, host_->CreateStreamOnExistingPipeline()); |
188 | 183 |
189 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) | 184 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())).Times(2); |
190 .Times(2); | |
191 ClearTestPipeline(pipeline1); | 185 ClearTestPipeline(pipeline1); |
192 ClearTestPipeline(pipeline2); | 186 ClearTestPipeline(pipeline2); |
193 } | 187 } |
194 | 188 |
195 TEST_F(HttpPipelinedHostImplTest, ShutsDownOnOldVersion) { | 189 TEST_F(HttpPipelinedHostImplTest, ShutsDownOnOldVersion) { |
196 SetCapability(PIPELINE_UNKNOWN); | 190 SetCapability(PIPELINE_UNKNOWN); |
197 MockPipeline* pipeline = AddTestPipeline(1, true, true); | 191 MockPipeline* pipeline = AddTestPipeline(1, true, true); |
198 | 192 |
199 EXPECT_EQ(NULL, host_->CreateStreamOnExistingPipeline()); | 193 EXPECT_EQ(NULL, host_->CreateStreamOnExistingPipeline()); |
200 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) | 194 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())).Times(0); |
201 .Times(0); | |
202 EXPECT_CALL(delegate_, | 195 EXPECT_CALL(delegate_, |
203 OnHostDeterminedCapability(host_.get(), PIPELINE_INCAPABLE)) | 196 OnHostDeterminedCapability(host_.get(), PIPELINE_INCAPABLE)) |
204 .Times(1); | 197 .Times(1); |
205 host_->OnPipelineFeedback(pipeline, | 198 host_->OnPipelineFeedback(pipeline, |
206 HttpPipelinedConnection::OLD_HTTP_VERSION); | 199 HttpPipelinedConnection::OLD_HTTP_VERSION); |
207 | 200 |
208 ClearTestPipeline(pipeline); | 201 ClearTestPipeline(pipeline); |
209 EXPECT_EQ(NULL, host_->CreateStreamOnNewPipeline( | 202 EXPECT_EQ(NULL, |
210 kDummyConnection, ssl_config_, proxy_info_, net_log_, true, | 203 host_->CreateStreamOnNewPipeline(kDummyConnection, |
211 kProtoSPDY3)); | 204 ssl_config_, |
| 205 proxy_info_, |
| 206 net_log_, |
| 207 true, |
| 208 kProtoSPDY3)); |
212 } | 209 } |
213 | 210 |
214 TEST_F(HttpPipelinedHostImplTest, ShutsDownOnAuthenticationRequired) { | 211 TEST_F(HttpPipelinedHostImplTest, ShutsDownOnAuthenticationRequired) { |
215 SetCapability(PIPELINE_UNKNOWN); | 212 SetCapability(PIPELINE_UNKNOWN); |
216 MockPipeline* pipeline = AddTestPipeline(1, true, true); | 213 MockPipeline* pipeline = AddTestPipeline(1, true, true); |
217 | 214 |
218 EXPECT_EQ(NULL, host_->CreateStreamOnExistingPipeline()); | 215 EXPECT_EQ(NULL, host_->CreateStreamOnExistingPipeline()); |
219 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) | 216 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())).Times(0); |
220 .Times(0); | |
221 EXPECT_CALL(delegate_, | 217 EXPECT_CALL(delegate_, |
222 OnHostDeterminedCapability(host_.get(), PIPELINE_INCAPABLE)) | 218 OnHostDeterminedCapability(host_.get(), PIPELINE_INCAPABLE)) |
223 .Times(1); | 219 .Times(1); |
224 host_->OnPipelineFeedback(pipeline, | 220 host_->OnPipelineFeedback(pipeline, |
225 HttpPipelinedConnection::AUTHENTICATION_REQUIRED); | 221 HttpPipelinedConnection::AUTHENTICATION_REQUIRED); |
226 | 222 |
227 ClearTestPipeline(pipeline); | 223 ClearTestPipeline(pipeline); |
228 EXPECT_EQ(NULL, host_->CreateStreamOnNewPipeline( | 224 EXPECT_EQ(NULL, |
229 kDummyConnection, ssl_config_, proxy_info_, net_log_, true, | 225 host_->CreateStreamOnNewPipeline(kDummyConnection, |
230 kProtoSPDY3)); | 226 ssl_config_, |
| 227 proxy_info_, |
| 228 net_log_, |
| 229 true, |
| 230 kProtoSPDY3)); |
231 } | 231 } |
232 | 232 |
233 TEST_F(HttpPipelinedHostImplTest, ConnectionCloseHasNoEffect) { | 233 TEST_F(HttpPipelinedHostImplTest, ConnectionCloseHasNoEffect) { |
234 SetCapability(PIPELINE_UNKNOWN); | 234 SetCapability(PIPELINE_UNKNOWN); |
235 MockPipeline* pipeline = AddTestPipeline(1, true, true); | 235 MockPipeline* pipeline = AddTestPipeline(1, true, true); |
236 | 236 |
237 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) | 237 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())).Times(0); |
238 .Times(0); | 238 EXPECT_CALL(delegate_, OnHostDeterminedCapability(host_.get(), _)).Times(0); |
239 EXPECT_CALL(delegate_, OnHostDeterminedCapability(host_.get(), _)) | |
240 .Times(0); | |
241 host_->OnPipelineFeedback(pipeline, | 239 host_->OnPipelineFeedback(pipeline, |
242 HttpPipelinedConnection::MUST_CLOSE_CONNECTION); | 240 HttpPipelinedConnection::MUST_CLOSE_CONNECTION); |
243 EXPECT_EQ(NULL, host_->CreateStreamOnExistingPipeline()); | 241 EXPECT_EQ(NULL, host_->CreateStreamOnExistingPipeline()); |
244 | 242 |
245 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) | 243 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())).Times(1); |
246 .Times(1); | |
247 ClearTestPipeline(pipeline); | 244 ClearTestPipeline(pipeline); |
248 } | 245 } |
249 | 246 |
250 TEST_F(HttpPipelinedHostImplTest, SuccessesLeadToCapable) { | 247 TEST_F(HttpPipelinedHostImplTest, SuccessesLeadToCapable) { |
251 SetCapability(PIPELINE_UNKNOWN); | 248 SetCapability(PIPELINE_UNKNOWN); |
252 MockPipeline* pipeline = AddTestPipeline(1, true, true); | 249 MockPipeline* pipeline = AddTestPipeline(1, true, true); |
253 | 250 |
254 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) | 251 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())).Times(1); |
255 .Times(1); | |
256 EXPECT_CALL(delegate_, | 252 EXPECT_CALL(delegate_, |
257 OnHostDeterminedCapability(host_.get(), PIPELINE_CAPABLE)) | 253 OnHostDeterminedCapability(host_.get(), PIPELINE_CAPABLE)) |
258 .Times(1); | 254 .Times(1); |
259 host_->OnPipelineFeedback(pipeline, HttpPipelinedConnection::OK); | 255 host_->OnPipelineFeedback(pipeline, HttpPipelinedConnection::OK); |
260 | 256 |
261 pipeline->SetState(3, true, true); | 257 pipeline->SetState(3, true, true); |
262 host_->OnPipelineFeedback(pipeline, HttpPipelinedConnection::OK); | 258 host_->OnPipelineFeedback(pipeline, HttpPipelinedConnection::OK); |
263 host_->OnPipelineFeedback(pipeline, HttpPipelinedConnection::OK); | 259 host_->OnPipelineFeedback(pipeline, HttpPipelinedConnection::OK); |
264 | 260 |
265 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) | 261 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())).Times(1); |
266 .Times(1); | |
267 ClearTestPipeline(pipeline); | 262 ClearTestPipeline(pipeline); |
268 } | 263 } |
269 | 264 |
270 TEST_F(HttpPipelinedHostImplTest, IgnoresSocketErrorOnFirstRequest) { | 265 TEST_F(HttpPipelinedHostImplTest, IgnoresSocketErrorOnFirstRequest) { |
271 SetCapability(PIPELINE_UNKNOWN); | 266 SetCapability(PIPELINE_UNKNOWN); |
272 MockPipeline* pipeline = AddTestPipeline(1, true, true); | 267 MockPipeline* pipeline = AddTestPipeline(1, true, true); |
273 | 268 |
274 EXPECT_CALL(delegate_, OnHostDeterminedCapability(host_.get(), _)) | 269 EXPECT_CALL(delegate_, OnHostDeterminedCapability(host_.get(), _)).Times(0); |
275 .Times(0); | |
276 host_->OnPipelineFeedback(pipeline, | 270 host_->OnPipelineFeedback(pipeline, |
277 HttpPipelinedConnection::PIPELINE_SOCKET_ERROR); | 271 HttpPipelinedConnection::PIPELINE_SOCKET_ERROR); |
278 | 272 |
279 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())) | 273 EXPECT_CALL(delegate_, OnHostHasAdditionalCapacity(host_.get())).Times(1); |
280 .Times(1); | 274 host_->OnPipelineFeedback(pipeline, HttpPipelinedConnection::OK); |
281 host_->OnPipelineFeedback(pipeline, | |
282 HttpPipelinedConnection::OK); | |
283 | 275 |
284 EXPECT_CALL(delegate_, | 276 EXPECT_CALL(delegate_, |
285 OnHostDeterminedCapability(host_.get(), PIPELINE_INCAPABLE)) | 277 OnHostDeterminedCapability(host_.get(), PIPELINE_INCAPABLE)) |
286 .Times(1); | 278 .Times(1); |
287 host_->OnPipelineFeedback(pipeline, | 279 host_->OnPipelineFeedback(pipeline, |
288 HttpPipelinedConnection::PIPELINE_SOCKET_ERROR); | 280 HttpPipelinedConnection::PIPELINE_SOCKET_ERROR); |
289 | 281 |
290 ClearTestPipeline(pipeline); | 282 ClearTestPipeline(pipeline); |
291 } | 283 } |
292 | 284 |
293 TEST_F(HttpPipelinedHostImplTest, HeedsSocketErrorOnFirstRequestWithPipeline) { | 285 TEST_F(HttpPipelinedHostImplTest, HeedsSocketErrorOnFirstRequestWithPipeline) { |
294 SetCapability(PIPELINE_UNKNOWN); | 286 SetCapability(PIPELINE_UNKNOWN); |
295 MockPipeline* pipeline = AddTestPipeline(2, true, true); | 287 MockPipeline* pipeline = AddTestPipeline(2, true, true); |
296 | 288 |
297 EXPECT_CALL(delegate_, | 289 EXPECT_CALL(delegate_, |
298 OnHostDeterminedCapability(host_.get(), PIPELINE_INCAPABLE)) | 290 OnHostDeterminedCapability(host_.get(), PIPELINE_INCAPABLE)) |
299 .Times(1); | 291 .Times(1); |
300 host_->OnPipelineFeedback(pipeline, | 292 host_->OnPipelineFeedback(pipeline, |
301 HttpPipelinedConnection::PIPELINE_SOCKET_ERROR); | 293 HttpPipelinedConnection::PIPELINE_SOCKET_ERROR); |
302 | 294 |
303 ClearTestPipeline(pipeline); | 295 ClearTestPipeline(pipeline); |
304 } | 296 } |
305 | 297 |
306 } // anonymous namespace | 298 } // anonymous namespace |
307 | 299 |
308 } // namespace net | 300 } // namespace net |
OLD | NEW |