OLD | NEW |
---|---|
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "components/domain_reliability/uploader.h" | 5 #include "components/domain_reliability/uploader.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <memory> | 9 #include <memory> |
10 #include <string> | 10 #include <string> |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
104 } | 104 } |
105 | 105 |
106 net::UploadDataStream* upload_stream_; | 106 net::UploadDataStream* upload_stream_; |
107 scoped_refptr<net::IOBufferWithSize> upload_buffer_; | 107 scoped_refptr<net::IOBufferWithSize> upload_buffer_; |
108 std::string upload_data_; | 108 std::string upload_data_; |
109 MockUploadResult result_; | 109 MockUploadResult result_; |
110 }; | 110 }; |
111 | 111 |
112 class UploadInterceptor : public net::URLRequestInterceptor { | 112 class UploadInterceptor : public net::URLRequestInterceptor { |
113 public: | 113 public: |
114 UploadInterceptor() : last_upload_depth_(-1) {} | 114 UploadInterceptor() : request_count_(0), last_upload_depth_(-1) {} |
115 | 115 |
116 ~UploadInterceptor() override { | 116 ~UploadInterceptor() override { |
117 EXPECT_TRUE(results_.empty()); | 117 EXPECT_TRUE(results_.empty()); |
118 } | 118 } |
119 | 119 |
120 net::URLRequestJob* MaybeInterceptRequest( | 120 net::URLRequestJob* MaybeInterceptRequest( |
121 net::URLRequest* request, | 121 net::URLRequest* request, |
122 net::NetworkDelegate* delegate) const override { | 122 net::NetworkDelegate* delegate) const override { |
123 EXPECT_FALSE(results_.empty()); | 123 EXPECT_FALSE(results_.empty()); |
124 MockUploadResult result = results_.front(); | 124 MockUploadResult result = results_.front(); |
125 results_.pop_front(); | 125 results_.pop_front(); |
126 | 126 |
127 last_upload_depth_ = | 127 last_upload_depth_ = |
128 DomainReliabilityUploader::GetURLRequestUploadDepth(*request); | 128 DomainReliabilityUploader::GetURLRequestUploadDepth(*request); |
129 | 129 |
130 ++request_count_; | |
131 | |
130 return new UploadMockURLRequestJob(request, delegate, result); | 132 return new UploadMockURLRequestJob(request, delegate, result); |
131 } | 133 } |
132 | 134 |
133 void ExpectRequestAndReturnError(int net_error) { | 135 void ExpectRequestAndReturnError(int net_error) { |
134 MockUploadResult result; | 136 MockUploadResult result; |
135 result.net_error = net_error; | 137 result.net_error = net_error; |
136 result.response_code = -1; | 138 result.response_code = -1; |
137 results_.push_back(result); | 139 results_.push_back(result); |
138 } | 140 } |
139 | 141 |
140 void ExpectRequestAndReturnResponseCode(int response_code) { | 142 void ExpectRequestAndReturnResponseCode(int response_code) { |
141 MockUploadResult result; | 143 MockUploadResult result; |
142 result.net_error = net::OK; | 144 result.net_error = net::OK; |
143 result.response_code = response_code; | 145 result.response_code = response_code; |
144 results_.push_back(result); | 146 results_.push_back(result); |
145 } | 147 } |
146 | 148 |
147 void ExpectRequestAndReturnResponseCodeAndHeaders( | 149 void ExpectRequestAndReturnResponseCodeAndHeaders( |
148 int response_code, | 150 int response_code, |
149 const char* headers) { | 151 const char* headers) { |
150 MockUploadResult result; | 152 MockUploadResult result; |
151 result.net_error = net::OK; | 153 result.net_error = net::OK; |
152 result.response_code = response_code; | 154 result.response_code = response_code; |
153 result.response_headers = new net::HttpResponseHeaders( | 155 result.response_headers = new net::HttpResponseHeaders( |
154 net::HttpUtil::AssembleRawHeaders(headers, strlen(headers))); | 156 net::HttpUtil::AssembleRawHeaders(headers, strlen(headers))); |
155 results_.push_back(result); | 157 results_.push_back(result); |
156 } | 158 } |
157 | 159 |
160 int request_count() const { return request_count_; } | |
158 int last_upload_depth() const { return last_upload_depth_; } | 161 int last_upload_depth() const { return last_upload_depth_; } |
159 | 162 |
160 private: | 163 private: |
161 mutable std::list<MockUploadResult> results_; | 164 mutable std::list<MockUploadResult> results_; |
165 mutable int request_count_; | |
162 mutable int last_upload_depth_; | 166 mutable int last_upload_depth_; |
163 }; | 167 }; |
164 | 168 |
165 class TestUploadCallback { | 169 class TestUploadCallback { |
166 public: | 170 public: |
167 TestUploadCallback() : called_count_(0u) {} | 171 TestUploadCallback() : called_count_(0u) {} |
168 | 172 |
169 DomainReliabilityUploader::UploadCallback callback() { | 173 DomainReliabilityUploader::UploadCallback callback() { |
170 return base::Bind(&TestUploadCallback::OnCalled, base::Unretained(this)); | 174 return base::Bind(&TestUploadCallback::OnCalled, base::Unretained(this)); |
171 } | 175 } |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
207 | 211 |
208 private: | 212 private: |
209 base::MessageLoopForIO message_loop_; | 213 base::MessageLoopForIO message_loop_; |
210 scoped_refptr<net::TestURLRequestContextGetter> url_request_context_getter_; | 214 scoped_refptr<net::TestURLRequestContextGetter> url_request_context_getter_; |
211 UploadInterceptor* interceptor_; | 215 UploadInterceptor* interceptor_; |
212 MockTime time_; | 216 MockTime time_; |
213 std::unique_ptr<DomainReliabilityUploader> uploader_; | 217 std::unique_ptr<DomainReliabilityUploader> uploader_; |
214 }; | 218 }; |
215 | 219 |
216 TEST_F(DomainReliabilityUploaderTest, Null) { | 220 TEST_F(DomainReliabilityUploaderTest, Null) { |
221 uploader()->Shutdown(); | |
217 } | 222 } |
218 | 223 |
219 TEST_F(DomainReliabilityUploaderTest, SuccessfulUpload) { | 224 TEST_F(DomainReliabilityUploaderTest, SuccessfulUpload) { |
220 interceptor()->ExpectRequestAndReturnResponseCode(200); | 225 interceptor()->ExpectRequestAndReturnResponseCode(200); |
221 | 226 |
222 TestUploadCallback c; | 227 TestUploadCallback c; |
223 uploader()->UploadReport("{}", 0, GURL(kUploadURL), c.callback()); | 228 uploader()->UploadReport("{}", 0, GURL(kUploadURL), c.callback()); |
224 base::RunLoop().RunUntilIdle(); | 229 base::RunLoop().RunUntilIdle(); |
225 EXPECT_EQ(1u, c.called_count()); | 230 EXPECT_EQ(1u, c.called_count()); |
226 EXPECT_TRUE(c.last_result().is_success()); | 231 EXPECT_TRUE(c.last_result().is_success()); |
232 | |
233 uploader()->Shutdown(); | |
227 } | 234 } |
228 | 235 |
229 TEST_F(DomainReliabilityUploaderTest, NetworkErrorUpload) { | 236 TEST_F(DomainReliabilityUploaderTest, NetworkErrorUpload) { |
230 interceptor()->ExpectRequestAndReturnError(net::ERR_CONNECTION_REFUSED); | 237 interceptor()->ExpectRequestAndReturnError(net::ERR_CONNECTION_REFUSED); |
231 | 238 |
232 TestUploadCallback c; | 239 TestUploadCallback c; |
233 uploader()->UploadReport("{}", 0, GURL(kUploadURL), c.callback()); | 240 uploader()->UploadReport("{}", 0, GURL(kUploadURL), c.callback()); |
234 base::RunLoop().RunUntilIdle(); | 241 base::RunLoop().RunUntilIdle(); |
235 EXPECT_EQ(1u, c.called_count()); | 242 EXPECT_EQ(1u, c.called_count()); |
236 EXPECT_TRUE(c.last_result().is_failure()); | 243 EXPECT_TRUE(c.last_result().is_failure()); |
244 | |
245 uploader()->Shutdown(); | |
237 } | 246 } |
238 | 247 |
239 TEST_F(DomainReliabilityUploaderTest, ServerErrorUpload) { | 248 TEST_F(DomainReliabilityUploaderTest, ServerErrorUpload) { |
240 interceptor()->ExpectRequestAndReturnResponseCode(500); | 249 interceptor()->ExpectRequestAndReturnResponseCode(500); |
241 | 250 |
242 TestUploadCallback c; | 251 TestUploadCallback c; |
243 uploader()->UploadReport("{}", 0, GURL(kUploadURL), c.callback()); | 252 uploader()->UploadReport("{}", 0, GURL(kUploadURL), c.callback()); |
244 base::RunLoop().RunUntilIdle(); | 253 base::RunLoop().RunUntilIdle(); |
245 EXPECT_EQ(1u, c.called_count()); | 254 EXPECT_EQ(1u, c.called_count()); |
246 EXPECT_TRUE(c.last_result().is_failure()); | 255 EXPECT_TRUE(c.last_result().is_failure()); |
256 | |
257 uploader()->Shutdown(); | |
247 } | 258 } |
248 | 259 |
249 TEST_F(DomainReliabilityUploaderTest, RetryAfterUpload) { | 260 TEST_F(DomainReliabilityUploaderTest, RetryAfterUpload) { |
250 interceptor()->ExpectRequestAndReturnResponseCodeAndHeaders( | 261 interceptor()->ExpectRequestAndReturnResponseCodeAndHeaders( |
251 503, | 262 503, |
252 "HTTP/1.1 503 Ugh\nRetry-After: 3600\n\n"); | 263 "HTTP/1.1 503 Ugh\nRetry-After: 3600\n\n"); |
253 | 264 |
254 TestUploadCallback c; | 265 TestUploadCallback c; |
255 uploader()->UploadReport("{}", 0, GURL(kUploadURL), c.callback()); | 266 uploader()->UploadReport("{}", 0, GURL(kUploadURL), c.callback()); |
256 base::RunLoop().RunUntilIdle(); | 267 base::RunLoop().RunUntilIdle(); |
257 EXPECT_EQ(1u, c.called_count()); | 268 EXPECT_EQ(1u, c.called_count()); |
258 EXPECT_TRUE(c.last_result().is_retry_after()); | 269 EXPECT_TRUE(c.last_result().is_retry_after()); |
270 | |
271 uploader()->Shutdown(); | |
259 } | 272 } |
260 | 273 |
261 TEST_F(DomainReliabilityUploaderTest, UploadDepth1) { | 274 TEST_F(DomainReliabilityUploaderTest, UploadDepth1) { |
262 interceptor()->ExpectRequestAndReturnResponseCode(200); | 275 interceptor()->ExpectRequestAndReturnResponseCode(200); |
263 | 276 |
264 TestUploadCallback c; | 277 TestUploadCallback c; |
265 uploader()->UploadReport("{}", 0, GURL(kUploadURL), c.callback()); | 278 uploader()->UploadReport("{}", 0, GURL(kUploadURL), c.callback()); |
266 base::RunLoop().RunUntilIdle(); | 279 base::RunLoop().RunUntilIdle(); |
267 EXPECT_EQ(1u, c.called_count()); | 280 EXPECT_EQ(1u, c.called_count()); |
268 | 281 |
269 EXPECT_EQ(1, interceptor()->last_upload_depth()); | 282 EXPECT_EQ(1, interceptor()->last_upload_depth()); |
283 | |
284 uploader()->Shutdown(); | |
270 } | 285 } |
271 | 286 |
272 TEST_F(DomainReliabilityUploaderTest, UploadDepth2) { | 287 TEST_F(DomainReliabilityUploaderTest, UploadDepth2) { |
273 interceptor()->ExpectRequestAndReturnResponseCode(200); | 288 interceptor()->ExpectRequestAndReturnResponseCode(200); |
274 | 289 |
275 TestUploadCallback c; | 290 TestUploadCallback c; |
276 uploader()->UploadReport("{}", 1, GURL(kUploadURL), c.callback()); | 291 uploader()->UploadReport("{}", 1, GURL(kUploadURL), c.callback()); |
277 base::RunLoop().RunUntilIdle(); | 292 base::RunLoop().RunUntilIdle(); |
278 EXPECT_EQ(1u, c.called_count()); | 293 EXPECT_EQ(1u, c.called_count()); |
279 | 294 |
280 EXPECT_EQ(2, interceptor()->last_upload_depth()); | 295 EXPECT_EQ(2, interceptor()->last_upload_depth()); |
296 | |
297 uploader()->Shutdown(); | |
298 } | |
299 | |
300 TEST_F(DomainReliabilityUploaderTest, NoUploadAfterShutdown) { | |
mmenke
2016/12/14 19:12:17
Also have a test that checks that requests are can
Julia Tuttle
2016/12/15 21:53:00
Done.
| |
301 uploader()->Shutdown(); | |
302 | |
303 TestUploadCallback c; | |
304 uploader()->UploadReport("{}", 1, GURL(kUploadURL), c.callback()); | |
305 base::RunLoop().RunUntilIdle(); | |
306 EXPECT_EQ(1u, c.called_count()); | |
307 | |
308 EXPECT_EQ(0, interceptor()->request_count()); | |
281 } | 309 } |
282 | 310 |
283 } // namespace | 311 } // namespace |
284 } // namespace domain_reliability | 312 } // namespace domain_reliability |
OLD | NEW |