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

Side by Side Diff: chrome/browser/safe_browsing/client_side_detection_service_unittest.cc

Issue 60923002: [sync] Allow FakeURLFetcher to return an arbitrary URLRequestStatus (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase Created 7 years, 1 month 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 | Annotate | Revision Log
OLDNEW
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 <map> 5 #include <map>
6 #include <queue> 6 #include <queue>
7 #include <string> 7 #include <string>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/callback.h" 10 #include "base/callback.h"
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 csd_service_->SendClientReportMalwareRequest( 100 csd_service_->SendClientReportMalwareRequest(
101 request.release(), 101 request.release(),
102 base::Bind(&ClientSideDetectionServiceTest::SendMalwareRequestDone, 102 base::Bind(&ClientSideDetectionServiceTest::SendMalwareRequestDone,
103 base::Unretained(this))); 103 base::Unretained(this)));
104 phishing_url_ = url; 104 phishing_url_ = url;
105 msg_loop_.Run(); // Waits until callback is called. 105 msg_loop_.Run(); // Waits until callback is called.
106 return is_malware_; 106 return is_malware_;
107 } 107 }
108 108
109 void SetModelFetchResponse(std::string response_data, 109 void SetModelFetchResponse(std::string response_data,
110 net::HttpStatusCode response_code) { 110 net::HttpStatusCode response_code,
111 net::URLRequestStatus::Status status) {
111 factory_->SetFakeResponse(GURL(ClientSideDetectionService::kClientModelUrl), 112 factory_->SetFakeResponse(GURL(ClientSideDetectionService::kClientModelUrl),
112 response_data, 113 response_data, response_code, status);
113 response_code);
114 } 114 }
115 115
116 void SetClientReportPhishingResponse(std::string response_data, 116 void SetClientReportPhishingResponse(std::string response_data,
117 net::HttpStatusCode response_code) { 117 net::HttpStatusCode response_code,
118 net::URLRequestStatus::Status status) {
118 factory_->SetFakeResponse( 119 factory_->SetFakeResponse(
119 ClientSideDetectionService::GetClientReportUrl( 120 ClientSideDetectionService::GetClientReportUrl(
120 ClientSideDetectionService::kClientReportPhishingUrl), 121 ClientSideDetectionService::kClientReportPhishingUrl),
121 response_data, 122 response_data, response_code, status);
122 response_code);
123 } 123 }
124 124
125 void SetClientReportMalwareResponse(std::string response_data, 125 void SetClientReportMalwareResponse(std::string response_data,
126 net::HttpStatusCode response_code) { 126 net::HttpStatusCode response_code,
127 net::URLRequestStatus::Status status) {
127 factory_->SetFakeResponse( 128 factory_->SetFakeResponse(
128 ClientSideDetectionService::GetClientReportUrl( 129 ClientSideDetectionService::GetClientReportUrl(
129 ClientSideDetectionService::kClientReportMalwareUrl), 130 ClientSideDetectionService::kClientReportMalwareUrl),
130 response_data, 131 response_data, response_code, status);
131 response_code);
132 } 132 }
133 133
134 int GetNumReports(std::queue<base::Time>* report_times) { 134 int GetNumReports(std::queue<base::Time>* report_times) {
135 return csd_service_->GetNumReports(report_times); 135 return csd_service_->GetNumReports(report_times);
136 } 136 }
137 137
138 std::queue<base::Time>& GetPhishingReportTimes() { 138 std::queue<base::Time>& GetPhishingReportTimes() {
139 return csd_service_->phishing_report_times_; 139 return csd_service_->phishing_report_times_;
140 } 140 }
141 141
(...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after
253 253
254 TEST_F(ClientSideDetectionServiceTest, FetchModelTest) { 254 TEST_F(ClientSideDetectionServiceTest, FetchModelTest) {
255 // We don't want to use a real service class here because we can't call 255 // We don't want to use a real service class here because we can't call
256 // the real EndFetchModel. It would reschedule a reload which might 256 // the real EndFetchModel. It would reschedule a reload which might
257 // make the test flaky. 257 // make the test flaky.
258 MockClientSideDetectionService service; 258 MockClientSideDetectionService service;
259 EXPECT_CALL(service, ScheduleFetchModel(_)).Times(1); 259 EXPECT_CALL(service, ScheduleFetchModel(_)).Times(1);
260 service.SetEnabledAndRefreshState(true); 260 service.SetEnabledAndRefreshState(true);
261 261
262 // The model fetch failed. 262 // The model fetch failed.
263 SetModelFetchResponse("blamodel", net::HTTP_INTERNAL_SERVER_ERROR); 263 SetModelFetchResponse("blamodel", net::HTTP_INTERNAL_SERVER_ERROR,
264 net::URLRequestStatus::FAILED);
264 EXPECT_CALL(service, EndFetchModel( 265 EXPECT_CALL(service, EndFetchModel(
265 ClientSideDetectionService::MODEL_FETCH_FAILED)) 266 ClientSideDetectionService::MODEL_FETCH_FAILED))
266 .WillOnce(QuitCurrentMessageLoop()); 267 .WillOnce(QuitCurrentMessageLoop());
267 service.StartFetchModel(); 268 service.StartFetchModel();
268 msg_loop_.Run(); // EndFetchModel will quit the message loop. 269 msg_loop_.Run(); // EndFetchModel will quit the message loop.
269 Mock::VerifyAndClearExpectations(&service); 270 Mock::VerifyAndClearExpectations(&service);
270 271
271 // Empty model file. 272 // Empty model file.
272 SetModelFetchResponse(std::string(), net::HTTP_OK); 273 SetModelFetchResponse(std::string(), net::HTTP_OK,
274 net::URLRequestStatus::SUCCESS);
273 EXPECT_CALL(service, EndFetchModel(ClientSideDetectionService::MODEL_EMPTY)) 275 EXPECT_CALL(service, EndFetchModel(ClientSideDetectionService::MODEL_EMPTY))
274 .WillOnce(QuitCurrentMessageLoop()); 276 .WillOnce(QuitCurrentMessageLoop());
275 service.StartFetchModel(); 277 service.StartFetchModel();
276 msg_loop_.Run(); // EndFetchModel will quit the message loop. 278 msg_loop_.Run(); // EndFetchModel will quit the message loop.
277 Mock::VerifyAndClearExpectations(&service); 279 Mock::VerifyAndClearExpectations(&service);
278 280
279 // Model is too large. 281 // Model is too large.
280 SetModelFetchResponse( 282 SetModelFetchResponse(
281 std::string(ClientSideDetectionService::kMaxModelSizeBytes + 1, 'x'), 283 std::string(ClientSideDetectionService::kMaxModelSizeBytes + 1, 'x'),
282 net::HTTP_OK); 284 net::HTTP_OK, net::URLRequestStatus::SUCCESS);
283 EXPECT_CALL(service, EndFetchModel( 285 EXPECT_CALL(service, EndFetchModel(
284 ClientSideDetectionService::MODEL_TOO_LARGE)) 286 ClientSideDetectionService::MODEL_TOO_LARGE))
285 .WillOnce(QuitCurrentMessageLoop()); 287 .WillOnce(QuitCurrentMessageLoop());
286 service.StartFetchModel(); 288 service.StartFetchModel();
287 msg_loop_.Run(); // EndFetchModel will quit the message loop. 289 msg_loop_.Run(); // EndFetchModel will quit the message loop.
288 Mock::VerifyAndClearExpectations(&service); 290 Mock::VerifyAndClearExpectations(&service);
289 291
290 // Unable to parse the model file. 292 // Unable to parse the model file.
291 SetModelFetchResponse("Invalid model file", net::HTTP_OK); 293 SetModelFetchResponse("Invalid model file", net::HTTP_OK,
294 net::URLRequestStatus::SUCCESS);
292 EXPECT_CALL(service, EndFetchModel( 295 EXPECT_CALL(service, EndFetchModel(
293 ClientSideDetectionService::MODEL_PARSE_ERROR)) 296 ClientSideDetectionService::MODEL_PARSE_ERROR))
294 .WillOnce(QuitCurrentMessageLoop()); 297 .WillOnce(QuitCurrentMessageLoop());
295 service.StartFetchModel(); 298 service.StartFetchModel();
296 msg_loop_.Run(); // EndFetchModel will quit the message loop. 299 msg_loop_.Run(); // EndFetchModel will quit the message loop.
297 Mock::VerifyAndClearExpectations(&service); 300 Mock::VerifyAndClearExpectations(&service);
298 301
299 // Model that is missing some required fields (missing the version field). 302 // Model that is missing some required fields (missing the version field).
300 ClientSideModel model; 303 ClientSideModel model;
301 model.set_max_words_per_term(4); 304 model.set_max_words_per_term(4);
302 SetModelFetchResponse(model.SerializePartialAsString(), net::HTTP_OK); 305 SetModelFetchResponse(model.SerializePartialAsString(), net::HTTP_OK,
306 net::URLRequestStatus::SUCCESS);
303 EXPECT_CALL(service, EndFetchModel( 307 EXPECT_CALL(service, EndFetchModel(
304 ClientSideDetectionService::MODEL_MISSING_FIELDS)) 308 ClientSideDetectionService::MODEL_MISSING_FIELDS))
305 .WillOnce(QuitCurrentMessageLoop()); 309 .WillOnce(QuitCurrentMessageLoop());
306 service.StartFetchModel(); 310 service.StartFetchModel();
307 msg_loop_.Run(); // EndFetchModel will quit the message loop. 311 msg_loop_.Run(); // EndFetchModel will quit the message loop.
308 Mock::VerifyAndClearExpectations(&service); 312 Mock::VerifyAndClearExpectations(&service);
309 313
310 // Model that points to hashes that don't exist. 314 // Model that points to hashes that don't exist.
311 model.set_version(10); 315 model.set_version(10);
312 model.add_hashes("bla"); 316 model.add_hashes("bla");
313 model.add_page_term(1); // Should be 0 instead of 1. 317 model.add_page_term(1); // Should be 0 instead of 1.
314 SetModelFetchResponse(model.SerializePartialAsString(), net::HTTP_OK); 318 SetModelFetchResponse(model.SerializePartialAsString(), net::HTTP_OK,
319 net::URLRequestStatus::SUCCESS);
315 EXPECT_CALL(service, EndFetchModel( 320 EXPECT_CALL(service, EndFetchModel(
316 ClientSideDetectionService::MODEL_BAD_HASH_IDS)) 321 ClientSideDetectionService::MODEL_BAD_HASH_IDS))
317 .WillOnce(QuitCurrentMessageLoop()); 322 .WillOnce(QuitCurrentMessageLoop());
318 service.StartFetchModel(); 323 service.StartFetchModel();
319 msg_loop_.Run(); // EndFetchModel will quit the message loop. 324 msg_loop_.Run(); // EndFetchModel will quit the message loop.
320 Mock::VerifyAndClearExpectations(&service); 325 Mock::VerifyAndClearExpectations(&service);
321 model.set_page_term(0, 0); 326 model.set_page_term(0, 0);
322 327
323 // Model version number is wrong. 328 // Model version number is wrong.
324 model.set_version(-1); 329 model.set_version(-1);
325 SetModelFetchResponse(model.SerializeAsString(), net::HTTP_OK); 330 SetModelFetchResponse(model.SerializeAsString(), net::HTTP_OK,
331 net::URLRequestStatus::SUCCESS);
326 EXPECT_CALL(service, EndFetchModel( 332 EXPECT_CALL(service, EndFetchModel(
327 ClientSideDetectionService::MODEL_INVALID_VERSION_NUMBER)) 333 ClientSideDetectionService::MODEL_INVALID_VERSION_NUMBER))
328 .WillOnce(QuitCurrentMessageLoop()); 334 .WillOnce(QuitCurrentMessageLoop());
329 service.StartFetchModel(); 335 service.StartFetchModel();
330 msg_loop_.Run(); // EndFetchModel will quit the message loop. 336 msg_loop_.Run(); // EndFetchModel will quit the message loop.
331 Mock::VerifyAndClearExpectations(&service); 337 Mock::VerifyAndClearExpectations(&service);
332 338
333 // Normal model. 339 // Normal model.
334 model.set_version(10); 340 model.set_version(10);
335 SetModelFetchResponse(model.SerializeAsString(), net::HTTP_OK); 341 SetModelFetchResponse(model.SerializeAsString(), net::HTTP_OK,
342 net::URLRequestStatus::SUCCESS);
336 EXPECT_CALL(service, EndFetchModel( 343 EXPECT_CALL(service, EndFetchModel(
337 ClientSideDetectionService::MODEL_SUCCESS)) 344 ClientSideDetectionService::MODEL_SUCCESS))
338 .WillOnce(QuitCurrentMessageLoop()); 345 .WillOnce(QuitCurrentMessageLoop());
339 service.StartFetchModel(); 346 service.StartFetchModel();
340 msg_loop_.Run(); // EndFetchModel will quit the message loop. 347 msg_loop_.Run(); // EndFetchModel will quit the message loop.
341 Mock::VerifyAndClearExpectations(&service); 348 Mock::VerifyAndClearExpectations(&service);
342 349
343 // Model version number is decreasing. Set the model version number of the 350 // Model version number is decreasing. Set the model version number of the
344 // model that is currently loaded in the service object to 11. 351 // model that is currently loaded in the service object to 11.
345 service.model_.reset(new ClientSideModel(model)); 352 service.model_.reset(new ClientSideModel(model));
346 service.model_->set_version(11); 353 service.model_->set_version(11);
347 SetModelFetchResponse(model.SerializeAsString(), net::HTTP_OK); 354 SetModelFetchResponse(model.SerializeAsString(), net::HTTP_OK,
355 net::URLRequestStatus::SUCCESS);
348 EXPECT_CALL(service, EndFetchModel( 356 EXPECT_CALL(service, EndFetchModel(
349 ClientSideDetectionService::MODEL_INVALID_VERSION_NUMBER)) 357 ClientSideDetectionService::MODEL_INVALID_VERSION_NUMBER))
350 .WillOnce(QuitCurrentMessageLoop()); 358 .WillOnce(QuitCurrentMessageLoop());
351 service.StartFetchModel(); 359 service.StartFetchModel();
352 msg_loop_.Run(); // EndFetchModel will quit the message loop. 360 msg_loop_.Run(); // EndFetchModel will quit the message loop.
353 Mock::VerifyAndClearExpectations(&service); 361 Mock::VerifyAndClearExpectations(&service);
354 362
355 // Model version hasn't changed since the last reload. 363 // Model version hasn't changed since the last reload.
356 service.model_->set_version(10); 364 service.model_->set_version(10);
357 SetModelFetchResponse(model.SerializeAsString(), net::HTTP_OK); 365 SetModelFetchResponse(model.SerializeAsString(), net::HTTP_OK,
366 net::URLRequestStatus::SUCCESS);
358 EXPECT_CALL(service, EndFetchModel( 367 EXPECT_CALL(service, EndFetchModel(
359 ClientSideDetectionService::MODEL_NOT_CHANGED)) 368 ClientSideDetectionService::MODEL_NOT_CHANGED))
360 .WillOnce(QuitCurrentMessageLoop()); 369 .WillOnce(QuitCurrentMessageLoop());
361 service.StartFetchModel(); 370 service.StartFetchModel();
362 msg_loop_.Run(); // EndFetchModel will quit the message loop. 371 msg_loop_.Run(); // EndFetchModel will quit the message loop.
363 Mock::VerifyAndClearExpectations(&service); 372 Mock::VerifyAndClearExpectations(&service);
364 } 373 }
365 374
366 TEST_F(ClientSideDetectionServiceTest, ServiceObjectDeletedBeforeCallbackDone) { 375 TEST_F(ClientSideDetectionServiceTest, ServiceObjectDeletedBeforeCallbackDone) {
367 SetModelFetchResponse("bogus model", net::HTTP_OK); 376 SetModelFetchResponse("bogus model", net::HTTP_OK,
377 net::URLRequestStatus::SUCCESS);
368 csd_service_.reset(ClientSideDetectionService::Create(NULL)); 378 csd_service_.reset(ClientSideDetectionService::Create(NULL));
369 csd_service_->SetEnabledAndRefreshState(true); 379 csd_service_->SetEnabledAndRefreshState(true);
370 EXPECT_TRUE(csd_service_.get() != NULL); 380 EXPECT_TRUE(csd_service_.get() != NULL);
371 // We delete the client-side detection service class even though the callbacks 381 // We delete the client-side detection service class even though the callbacks
372 // haven't run yet. 382 // haven't run yet.
373 csd_service_.reset(); 383 csd_service_.reset();
374 // Waiting for the callbacks to run should not crash even if the service 384 // Waiting for the callbacks to run should not crash even if the service
375 // object is gone. 385 // object is gone.
376 msg_loop_.RunUntilIdle(); 386 msg_loop_.RunUntilIdle();
377 } 387 }
378 388
379 TEST_F(ClientSideDetectionServiceTest, SendClientReportPhishingRequest) { 389 TEST_F(ClientSideDetectionServiceTest, SendClientReportPhishingRequest) {
380 SetModelFetchResponse("bogus model", net::HTTP_OK); 390 SetModelFetchResponse("bogus model", net::HTTP_OK,
391 net::URLRequestStatus::SUCCESS);
381 csd_service_.reset(ClientSideDetectionService::Create(NULL)); 392 csd_service_.reset(ClientSideDetectionService::Create(NULL));
382 csd_service_->SetEnabledAndRefreshState(true); 393 csd_service_->SetEnabledAndRefreshState(true);
383 394
384 GURL url("http://a.com/"); 395 GURL url("http://a.com/");
385 float score = 0.4f; // Some random client score. 396 float score = 0.4f; // Some random client score.
386 397
387 base::Time before = base::Time::Now(); 398 base::Time before = base::Time::Now();
388 399
389 // Invalid response body from the server. 400 // Invalid response body from the server.
390 SetClientReportPhishingResponse("invalid proto response", net::HTTP_OK); 401 SetClientReportPhishingResponse("invalid proto response", net::HTTP_OK,
402 net::URLRequestStatus::SUCCESS);
391 EXPECT_FALSE(SendClientReportPhishingRequest(url, score)); 403 EXPECT_FALSE(SendClientReportPhishingRequest(url, score));
392 404
393 // Normal behavior. 405 // Normal behavior.
394 ClientPhishingResponse response; 406 ClientPhishingResponse response;
395 response.set_phishy(true); 407 response.set_phishy(true);
396 SetClientReportPhishingResponse(response.SerializeAsString(), 408 SetClientReportPhishingResponse(response.SerializeAsString(), net::HTTP_OK,
397 net::HTTP_OK); 409 net::URLRequestStatus::SUCCESS);
398 EXPECT_TRUE(SendClientReportPhishingRequest(url, score)); 410 EXPECT_TRUE(SendClientReportPhishingRequest(url, score));
399 411
400 // This request will fail 412 // This request will fail
401 GURL second_url("http://b.com/"); 413 GURL second_url("http://b.com/");
402 response.set_phishy(false); 414 response.set_phishy(false);
403 SetClientReportPhishingResponse(response.SerializeAsString(), 415 SetClientReportPhishingResponse(response.SerializeAsString(),
404 net::HTTP_INTERNAL_SERVER_ERROR); 416 net::HTTP_INTERNAL_SERVER_ERROR,
417 net::URLRequestStatus::FAILED);
405 EXPECT_FALSE(SendClientReportPhishingRequest(second_url, score)); 418 EXPECT_FALSE(SendClientReportPhishingRequest(second_url, score));
406 419
407 base::Time after = base::Time::Now(); 420 base::Time after = base::Time::Now();
408 421
409 // Check that we have recorded all 3 requests within the correct time range. 422 // Check that we have recorded all 3 requests within the correct time range.
410 std::queue<base::Time>& report_times = GetPhishingReportTimes(); 423 std::queue<base::Time>& report_times = GetPhishingReportTimes();
411 EXPECT_EQ(3U, report_times.size()); 424 EXPECT_EQ(3U, report_times.size());
412 while (!report_times.empty()) { 425 while (!report_times.empty()) {
413 base::Time time = report_times.back(); 426 base::Time time = report_times.back();
414 report_times.pop(); 427 report_times.pop();
415 EXPECT_LE(before, time); 428 EXPECT_LE(before, time);
416 EXPECT_GE(after, time); 429 EXPECT_GE(after, time);
417 } 430 }
418 431
419 // Only the first url should be in the cache. 432 // Only the first url should be in the cache.
420 bool is_phishing; 433 bool is_phishing;
421 EXPECT_TRUE(csd_service_->IsInCache(url)); 434 EXPECT_TRUE(csd_service_->IsInCache(url));
422 EXPECT_TRUE(csd_service_->GetValidCachedResult(url, &is_phishing)); 435 EXPECT_TRUE(csd_service_->GetValidCachedResult(url, &is_phishing));
423 EXPECT_TRUE(is_phishing); 436 EXPECT_TRUE(is_phishing);
424 EXPECT_FALSE(csd_service_->IsInCache(second_url)); 437 EXPECT_FALSE(csd_service_->IsInCache(second_url));
425 } 438 }
426 439
427 TEST_F(ClientSideDetectionServiceTest, SendClientReportMalwareRequest) { 440 TEST_F(ClientSideDetectionServiceTest, SendClientReportMalwareRequest) {
428 SetModelFetchResponse("bogus model", net::HTTP_OK); 441 SetModelFetchResponse("bogus model", net::HTTP_OK,
442 net::URLRequestStatus::SUCCESS);
429 csd_service_.reset(ClientSideDetectionService::Create(NULL)); 443 csd_service_.reset(ClientSideDetectionService::Create(NULL));
430 csd_service_->SetEnabledAndRefreshState(true); 444 csd_service_->SetEnabledAndRefreshState(true);
431 GURL url("http://a.com/"); 445 GURL url("http://a.com/");
432 446
433 base::Time before = base::Time::Now(); 447 base::Time before = base::Time::Now();
434 // Invalid response body from the server. 448 // Invalid response body from the server.
435 SetClientReportMalwareResponse("invalid proto response", net::HTTP_OK); 449 SetClientReportMalwareResponse("invalid proto response", net::HTTP_OK,
450 net::URLRequestStatus::SUCCESS);
436 EXPECT_FALSE(SendClientReportMalwareRequest(url)); 451 EXPECT_FALSE(SendClientReportMalwareRequest(url));
437 452
438 // Missing bad_url. 453 // Missing bad_url.
439 ClientMalwareResponse response; 454 ClientMalwareResponse response;
440 response.set_blacklist(true); 455 response.set_blacklist(true);
441 SetClientReportMalwareResponse(response.SerializeAsString(), net::HTTP_OK); 456 SetClientReportMalwareResponse(response.SerializeAsString(), net::HTTP_OK,
457 net::URLRequestStatus::SUCCESS);
442 EXPECT_FALSE(SendClientReportMalwareRequest(url)); 458 EXPECT_FALSE(SendClientReportMalwareRequest(url));
443 459
444 // Normal behavior. 460 // Normal behavior.
445 response.set_blacklist(true); 461 response.set_blacklist(true);
446 response.set_bad_url("http://response-bad.com/"); 462 response.set_bad_url("http://response-bad.com/");
447 SetClientReportMalwareResponse(response.SerializeAsString(), net::HTTP_OK); 463 SetClientReportMalwareResponse(response.SerializeAsString(), net::HTTP_OK,
464 net::URLRequestStatus::SUCCESS);
448 EXPECT_TRUE(SendClientReportMalwareRequest(url)); 465 EXPECT_TRUE(SendClientReportMalwareRequest(url));
449 CheckConfirmedMalwareUrl(GURL("http://response-bad.com/")); 466 CheckConfirmedMalwareUrl(GURL("http://response-bad.com/"));
450 467
451 // This request will fail 468 // This request will fail
452 response.set_blacklist(false); 469 response.set_blacklist(false);
453 SetClientReportMalwareResponse(response.SerializeAsString(), 470 SetClientReportMalwareResponse(response.SerializeAsString(),
454 net::HTTP_INTERNAL_SERVER_ERROR); 471 net::HTTP_INTERNAL_SERVER_ERROR,
472 net::URLRequestStatus::FAILED);
455 EXPECT_FALSE(SendClientReportMalwareRequest(url)); 473 EXPECT_FALSE(SendClientReportMalwareRequest(url));
456 474
457 // server blacklist decision is false, and response is succesful 475 // server blacklist decision is false, and response is succesful
458 response.set_blacklist(false); 476 response.set_blacklist(false);
459 SetClientReportMalwareResponse(response.SerializeAsString(), net::HTTP_OK); 477 SetClientReportMalwareResponse(response.SerializeAsString(), net::HTTP_OK,
478 net::URLRequestStatus::SUCCESS);
460 EXPECT_FALSE(SendClientReportMalwareRequest(url)); 479 EXPECT_FALSE(SendClientReportMalwareRequest(url));
461 480
462 // Check that we have recorded all 4 requests within the correct time range. 481 // Check that we have recorded all 4 requests within the correct time range.
463 base::Time after = base::Time::Now(); 482 base::Time after = base::Time::Now();
464 std::queue<base::Time>& report_times = GetMalwareReportTimes(); 483 std::queue<base::Time>& report_times = GetMalwareReportTimes();
465 EXPECT_EQ(4U, report_times.size()); 484 EXPECT_EQ(4U, report_times.size());
466 485
467 // Another normal behavior will fail because of the limit is hit 486 // Another normal behavior will fail because of the limit is hit
468 response.set_blacklist(true); 487 response.set_blacklist(true);
469 SetClientReportMalwareResponse(response.SerializeAsString(), net::HTTP_OK); 488 SetClientReportMalwareResponse(response.SerializeAsString(), net::HTTP_OK,
489 net::URLRequestStatus::SUCCESS);
470 EXPECT_FALSE(SendClientReportMalwareRequest(url)); 490 EXPECT_FALSE(SendClientReportMalwareRequest(url));
471 491
472 report_times = GetMalwareReportTimes(); 492 report_times = GetMalwareReportTimes();
473 EXPECT_EQ(4U, report_times.size()); 493 EXPECT_EQ(4U, report_times.size());
474 while (!report_times.empty()) { 494 while (!report_times.empty()) {
475 base::Time time = report_times.back(); 495 base::Time time = report_times.back();
476 report_times.pop(); 496 report_times.pop();
477 EXPECT_LE(before, time); 497 EXPECT_LE(before, time);
478 EXPECT_GE(after, time); 498 EXPECT_GE(after, time);
479 } 499 }
480 } 500 }
481 501
482 TEST_F(ClientSideDetectionServiceTest, GetNumReportTest) { 502 TEST_F(ClientSideDetectionServiceTest, GetNumReportTest) {
483 SetModelFetchResponse("bogus model", net::HTTP_OK); 503 SetModelFetchResponse("bogus model", net::HTTP_OK,
504 net::URLRequestStatus::SUCCESS);
484 csd_service_.reset(ClientSideDetectionService::Create(NULL)); 505 csd_service_.reset(ClientSideDetectionService::Create(NULL));
485 506
486 std::queue<base::Time>& report_times = GetPhishingReportTimes(); 507 std::queue<base::Time>& report_times = GetPhishingReportTimes();
487 base::Time now = base::Time::Now(); 508 base::Time now = base::Time::Now();
488 base::TimeDelta twenty_five_hours = base::TimeDelta::FromHours(25); 509 base::TimeDelta twenty_five_hours = base::TimeDelta::FromHours(25);
489 report_times.push(now - twenty_five_hours); 510 report_times.push(now - twenty_five_hours);
490 report_times.push(now - twenty_five_hours); 511 report_times.push(now - twenty_five_hours);
491 report_times.push(now); 512 report_times.push(now);
492 report_times.push(now); 513 report_times.push(now);
493 514
494 EXPECT_EQ(2, GetNumReports(&report_times)); 515 EXPECT_EQ(2, GetNumReports(&report_times));
495 } 516 }
496 517
497 TEST_F(ClientSideDetectionServiceTest, CacheTest) { 518 TEST_F(ClientSideDetectionServiceTest, CacheTest) {
498 SetModelFetchResponse("bogus model", net::HTTP_OK); 519 SetModelFetchResponse("bogus model", net::HTTP_OK,
520 net::URLRequestStatus::SUCCESS);
499 csd_service_.reset(ClientSideDetectionService::Create(NULL)); 521 csd_service_.reset(ClientSideDetectionService::Create(NULL));
500 522
501 TestCache(); 523 TestCache();
502 } 524 }
503 525
504 TEST_F(ClientSideDetectionServiceTest, IsPrivateIPAddress) { 526 TEST_F(ClientSideDetectionServiceTest, IsPrivateIPAddress) {
505 SetModelFetchResponse("bogus model", net::HTTP_OK); 527 SetModelFetchResponse("bogus model", net::HTTP_OK,
528 net::URLRequestStatus::SUCCESS);
506 csd_service_.reset(ClientSideDetectionService::Create(NULL)); 529 csd_service_.reset(ClientSideDetectionService::Create(NULL));
507 530
508 EXPECT_TRUE(csd_service_->IsPrivateIPAddress("10.1.2.3")); 531 EXPECT_TRUE(csd_service_->IsPrivateIPAddress("10.1.2.3"));
509 EXPECT_TRUE(csd_service_->IsPrivateIPAddress("127.0.0.1")); 532 EXPECT_TRUE(csd_service_->IsPrivateIPAddress("127.0.0.1"));
510 EXPECT_TRUE(csd_service_->IsPrivateIPAddress("172.24.3.4")); 533 EXPECT_TRUE(csd_service_->IsPrivateIPAddress("172.24.3.4"));
511 EXPECT_TRUE(csd_service_->IsPrivateIPAddress("192.168.1.1")); 534 EXPECT_TRUE(csd_service_->IsPrivateIPAddress("192.168.1.1"));
512 EXPECT_TRUE(csd_service_->IsPrivateIPAddress("fc00::")); 535 EXPECT_TRUE(csd_service_->IsPrivateIPAddress("fc00::"));
513 EXPECT_TRUE(csd_service_->IsPrivateIPAddress("fec0::")); 536 EXPECT_TRUE(csd_service_->IsPrivateIPAddress("fec0::"));
514 EXPECT_TRUE(csd_service_->IsPrivateIPAddress("fec0:1:2::3")); 537 EXPECT_TRUE(csd_service_->IsPrivateIPAddress("fec0:1:2::3"));
515 EXPECT_TRUE(csd_service_->IsPrivateIPAddress("::1")); 538 EXPECT_TRUE(csd_service_->IsPrivateIPAddress("::1"));
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
626 new StrictMock<MockClientSideDetectionService>(); 649 new StrictMock<MockClientSideDetectionService>();
627 csd_service_.reset(service); 650 csd_service_.reset(service);
628 EXPECT_FALSE(csd_service_->enabled()); 651 EXPECT_FALSE(csd_service_->enabled());
629 EXPECT_TRUE(csd_service_->model_fetcher_.get() == NULL); 652 EXPECT_TRUE(csd_service_->model_fetcher_.get() == NULL);
630 // No calls expected yet. 653 // No calls expected yet.
631 Mock::VerifyAndClearExpectations(service); 654 Mock::VerifyAndClearExpectations(service);
632 655
633 ClientSideModel model; 656 ClientSideModel model;
634 model.set_version(10); 657 model.set_version(10);
635 model.set_max_words_per_term(4); 658 model.set_max_words_per_term(4);
636 SetModelFetchResponse(model.SerializeAsString(), net::HTTP_OK); 659 SetModelFetchResponse(model.SerializeAsString(), net::HTTP_OK,
660 net::URLRequestStatus::SUCCESS);
637 EXPECT_CALL(*service, ScheduleFetchModel(_)) 661 EXPECT_CALL(*service, ScheduleFetchModel(_))
638 .WillOnce(Invoke(service, &MockClientSideDetectionService::Schedule)); 662 .WillOnce(Invoke(service, &MockClientSideDetectionService::Schedule));
639 EXPECT_CALL(*service, EndFetchModel( 663 EXPECT_CALL(*service, EndFetchModel(
640 ClientSideDetectionService::MODEL_SUCCESS)) 664 ClientSideDetectionService::MODEL_SUCCESS))
641 .WillOnce(QuitCurrentMessageLoop()); 665 .WillOnce(QuitCurrentMessageLoop());
642 csd_service_->SetEnabledAndRefreshState(true); 666 csd_service_->SetEnabledAndRefreshState(true);
643 EXPECT_TRUE(csd_service_->model_fetcher_.get() != NULL); 667 EXPECT_TRUE(csd_service_->model_fetcher_.get() != NULL);
644 msg_loop_.Run(); // EndFetchModel will quit the message loop. 668 msg_loop_.Run(); // EndFetchModel will quit the message loop.
645 Mock::VerifyAndClearExpectations(service); 669 Mock::VerifyAndClearExpectations(service);
646 670
(...skipping 11 matching lines...) Expand all
658 EXPECT_TRUE(csd_service_->model_fetcher_.get() != NULL); 682 EXPECT_TRUE(csd_service_->model_fetcher_.get() != NULL);
659 csd_service_->SetEnabledAndRefreshState(false); 683 csd_service_->SetEnabledAndRefreshState(false);
660 EXPECT_TRUE(csd_service_->model_fetcher_.get() == NULL); 684 EXPECT_TRUE(csd_service_->model_fetcher_.get() == NULL);
661 msg_loop_.RunUntilIdle(); 685 msg_loop_.RunUntilIdle();
662 // No calls expected. 686 // No calls expected.
663 Mock::VerifyAndClearExpectations(service); 687 Mock::VerifyAndClearExpectations(service);
664 688
665 // Requests always return false when the service is disabled. 689 // Requests always return false when the service is disabled.
666 ClientPhishingResponse response; 690 ClientPhishingResponse response;
667 response.set_phishy(true); 691 response.set_phishy(true);
668 SetClientReportPhishingResponse(response.SerializeAsString(), 692 SetClientReportPhishingResponse(response.SerializeAsString(), net::HTTP_OK,
669 net::HTTP_OK); 693 net::URLRequestStatus::SUCCESS);
670 EXPECT_FALSE(SendClientReportPhishingRequest(GURL("http://a.com/"), 0.4f)); 694 EXPECT_FALSE(SendClientReportPhishingRequest(GURL("http://a.com/"), 0.4f));
671 695
672 // Pending requests also return false if the service is disabled before they 696 // Pending requests also return false if the service is disabled before they
673 // report back. 697 // report back.
674 EXPECT_CALL(*service, ScheduleFetchModel(_)) 698 EXPECT_CALL(*service, ScheduleFetchModel(_))
675 .WillOnce(Invoke(service, &MockClientSideDetectionService::Schedule)); 699 .WillOnce(Invoke(service, &MockClientSideDetectionService::Schedule));
676 EXPECT_CALL(*service, EndFetchModel( 700 EXPECT_CALL(*service, EndFetchModel(
677 ClientSideDetectionService::MODEL_NOT_CHANGED)) 701 ClientSideDetectionService::MODEL_NOT_CHANGED))
678 .WillOnce(Invoke(service, &MockClientSideDetectionService::Disable)); 702 .WillOnce(Invoke(service, &MockClientSideDetectionService::Disable));
679 csd_service_->SetEnabledAndRefreshState(true); 703 csd_service_->SetEnabledAndRefreshState(true);
680 EXPECT_FALSE(SendClientReportPhishingRequest(GURL("http://a.com/"), 0.4f)); 704 EXPECT_FALSE(SendClientReportPhishingRequest(GURL("http://a.com/"), 0.4f));
681 Mock::VerifyAndClearExpectations(service); 705 Mock::VerifyAndClearExpectations(service);
682 } 706 }
683 } // namespace safe_browsing 707 } // namespace safe_browsing
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698