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

Unified Diff: components/safe_browsing_db/v4_database_unittest.cc

Issue 2160193003: PVer4: V4Database: Return stores that have a hash prefix for a given full hash (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@01_check_url_store
Patch Set: incorporate nparker@ feedback Created 4 years, 5 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « components/safe_browsing_db/v4_database.cc ('k') | components/safe_browsing_db/v4_store.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: components/safe_browsing_db/v4_database_unittest.cc
diff --git a/components/safe_browsing_db/v4_database_unittest.cc b/components/safe_browsing_db/v4_database_unittest.cc
index c841cbfb295224293f2db242cd8ff9eb074abd98..3e0598e71a5ddeaee05919d605594b3d68d6d0ce 100644
--- a/components/safe_browsing_db/v4_database_unittest.cc
+++ b/components/safe_browsing_db/v4_database_unittest.cc
@@ -19,15 +19,26 @@ class FakeV4Store : public V4Store {
public:
FakeV4Store(const scoped_refptr<base::SequencedTaskRunner>& task_runner,
const base::FilePath& store_path,
- const bool reset_succeeds)
+ const bool reset_succeeds,
+ const bool hash_prefix_matches)
: V4Store(
task_runner,
base::FilePath(store_path.value() + FILE_PATH_LITERAL(".fake"))),
+ hash_prefix_should_match_(hash_prefix_matches),
reset_succeeds_(reset_succeeds) {}
bool Reset() override { return reset_succeeds_; }
+ HashPrefix GetMatchingHashPrefix(const FullHash& full_hash) override {
+ return hash_prefix_should_match_ ? full_hash : HashPrefix();
+ }
+
+ void set_hash_prefix_matches(bool hash_prefix_matches) {
+ hash_prefix_should_match_ = hash_prefix_matches;
+ }
+
private:
+ bool hash_prefix_should_match_;
bool reset_succeeds_;
};
@@ -36,24 +47,30 @@ class FakeV4Store : public V4Store {
// always return true. This is used to test the Reset() method in V4Database.
class FakeV4StoreFactory : public V4StoreFactory {
public:
- FakeV4StoreFactory(bool next_store_reset_fails)
- : next_store_reset_fails_(next_store_reset_fails) {}
+ FakeV4StoreFactory(bool next_store_reset_fails, bool hash_prefix_matches)
+ : hash_prefix_should_match_(hash_prefix_matches),
+ next_store_reset_fails_(next_store_reset_fails) {}
V4Store* CreateV4Store(
const scoped_refptr<base::SequencedTaskRunner>& task_runner,
const base::FilePath& store_path) override {
bool reset_succeeds = !next_store_reset_fails_;
next_store_reset_fails_ = false;
- return new FakeV4Store(task_runner, store_path, reset_succeeds);
+ return new FakeV4Store(task_runner, store_path, reset_succeeds,
+ hash_prefix_should_match_);
}
private:
+ bool hash_prefix_should_match_;
bool next_store_reset_fails_;
};
class V4DatabaseTest : public PlatformTest {
public:
- V4DatabaseTest() : task_runner_(new base::TestSimpleTaskRunner) {}
+ V4DatabaseTest()
+ : task_runner_(new base::TestSimpleTaskRunner),
+ linux_malware_id_(LINUX_PLATFORM, URL, MALWARE_THREAT),
+ win_malware_id_(WINDOWS_PLATFORM, URL, MALWARE_THREAT) {}
void SetUp() override {
PlatformTest::SetUp();
@@ -80,21 +97,21 @@ class V4DatabaseTest : public PlatformTest {
PlatformTest::TearDown();
}
- void RegisterFactory(bool fails_first_reset) {
- factory_.reset(new FakeV4StoreFactory(fails_first_reset));
+ void RegisterFactory(bool fails_first_reset,
+ bool hash_prefix_matches = true) {
+ factory_.reset(
+ new FakeV4StoreFactory(fails_first_reset, hash_prefix_matches));
V4Database::RegisterStoreFactoryForTest(factory_.get());
}
void SetupInfoMapAndExpectedState() {
- UpdateListIdentifier win_malware_id(WINDOWS_PLATFORM, URL, MALWARE_THREAT);
- store_file_name_map_[win_malware_id] = "win_url_malware";
- expected_identifiers_.push_back(win_malware_id);
+ store_file_name_map_[win_malware_id_] = "win_url_malware";
+ expected_identifiers_.push_back(win_malware_id_);
expected_store_paths_.push_back(
database_dirname_.AppendASCII("win_url_malware.fake"));
- UpdateListIdentifier linux_malware_id(LINUX_PLATFORM, URL, MALWARE_THREAT);
- store_file_name_map_[linux_malware_id] = "linux_url_malware";
- expected_identifiers_.push_back(linux_malware_id);
+ store_file_name_map_[linux_malware_id_] = "linux_url_malware";
+ expected_identifiers_.push_back(linux_malware_id_);
expected_store_paths_.push_back(
database_dirname_.AppendASCII("linux_url_malware.fake"));
}
@@ -192,6 +209,7 @@ class V4DatabaseTest : public PlatformTest {
NewDatabaseReadyCallback callback_db_ready_;
StoreStateMap expected_store_state_map_;
base::hash_map<UpdateListIdentifier, V4Store*> old_stores_map_;
+ const UpdateListIdentifier linux_malware_id_, win_malware_id_;
};
// Test to set up the database with fake stores.
@@ -346,4 +364,104 @@ TEST_F(V4DatabaseTest, TestApplyUpdateWithInvalidUpdate) {
VerifyExpectedStoresState(false);
}
+// Test to ensure the case that all stores match a given full hash.
+TEST_F(V4DatabaseTest, TestAllStoresMatchFullHash) {
+ bool hash_prefix_matches = true;
+ expected_resets_successfully_ = true;
+ RegisterFactory(!expected_resets_successfully_, hash_prefix_matches);
+
+ V4Database::Create(task_runner_, database_dirname_, store_file_name_map_,
+ callback_db_ready_);
+ created_but_not_called_back_ = true;
+ task_runner_->RunPendingTasks();
+
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(true, created_and_called_back_);
+
+ base::hash_set<UpdateListIdentifier> stores_to_look(
+ {linux_malware_id_, win_malware_id_});
+ MatchedHashPrefixMap matched_hash_prefix_map;
+ v4_database_->GetStoresMatchingFullHash("anything", stores_to_look,
+ &matched_hash_prefix_map);
+ EXPECT_EQ(2u, matched_hash_prefix_map.size());
+ EXPECT_FALSE(matched_hash_prefix_map[linux_malware_id_].empty());
+ EXPECT_FALSE(matched_hash_prefix_map[win_malware_id_].empty());
+}
+
+// Test to ensure the case that no stores match a given full hash.
+TEST_F(V4DatabaseTest, TestNoStoreMatchesFullHash) {
+ bool hash_prefix_matches = false;
+ expected_resets_successfully_ = true;
+ RegisterFactory(!expected_resets_successfully_, hash_prefix_matches);
+
+ V4Database::Create(task_runner_, database_dirname_, store_file_name_map_,
+ callback_db_ready_);
+ created_but_not_called_back_ = true;
+ task_runner_->RunPendingTasks();
+
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(true, created_and_called_back_);
+
+ base::hash_set<UpdateListIdentifier> stores_to_look(
+ {linux_malware_id_, win_malware_id_});
+ MatchedHashPrefixMap matched_hash_prefix_map;
+ v4_database_->GetStoresMatchingFullHash("anything", stores_to_look,
+ &matched_hash_prefix_map);
+ EXPECT_TRUE(matched_hash_prefix_map.empty());
+}
+
+// Test to ensure the case that some stores match a given full hash.
+TEST_F(V4DatabaseTest, TestSomeStoresMatchFullHash) {
+ // Setup stores to not match the full hash.
+ bool hash_prefix_matches = false;
+ expected_resets_successfully_ = true;
+ RegisterFactory(!expected_resets_successfully_, hash_prefix_matches);
+
+ V4Database::Create(task_runner_, database_dirname_, store_file_name_map_,
+ callback_db_ready_);
+ created_but_not_called_back_ = true;
+ task_runner_->RunPendingTasks();
+
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(true, created_and_called_back_);
+
+ // Set the store corresponding to linux_malware_id_ to match the full hash.
+ FakeV4Store* store = static_cast<FakeV4Store*>(
+ v4_database_->store_map_->at(linux_malware_id_).get());
+ store->set_hash_prefix_matches(true);
+
+ base::hash_set<UpdateListIdentifier> stores_to_look(
+ {linux_malware_id_, win_malware_id_});
+ MatchedHashPrefixMap matched_hash_prefix_map;
+ v4_database_->GetStoresMatchingFullHash("anything", stores_to_look,
+ &matched_hash_prefix_map);
+ EXPECT_EQ(1u, matched_hash_prefix_map.size());
+ EXPECT_FALSE(matched_hash_prefix_map[linux_malware_id_].empty());
+}
+
+// Test to ensure the case that only some stores are reported to match a given
+// full hash because of stores_to_look.
+TEST_F(V4DatabaseTest, TestSomeStoresMatchFullHashBecauseOfStoresToMatch) {
+ // Setup all stores to match the full hash.
+ bool hash_prefix_matches = true;
+ expected_resets_successfully_ = true;
+ RegisterFactory(!expected_resets_successfully_, hash_prefix_matches);
+
+ V4Database::Create(task_runner_, database_dirname_, store_file_name_map_,
+ callback_db_ready_);
+ created_but_not_called_back_ = true;
+ task_runner_->RunPendingTasks();
+
+ base::RunLoop().RunUntilIdle();
+ EXPECT_EQ(true, created_and_called_back_);
+
+ base::hash_set<UpdateListIdentifier> stores_to_look({linux_malware_id_});
+ // Don't add win_malware_id_ to the stores_to_look.
+ MatchedHashPrefixMap matched_hash_prefix_map;
+ v4_database_->GetStoresMatchingFullHash("anything", stores_to_look,
+ &matched_hash_prefix_map);
+ EXPECT_EQ(1u, matched_hash_prefix_map.size());
+ EXPECT_FALSE(matched_hash_prefix_map[linux_malware_id_].empty());
+}
+
} // namespace safe_browsing
« no previous file with comments | « components/safe_browsing_db/v4_database.cc ('k') | components/safe_browsing_db/v4_store.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698