Index: chrome/browser/safe_browsing/prefix_set_unittest.cc |
diff --git a/chrome/browser/safe_browsing/prefix_set_unittest.cc b/chrome/browser/safe_browsing/prefix_set_unittest.cc |
index cca5c0f29d1ee0fef87a6298c5278fe7446229d0..50e15caca5d2281cf6d40a4a84e0c011faad8d65 100644 |
--- a/chrome/browser/safe_browsing/prefix_set_unittest.cc |
+++ b/chrome/browser/safe_browsing/prefix_set_unittest.cc |
@@ -42,26 +42,26 @@ class PrefixSetTest : public PlatformTest { |
// Check that all elements of |prefixes| are in |prefix_set|, and |
// that nearby elements are not (for lack of a more sensible set of |
// items to check for absence). |
- static void CheckPrefixes(safe_browsing::PrefixSet* prefix_set, |
+ static void CheckPrefixes(const safe_browsing::PrefixSet& prefix_set, |
const std::vector<SBPrefix> &prefixes) { |
// The set can generate the prefixes it believes it has, so that's |
// a good starting point. |
std::set<SBPrefix> check(prefixes.begin(), prefixes.end()); |
std::vector<SBPrefix> prefixes_copy; |
- prefix_set->GetPrefixes(&prefixes_copy); |
+ prefix_set.GetPrefixes(&prefixes_copy); |
EXPECT_EQ(prefixes_copy.size(), check.size()); |
EXPECT_TRUE(std::equal(check.begin(), check.end(), prefixes_copy.begin())); |
for (size_t i = 0; i < prefixes.size(); ++i) { |
- EXPECT_TRUE(prefix_set->Exists(prefixes[i])); |
+ EXPECT_TRUE(prefix_set.Exists(prefixes[i])); |
const SBPrefix left_sibling = prefixes[i] - 1; |
if (check.count(left_sibling) == 0) |
- EXPECT_FALSE(prefix_set->Exists(left_sibling)); |
+ EXPECT_FALSE(prefix_set.Exists(left_sibling)); |
const SBPrefix right_sibling = prefixes[i] + 1; |
if (check.count(right_sibling) == 0) |
- EXPECT_FALSE(prefix_set->Exists(right_sibling)); |
+ EXPECT_FALSE(prefix_set.Exists(right_sibling)); |
} |
} |
@@ -154,7 +154,7 @@ std::vector<SBPrefix> PrefixSetTest::shared_prefixes_; |
// Test that a small sparse random input works. |
TEST_F(PrefixSetTest, Baseline) { |
safe_browsing::PrefixSet prefix_set(shared_prefixes_); |
- CheckPrefixes(&prefix_set, shared_prefixes_); |
+ CheckPrefixes(prefix_set, shared_prefixes_); |
} |
// Test that the empty set doesn't appear to have anything in it. |
@@ -306,17 +306,47 @@ TEST_F(PrefixSetTest, EdgeCases) { |
} |
} |
-// Similar to Baseline test, but write the set out to a file and read |
-// it back in before testing. |
+// Test writing a prefix set to disk and reading it back in. |
TEST_F(PrefixSetTest, ReadWrite) { |
FilePath filename; |
- ASSERT_TRUE(GetPrefixSetFile(&filename)); |
- scoped_ptr<safe_browsing::PrefixSet> |
- prefix_set(safe_browsing::PrefixSet::LoadFile(filename)); |
- ASSERT_TRUE(prefix_set.get()); |
+ // Write the sample prefix set out, read it back in, and check all |
+ // the prefixes. Leaves the path in |filename|. |
+ { |
+ ASSERT_TRUE(GetPrefixSetFile(&filename)); |
+ scoped_ptr<safe_browsing::PrefixSet> |
+ prefix_set(safe_browsing::PrefixSet::LoadFile(filename)); |
+ ASSERT_TRUE(prefix_set.get()); |
+ CheckPrefixes(*prefix_set, shared_prefixes_); |
+ } |
+ |
+ // Test writing and reading a very sparse set containing no deltas. |
+ { |
+ const SBPrefix kVeryPositive = 1000 * 1000 * 1000; |
+ const SBPrefix kVeryNegative = -kVeryPositive; |
+ |
+ std::vector<SBPrefix> prefixes; |
+ prefixes.push_back(kVeryNegative); |
+ prefixes.push_back(kVeryPositive); |
+ |
+ safe_browsing::PrefixSet prefix_set_to_write(prefixes); |
+ ASSERT_TRUE(prefix_set_to_write.WriteFile(filename)); |
+ scoped_ptr<safe_browsing::PrefixSet> |
+ prefix_set(safe_browsing::PrefixSet::LoadFile(filename)); |
+ ASSERT_TRUE(prefix_set.get()); |
+ CheckPrefixes(*prefix_set, prefixes); |
+ } |
- CheckPrefixes(prefix_set.get(), shared_prefixes_); |
+ // Test writing and reading an empty set. |
+ { |
+ std::vector<SBPrefix> prefixes; |
+ safe_browsing::PrefixSet prefix_set_to_write(prefixes); |
+ ASSERT_TRUE(prefix_set_to_write.WriteFile(filename)); |
+ scoped_ptr<safe_browsing::PrefixSet> |
+ prefix_set(safe_browsing::PrefixSet::LoadFile(filename)); |
+ ASSERT_TRUE(prefix_set.get()); |
+ CheckPrefixes(*prefix_set, prefixes); |
+ } |
} |
// Check that |CleanChecksum()| makes an acceptable checksum. |