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

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

Issue 835523002: Add support for goog-csdinclusionwhite-sha256 in SafeBrowsingDatabase. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@##python_fix
Patch Set: fix typo Created 5 years, 11 months 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 (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 // Unit tests for the SafeBrowsing storage system. 5 // Unit tests for the SafeBrowsing storage system.
6 6
7 #include "chrome/browser/safe_browsing/safe_browsing_database.h" 7 #include "chrome/browser/safe_browsing/safe_browsing_database.h"
8 8
9 #include "base/files/file_util.h" 9 #include "base/files/file_util.h"
10 #include "base/files/scoped_temp_dir.h" 10 #include "base/files/scoped_temp_dir.h"
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after
271 } 271 }
272 272
273 // Reloads the |database_| in a new SafeBrowsingDatabaseNew object with all 273 // Reloads the |database_| in a new SafeBrowsingDatabaseNew object with all
274 // stores enabled. 274 // stores enabled.
275 void ResetAndReloadFullDatabase() { 275 void ResetAndReloadFullDatabase() {
276 SafeBrowsingStoreFile* browse_store = new SafeBrowsingStoreFile(); 276 SafeBrowsingStoreFile* browse_store = new SafeBrowsingStoreFile();
277 SafeBrowsingStoreFile* download_store = new SafeBrowsingStoreFile(); 277 SafeBrowsingStoreFile* download_store = new SafeBrowsingStoreFile();
278 SafeBrowsingStoreFile* csd_whitelist_store = new SafeBrowsingStoreFile(); 278 SafeBrowsingStoreFile* csd_whitelist_store = new SafeBrowsingStoreFile();
279 SafeBrowsingStoreFile* download_whitelist_store = 279 SafeBrowsingStoreFile* download_whitelist_store =
280 new SafeBrowsingStoreFile(); 280 new SafeBrowsingStoreFile();
281 SafeBrowsingStoreFile* inclusion_whitelist_store =
282 new SafeBrowsingStoreFile();
281 SafeBrowsingStoreFile* extension_blacklist_store = 283 SafeBrowsingStoreFile* extension_blacklist_store =
282 new SafeBrowsingStoreFile(); 284 new SafeBrowsingStoreFile();
283 SafeBrowsingStoreFile* side_effect_free_whitelist_store = 285 SafeBrowsingStoreFile* side_effect_free_whitelist_store =
284 new SafeBrowsingStoreFile(); 286 new SafeBrowsingStoreFile();
285 SafeBrowsingStoreFile* ip_blacklist_store = new SafeBrowsingStoreFile(); 287 SafeBrowsingStoreFile* ip_blacklist_store = new SafeBrowsingStoreFile();
286 SafeBrowsingStoreFile* unwanted_software_store = 288 SafeBrowsingStoreFile* unwanted_software_store =
287 new SafeBrowsingStoreFile(); 289 new SafeBrowsingStoreFile();
288 database_.reset( 290 database_.reset(
289 new SafeBrowsingDatabaseNew(browse_store, 291 new SafeBrowsingDatabaseNew(browse_store,
290 download_store, 292 download_store,
291 csd_whitelist_store, 293 csd_whitelist_store,
292 download_whitelist_store, 294 download_whitelist_store,
295 inclusion_whitelist_store,
293 extension_blacklist_store, 296 extension_blacklist_store,
294 side_effect_free_whitelist_store, 297 side_effect_free_whitelist_store,
295 ip_blacklist_store, 298 ip_blacklist_store,
296 unwanted_software_store)); 299 unwanted_software_store));
297 database_->Init(database_filename_); 300 database_->Init(database_filename_);
298 } 301 }
299 302
300 void GetListsInfo(std::vector<SBListChunkRanges>* lists) { 303 void GetListsInfo(std::vector<SBListChunkRanges>* lists) {
301 lists->clear(); 304 lists->clear();
302 ASSERT_TRUE(database_->UpdateStarted(lists)); 305 ASSERT_TRUE(database_->UpdateStarted(lists));
(...skipping 23 matching lines...) Expand all
326 329
327 // Utility function for setting up the database for the caching test. 330 // Utility function for setting up the database for the caching test.
328 void PopulateDatabaseForCacheTest(); 331 void PopulateDatabaseForCacheTest();
329 332
330 scoped_ptr<SafeBrowsingDatabaseNew> database_; 333 scoped_ptr<SafeBrowsingDatabaseNew> database_;
331 base::FilePath database_filename_; 334 base::FilePath database_filename_;
332 base::ScopedTempDir temp_dir_; 335 base::ScopedTempDir temp_dir_;
333 }; 336 };
334 337
335 // Tests retrieving list name information. 338 // Tests retrieving list name information.
336 TEST_F(SafeBrowsingDatabaseTest, ListNameForBrowse) { 339 TEST_F(SafeBrowsingDatabaseTest, BrowseListsInfo) {
337 std::vector<SBListChunkRanges> lists; 340 std::vector<SBListChunkRanges> lists;
338 ScopedVector<SBChunkData> chunks; 341 ScopedVector<SBChunkData> chunks;
339 342
340 chunks.push_back(AddChunkPrefixValue(1, "www.evil.com/malware.html")); 343 chunks.push_back(AddChunkPrefixValue(1, "www.evil.com/malware.html"));
341 chunks.push_back(AddChunkPrefixValue(2, "www.foo.com/malware.html")); 344 chunks.push_back(AddChunkPrefixValue(2, "www.foo.com/malware.html"));
342 chunks.push_back(AddChunkPrefixValue(3, "www.whatever.com/malware.html")); 345 chunks.push_back(AddChunkPrefixValue(3, "www.whatever.com/malware.html"));
343 346
344 ASSERT_TRUE(database_->UpdateStarted(&lists)); 347 ASSERT_TRUE(database_->UpdateStarted(&lists));
345 database_->InsertChunks(safe_browsing_util::kMalwareList, chunks.get()); 348 database_->InsertChunks(safe_browsing_util::kMalwareList, chunks.get());
346 database_->UpdateFinished(true); 349 database_->UpdateFinished(true);
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
388 GetListsInfo(&lists); 391 GetListsInfo(&lists);
389 ASSERT_LE(2U, lists.size()); 392 ASSERT_LE(2U, lists.size());
390 EXPECT_EQ(safe_browsing_util::kMalwareList, lists[0].name); 393 EXPECT_EQ(safe_browsing_util::kMalwareList, lists[0].name);
391 EXPECT_EQ("1-3", lists[0].adds); 394 EXPECT_EQ("1-3", lists[0].adds);
392 EXPECT_EQ("7", lists[0].subs); 395 EXPECT_EQ("7", lists[0].subs);
393 EXPECT_EQ(safe_browsing_util::kPhishingList, lists[1].name); 396 EXPECT_EQ(safe_browsing_util::kPhishingList, lists[1].name);
394 EXPECT_EQ("47", lists[1].adds); 397 EXPECT_EQ("47", lists[1].adds);
395 EXPECT_EQ("200-201", lists[1].subs); 398 EXPECT_EQ("200-201", lists[1].subs);
396 } 399 }
397 400
398 TEST_F(SafeBrowsingDatabaseTest, ListNameForBrowseAndDownload) { 401 TEST_F(SafeBrowsingDatabaseTest, ListNames) {
399 ScopedVector<SBChunkData> chunks; 402 ScopedVector<SBChunkData> chunks;
400 403
401 std::vector<SBListChunkRanges> lists; 404 std::vector<SBListChunkRanges> lists;
402 ASSERT_TRUE(database_->UpdateStarted(&lists)); 405 ASSERT_TRUE(database_->UpdateStarted(&lists));
403 406
404 // Insert malware, phish, binurl and bindownload add chunks. 407 // Insert malware, phish, binurl and bindownload add chunks.
405 chunks.push_back(AddChunkPrefixValue(1, "www.evil.com/malware.html")); 408 chunks.push_back(AddChunkPrefixValue(1, "www.evil.com/malware.html"));
406 database_->InsertChunks(safe_browsing_util::kMalwareList, chunks.get()); 409 database_->InsertChunks(safe_browsing_util::kMalwareList, chunks.get());
407 410
408 chunks.clear(); 411 chunks.clear();
409 chunks.push_back(AddChunkPrefixValue(2, "www.foo.com/malware.html")); 412 chunks.push_back(AddChunkPrefixValue(2, "www.foo.com/malware.html"));
410 database_->InsertChunks(safe_browsing_util::kPhishingList, chunks.get()); 413 database_->InsertChunks(safe_browsing_util::kPhishingList, chunks.get());
411 414
412 chunks.clear(); 415 chunks.clear();
413 chunks.push_back(AddChunkPrefixValue(3, "www.whatever.com/download.html")); 416 chunks.push_back(AddChunkPrefixValue(3, "www.whatever.com/download.html"));
414 database_->InsertChunks(safe_browsing_util::kBinUrlList, chunks.get()); 417 database_->InsertChunks(safe_browsing_util::kBinUrlList, chunks.get());
415 418
416 chunks.clear(); 419 chunks.clear();
417 chunks.push_back(AddChunkFullHashValue(5, "www.forwhitelist.com/a.html")); 420 chunks.push_back(AddChunkFullHashValue(5, "www.forwhitelist.com/a.html"));
418 database_->InsertChunks(safe_browsing_util::kCsdWhiteList, chunks.get()); 421 database_->InsertChunks(safe_browsing_util::kCsdWhiteList, chunks.get());
419 422
420 chunks.clear(); 423 chunks.clear();
421 chunks.push_back(AddChunkFullHashValue(6, "www.download.com/")); 424 chunks.push_back(AddChunkFullHashValue(6, "www.download.com/"));
422 database_->InsertChunks(safe_browsing_util::kDownloadWhiteList, chunks.get()); 425 database_->InsertChunks(safe_browsing_util::kDownloadWhiteList, chunks.get());
423 426
424 chunks.clear(); 427 chunks.clear();
428 chunks.push_back(AddChunkFullHashValue(7, "www.inclusion.com/"));
429 database_->InsertChunks(safe_browsing_util::kInclusionWhitelist,
430 chunks.get());
431
432 chunks.clear();
425 chunks.push_back(AddChunkFullHashValue(8, 433 chunks.push_back(AddChunkFullHashValue(8,
426 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" 434 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
427 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa")); 435 "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"));
428 database_->InsertChunks(safe_browsing_util::kExtensionBlacklist, 436 database_->InsertChunks(safe_browsing_util::kExtensionBlacklist,
429 chunks.get()); 437 chunks.get());
430 438
431 chunks.clear(); 439 chunks.clear();
432 chunks.push_back(AddChunkHashedIpValue(9, "::ffff:192.168.1.0", 120)); 440 chunks.push_back(AddChunkFullHashValue(9, "www.sideeffectfree.com"));
441 database_->InsertChunks(safe_browsing_util::kSideEffectFreeWhitelist,
442 chunks.get());
443
444 chunks.clear();
445 chunks.push_back(AddChunkHashedIpValue(10, "::ffff:192.168.1.0", 120));
433 database_->InsertChunks(safe_browsing_util::kIPBlacklist, chunks.get()); 446 database_->InsertChunks(safe_browsing_util::kIPBlacklist, chunks.get());
434 447
435 chunks.clear(); 448 chunks.clear();
436 chunks.push_back(AddChunkPrefixValue(10, "www.unwanted.com/software.html")); 449 chunks.push_back(AddChunkPrefixValue(11, "www.unwanted.com/software.html"));
437 database_->InsertChunks(safe_browsing_util::kUnwantedUrlList, chunks.get()); 450 database_->InsertChunks(safe_browsing_util::kUnwantedUrlList, chunks.get());
438 451
439 database_->UpdateFinished(true); 452 database_->UpdateFinished(true);
440 453
441 GetListsInfo(&lists); 454 GetListsInfo(&lists);
442 ASSERT_EQ(9U, lists.size()); 455 ASSERT_EQ(10U, lists.size());
443 EXPECT_EQ(safe_browsing_util::kMalwareList, lists[0].name); 456 EXPECT_EQ(safe_browsing_util::kMalwareList, lists[0].name);
444 EXPECT_EQ("1", lists[0].adds); 457 EXPECT_EQ("1", lists[0].adds);
445 EXPECT_TRUE(lists[0].subs.empty()); 458 EXPECT_TRUE(lists[0].subs.empty());
446 EXPECT_EQ(safe_browsing_util::kPhishingList, lists[1].name); 459 EXPECT_EQ(safe_browsing_util::kPhishingList, lists[1].name);
447 EXPECT_EQ("2", lists[1].adds); 460 EXPECT_EQ("2", lists[1].adds);
448 EXPECT_TRUE(lists[1].subs.empty()); 461 EXPECT_TRUE(lists[1].subs.empty());
449 EXPECT_EQ(safe_browsing_util::kBinUrlList, lists[2].name); 462 EXPECT_EQ(safe_browsing_util::kBinUrlList, lists[2].name);
450 EXPECT_EQ("3", lists[2].adds); 463 EXPECT_EQ("3", lists[2].adds);
451 EXPECT_TRUE(lists[2].subs.empty()); 464 EXPECT_TRUE(lists[2].subs.empty());
452 EXPECT_EQ(safe_browsing_util::kCsdWhiteList, lists[3].name); 465 EXPECT_EQ(safe_browsing_util::kCsdWhiteList, lists[3].name);
453 EXPECT_EQ("5", lists[3].adds); 466 EXPECT_EQ("5", lists[3].adds);
454 EXPECT_TRUE(lists[3].subs.empty()); 467 EXPECT_TRUE(lists[3].subs.empty());
455 EXPECT_EQ(safe_browsing_util::kDownloadWhiteList, lists[4].name); 468 EXPECT_EQ(safe_browsing_util::kDownloadWhiteList, lists[4].name);
456 EXPECT_EQ("6", lists[4].adds); 469 EXPECT_EQ("6", lists[4].adds);
457 EXPECT_TRUE(lists[4].subs.empty()); 470 EXPECT_TRUE(lists[4].subs.empty());
458 EXPECT_EQ(safe_browsing_util::kExtensionBlacklist, lists[5].name); 471 EXPECT_EQ(safe_browsing_util::kInclusionWhitelist, lists[5].name);
459 EXPECT_EQ("8", lists[5].adds); 472 EXPECT_EQ("7", lists[5].adds);
460 EXPECT_TRUE(lists[5].subs.empty()); 473 EXPECT_TRUE(lists[5].subs.empty());
461 EXPECT_EQ(safe_browsing_util::kIPBlacklist, lists[7].name); 474 EXPECT_EQ(safe_browsing_util::kExtensionBlacklist, lists[6].name);
475 EXPECT_EQ("8", lists[6].adds);
476 EXPECT_TRUE(lists[6].subs.empty());
477 EXPECT_EQ(safe_browsing_util::kSideEffectFreeWhitelist, lists[7].name);
462 EXPECT_EQ("9", lists[7].adds); 478 EXPECT_EQ("9", lists[7].adds);
463 EXPECT_TRUE(lists[7].subs.empty()); 479 EXPECT_TRUE(lists[7].subs.empty());
464 EXPECT_EQ(safe_browsing_util::kUnwantedUrlList, lists[8].name); 480 EXPECT_EQ(safe_browsing_util::kIPBlacklist, lists[8].name);
465 EXPECT_EQ("10", lists[8].adds); 481 EXPECT_EQ("10", lists[8].adds);
466 EXPECT_TRUE(lists[8].subs.empty()); 482 EXPECT_TRUE(lists[8].subs.empty());
483 EXPECT_EQ(safe_browsing_util::kUnwantedUrlList, lists[9].name);
484 EXPECT_EQ("11", lists[9].adds);
485 EXPECT_TRUE(lists[9].subs.empty());
467 486
468 database_.reset(); 487 database_.reset();
469 } 488 }
470 489
471 // Checks database reading and writing for browse and unwanted PrefixSets. 490 // Checks database reading and writing for browse and unwanted PrefixSets.
472 TEST_F(SafeBrowsingDatabaseTest, BrowseAndUnwantedDatabasesAndPrefixSets) { 491 TEST_F(SafeBrowsingDatabaseTest, BrowseAndUnwantedDatabasesAndPrefixSets) {
473 struct TestCase { 492 struct TestCase {
474 using TestListContainsBadUrl = bool (SafeBrowsingDatabase::*)( 493 using TestListContainsBadUrl = bool (SafeBrowsingDatabase::*)(
475 const GURL& url, 494 const GURL& url,
476 std::vector<SBPrefix>* prefix_hits, 495 std::vector<SBPrefix>* prefix_hits,
477 std::vector<SBFullHashResult>* cache_hits); 496 std::vector<SBFullHashResult>* cache_hits);
478 497
479 const char* test_list_name; 498 const char* test_list_name;
480 size_t expected_list_index; 499 size_t expected_list_index;
481 TestListContainsBadUrl test_list_contains_bad_url; 500 TestListContainsBadUrl test_list_contains_bad_url;
482 } const kTestCases[] { 501 } const kTestCases[] {
483 { safe_browsing_util::kMalwareList, 0U, 502 { safe_browsing_util::kMalwareList, 0U,
484 &SafeBrowsingDatabase::ContainsBrowseUrl }, 503 &SafeBrowsingDatabase::ContainsBrowseUrl },
485 { safe_browsing_util::kPhishingList, 1U, 504 { safe_browsing_util::kPhishingList, 1U,
486 &SafeBrowsingDatabase::ContainsBrowseUrl }, 505 &SafeBrowsingDatabase::ContainsBrowseUrl },
487 { safe_browsing_util::kUnwantedUrlList, 8U, 506 { safe_browsing_util::kUnwantedUrlList, 9U,
488 &SafeBrowsingDatabase::ContainsUnwantedSoftwareUrl }, 507 &SafeBrowsingDatabase::ContainsUnwantedSoftwareUrl },
489 }; 508 };
490 509
491 for (const auto& test_case : kTestCases) { 510 for (const auto& test_case : kTestCases) {
492 SCOPED_TRACE(std::string("Tested list at fault => ") + 511 SCOPED_TRACE(std::string("Tested list at fault => ") +
493 test_case.test_list_name); 512 test_case.test_list_name);
494 513
495 std::vector<SBListChunkRanges> lists; 514 std::vector<SBListChunkRanges> lists;
496 ScopedVector<SBChunkData> chunks; 515 ScopedVector<SBChunkData> chunks;
497 516
(...skipping 593 matching lines...) Expand 10 before | Expand all | Expand 10 after
1091 // TODO(shess): Disabled until ScopedLogMessageIgnorer resolved. 1110 // TODO(shess): Disabled until ScopedLogMessageIgnorer resolved.
1092 // http://crbug.com/56448 1111 // http://crbug.com/56448
1093 TEST_F(SafeBrowsingDatabaseTest, DISABLED_FileCorruptionHandling) { 1112 TEST_F(SafeBrowsingDatabaseTest, DISABLED_FileCorruptionHandling) {
1094 // Re-create the database in a captive message loop so that we can 1113 // Re-create the database in a captive message loop so that we can
1095 // influence task-posting. Database specifically needs to the 1114 // influence task-posting. Database specifically needs to the
1096 // file-backed. 1115 // file-backed.
1097 database_.reset(); 1116 database_.reset();
1098 base::MessageLoop loop; 1117 base::MessageLoop loop;
1099 SafeBrowsingStoreFile* store = new SafeBrowsingStoreFile(); 1118 SafeBrowsingStoreFile* store = new SafeBrowsingStoreFile();
1100 database_.reset(new SafeBrowsingDatabaseNew(store, NULL, NULL, NULL, NULL, 1119 database_.reset(new SafeBrowsingDatabaseNew(store, NULL, NULL, NULL, NULL,
1101 NULL, NULL, NULL)); 1120 NULL, NULL, NULL, NULL));
1102 database_->Init(database_filename_); 1121 database_->Init(database_filename_);
1103 1122
1104 // This will cause an empty database to be created. 1123 // This will cause an empty database to be created.
1105 std::vector<SBListChunkRanges> lists; 1124 std::vector<SBListChunkRanges> lists;
1106 ASSERT_TRUE(database_->UpdateStarted(&lists)); 1125 ASSERT_TRUE(database_->UpdateStarted(&lists));
1107 database_->UpdateFinished(true); 1126 database_->UpdateFinished(true);
1108 1127
1109 // Create a sub chunk to insert. 1128 // Create a sub chunk to insert.
1110 ScopedVector<SBChunkData> chunks; 1129 ScopedVector<SBChunkData> chunks;
1111 chunks.push_back(SubChunkPrefixValue(7, 1130 chunks.push_back(SubChunkPrefixValue(7,
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
1234 urls.push_back(GURL(std::string("https://") + kEvil1Url2)); 1253 urls.push_back(GURL(std::string("https://") + kEvil1Url2));
1235 EXPECT_TRUE(database_->ContainsDownloadUrl(urls, &prefix_hits)); 1254 EXPECT_TRUE(database_->ContainsDownloadUrl(urls, &prefix_hits));
1236 ASSERT_EQ(2U, prefix_hits.size()); 1255 ASSERT_EQ(2U, prefix_hits.size());
1237 EXPECT_EQ(SBPrefixForString(kEvil1Url1), prefix_hits[0]); 1256 EXPECT_EQ(SBPrefixForString(kEvil1Url1), prefix_hits[0]);
1238 EXPECT_EQ(SBPrefixForString(kEvil1Url2), prefix_hits[1]); 1257 EXPECT_EQ(SBPrefixForString(kEvil1Url2), prefix_hits[1]);
1239 database_.reset(); 1258 database_.reset();
1240 } 1259 }
1241 1260
1242 // Checks that the whitelists are handled properly. 1261 // Checks that the whitelists are handled properly.
1243 TEST_F(SafeBrowsingDatabaseTest, Whitelists) { 1262 TEST_F(SafeBrowsingDatabaseTest, Whitelists) {
1263 struct TestCase {
1264 using TestListContainsWhitelistedUrl =
1265 bool (SafeBrowsingDatabase::*)(const GURL& url);
1266 using TestListContainsWhitelistedString =
1267 bool (SafeBrowsingDatabase::*)(const std::string& str);
1268
1269 // Returns true if strings should be tested in this test case (i.e.
1270 // |test_list_contains_whitelisted_string| is not null).
1271 bool TestStrings() const {
1272 return test_list_contains_whitelisted_string != nullptr;
1273 }
1274
1275 const char* test_list_name;
1276 TestListContainsWhitelistedUrl test_list_contains_whitelisted_url;
1277 // Optional test case field, if set the tested whitelist will also be tested
1278 // for strings.
1279 TestListContainsWhitelistedString test_list_contains_whitelisted_string;
1280 } const kTestCases[]{
1281 {safe_browsing_util::kCsdWhiteList,
1282 &SafeBrowsingDatabase::ContainsCsdWhitelistedUrl,
1283 nullptr},
1284 {safe_browsing_util::kDownloadWhiteList,
1285 &SafeBrowsingDatabase::ContainsDownloadWhitelistedUrl,
1286 &SafeBrowsingDatabase::ContainsDownloadWhitelistedString},
1287 {safe_browsing_util::kInclusionWhitelist,
1288 &SafeBrowsingDatabase::ContainsInclusionWhitelistedUrl,
1289 nullptr},
1290 };
1291
1244 // If the whitelist is disabled everything should match the whitelist. 1292 // If the whitelist is disabled everything should match the whitelist.
1245 database_.reset(new SafeBrowsingDatabaseNew(new SafeBrowsingStoreFile(), 1293 database_.reset(new SafeBrowsingDatabaseNew(new SafeBrowsingStoreFile(), NULL,
1246 NULL, NULL, NULL, NULL, NULL, 1294 NULL, NULL, NULL, NULL, NULL,
1247 NULL, NULL)); 1295 NULL, NULL));
1248 database_->Init(database_filename_); 1296 database_->Init(database_filename_);
1249 EXPECT_TRUE(database_->ContainsDownloadWhitelistedUrl( 1297 for (const auto& test_case : kTestCases) {
1250 GURL(std::string("http://www.phishing.com/")))); 1298 SCOPED_TRACE(std::string("Tested list at fault => ") +
1251 EXPECT_TRUE(database_->ContainsDownloadWhitelistedUrl( 1299 test_case.test_list_name);
1252 GURL(std::string("http://www.phishing.com/")))); 1300
1253 EXPECT_TRUE(database_->ContainsDownloadWhitelistedString("asdf")); 1301 EXPECT_TRUE(
1254 1302 (database_.get()->*test_case.test_list_contains_whitelisted_url)(
1303 GURL(std::string("http://www.phishing.com/"))));
1304 if (test_case.TestStrings()) {
1305 EXPECT_TRUE(
1306 (database_.get()->*test_case.test_list_contains_whitelisted_string)(
1307 "asdf"));
1308 }
1309 }
1255 ResetAndReloadFullDatabase(); 1310 ResetAndReloadFullDatabase();
1256 1311
1257 const char kGood1Host[] = "www.good1.com/"; 1312 // Now test every whitelist one-by-one; intentionally not resetting the
1258 const char kGood1Url1[] = "www.good1.com/a/b.html"; 1313 // database in-between to further stress potential inter-dependencies.
1259 const char kGood1Url2[] = "www.good1.com/b/"; 1314 for (const auto& test_case : kTestCases) {
1260 1315 SCOPED_TRACE(std::string("Tested list at fault => ") +
1261 const char kGood2Url1[] = "www.good2.com/c"; // Should match '/c/bla'. 1316 test_case.test_list_name);
1262 1317
1263 // good3.com/a/b/c/d/e/f/g/ should match because it's a whitelist. 1318 const char kGood1Host[] = "www.good1.com/";
1264 const char kGood3Url1[] = "good3.com/"; 1319 const char kGood1Url1[] = "www.good1.com/a/b.html";
1265 1320 const char kGood1Url2[] = "www.good1.com/b/";
1266 const char kGoodString[] = "good_string"; 1321
1267 1322 const char kGood2Url1[] = "www.good2.com/c"; // Should match '/c/bla'.
1268 ScopedVector<SBChunkData> csd_chunks; 1323
1269 ScopedVector<SBChunkData> download_chunks; 1324 // good3.com/a/b/c/d/e/f/g/ should match because it's a whitelist.
1270 1325 const char kGood3Url1[] = "good3.com/";
1271 // Add two simple chunks to the csd whitelist. 1326
1272 csd_chunks.push_back(AddChunkFullHash2Value(1, kGood1Url1, kGood1Url2)); 1327 const char kGoodString[] = "good_string";
1273 csd_chunks.push_back(AddChunkFullHashValue(2, kGood2Url1)); 1328
1274 download_chunks.push_back(AddChunkFullHashValue(2, kGood2Url1)); 1329 // Nothing should be whitelisted before the database receives the chunks.
1275 download_chunks.push_back(AddChunkFullHashValue(3, kGoodString)); 1330 EXPECT_FALSE(
1276 download_chunks.push_back(AddChunkFullHashValue(4, kGood3Url1)); 1331 (database_.get()->*test_case.test_list_contains_whitelisted_url)(
1277 1332 GURL(std::string("http://") + kGood1Host)));
1278 std::vector<SBListChunkRanges> lists; 1333 EXPECT_FALSE(
1279 ASSERT_TRUE(database_->UpdateStarted(&lists)); 1334 (database_.get()->*test_case.test_list_contains_whitelisted_url)(
1280 database_->InsertChunks(safe_browsing_util::kCsdWhiteList, csd_chunks.get()); 1335 GURL(std::string("http://") + kGood1Url1)));
1281 database_->InsertChunks(safe_browsing_util::kDownloadWhiteList, 1336 EXPECT_FALSE(
1282 download_chunks.get()); 1337 (database_.get()->*test_case.test_list_contains_whitelisted_url)(
1283 database_->UpdateFinished(true); 1338 GURL(std::string("http://") + kGood1Url2)));
1284 1339 EXPECT_FALSE(
1285 EXPECT_FALSE(database_->ContainsCsdWhitelistedUrl( 1340 (database_.get()->*test_case.test_list_contains_whitelisted_url)(
1286 GURL(std::string("http://") + kGood1Host))); 1341 GURL(std::string("http://") + kGood2Url1)));
1287 1342 EXPECT_FALSE(
1288 EXPECT_TRUE(database_->ContainsCsdWhitelistedUrl( 1343 (database_.get()->*test_case.test_list_contains_whitelisted_url)(
1289 GURL(std::string("http://") + kGood1Url1))); 1344 GURL(std::string("http://") + kGood3Url1)));
1290 EXPECT_TRUE(database_->ContainsCsdWhitelistedUrl( 1345 if (test_case.TestStrings()) {
1291 GURL(std::string("http://") + kGood1Url1 + "?a=b"))); 1346 EXPECT_FALSE(
1292 1347 (database_.get()->*test_case.test_list_contains_whitelisted_string)(
1293 EXPECT_TRUE(database_->ContainsCsdWhitelistedUrl( 1348 kGoodString));
1294 GURL(std::string("http://") + kGood1Url2))); 1349 }
1295 EXPECT_TRUE(database_->ContainsCsdWhitelistedUrl( 1350
1296 GURL(std::string("http://") + kGood1Url2 + "/c.html"))); 1351 ScopedVector<SBChunkData> chunks;
1297 1352
1298 EXPECT_TRUE(database_->ContainsCsdWhitelistedUrl( 1353 // Add two simple chunks to the csd whitelist.
mattm 2015/01/08 22:07:27 this is more than two chunks :)
gab 2015/01/09 13:51:30 :-), updated comment.
1299 GURL(std::string("https://") + kGood1Url2 + "/c.html"))); 1354 chunks.push_back(AddChunkFullHash2Value(1, kGood1Url1, kGood1Url2));
1300 1355 chunks.push_back(AddChunkFullHashValue(2, kGood2Url1));
1301 EXPECT_TRUE(database_->ContainsCsdWhitelistedUrl( 1356 if (test_case.TestStrings())
1302 GURL(std::string("http://") + kGood2Url1 + "/c"))); 1357 chunks.push_back(AddChunkFullHashValue(3, kGoodString));
1303 EXPECT_TRUE(database_->ContainsCsdWhitelistedUrl( 1358 chunks.push_back(AddChunkFullHashValue(4, kGood3Url1));
1304 GURL(std::string("http://") + kGood2Url1 + "/c?bla"))); 1359
1305 EXPECT_TRUE(database_->ContainsCsdWhitelistedUrl( 1360 std::vector<SBListChunkRanges> lists;
1306 GURL(std::string("http://") + kGood2Url1 + "/c/bla"))); 1361 ASSERT_TRUE(database_->UpdateStarted(&lists));
1307 1362 database_->InsertChunks(test_case.test_list_name, chunks.get());
1308 EXPECT_FALSE(database_->ContainsCsdWhitelistedUrl( 1363 database_->UpdateFinished(true);
1309 GURL(std::string("http://www.google.com/")))); 1364
1310 1365 EXPECT_FALSE(
1311 EXPECT_TRUE(database_->ContainsDownloadWhitelistedUrl( 1366 (database_.get()->*test_case.test_list_contains_whitelisted_url)(
1312 GURL(std::string("http://") + kGood2Url1 + "/c"))); 1367 GURL(std::string("http://") + kGood1Host)));
1313 EXPECT_TRUE(database_->ContainsDownloadWhitelistedUrl( 1368
1314 GURL(std::string("http://") + kGood2Url1 + "/c?bla"))); 1369 EXPECT_TRUE(
1315 EXPECT_TRUE(database_->ContainsDownloadWhitelistedUrl( 1370 (database_.get()->*test_case.test_list_contains_whitelisted_url)(
1316 GURL(std::string("http://") + kGood2Url1 + "/c/bla"))); 1371 GURL(std::string("http://") + kGood1Url1)));
1317 1372 EXPECT_TRUE(
1318 EXPECT_TRUE(database_->ContainsDownloadWhitelistedUrl( 1373 (database_.get()->*test_case.test_list_contains_whitelisted_url)(
1319 GURL(std::string("http://good3.com/a/b/c/d/e/f/g/")))); 1374 GURL(std::string("http://") + kGood1Url1 + "?a=b")));
1320 EXPECT_TRUE(database_->ContainsDownloadWhitelistedUrl( 1375
1321 GURL(std::string("http://a.b.good3.com/")))); 1376 EXPECT_TRUE(
1322 1377 (database_.get()->*test_case.test_list_contains_whitelisted_url)(
1323 EXPECT_FALSE(database_->ContainsDownloadWhitelistedString("asdf")); 1378 GURL(std::string("http://") + kGood1Url2)));
1324 EXPECT_TRUE(database_->ContainsDownloadWhitelistedString(kGoodString)); 1379 EXPECT_TRUE(
1325 1380 (database_.get()->*test_case.test_list_contains_whitelisted_url)(
1326 EXPECT_FALSE(database_->ContainsDownloadWhitelistedUrl( 1381 GURL(std::string("http://") + kGood1Url2 + "/c.html")));
1327 GURL(std::string("http://www.google.com/")))); 1382
1328 1383 EXPECT_TRUE(
1329 // The CSD whitelist killswitch is not present. 1384 (database_.get()->*test_case.test_list_contains_whitelisted_url)(
1330 EXPECT_FALSE(database_->IsCsdWhitelistKillSwitchOn()); 1385 GURL(std::string("https://") + kGood1Url2 + "/c.html")));
1331 1386
1332 // Test only add the malware IP killswitch 1387 EXPECT_TRUE(
1333 csd_chunks.clear(); 1388 (database_.get()->*test_case.test_list_contains_whitelisted_url)(
1334 csd_chunks.push_back(AddChunkFullHashValue( 1389 GURL(std::string("http://") + kGood2Url1 + "/c")));
1335 15, "sb-ssl.google.com/safebrowsing/csd/killswitch_malware")); 1390 EXPECT_TRUE(
1336 1391 (database_.get()->*test_case.test_list_contains_whitelisted_url)(
1337 ASSERT_TRUE(database_->UpdateStarted(&lists)); 1392 GURL(std::string("http://") + kGood2Url1 + "/c?bla")));
1338 database_->InsertChunks(safe_browsing_util::kCsdWhiteList, csd_chunks.get()); 1393 EXPECT_TRUE(
1339 database_->UpdateFinished(true); 1394 (database_.get()->*test_case.test_list_contains_whitelisted_url)(
1340 1395 GURL(std::string("http://") + kGood2Url1 + "/c/bla")));
1341 EXPECT_TRUE(database_->IsMalwareIPMatchKillSwitchOn()); 1396
1342 // The CSD whitelist killswitch is not present. 1397 EXPECT_FALSE(
1343 EXPECT_FALSE(database_->IsCsdWhitelistKillSwitchOn()); 1398 (database_.get()->*test_case.test_list_contains_whitelisted_url)(
1344 1399 GURL(std::string("http://www.google.com/"))));
1345 // Test that the kill-switch works as intended. 1400
1346 csd_chunks.clear(); 1401 EXPECT_TRUE(
1347 download_chunks.clear(); 1402 (database_.get()->*test_case.test_list_contains_whitelisted_url)(
1348 lists.clear(); 1403 GURL(std::string("http://") + kGood3Url1 + "a/b/c/d/e/f/g/")));
1349 csd_chunks.push_back(AddChunkFullHashValue( 1404 EXPECT_TRUE(
1350 5, "sb-ssl.google.com/safebrowsing/csd/killswitch")); 1405 (database_.get()->*test_case.test_list_contains_whitelisted_url)(
1351 download_chunks.push_back(AddChunkFullHashValue( 1406 GURL(std::string("http://a.b.") + kGood3Url1)));
1352 5, "sb-ssl.google.com/safebrowsing/csd/killswitch")); 1407
1353 1408 if (test_case.TestStrings()) {
1354 ASSERT_TRUE(database_->UpdateStarted(&lists)); 1409 EXPECT_FALSE(
1355 database_->InsertChunks(safe_browsing_util::kCsdWhiteList, csd_chunks.get()); 1410 (database_.get()->*test_case.test_list_contains_whitelisted_string)(
1356 database_->InsertChunks(safe_browsing_util::kDownloadWhiteList, 1411 "asdf"));
1357 download_chunks.get()); 1412 EXPECT_TRUE(
1358 database_->UpdateFinished(true); 1413 (database_.get()->*test_case.test_list_contains_whitelisted_string)(
1359 1414 kGoodString));
1360 // The CSD whitelist killswitch is present. 1415 }
1361 EXPECT_TRUE(database_->IsCsdWhitelistKillSwitchOn()); 1416
1362 EXPECT_TRUE(database_->IsMalwareIPMatchKillSwitchOn()); 1417 EXPECT_FALSE(
1363 EXPECT_TRUE(database_->ContainsCsdWhitelistedUrl( 1418 (database_.get()->*test_case.test_list_contains_whitelisted_url)(
1364 GURL(std::string("https://") + kGood1Url2 + "/c.html"))); 1419 GURL(std::string("http://www.google.com/"))));
1365 EXPECT_TRUE(database_->ContainsCsdWhitelistedUrl( 1420
1366 GURL(std::string("http://www.google.com/")))); 1421 // The malware kill switch is for the CSD whitelist only.
1367 EXPECT_TRUE(database_->ContainsCsdWhitelistedUrl( 1422 if (test_case.test_list_name == safe_browsing_util::kCsdWhiteList) {
1368 GURL(std::string("http://www.phishing_url.com/")))); 1423 // The CSD whitelist killswitch is not present.
1369 1424 EXPECT_FALSE(database_->IsCsdWhitelistKillSwitchOn());
1370 EXPECT_TRUE(database_->ContainsDownloadWhitelistedUrl( 1425
1371 GURL(std::string("https://") + kGood1Url2 + "/c.html"))); 1426 // Test only add the malware IP killswitch
1372 EXPECT_TRUE(database_->ContainsDownloadWhitelistedUrl( 1427 chunks.clear();
1373 GURL(std::string("http://www.google.com/")))); 1428 chunks.push_back(AddChunkFullHashValue(
1374 EXPECT_TRUE(database_->ContainsDownloadWhitelistedUrl( 1429 15, "sb-ssl.google.com/safebrowsing/csd/killswitch_malware"));
1375 GURL(std::string("http://www.phishing_url.com/")))); 1430
1376 1431 ASSERT_TRUE(database_->UpdateStarted(&lists));
1377 EXPECT_TRUE(database_->ContainsDownloadWhitelistedString("asdf")); 1432 database_->InsertChunks(safe_browsing_util::kCsdWhiteList, chunks.get());
1378 EXPECT_TRUE(database_->ContainsDownloadWhitelistedString(kGoodString)); 1433 database_->UpdateFinished(true);
1379 1434
1380 // Remove the kill-switch and verify that we can recover. 1435 EXPECT_TRUE(database_->IsMalwareIPMatchKillSwitchOn());
1381 csd_chunks.clear(); 1436 // The CSD whitelist killswitch is not present.
1382 download_chunks.clear(); 1437 EXPECT_FALSE(database_->IsCsdWhitelistKillSwitchOn());
1383 lists.clear(); 1438 }
1384 csd_chunks.push_back(SubChunkFullHashValue( 1439
1385 1, "sb-ssl.google.com/safebrowsing/csd/killswitch", 5)); 1440 // Test that the generic whitelist kill-switch works as intended.
1386 csd_chunks.push_back(SubChunkFullHashValue( 1441 chunks.clear();
1387 10, "sb-ssl.google.com/safebrowsing/csd/killswitch_malware", 15)); 1442 lists.clear();
1388 download_chunks.push_back(SubChunkFullHashValue( 1443 chunks.push_back(AddChunkFullHashValue(
1389 1, "sb-ssl.google.com/safebrowsing/csd/killswitch", 5)); 1444 5, "sb-ssl.google.com/safebrowsing/csd/killswitch"));
1390 1445
1391 ASSERT_TRUE(database_->UpdateStarted(&lists)); 1446 ASSERT_TRUE(database_->UpdateStarted(&lists));
1392 database_->InsertChunks(safe_browsing_util::kCsdWhiteList, csd_chunks.get()); 1447 database_->InsertChunks(test_case.test_list_name, chunks.get());
1393 database_->InsertChunks(safe_browsing_util::kDownloadWhiteList, 1448 database_->UpdateFinished(true);
1394 download_chunks.get()); 1449
1395 database_->UpdateFinished(true); 1450 // Test CSD whitelist specific methods.
1396 1451 if (test_case.test_list_name == safe_browsing_util::kCsdWhiteList) {
1397 EXPECT_FALSE(database_->IsMalwareIPMatchKillSwitchOn()); 1452 // The CSD whitelist killswitch is present.
1398 EXPECT_FALSE(database_->IsCsdWhitelistKillSwitchOn()); 1453 EXPECT_TRUE(database_->IsCsdWhitelistKillSwitchOn());
1399 EXPECT_TRUE(database_->ContainsCsdWhitelistedUrl( 1454 EXPECT_TRUE(database_->IsMalwareIPMatchKillSwitchOn());
1400 GURL(std::string("https://") + kGood1Url2 + "/c.html"))); 1455 }
1401 EXPECT_TRUE(database_->ContainsCsdWhitelistedUrl( 1456
1402 GURL(std::string("https://") + kGood2Url1 + "/c/bla"))); 1457 EXPECT_TRUE(
1403 EXPECT_FALSE(database_->ContainsCsdWhitelistedUrl( 1458 (database_.get()->*test_case.test_list_contains_whitelisted_url)(
1404 GURL(std::string("http://www.google.com/")))); 1459 GURL(std::string("https://") + kGood1Url2 + "/c.html")));
1405 EXPECT_FALSE(database_->ContainsCsdWhitelistedUrl( 1460 EXPECT_TRUE(
1406 GURL(std::string("http://www.phishing_url.com/")))); 1461 (database_.get()->*test_case.test_list_contains_whitelisted_url)(
1407 1462 GURL(std::string("http://www.google.com/"))));
1408 EXPECT_TRUE(database_->ContainsDownloadWhitelistedUrl( 1463 EXPECT_TRUE(
1409 GURL(std::string("https://") + kGood2Url1 + "/c/bla"))); 1464 (database_.get()->*test_case.test_list_contains_whitelisted_url)(
1410 EXPECT_TRUE(database_->ContainsDownloadWhitelistedUrl( 1465 GURL(std::string("http://www.phishing_url.com/"))));
1411 GURL(std::string("https://good3.com/")))); 1466
1412 EXPECT_TRUE(database_->ContainsDownloadWhitelistedString(kGoodString)); 1467 if (test_case.TestStrings()) {
1413 EXPECT_FALSE(database_->ContainsDownloadWhitelistedUrl( 1468 EXPECT_TRUE(
1414 GURL(std::string("http://www.google.com/")))); 1469 (database_.get()->*test_case.test_list_contains_whitelisted_string)(
1415 EXPECT_FALSE(database_->ContainsDownloadWhitelistedUrl( 1470 "asdf"));
1416 GURL(std::string("http://www.phishing_url.com/")))); 1471 EXPECT_TRUE(
1417 EXPECT_FALSE(database_->ContainsDownloadWhitelistedString("asdf")); 1472 (database_.get()->*test_case.test_list_contains_whitelisted_string)(
1418 1473 kGoodString));
1419 database_.reset(); 1474 }
1475
1476 // Remove the kill-switch and verify that we can recover.
1477 chunks.clear();
1478 lists.clear();
1479 chunks.push_back(SubChunkFullHashValue(
1480 1, "sb-ssl.google.com/safebrowsing/csd/killswitch", 5));
1481 if (test_case.test_list_name == safe_browsing_util::kCsdWhiteList) {
1482 chunks.push_back(SubChunkFullHashValue(
1483 10, "sb-ssl.google.com/safebrowsing/csd/killswitch_malware", 15));
1484 }
1485
1486 ASSERT_TRUE(database_->UpdateStarted(&lists));
1487 database_->InsertChunks(test_case.test_list_name, chunks.get());
1488 database_->UpdateFinished(true);
1489
1490 if (test_case.test_list_name == safe_browsing_util::kCsdWhiteList) {
1491 EXPECT_FALSE(database_->IsMalwareIPMatchKillSwitchOn());
1492 EXPECT_FALSE(database_->IsCsdWhitelistKillSwitchOn());
1493 }
1494 EXPECT_TRUE(
1495 (database_.get()->*test_case.test_list_contains_whitelisted_url)(
1496 GURL(std::string("https://") + kGood1Url2 + "/c.html")));
1497 EXPECT_TRUE(
1498 (database_.get()->*test_case.test_list_contains_whitelisted_url)(
1499 GURL(std::string("https://") + kGood2Url1 + "/c/bla")));
1500 EXPECT_TRUE(
1501 (database_.get()->*test_case.test_list_contains_whitelisted_url)(
1502 GURL(std::string("https://") + kGood3Url1)));
1503 EXPECT_FALSE(
1504 (database_.get()->*test_case.test_list_contains_whitelisted_url)(
1505 GURL(std::string("http://www.google.com/"))));
1506 EXPECT_FALSE(
1507 (database_.get()->*test_case.test_list_contains_whitelisted_url)(
1508 GURL(std::string("http://www.phishing_url.com/"))));
1509 if (test_case.TestStrings()) {
1510 EXPECT_TRUE(
1511 (database_.get()->*test_case.test_list_contains_whitelisted_string)(
1512 kGoodString));
1513 EXPECT_FALSE(
1514 (database_.get()->*test_case.test_list_contains_whitelisted_string)(
1515 "asdf"));
1516 }
1517 }
1420 } 1518 }
1421 1519
1422 // Test to make sure we could insert chunk list that 1520 // Test to make sure we could insert chunk list that
1423 // contains entries for the same host. 1521 // contains entries for the same host.
1424 TEST_F(SafeBrowsingDatabaseTest, SameHostEntriesOkay) { 1522 TEST_F(SafeBrowsingDatabaseTest, SameHostEntriesOkay) {
1425 ScopedVector<SBChunkData> chunks; 1523 ScopedVector<SBChunkData> chunks;
1426 1524
1427 // Add a malware add chunk with two entries of the same host. 1525 // Add a malware add chunk with two entries of the same host.
1428 chunks.push_back(AddChunkPrefix2Value(1, 1526 chunks.push_back(AddChunkPrefix2Value(1,
1429 "www.evil.com/malware1.html", 1527 "www.evil.com/malware1.html",
(...skipping 705 matching lines...) Expand 10 before | Expand all | Expand 10 after
2135 GURL(std::string("http://") + kExampleCollision), 2233 GURL(std::string("http://") + kExampleCollision),
2136 &prefix_hits, &cache_hits)); 2234 &prefix_hits, &cache_hits));
2137 ASSERT_EQ(1U, prefix_hits.size()); 2235 ASSERT_EQ(1U, prefix_hits.size());
2138 EXPECT_EQ(SBPrefixForString(kExampleCollision), prefix_hits[0]); 2236 EXPECT_EQ(SBPrefixForString(kExampleCollision), prefix_hits[0]);
2139 EXPECT_TRUE(cache_hits.empty()); 2237 EXPECT_TRUE(cache_hits.empty());
2140 2238
2141 // This prefix collides, but no full hash match. 2239 // This prefix collides, but no full hash match.
2142 EXPECT_FALSE(database_->ContainsBrowseUrl( 2240 EXPECT_FALSE(database_->ContainsBrowseUrl(
2143 GURL(std::string("http://") + kExampleFine), &prefix_hits, &cache_hits)); 2241 GURL(std::string("http://") + kExampleFine), &prefix_hits, &cache_hits));
2144 } 2242 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698