Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(30)

Side by Side Diff: components/domain_reliability/uploader_unittest.cc

Issue 2336043007: Domain Reliability: Don't crash on shutdown with uploads pending (Closed)
Patch Set: No, really. Created 4 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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
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
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
OLDNEW
« components/domain_reliability/uploader.cc ('K') | « components/domain_reliability/uploader.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698