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

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

Issue 910953002: Move SafeBrowsing to the blocking pool via an experiment. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 10 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"
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/memory/scoped_vector.h" 12 #include "base/memory/scoped_vector.h"
13 #include "base/message_loop/message_loop.h" 13 #include "base/message_loop/message_loop.h"
14 #include "base/sha1.h" 14 #include "base/sha1.h"
15 #include "base/strings/string_number_conversions.h" 15 #include "base/strings/string_number_conversions.h"
16 #include "base/strings/string_split.h" 16 #include "base/strings/string_split.h"
17 #include "base/test/test_simple_task_runner.h"
17 #include "base/time/time.h" 18 #include "base/time/time.h"
18 #include "chrome/browser/safe_browsing/chunk.pb.h" 19 #include "chrome/browser/safe_browsing/chunk.pb.h"
19 #include "chrome/browser/safe_browsing/safe_browsing_store_file.h" 20 #include "chrome/browser/safe_browsing/safe_browsing_store_file.h"
20 #include "crypto/sha2.h" 21 #include "crypto/sha2.h"
21 #include "net/base/net_util.h" 22 #include "net/base/net_util.h"
22 #include "sql/connection.h" 23 #include "sql/connection.h"
23 #include "sql/statement.h" 24 #include "sql/statement.h"
24 #include "testing/gtest/include/gtest/gtest.h" 25 #include "testing/gtest/include/gtest/gtest.h"
25 #include "testing/platform_test.h" 26 #include "testing/platform_test.h"
26 #include "url/gurl.h" 27 #include "url/gurl.h"
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
246 } 247 }
247 248
248 return false; 249 return false;
249 } 250 }
250 }; 251 };
251 252
252 } // namespace 253 } // namespace
253 254
254 class SafeBrowsingDatabaseTest : public PlatformTest { 255 class SafeBrowsingDatabaseTest : public PlatformTest {
255 public: 256 public:
257 SafeBrowsingDatabaseTest() : task_runner_(new base::TestSimpleTaskRunner) {}
258
256 void SetUp() override { 259 void SetUp() override {
257 PlatformTest::SetUp(); 260 PlatformTest::SetUp();
258 261
259 // Setup a database in a temporary directory. 262 // Setup a database in a temporary directory.
260 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 263 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
261 database_filename_ = 264 database_filename_ =
262 temp_dir_.path().AppendASCII("SafeBrowsingTestDatabase"); 265 temp_dir_.path().AppendASCII("SafeBrowsingTestDatabase");
263 266
264 ResetAndReloadFullDatabase(); 267 ResetAndReloadFullDatabase();
265 } 268 }
266 269
267 void TearDown() override { 270 void TearDown() override {
268 database_.reset(); 271 database_.reset();
269 272
270 PlatformTest::TearDown(); 273 PlatformTest::TearDown();
271 } 274 }
272 275
273 // Reloads the |database_| in a new SafeBrowsingDatabaseNew object with all 276 // Reloads the |database_| in a new SafeBrowsingDatabaseNew object with all
274 // stores enabled. 277 // stores enabled.
275 void ResetAndReloadFullDatabase() { 278 void ResetAndReloadFullDatabase() {
276 SafeBrowsingStoreFile* browse_store = new SafeBrowsingStoreFile(); 279 SafeBrowsingStoreFile* browse_store =
277 SafeBrowsingStoreFile* download_store = new SafeBrowsingStoreFile(); 280 new SafeBrowsingStoreFile(task_runner_);
278 SafeBrowsingStoreFile* csd_whitelist_store = new SafeBrowsingStoreFile(); 281 SafeBrowsingStoreFile* download_store =
282 new SafeBrowsingStoreFile(task_runner_);
283 SafeBrowsingStoreFile* csd_whitelist_store =
284 new SafeBrowsingStoreFile(task_runner_);
279 SafeBrowsingStoreFile* download_whitelist_store = 285 SafeBrowsingStoreFile* download_whitelist_store =
280 new SafeBrowsingStoreFile(); 286 new SafeBrowsingStoreFile(task_runner_);
281 SafeBrowsingStoreFile* inclusion_whitelist_store = 287 SafeBrowsingStoreFile* inclusion_whitelist_store =
282 new SafeBrowsingStoreFile(); 288 new SafeBrowsingStoreFile(task_runner_);
283 SafeBrowsingStoreFile* extension_blacklist_store = 289 SafeBrowsingStoreFile* extension_blacklist_store =
284 new SafeBrowsingStoreFile(); 290 new SafeBrowsingStoreFile(task_runner_);
285 SafeBrowsingStoreFile* side_effect_free_whitelist_store = 291 SafeBrowsingStoreFile* side_effect_free_whitelist_store =
286 new SafeBrowsingStoreFile(); 292 new SafeBrowsingStoreFile(task_runner_);
287 SafeBrowsingStoreFile* ip_blacklist_store = new SafeBrowsingStoreFile(); 293 SafeBrowsingStoreFile* ip_blacklist_store =
294 new SafeBrowsingStoreFile(task_runner_);
288 SafeBrowsingStoreFile* unwanted_software_store = 295 SafeBrowsingStoreFile* unwanted_software_store =
289 new SafeBrowsingStoreFile(); 296 new SafeBrowsingStoreFile(task_runner_);
290 database_.reset( 297 database_.reset(new SafeBrowsingDatabaseNew(
291 new SafeBrowsingDatabaseNew(browse_store, 298 task_runner_, browse_store, download_store, csd_whitelist_store,
292 download_store, 299 download_whitelist_store, inclusion_whitelist_store,
293 csd_whitelist_store, 300 extension_blacklist_store, side_effect_free_whitelist_store,
294 download_whitelist_store, 301 ip_blacklist_store, unwanted_software_store));
295 inclusion_whitelist_store,
296 extension_blacklist_store,
297 side_effect_free_whitelist_store,
298 ip_blacklist_store,
299 unwanted_software_store));
300 database_->Init(database_filename_); 302 database_->Init(database_filename_);
301 } 303 }
302 304
303 void GetListsInfo(std::vector<SBListChunkRanges>* lists) { 305 void GetListsInfo(std::vector<SBListChunkRanges>* lists) {
304 lists->clear(); 306 lists->clear();
305 ASSERT_TRUE(database_->UpdateStarted(lists)); 307 ASSERT_TRUE(database_->UpdateStarted(lists));
306 database_->UpdateFinished(true); 308 database_->UpdateFinished(true);
307 } 309 }
308 310
309 // Helper function to do an AddDel or SubDel command. 311 // Helper function to do an AddDel or SubDel command.
(...skipping 13 matching lines...) Expand all
323 DelChunk(list, chunk_id, false); 325 DelChunk(list, chunk_id, false);
324 } 326 }
325 327
326 void SubDelChunk(const std::string& list, int chunk_id) { 328 void SubDelChunk(const std::string& list, int chunk_id) {
327 DelChunk(list, chunk_id, true); 329 DelChunk(list, chunk_id, true);
328 } 330 }
329 331
330 // Utility function for setting up the database for the caching test. 332 // Utility function for setting up the database for the caching test.
331 void PopulateDatabaseForCacheTest(); 333 void PopulateDatabaseForCacheTest();
332 334
335 scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
333 scoped_ptr<SafeBrowsingDatabaseNew> database_; 336 scoped_ptr<SafeBrowsingDatabaseNew> database_;
334 base::FilePath database_filename_; 337 base::FilePath database_filename_;
335 base::ScopedTempDir temp_dir_; 338 base::ScopedTempDir temp_dir_;
336 }; 339 };
337 340
338 // Tests retrieving list name information. 341 // Tests retrieving list name information.
339 TEST_F(SafeBrowsingDatabaseTest, BrowseListsInfo) { 342 TEST_F(SafeBrowsingDatabaseTest, BrowseListsInfo) {
340 std::vector<SBListChunkRanges> lists; 343 std::vector<SBListChunkRanges> lists;
341 ScopedVector<SBChunkData> chunks; 344 ScopedVector<SBChunkData> chunks;
342 345
(...skipping 765 matching lines...) Expand 10 before | Expand all | Expand 10 after
1108 // Test that corrupt databases are appropriately handled, even if the 1111 // Test that corrupt databases are appropriately handled, even if the
1109 // corruption is detected in the midst of the update. 1112 // corruption is detected in the midst of the update.
1110 // TODO(shess): Disabled until ScopedLogMessageIgnorer resolved. 1113 // TODO(shess): Disabled until ScopedLogMessageIgnorer resolved.
1111 // http://crbug.com/56448 1114 // http://crbug.com/56448
1112 TEST_F(SafeBrowsingDatabaseTest, DISABLED_FileCorruptionHandling) { 1115 TEST_F(SafeBrowsingDatabaseTest, DISABLED_FileCorruptionHandling) {
1113 // Re-create the database in a captive message loop so that we can 1116 // Re-create the database in a captive message loop so that we can
1114 // influence task-posting. Database specifically needs to the 1117 // influence task-posting. Database specifically needs to the
1115 // file-backed. 1118 // file-backed.
1116 database_.reset(); 1119 database_.reset();
1117 base::MessageLoop loop; 1120 base::MessageLoop loop;
1118 SafeBrowsingStoreFile* store = new SafeBrowsingStoreFile(); 1121 SafeBrowsingStoreFile* store = new SafeBrowsingStoreFile(task_runner_);
1119 database_.reset(new SafeBrowsingDatabaseNew(store, NULL, NULL, NULL, NULL, 1122 database_.reset(new SafeBrowsingDatabaseNew(
1120 NULL, NULL, NULL, NULL)); 1123 task_runner_, store, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL));
1121 database_->Init(database_filename_); 1124 database_->Init(database_filename_);
1122 1125
1123 // This will cause an empty database to be created. 1126 // This will cause an empty database to be created.
1124 std::vector<SBListChunkRanges> lists; 1127 std::vector<SBListChunkRanges> lists;
1125 ASSERT_TRUE(database_->UpdateStarted(&lists)); 1128 ASSERT_TRUE(database_->UpdateStarted(&lists));
1126 database_->UpdateFinished(true); 1129 database_->UpdateFinished(true);
1127 1130
1128 // Create a sub chunk to insert. 1131 // Create a sub chunk to insert.
1129 ScopedVector<SBChunkData> chunks; 1132 ScopedVector<SBChunkData> chunks;
1130 chunks.push_back(SubChunkPrefixValue(7, 1133 chunks.push_back(SubChunkPrefixValue(7,
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
1283 nullptr}, 1286 nullptr},
1284 {safe_browsing_util::kDownloadWhiteList, 1287 {safe_browsing_util::kDownloadWhiteList,
1285 &SafeBrowsingDatabase::ContainsDownloadWhitelistedUrl, 1288 &SafeBrowsingDatabase::ContainsDownloadWhitelistedUrl,
1286 &SafeBrowsingDatabase::ContainsDownloadWhitelistedString}, 1289 &SafeBrowsingDatabase::ContainsDownloadWhitelistedString},
1287 {safe_browsing_util::kInclusionWhitelist, 1290 {safe_browsing_util::kInclusionWhitelist,
1288 &SafeBrowsingDatabase::ContainsInclusionWhitelistedUrl, 1291 &SafeBrowsingDatabase::ContainsInclusionWhitelistedUrl,
1289 nullptr}, 1292 nullptr},
1290 }; 1293 };
1291 1294
1292 // If the whitelist is disabled everything should match the whitelist. 1295 // If the whitelist is disabled everything should match the whitelist.
1293 database_.reset(new SafeBrowsingDatabaseNew(new SafeBrowsingStoreFile(), NULL, 1296 database_.reset(new SafeBrowsingDatabaseNew(
1294 NULL, NULL, NULL, NULL, NULL, 1297 task_runner_, new SafeBrowsingStoreFile(task_runner_), NULL, NULL, NULL,
1295 NULL, NULL)); 1298 NULL, NULL, NULL, NULL, NULL));
1296 database_->Init(database_filename_); 1299 database_->Init(database_filename_);
1297 for (const auto& test_case : kTestCases) { 1300 for (const auto& test_case : kTestCases) {
1298 SCOPED_TRACE(std::string("Tested list at fault => ") + 1301 SCOPED_TRACE(std::string("Tested list at fault => ") +
1299 test_case.test_list_name); 1302 test_case.test_list_name);
1300 1303
1301 EXPECT_TRUE( 1304 EXPECT_TRUE(
1302 (database_.get()->*test_case.test_list_contains_whitelisted_url)( 1305 (database_.get()->*test_case.test_list_contains_whitelisted_url)(
1303 GURL(std::string("http://www.phishing.com/")))); 1306 GURL(std::string("http://www.phishing.com/"))));
1304 if (test_case.TestStrings()) { 1307 if (test_case.TestStrings()) {
1305 EXPECT_TRUE( 1308 EXPECT_TRUE(
(...skipping 927 matching lines...) Expand 10 before | Expand all | Expand 10 after
2233 GURL(std::string("http://") + kExampleCollision), 2236 GURL(std::string("http://") + kExampleCollision),
2234 &prefix_hits, &cache_hits)); 2237 &prefix_hits, &cache_hits));
2235 ASSERT_EQ(1U, prefix_hits.size()); 2238 ASSERT_EQ(1U, prefix_hits.size());
2236 EXPECT_EQ(SBPrefixForString(kExampleCollision), prefix_hits[0]); 2239 EXPECT_EQ(SBPrefixForString(kExampleCollision), prefix_hits[0]);
2237 EXPECT_TRUE(cache_hits.empty()); 2240 EXPECT_TRUE(cache_hits.empty());
2238 2241
2239 // This prefix collides, but no full hash match. 2242 // This prefix collides, but no full hash match.
2240 EXPECT_FALSE(database_->ContainsBrowseUrl( 2243 EXPECT_FALSE(database_->ContainsBrowseUrl(
2241 GURL(std::string("http://") + kExampleFine), &prefix_hits, &cache_hits)); 2244 GURL(std::string("http://") + kExampleFine), &prefix_hits, &cache_hits));
2242 } 2245 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698