OLD | NEW |
---|---|
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 "chrome/browser/safe_browsing/safe_browsing_store_file.h" | 5 #include "chrome/browser/safe_browsing/safe_browsing_store_file.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/files/file_util.h" | 8 #include "base/files/file_util.h" |
9 #include "base/files/scoped_file.h" | 9 #include "base/files/scoped_file.h" |
10 #include "base/files/scoped_temp_dir.h" | 10 #include "base/files/scoped_temp_dir.h" |
11 #include "base/md5.h" | 11 #include "base/md5.h" |
12 #include "base/path_service.h" | 12 #include "base/path_service.h" |
13 #include "base/test/test_simple_task_runner.h" | 13 #include "base/test/test_simple_task_runner.h" |
14 #include "chrome/common/chrome_paths.h" | 14 #include "chrome/common/chrome_paths.h" |
15 #include "components/safe_browsing_db/prefix_set.h" | 15 #include "components/safe_browsing_db/prefix_set.h" |
16 #include "components/safe_browsing_db/util.h" | 16 #include "components/safe_browsing_db/util.h" |
17 #include "testing/gtest/include/gtest/gtest.h" | 17 #include "testing/gtest/include/gtest/gtest.h" |
18 #include "testing/platform_test.h" | 18 #include "testing/platform_test.h" |
19 | 19 |
20 namespace { | 20 namespace safe_browsing { |
21 | 21 |
22 const int kAddChunk1 = 1; | 22 const int kAddChunk1 = 1; |
23 const int kAddChunk2 = 3; | 23 const int kAddChunk2 = 3; |
24 const int kAddChunk3 = 5; | 24 const int kAddChunk3 = 5; |
25 const int kAddChunk4 = 7; | 25 const int kAddChunk4 = 7; |
26 // Disjoint chunk numbers for subs to flush out typos. | 26 // Disjoint chunk numbers for subs to flush out typos. |
27 const int kSubChunk1 = 2; | 27 const int kSubChunk1 = 2; |
28 const int kSubChunk2 = 4; | 28 const int kSubChunk2 = 4; |
29 | 29 |
30 const SBFullHash kHash1 = safe_browsing::SBFullHashForString("one"); | 30 const SBFullHash kHash1 = SBFullHashForString("one"); |
31 const SBFullHash kHash2 = safe_browsing::SBFullHashForString("two"); | 31 const SBFullHash kHash2 = SBFullHashForString("two"); |
32 const SBFullHash kHash3 = safe_browsing::SBFullHashForString("three"); | 32 const SBFullHash kHash3 = SBFullHashForString("three"); |
33 const SBFullHash kHash4 = safe_browsing::SBFullHashForString("four"); | 33 const SBFullHash kHash4 = SBFullHashForString("four"); |
34 const SBFullHash kHash5 = safe_browsing::SBFullHashForString("five"); | 34 const SBFullHash kHash5 = SBFullHashForString("five"); |
35 const SBFullHash kHash6 = safe_browsing::SBFullHashForString("six"); | 35 const SBFullHash kHash6 = SBFullHashForString("six"); |
36 | 36 |
37 const SBPrefix kMinSBPrefix = 0u; | 37 const SBPrefix kMinSBPrefix = 0u; |
38 const SBPrefix kMaxSBPrefix = ~kMinSBPrefix; | 38 const SBPrefix kMaxSBPrefix = ~kMinSBPrefix; |
39 | 39 |
40 } // namespace | |
mattm
2015/11/11 01:10:16
Keep the anon namespace inside the new namespace.
vakh (old account. dont use)
2015/11/11 18:59:53
Done.
| |
41 | |
42 namespace safe_browsing { | |
43 | |
44 class SafeBrowsingStoreFileTest : public PlatformTest { | 40 class SafeBrowsingStoreFileTest : public PlatformTest { |
45 public: | 41 public: |
46 SafeBrowsingStoreFileTest() | 42 SafeBrowsingStoreFileTest() |
47 : task_runner_(new base::TestSimpleTaskRunner), | 43 : task_runner_(new base::TestSimpleTaskRunner), |
48 corruption_detected_(false) {} | 44 corruption_detected_(false) {} |
49 | 45 |
50 void SetUp() override { | 46 void SetUp() override { |
51 PlatformTest::SetUp(); | 47 PlatformTest::SetUp(); |
52 | 48 |
53 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); | 49 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
95 EXPECT_TRUE(store_->CheckAddChunk(kAddChunk2)); | 91 EXPECT_TRUE(store_->CheckAddChunk(kAddChunk2)); |
96 EXPECT_TRUE(store_->WriteAddHash(kAddChunk2, kHash4)); | 92 EXPECT_TRUE(store_->WriteAddHash(kAddChunk2, kHash4)); |
97 EXPECT_TRUE(store_->FinishChunk()); | 93 EXPECT_TRUE(store_->FinishChunk()); |
98 | 94 |
99 // Chunk numbers shouldn't leak over. | 95 // Chunk numbers shouldn't leak over. |
100 EXPECT_FALSE(store_->CheckAddChunk(kSubChunk1)); | 96 EXPECT_FALSE(store_->CheckAddChunk(kSubChunk1)); |
101 EXPECT_FALSE(store_->CheckAddChunk(kAddChunk3)); | 97 EXPECT_FALSE(store_->CheckAddChunk(kAddChunk3)); |
102 EXPECT_FALSE(store_->CheckSubChunk(kAddChunk1)); | 98 EXPECT_FALSE(store_->CheckSubChunk(kAddChunk1)); |
103 EXPECT_FALSE(store_->CheckSubChunk(kAddChunk2)); | 99 EXPECT_FALSE(store_->CheckSubChunk(kAddChunk2)); |
104 | 100 |
105 safe_browsing::PrefixSetBuilder builder; | 101 PrefixSetBuilder builder; |
106 std::vector<SBAddFullHash> add_full_hashes_result; | 102 std::vector<SBAddFullHash> add_full_hashes_result; |
107 | 103 |
108 EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result)); | 104 EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result)); |
109 } | 105 } |
110 | 106 |
111 // Manually read the shard stride info from the file. | 107 // Manually read the shard stride info from the file. |
112 uint32 ReadStride() { | 108 uint32 ReadStride() { |
113 base::ScopedFILE file(base::OpenFile(filename_, "rb")); | 109 base::ScopedFILE file(base::OpenFile(filename_, "rb")); |
114 const long kOffset = 4 * sizeof(uint32); | 110 const long kOffset = 4 * sizeof(uint32); |
115 EXPECT_EQ(fseek(file.get(), kOffset, SEEK_SET), 0); | 111 EXPECT_EQ(fseek(file.get(), kOffset, SEEK_SET), 0); |
(...skipping 21 matching lines...) Expand all Loading... | |
137 | 133 |
138 // Shouldn't see anything, but anything is a big set to test. | 134 // Shouldn't see anything, but anything is a big set to test. |
139 EXPECT_FALSE(store_->CheckAddChunk(0)); | 135 EXPECT_FALSE(store_->CheckAddChunk(0)); |
140 EXPECT_FALSE(store_->CheckAddChunk(1)); | 136 EXPECT_FALSE(store_->CheckAddChunk(1)); |
141 EXPECT_FALSE(store_->CheckAddChunk(-1)); | 137 EXPECT_FALSE(store_->CheckAddChunk(-1)); |
142 | 138 |
143 EXPECT_FALSE(store_->CheckSubChunk(0)); | 139 EXPECT_FALSE(store_->CheckSubChunk(0)); |
144 EXPECT_FALSE(store_->CheckSubChunk(1)); | 140 EXPECT_FALSE(store_->CheckSubChunk(1)); |
145 EXPECT_FALSE(store_->CheckSubChunk(-1)); | 141 EXPECT_FALSE(store_->CheckSubChunk(-1)); |
146 | 142 |
147 safe_browsing::PrefixSetBuilder builder; | 143 PrefixSetBuilder builder; |
148 std::vector<SBAddFullHash> add_full_hashes_result; | 144 std::vector<SBAddFullHash> add_full_hashes_result; |
149 | 145 |
150 EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result)); | 146 EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result)); |
151 EXPECT_TRUE(add_full_hashes_result.empty()); | 147 EXPECT_TRUE(add_full_hashes_result.empty()); |
152 | 148 |
153 std::vector<SBPrefix> prefixes_result; | 149 std::vector<SBPrefix> prefixes_result; |
154 builder.GetPrefixSetNoHashes()->GetPrefixes(&prefixes_result); | 150 builder.GetPrefixSetNoHashes()->GetPrefixes(&prefixes_result); |
155 EXPECT_TRUE(prefixes_result.empty()); | 151 EXPECT_TRUE(prefixes_result.empty()); |
156 } | 152 } |
157 | 153 |
(...skipping 17 matching lines...) Expand all Loading... | |
175 EXPECT_TRUE(store_->CheckAddChunk(kAddChunk1)); | 171 EXPECT_TRUE(store_->CheckAddChunk(kAddChunk1)); |
176 EXPECT_TRUE(store_->CheckSubChunk(kSubChunk1)); | 172 EXPECT_TRUE(store_->CheckSubChunk(kSubChunk1)); |
177 | 173 |
178 EXPECT_TRUE(store_->BeginChunk()); | 174 EXPECT_TRUE(store_->BeginChunk()); |
179 store_->SetAddChunk(kAddChunk3); | 175 store_->SetAddChunk(kAddChunk3); |
180 EXPECT_TRUE(store_->WriteAddPrefix(kAddChunk3, kHash5.prefix)); | 176 EXPECT_TRUE(store_->WriteAddPrefix(kAddChunk3, kHash5.prefix)); |
181 EXPECT_TRUE(store_->FinishChunk()); | 177 EXPECT_TRUE(store_->FinishChunk()); |
182 | 178 |
183 // Still has the chunks expected in the next update. | 179 // Still has the chunks expected in the next update. |
184 { | 180 { |
185 safe_browsing::PrefixSetBuilder builder; | 181 PrefixSetBuilder builder; |
186 std::vector<SBAddFullHash> add_full_hashes_result; | 182 std::vector<SBAddFullHash> add_full_hashes_result; |
187 EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result)); | 183 EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result)); |
188 | 184 |
189 std::vector<SBPrefix> prefixes_result; | 185 std::vector<SBPrefix> prefixes_result; |
190 builder.GetPrefixSetNoHashes()->GetPrefixes(&prefixes_result); | 186 builder.GetPrefixSetNoHashes()->GetPrefixes(&prefixes_result); |
191 ASSERT_EQ(3U, prefixes_result.size()); | 187 ASSERT_EQ(3U, prefixes_result.size()); |
192 EXPECT_EQ(kHash1.prefix, prefixes_result[0]); | 188 EXPECT_EQ(kHash1.prefix, prefixes_result[0]); |
193 EXPECT_EQ(kHash5.prefix, prefixes_result[1]); | 189 EXPECT_EQ(kHash5.prefix, prefixes_result[1]); |
194 EXPECT_EQ(kHash2.prefix, prefixes_result[2]); | 190 EXPECT_EQ(kHash2.prefix, prefixes_result[2]); |
195 | 191 |
196 ASSERT_EQ(1U, add_full_hashes_result.size()); | 192 ASSERT_EQ(1U, add_full_hashes_result.size()); |
197 EXPECT_EQ(kAddChunk2, add_full_hashes_result[0].chunk_id); | 193 EXPECT_EQ(kAddChunk2, add_full_hashes_result[0].chunk_id); |
198 EXPECT_TRUE(safe_browsing::SBFullHashEqual( | 194 EXPECT_TRUE(SBFullHashEqual( |
199 kHash4, add_full_hashes_result[0].full_hash)); | 195 kHash4, add_full_hashes_result[0].full_hash)); |
200 } | 196 } |
201 } | 197 } |
202 | 198 |
203 // Verify that the min and max prefixes are stored and operated on. | 199 // Verify that the min and max prefixes are stored and operated on. |
204 TEST_F(SafeBrowsingStoreFileTest, PrefixMinMax) { | 200 TEST_F(SafeBrowsingStoreFileTest, PrefixMinMax) { |
205 PopulateStore(); | 201 PopulateStore(); |
206 | 202 |
207 ASSERT_TRUE(store_->BeginUpdate()); | 203 ASSERT_TRUE(store_->BeginUpdate()); |
208 | 204 |
209 EXPECT_TRUE(store_->BeginChunk()); | 205 EXPECT_TRUE(store_->BeginChunk()); |
210 store_->SetAddChunk(kAddChunk3); | 206 store_->SetAddChunk(kAddChunk3); |
211 EXPECT_TRUE(store_->WriteAddPrefix(kAddChunk3, kMinSBPrefix)); | 207 EXPECT_TRUE(store_->WriteAddPrefix(kAddChunk3, kMinSBPrefix)); |
212 EXPECT_TRUE(store_->WriteAddPrefix(kAddChunk3, kMaxSBPrefix)); | 208 EXPECT_TRUE(store_->WriteAddPrefix(kAddChunk3, kMaxSBPrefix)); |
213 EXPECT_TRUE(store_->FinishChunk()); | 209 EXPECT_TRUE(store_->FinishChunk()); |
214 | 210 |
215 { | 211 { |
216 safe_browsing::PrefixSetBuilder builder; | 212 PrefixSetBuilder builder; |
217 std::vector<SBAddFullHash> add_full_hashes_result; | 213 std::vector<SBAddFullHash> add_full_hashes_result; |
218 EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result)); | 214 EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result)); |
219 | 215 |
220 std::vector<SBPrefix> prefixes_result; | 216 std::vector<SBPrefix> prefixes_result; |
221 builder.GetPrefixSetNoHashes()->GetPrefixes(&prefixes_result); | 217 builder.GetPrefixSetNoHashes()->GetPrefixes(&prefixes_result); |
222 ASSERT_EQ(4U, prefixes_result.size()); | 218 ASSERT_EQ(4U, prefixes_result.size()); |
223 EXPECT_EQ(kMinSBPrefix, prefixes_result[0]); | 219 EXPECT_EQ(kMinSBPrefix, prefixes_result[0]); |
224 EXPECT_EQ(kHash1.prefix, prefixes_result[1]); | 220 EXPECT_EQ(kHash1.prefix, prefixes_result[1]); |
225 EXPECT_EQ(kHash2.prefix, prefixes_result[2]); | 221 EXPECT_EQ(kHash2.prefix, prefixes_result[2]); |
226 EXPECT_EQ(kMaxSBPrefix, prefixes_result[3]); | 222 EXPECT_EQ(kMaxSBPrefix, prefixes_result[3]); |
227 } | 223 } |
228 | 224 |
229 ASSERT_TRUE(store_->BeginUpdate()); | 225 ASSERT_TRUE(store_->BeginUpdate()); |
230 | 226 |
231 EXPECT_TRUE(store_->BeginChunk()); | 227 EXPECT_TRUE(store_->BeginChunk()); |
232 store_->SetAddChunk(kSubChunk2); | 228 store_->SetAddChunk(kSubChunk2); |
233 EXPECT_TRUE(store_->WriteSubPrefix(kSubChunk2, kAddChunk3, kMinSBPrefix)); | 229 EXPECT_TRUE(store_->WriteSubPrefix(kSubChunk2, kAddChunk3, kMinSBPrefix)); |
234 EXPECT_TRUE(store_->WriteSubPrefix(kSubChunk2, kAddChunk3, kMaxSBPrefix)); | 230 EXPECT_TRUE(store_->WriteSubPrefix(kSubChunk2, kAddChunk3, kMaxSBPrefix)); |
235 EXPECT_TRUE(store_->FinishChunk()); | 231 EXPECT_TRUE(store_->FinishChunk()); |
236 | 232 |
237 { | 233 { |
238 safe_browsing::PrefixSetBuilder builder; | 234 PrefixSetBuilder builder; |
239 std::vector<SBAddFullHash> add_full_hashes_result; | 235 std::vector<SBAddFullHash> add_full_hashes_result; |
240 EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result)); | 236 EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result)); |
241 | 237 |
242 std::vector<SBPrefix> prefixes_result; | 238 std::vector<SBPrefix> prefixes_result; |
243 builder.GetPrefixSetNoHashes()->GetPrefixes(&prefixes_result); | 239 builder.GetPrefixSetNoHashes()->GetPrefixes(&prefixes_result); |
244 ASSERT_EQ(2U, prefixes_result.size()); | 240 ASSERT_EQ(2U, prefixes_result.size()); |
245 EXPECT_EQ(kHash1.prefix, prefixes_result[0]); | 241 EXPECT_EQ(kHash1.prefix, prefixes_result[0]); |
246 EXPECT_EQ(kHash2.prefix, prefixes_result[1]); | 242 EXPECT_EQ(kHash2.prefix, prefixes_result[1]); |
247 } | 243 } |
248 } | 244 } |
(...skipping 13 matching lines...) Expand all Loading... | |
262 EXPECT_TRUE(store_->WriteAddHash(kAddChunk2, kHash4)); | 258 EXPECT_TRUE(store_->WriteAddHash(kAddChunk2, kHash4)); |
263 EXPECT_TRUE(store_->FinishChunk()); | 259 EXPECT_TRUE(store_->FinishChunk()); |
264 | 260 |
265 EXPECT_TRUE(store_->BeginChunk()); | 261 EXPECT_TRUE(store_->BeginChunk()); |
266 store_->SetSubChunk(kSubChunk1); | 262 store_->SetSubChunk(kSubChunk1); |
267 EXPECT_TRUE(store_->WriteSubPrefix(kSubChunk1, kAddChunk3, kHash3.prefix)); | 263 EXPECT_TRUE(store_->WriteSubPrefix(kSubChunk1, kAddChunk3, kHash3.prefix)); |
268 EXPECT_TRUE(store_->WriteSubPrefix(kSubChunk1, kAddChunk1, kHash2.prefix)); | 264 EXPECT_TRUE(store_->WriteSubPrefix(kSubChunk1, kAddChunk1, kHash2.prefix)); |
269 EXPECT_TRUE(store_->FinishChunk()); | 265 EXPECT_TRUE(store_->FinishChunk()); |
270 | 266 |
271 { | 267 { |
272 safe_browsing::PrefixSetBuilder builder; | 268 PrefixSetBuilder builder; |
273 std::vector<SBAddFullHash> add_full_hashes_result; | 269 std::vector<SBAddFullHash> add_full_hashes_result; |
274 EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result)); | 270 EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result)); |
275 | 271 |
276 // Knocked out the chunk expected. | 272 // Knocked out the chunk expected. |
277 std::vector<SBPrefix> prefixes_result; | 273 std::vector<SBPrefix> prefixes_result; |
278 builder.GetPrefixSetNoHashes()->GetPrefixes(&prefixes_result); | 274 builder.GetPrefixSetNoHashes()->GetPrefixes(&prefixes_result); |
279 ASSERT_EQ(1U, prefixes_result.size()); | 275 ASSERT_EQ(1U, prefixes_result.size()); |
280 EXPECT_EQ(kHash1.prefix, prefixes_result[0]); | 276 EXPECT_EQ(kHash1.prefix, prefixes_result[0]); |
281 | 277 |
282 ASSERT_EQ(1U, add_full_hashes_result.size()); | 278 ASSERT_EQ(1U, add_full_hashes_result.size()); |
283 EXPECT_EQ(kAddChunk2, add_full_hashes_result[0].chunk_id); | 279 EXPECT_EQ(kAddChunk2, add_full_hashes_result[0].chunk_id); |
284 EXPECT_TRUE(safe_browsing::SBFullHashEqual( | 280 EXPECT_TRUE(SBFullHashEqual( |
285 kHash4, add_full_hashes_result[0].full_hash)); | 281 kHash4, add_full_hashes_result[0].full_hash)); |
286 } | 282 } |
287 | 283 |
288 ASSERT_TRUE(store_->BeginUpdate()); | 284 ASSERT_TRUE(store_->BeginUpdate()); |
289 | 285 |
290 // This add should be knocked out by an existing sub. | 286 // This add should be knocked out by an existing sub. |
291 EXPECT_TRUE(store_->BeginChunk()); | 287 EXPECT_TRUE(store_->BeginChunk()); |
292 store_->SetAddChunk(kAddChunk3); | 288 store_->SetAddChunk(kAddChunk3); |
293 EXPECT_TRUE(store_->WriteAddPrefix(kAddChunk3, kHash3.prefix)); | 289 EXPECT_TRUE(store_->WriteAddPrefix(kAddChunk3, kHash3.prefix)); |
294 EXPECT_TRUE(store_->FinishChunk()); | 290 EXPECT_TRUE(store_->FinishChunk()); |
295 | 291 |
296 { | 292 { |
297 safe_browsing::PrefixSetBuilder builder; | 293 PrefixSetBuilder builder; |
298 std::vector<SBAddFullHash> add_full_hashes_result; | 294 std::vector<SBAddFullHash> add_full_hashes_result; |
299 EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result)); | 295 EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result)); |
300 | 296 |
301 std::vector<SBPrefix> prefixes_result; | 297 std::vector<SBPrefix> prefixes_result; |
302 builder.GetPrefixSetNoHashes()->GetPrefixes(&prefixes_result); | 298 builder.GetPrefixSetNoHashes()->GetPrefixes(&prefixes_result); |
303 ASSERT_EQ(1U, prefixes_result.size()); | 299 ASSERT_EQ(1U, prefixes_result.size()); |
304 EXPECT_EQ(kHash1.prefix, prefixes_result[0]); | 300 EXPECT_EQ(kHash1.prefix, prefixes_result[0]); |
305 | 301 |
306 ASSERT_EQ(1U, add_full_hashes_result.size()); | 302 ASSERT_EQ(1U, add_full_hashes_result.size()); |
307 EXPECT_EQ(kAddChunk2, add_full_hashes_result[0].chunk_id); | 303 EXPECT_EQ(kAddChunk2, add_full_hashes_result[0].chunk_id); |
308 EXPECT_TRUE(safe_browsing::SBFullHashEqual( | 304 EXPECT_TRUE(SBFullHashEqual( |
309 kHash4, add_full_hashes_result[0].full_hash)); | 305 kHash4, add_full_hashes_result[0].full_hash)); |
310 } | 306 } |
311 | 307 |
312 ASSERT_TRUE(store_->BeginUpdate()); | 308 ASSERT_TRUE(store_->BeginUpdate()); |
313 | 309 |
314 // But by here the sub should be gone, so it should stick this time. | 310 // But by here the sub should be gone, so it should stick this time. |
315 EXPECT_TRUE(store_->BeginChunk()); | 311 EXPECT_TRUE(store_->BeginChunk()); |
316 store_->SetAddChunk(kAddChunk3); | 312 store_->SetAddChunk(kAddChunk3); |
317 EXPECT_TRUE(store_->WriteAddPrefix(kAddChunk3, kHash3.prefix)); | 313 EXPECT_TRUE(store_->WriteAddPrefix(kAddChunk3, kHash3.prefix)); |
318 EXPECT_TRUE(store_->FinishChunk()); | 314 EXPECT_TRUE(store_->FinishChunk()); |
319 | 315 |
320 { | 316 { |
321 safe_browsing::PrefixSetBuilder builder; | 317 PrefixSetBuilder builder; |
322 std::vector<SBAddFullHash> add_full_hashes_result; | 318 std::vector<SBAddFullHash> add_full_hashes_result; |
323 EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result)); | 319 EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result)); |
324 | 320 |
325 std::vector<SBPrefix> prefixes_result; | 321 std::vector<SBPrefix> prefixes_result; |
326 builder.GetPrefixSetNoHashes()->GetPrefixes(&prefixes_result); | 322 builder.GetPrefixSetNoHashes()->GetPrefixes(&prefixes_result); |
327 ASSERT_EQ(2U, prefixes_result.size()); | 323 ASSERT_EQ(2U, prefixes_result.size()); |
328 EXPECT_EQ(kHash1.prefix, prefixes_result[0]); | 324 EXPECT_EQ(kHash1.prefix, prefixes_result[0]); |
329 EXPECT_EQ(kHash3.prefix, prefixes_result[1]); | 325 EXPECT_EQ(kHash3.prefix, prefixes_result[1]); |
330 | 326 |
331 ASSERT_EQ(1U, add_full_hashes_result.size()); | 327 ASSERT_EQ(1U, add_full_hashes_result.size()); |
332 EXPECT_EQ(kAddChunk2, add_full_hashes_result[0].chunk_id); | 328 EXPECT_EQ(kAddChunk2, add_full_hashes_result[0].chunk_id); |
333 EXPECT_TRUE(safe_browsing::SBFullHashEqual( | 329 EXPECT_TRUE(SBFullHashEqual( |
334 kHash4, add_full_hashes_result[0].full_hash)); | 330 kHash4, add_full_hashes_result[0].full_hash)); |
335 } | 331 } |
336 } | 332 } |
337 | 333 |
338 // Test that deletes delete the chunk's data. | 334 // Test that deletes delete the chunk's data. |
339 TEST_F(SafeBrowsingStoreFileTest, DeleteChunks) { | 335 TEST_F(SafeBrowsingStoreFileTest, DeleteChunks) { |
340 ASSERT_TRUE(store_->BeginUpdate()); | 336 ASSERT_TRUE(store_->BeginUpdate()); |
341 | 337 |
342 // A prefix chunk which will be deleted. | 338 // A prefix chunk which will be deleted. |
343 EXPECT_FALSE(store_->CheckAddChunk(kAddChunk1)); | 339 EXPECT_FALSE(store_->CheckAddChunk(kAddChunk1)); |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
379 store_->DeleteSubChunk(kSubChunk1); | 375 store_->DeleteSubChunk(kSubChunk1); |
380 | 376 |
381 // Not actually deleted until finish. | 377 // Not actually deleted until finish. |
382 EXPECT_TRUE(store_->CheckAddChunk(kAddChunk1)); | 378 EXPECT_TRUE(store_->CheckAddChunk(kAddChunk1)); |
383 EXPECT_TRUE(store_->CheckAddChunk(kAddChunk2)); | 379 EXPECT_TRUE(store_->CheckAddChunk(kAddChunk2)); |
384 EXPECT_TRUE(store_->CheckAddChunk(kAddChunk3)); | 380 EXPECT_TRUE(store_->CheckAddChunk(kAddChunk3)); |
385 EXPECT_TRUE(store_->CheckSubChunk(kSubChunk1)); | 381 EXPECT_TRUE(store_->CheckSubChunk(kSubChunk1)); |
386 EXPECT_TRUE(store_->CheckSubChunk(kSubChunk2)); | 382 EXPECT_TRUE(store_->CheckSubChunk(kSubChunk2)); |
387 | 383 |
388 { | 384 { |
389 safe_browsing::PrefixSetBuilder builder; | 385 PrefixSetBuilder builder; |
390 std::vector<SBAddFullHash> add_full_hashes_result; | 386 std::vector<SBAddFullHash> add_full_hashes_result; |
391 EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result)); | 387 EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result)); |
392 | 388 |
393 std::vector<SBPrefix> prefixes_result; | 389 std::vector<SBPrefix> prefixes_result; |
394 builder.GetPrefixSetNoHashes()->GetPrefixes(&prefixes_result); | 390 builder.GetPrefixSetNoHashes()->GetPrefixes(&prefixes_result); |
395 ASSERT_EQ(1U, prefixes_result.size()); | 391 ASSERT_EQ(1U, prefixes_result.size()); |
396 EXPECT_EQ(kHash3.prefix, prefixes_result[0]); | 392 EXPECT_EQ(kHash3.prefix, prefixes_result[0]); |
397 | 393 |
398 ASSERT_EQ(1U, add_full_hashes_result.size()); | 394 ASSERT_EQ(1U, add_full_hashes_result.size()); |
399 EXPECT_EQ(kAddChunk3, add_full_hashes_result[0].chunk_id); | 395 EXPECT_EQ(kAddChunk3, add_full_hashes_result[0].chunk_id); |
400 EXPECT_TRUE(safe_browsing::SBFullHashEqual( | 396 EXPECT_TRUE(SBFullHashEqual( |
401 kHash6, add_full_hashes_result[0].full_hash)); | 397 kHash6, add_full_hashes_result[0].full_hash)); |
402 } | 398 } |
403 | 399 |
404 // Expected chunks are there in another update. | 400 // Expected chunks are there in another update. |
405 ASSERT_TRUE(store_->BeginUpdate()); | 401 ASSERT_TRUE(store_->BeginUpdate()); |
406 EXPECT_FALSE(store_->CheckAddChunk(kAddChunk1)); | 402 EXPECT_FALSE(store_->CheckAddChunk(kAddChunk1)); |
407 EXPECT_TRUE(store_->CheckAddChunk(kAddChunk2)); | 403 EXPECT_TRUE(store_->CheckAddChunk(kAddChunk2)); |
408 EXPECT_TRUE(store_->CheckAddChunk(kAddChunk3)); | 404 EXPECT_TRUE(store_->CheckAddChunk(kAddChunk3)); |
409 EXPECT_FALSE(store_->CheckSubChunk(kSubChunk1)); | 405 EXPECT_FALSE(store_->CheckSubChunk(kSubChunk1)); |
410 EXPECT_TRUE(store_->CheckSubChunk(kSubChunk2)); | 406 EXPECT_TRUE(store_->CheckSubChunk(kSubChunk2)); |
411 | 407 |
412 // Delete them, too. | 408 // Delete them, too. |
413 store_->DeleteAddChunk(kAddChunk2); | 409 store_->DeleteAddChunk(kAddChunk2); |
414 store_->DeleteAddChunk(kAddChunk3); | 410 store_->DeleteAddChunk(kAddChunk3); |
415 store_->DeleteSubChunk(kSubChunk2); | 411 store_->DeleteSubChunk(kSubChunk2); |
416 | 412 |
417 { | 413 { |
418 safe_browsing::PrefixSetBuilder builder; | 414 PrefixSetBuilder builder; |
419 std::vector<SBAddFullHash> add_full_hashes_result; | 415 std::vector<SBAddFullHash> add_full_hashes_result; |
420 EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result)); | 416 EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result)); |
421 | 417 |
422 std::vector<SBPrefix> prefixes_result; | 418 std::vector<SBPrefix> prefixes_result; |
423 builder.GetPrefixSetNoHashes()->GetPrefixes(&prefixes_result); | 419 builder.GetPrefixSetNoHashes()->GetPrefixes(&prefixes_result); |
424 EXPECT_TRUE(prefixes_result.empty()); | 420 EXPECT_TRUE(prefixes_result.empty()); |
425 EXPECT_TRUE(add_full_hashes_result.empty()); | 421 EXPECT_TRUE(add_full_hashes_result.empty()); |
426 } | 422 } |
427 | 423 |
428 // Expect no more chunks. | 424 // Expect no more chunks. |
429 ASSERT_TRUE(store_->BeginUpdate()); | 425 ASSERT_TRUE(store_->BeginUpdate()); |
430 EXPECT_FALSE(store_->CheckAddChunk(kAddChunk1)); | 426 EXPECT_FALSE(store_->CheckAddChunk(kAddChunk1)); |
431 EXPECT_FALSE(store_->CheckAddChunk(kAddChunk2)); | 427 EXPECT_FALSE(store_->CheckAddChunk(kAddChunk2)); |
432 EXPECT_FALSE(store_->CheckAddChunk(kAddChunk3)); | 428 EXPECT_FALSE(store_->CheckAddChunk(kAddChunk3)); |
433 EXPECT_FALSE(store_->CheckSubChunk(kSubChunk1)); | 429 EXPECT_FALSE(store_->CheckSubChunk(kSubChunk1)); |
434 EXPECT_FALSE(store_->CheckSubChunk(kSubChunk2)); | 430 EXPECT_FALSE(store_->CheckSubChunk(kSubChunk2)); |
435 | 431 |
436 { | 432 { |
437 safe_browsing::PrefixSetBuilder builder; | 433 PrefixSetBuilder builder; |
438 std::vector<SBAddFullHash> add_full_hashes_result; | 434 std::vector<SBAddFullHash> add_full_hashes_result; |
439 EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result)); | 435 EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result)); |
440 | 436 |
441 std::vector<SBPrefix> prefixes_result; | 437 std::vector<SBPrefix> prefixes_result; |
442 builder.GetPrefixSetNoHashes()->GetPrefixes(&prefixes_result); | 438 builder.GetPrefixSetNoHashes()->GetPrefixes(&prefixes_result); |
443 EXPECT_TRUE(prefixes_result.empty()); | 439 EXPECT_TRUE(prefixes_result.empty()); |
444 EXPECT_TRUE(add_full_hashes_result.empty()); | 440 EXPECT_TRUE(add_full_hashes_result.empty()); |
445 } | 441 } |
446 } | 442 } |
447 | 443 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
486 | 482 |
487 // Test basic corruption-handling. | 483 // Test basic corruption-handling. |
488 TEST_F(SafeBrowsingStoreFileTest, DetectsCorruption) { | 484 TEST_F(SafeBrowsingStoreFileTest, DetectsCorruption) { |
489 // Load a store with some data. | 485 // Load a store with some data. |
490 PopulateStore(); | 486 PopulateStore(); |
491 | 487 |
492 // Can successfully open and read the store. | 488 // Can successfully open and read the store. |
493 { | 489 { |
494 std::vector<SBPrefix> orig_prefixes; | 490 std::vector<SBPrefix> orig_prefixes; |
495 std::vector<SBAddFullHash> orig_hashes; | 491 std::vector<SBAddFullHash> orig_hashes; |
496 safe_browsing::PrefixSetBuilder builder; | 492 PrefixSetBuilder builder; |
497 ASSERT_TRUE(store_->BeginUpdate()); | 493 ASSERT_TRUE(store_->BeginUpdate()); |
498 EXPECT_TRUE(store_->FinishUpdate(&builder, &orig_hashes)); | 494 EXPECT_TRUE(store_->FinishUpdate(&builder, &orig_hashes)); |
499 builder.GetPrefixSetNoHashes()->GetPrefixes(&orig_prefixes); | 495 builder.GetPrefixSetNoHashes()->GetPrefixes(&orig_prefixes); |
500 EXPECT_GT(orig_prefixes.size(), 0U); | 496 EXPECT_GT(orig_prefixes.size(), 0U); |
501 EXPECT_GT(orig_hashes.size(), 0U); | 497 EXPECT_GT(orig_hashes.size(), 0U); |
502 EXPECT_FALSE(corruption_detected_); | 498 EXPECT_FALSE(corruption_detected_); |
503 } | 499 } |
504 | 500 |
505 // Corrupt the store. | 501 // Corrupt the store. |
506 base::ScopedFILE file(base::OpenFile(filename_, "rb+")); | 502 base::ScopedFILE file(base::OpenFile(filename_, "rb+")); |
507 const long kOffset = 60; | 503 const long kOffset = 60; |
508 EXPECT_EQ(fseek(file.get(), kOffset, SEEK_SET), 0); | 504 EXPECT_EQ(fseek(file.get(), kOffset, SEEK_SET), 0); |
509 const uint32 kZero = 0; | 505 const uint32 kZero = 0; |
510 uint32 previous = kZero; | 506 uint32 previous = kZero; |
511 EXPECT_EQ(fread(&previous, sizeof(previous), 1, file.get()), 1U); | 507 EXPECT_EQ(fread(&previous, sizeof(previous), 1, file.get()), 1U); |
512 EXPECT_NE(previous, kZero); | 508 EXPECT_NE(previous, kZero); |
513 EXPECT_EQ(fseek(file.get(), kOffset, SEEK_SET), 0); | 509 EXPECT_EQ(fseek(file.get(), kOffset, SEEK_SET), 0); |
514 EXPECT_EQ(fwrite(&kZero, sizeof(kZero), 1, file.get()), 1U); | 510 EXPECT_EQ(fwrite(&kZero, sizeof(kZero), 1, file.get()), 1U); |
515 file.reset(); | 511 file.reset(); |
516 | 512 |
517 // Update fails and corruption callback is called. | 513 // Update fails and corruption callback is called. |
518 std::vector<SBAddFullHash> add_hashes; | 514 std::vector<SBAddFullHash> add_hashes; |
519 corruption_detected_ = false; | 515 corruption_detected_ = false; |
520 { | 516 { |
521 safe_browsing::PrefixSetBuilder builder; | 517 PrefixSetBuilder builder; |
522 ASSERT_TRUE(store_->BeginUpdate()); | 518 ASSERT_TRUE(store_->BeginUpdate()); |
523 EXPECT_FALSE(store_->FinishUpdate(&builder, &add_hashes)); | 519 EXPECT_FALSE(store_->FinishUpdate(&builder, &add_hashes)); |
524 EXPECT_TRUE(corruption_detected_); | 520 EXPECT_TRUE(corruption_detected_); |
525 } | 521 } |
526 | 522 |
527 // Make it look like there is a lot of add-chunks-seen data. | 523 // Make it look like there is a lot of add-chunks-seen data. |
528 const long kAddChunkCountOffset = 2 * sizeof(int32); | 524 const long kAddChunkCountOffset = 2 * sizeof(int32); |
529 const int32 kLargeCount = 1000 * 1000 * 1000; | 525 const int32 kLargeCount = 1000 * 1000 * 1000; |
530 file.reset(base::OpenFile(filename_, "rb+")); | 526 file.reset(base::OpenFile(filename_, "rb+")); |
531 EXPECT_EQ(fseek(file.get(), kAddChunkCountOffset, SEEK_SET), 0); | 527 EXPECT_EQ(fseek(file.get(), kAddChunkCountOffset, SEEK_SET), 0); |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
648 std::vector<int> chunks; | 644 std::vector<int> chunks; |
649 store_->GetAddChunks(&chunks); | 645 store_->GetAddChunks(&chunks); |
650 ASSERT_EQ(2U, chunks.size()); | 646 ASSERT_EQ(2U, chunks.size()); |
651 EXPECT_EQ(kAddChunk1, chunks[0]); | 647 EXPECT_EQ(kAddChunk1, chunks[0]); |
652 EXPECT_EQ(kAddChunk2, chunks[1]); | 648 EXPECT_EQ(kAddChunk2, chunks[1]); |
653 | 649 |
654 store_->GetSubChunks(&chunks); | 650 store_->GetSubChunks(&chunks); |
655 ASSERT_EQ(1U, chunks.size()); | 651 ASSERT_EQ(1U, chunks.size()); |
656 EXPECT_EQ(kSubChunk1, chunks[0]); | 652 EXPECT_EQ(kSubChunk1, chunks[0]); |
657 | 653 |
658 safe_browsing::PrefixSetBuilder builder; | 654 PrefixSetBuilder builder; |
659 std::vector<SBAddFullHash> add_full_hashes_result; | 655 std::vector<SBAddFullHash> add_full_hashes_result; |
660 EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result)); | 656 EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result)); |
661 | 657 |
662 SBAddPrefixes add_prefixes; | 658 SBAddPrefixes add_prefixes; |
663 EXPECT_TRUE(store_->GetAddPrefixes(&add_prefixes)); | 659 EXPECT_TRUE(store_->GetAddPrefixes(&add_prefixes)); |
664 ASSERT_EQ(2U, add_prefixes.size()); | 660 ASSERT_EQ(2U, add_prefixes.size()); |
665 EXPECT_EQ(kAddChunk1, add_prefixes[0].chunk_id); | 661 EXPECT_EQ(kAddChunk1, add_prefixes[0].chunk_id); |
666 EXPECT_EQ(kHash1.prefix, add_prefixes[0].prefix); | 662 EXPECT_EQ(kHash1.prefix, add_prefixes[0].prefix); |
667 EXPECT_EQ(kAddChunk1, add_prefixes[1].chunk_id); | 663 EXPECT_EQ(kAddChunk1, add_prefixes[1].chunk_id); |
668 EXPECT_EQ(kHash2.prefix, add_prefixes[1].prefix); | 664 EXPECT_EQ(kHash2.prefix, add_prefixes[1].prefix); |
669 | 665 |
670 std::vector<SBAddFullHash> add_hashes; | 666 std::vector<SBAddFullHash> add_hashes; |
671 EXPECT_TRUE(store_->GetAddFullHashes(&add_hashes)); | 667 EXPECT_TRUE(store_->GetAddFullHashes(&add_hashes)); |
672 ASSERT_EQ(1U, add_hashes.size()); | 668 ASSERT_EQ(1U, add_hashes.size()); |
673 EXPECT_EQ(kAddChunk2, add_hashes[0].chunk_id); | 669 EXPECT_EQ(kAddChunk2, add_hashes[0].chunk_id); |
674 EXPECT_TRUE(safe_browsing::SBFullHashEqual(kHash4, add_hashes[0].full_hash)); | 670 EXPECT_TRUE(SBFullHashEqual(kHash4, add_hashes[0].full_hash)); |
675 } | 671 } |
676 | 672 |
677 // Test that the database handles resharding correctly, both when growing and | 673 // Test that the database handles resharding correctly, both when growing and |
678 // which shrinking. | 674 // which shrinking. |
679 TEST_F(SafeBrowsingStoreFileTest, Resharding) { | 675 TEST_F(SafeBrowsingStoreFileTest, Resharding) { |
680 // Loop through multiple stride boundaries (1<<32, 1<<31, 1<<30, 1<<29). | 676 // Loop through multiple stride boundaries (1<<32, 1<<31, 1<<30, 1<<29). |
681 const uint32 kTargetStride = 1 << 29; | 677 const uint32 kTargetStride = 1 << 29; |
682 | 678 |
683 // Each chunk will require 8 bytes per prefix, plus 4 bytes for chunk | 679 // Each chunk will require 8 bytes per prefix, plus 4 bytes for chunk |
684 // information. It should be less than |kTargetFootprint| in the | 680 // information. It should be less than |kTargetFootprint| in the |
(...skipping 10 matching lines...) Expand all Loading... | |
695 ASSERT_TRUE(store_->BeginUpdate()); | 691 ASSERT_TRUE(store_->BeginUpdate()); |
696 | 692 |
697 EXPECT_TRUE(store_->BeginChunk()); | 693 EXPECT_TRUE(store_->BeginChunk()); |
698 store_->SetAddChunk(chunk_id); | 694 store_->SetAddChunk(chunk_id); |
699 EXPECT_TRUE(store_->CheckAddChunk(chunk_id)); | 695 EXPECT_TRUE(store_->CheckAddChunk(chunk_id)); |
700 for (size_t i = 0; i < kPrefixesPerChunk; ++i) { | 696 for (size_t i = 0; i < kPrefixesPerChunk; ++i) { |
701 EXPECT_TRUE(store_->WriteAddPrefix(chunk_id, static_cast<SBPrefix>(i))); | 697 EXPECT_TRUE(store_->WriteAddPrefix(chunk_id, static_cast<SBPrefix>(i))); |
702 } | 698 } |
703 EXPECT_TRUE(store_->FinishChunk()); | 699 EXPECT_TRUE(store_->FinishChunk()); |
704 | 700 |
705 safe_browsing::PrefixSetBuilder builder; | 701 PrefixSetBuilder builder; |
706 std::vector<SBAddFullHash> add_full_hashes_result; | 702 std::vector<SBAddFullHash> add_full_hashes_result; |
707 EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result)); | 703 EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result)); |
708 | 704 |
709 SBAddPrefixes add_prefixes; | 705 SBAddPrefixes add_prefixes; |
710 EXPECT_TRUE(store_->GetAddPrefixes(&add_prefixes)); | 706 EXPECT_TRUE(store_->GetAddPrefixes(&add_prefixes)); |
711 ASSERT_EQ(chunk_id * kPrefixesPerChunk, add_prefixes.size()); | 707 ASSERT_EQ(chunk_id * kPrefixesPerChunk, add_prefixes.size()); |
712 | 708 |
713 // New stride should be the same, or shifted one right. | 709 // New stride should be the same, or shifted one right. |
714 const uint32 new_shard_stride = ReadStride(); | 710 const uint32 new_shard_stride = ReadStride(); |
715 EXPECT_TRUE((new_shard_stride == shard_stride) || | 711 EXPECT_TRUE((new_shard_stride == shard_stride) || |
716 ((new_shard_stride << 1) == shard_stride)); | 712 ((new_shard_stride << 1) == shard_stride)); |
717 shard_stride = new_shard_stride; | 713 shard_stride = new_shard_stride; |
718 ++chunk_id; | 714 ++chunk_id; |
719 } while (!shard_stride || shard_stride > kTargetStride); | 715 } while (!shard_stride || shard_stride > kTargetStride); |
720 | 716 |
721 // Guard against writing too many chunks. If this gets too big, adjust | 717 // Guard against writing too many chunks. If this gets too big, adjust |
722 // |kPrefixesPerChunk|. | 718 // |kPrefixesPerChunk|. |
723 EXPECT_LT(chunk_id, 20); | 719 EXPECT_LT(chunk_id, 20); |
724 | 720 |
725 // Remove each chunk and check that the stride goes back to 0. | 721 // Remove each chunk and check that the stride goes back to 0. |
726 while (--chunk_id) { | 722 while (--chunk_id) { |
727 ASSERT_TRUE(store_->BeginUpdate()); | 723 ASSERT_TRUE(store_->BeginUpdate()); |
728 EXPECT_TRUE(store_->CheckAddChunk(chunk_id)); | 724 EXPECT_TRUE(store_->CheckAddChunk(chunk_id)); |
729 EXPECT_FALSE(store_->CheckAddChunk(chunk_id + 1)); | 725 EXPECT_FALSE(store_->CheckAddChunk(chunk_id + 1)); |
730 store_->DeleteAddChunk(chunk_id); | 726 store_->DeleteAddChunk(chunk_id); |
731 | 727 |
732 safe_browsing::PrefixSetBuilder builder; | 728 PrefixSetBuilder builder; |
733 std::vector<SBAddFullHash> add_full_hashes_result; | 729 std::vector<SBAddFullHash> add_full_hashes_result; |
734 EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result)); | 730 EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result)); |
735 | 731 |
736 // New stride should be the same, or shifted one left. | 732 // New stride should be the same, or shifted one left. |
737 const uint32 new_shard_stride = ReadStride(); | 733 const uint32 new_shard_stride = ReadStride(); |
738 EXPECT_TRUE((new_shard_stride == shard_stride) || | 734 EXPECT_TRUE((new_shard_stride == shard_stride) || |
739 (new_shard_stride == (shard_stride << 1))); | 735 (new_shard_stride == (shard_stride << 1))); |
740 shard_stride = new_shard_stride; | 736 shard_stride = new_shard_stride; |
741 } | 737 } |
742 EXPECT_EQ(0u, shard_stride); | 738 EXPECT_EQ(0u, shard_stride); |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
806 ASSERT_EQ(2U, add_prefixes.size()); | 802 ASSERT_EQ(2U, add_prefixes.size()); |
807 EXPECT_EQ(kAddChunk1, add_prefixes[0].chunk_id); | 803 EXPECT_EQ(kAddChunk1, add_prefixes[0].chunk_id); |
808 EXPECT_EQ(kHash1.prefix, add_prefixes[0].prefix); | 804 EXPECT_EQ(kHash1.prefix, add_prefixes[0].prefix); |
809 EXPECT_EQ(kAddChunk1, add_prefixes[1].chunk_id); | 805 EXPECT_EQ(kAddChunk1, add_prefixes[1].chunk_id); |
810 EXPECT_EQ(kHash2.prefix, add_prefixes[1].prefix); | 806 EXPECT_EQ(kHash2.prefix, add_prefixes[1].prefix); |
811 | 807 |
812 std::vector<SBAddFullHash> add_hashes; | 808 std::vector<SBAddFullHash> add_hashes; |
813 EXPECT_TRUE(store_->GetAddFullHashes(&add_hashes)); | 809 EXPECT_TRUE(store_->GetAddFullHashes(&add_hashes)); |
814 ASSERT_EQ(1U, add_hashes.size()); | 810 ASSERT_EQ(1U, add_hashes.size()); |
815 EXPECT_EQ(kAddChunk1, add_hashes[0].chunk_id); | 811 EXPECT_EQ(kAddChunk1, add_hashes[0].chunk_id); |
816 EXPECT_TRUE(safe_browsing::SBFullHashEqual(kHash2, add_hashes[0].full_hash)); | 812 EXPECT_TRUE(SBFullHashEqual(kHash2, add_hashes[0].full_hash)); |
817 | 813 |
818 // Attempt an update to make sure things work end-to-end. | 814 // Attempt an update to make sure things work end-to-end. |
819 EXPECT_TRUE(store_->BeginUpdate()); | 815 EXPECT_TRUE(store_->BeginUpdate()); |
820 | 816 |
821 // Still has the chunks expected in the next update. | 817 // Still has the chunks expected in the next update. |
822 std::vector<int> chunks; | 818 std::vector<int> chunks; |
823 store_->GetAddChunks(&chunks); | 819 store_->GetAddChunks(&chunks); |
824 ASSERT_EQ(1U, chunks.size()); | 820 ASSERT_EQ(1U, chunks.size()); |
825 EXPECT_EQ(kAddChunk1, chunks[0]); | 821 EXPECT_EQ(kAddChunk1, chunks[0]); |
826 | 822 |
827 store_->GetSubChunks(&chunks); | 823 store_->GetSubChunks(&chunks); |
828 ASSERT_EQ(1U, chunks.size()); | 824 ASSERT_EQ(1U, chunks.size()); |
829 EXPECT_EQ(kSubChunk1, chunks[0]); | 825 EXPECT_EQ(kSubChunk1, chunks[0]); |
830 | 826 |
831 EXPECT_TRUE(store_->CheckAddChunk(kAddChunk1)); | 827 EXPECT_TRUE(store_->CheckAddChunk(kAddChunk1)); |
832 EXPECT_TRUE(store_->CheckSubChunk(kSubChunk1)); | 828 EXPECT_TRUE(store_->CheckSubChunk(kSubChunk1)); |
833 | 829 |
834 // Sub chunk kAddChunk1 hash kHash2. | 830 // Sub chunk kAddChunk1 hash kHash2. |
835 // NOTE(shess): Having full hashes and prefixes in the same chunk is no longer | 831 // NOTE(shess): Having full hashes and prefixes in the same chunk is no longer |
836 // supported, though it was when this code was written. | 832 // supported, though it was when this code was written. |
837 store_->SetSubChunk(kSubChunk2); | 833 store_->SetSubChunk(kSubChunk2); |
838 EXPECT_TRUE(store_->CheckSubChunk(kSubChunk1)); | 834 EXPECT_TRUE(store_->CheckSubChunk(kSubChunk1)); |
839 EXPECT_TRUE(store_->WriteSubPrefix(kSubChunk1, kAddChunk1, kHash2.prefix)); | 835 EXPECT_TRUE(store_->WriteSubPrefix(kSubChunk1, kAddChunk1, kHash2.prefix)); |
840 EXPECT_TRUE(store_->WriteSubHash(kSubChunk1, kAddChunk1, kHash2)); | 836 EXPECT_TRUE(store_->WriteSubHash(kSubChunk1, kAddChunk1, kHash2)); |
841 EXPECT_TRUE(store_->FinishChunk()); | 837 EXPECT_TRUE(store_->FinishChunk()); |
842 | 838 |
843 { | 839 { |
844 safe_browsing::PrefixSetBuilder builder; | 840 PrefixSetBuilder builder; |
845 std::vector<SBAddFullHash> add_full_hashes_result; | 841 std::vector<SBAddFullHash> add_full_hashes_result; |
846 EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result)); | 842 EXPECT_TRUE(store_->FinishUpdate(&builder, &add_full_hashes_result)); |
847 | 843 |
848 // The sub'ed prefix and hash are gone. | 844 // The sub'ed prefix and hash are gone. |
849 std::vector<SBPrefix> prefixes_result; | 845 std::vector<SBPrefix> prefixes_result; |
850 builder.GetPrefixSetNoHashes()->GetPrefixes(&prefixes_result); | 846 builder.GetPrefixSetNoHashes()->GetPrefixes(&prefixes_result); |
851 ASSERT_EQ(1U, prefixes_result.size()); | 847 ASSERT_EQ(1U, prefixes_result.size()); |
852 EXPECT_EQ(kHash1.prefix, prefixes_result[0]); | 848 EXPECT_EQ(kHash1.prefix, prefixes_result[0]); |
853 EXPECT_TRUE(add_full_hashes_result.empty()); | 849 EXPECT_TRUE(add_full_hashes_result.empty()); |
854 } | 850 } |
855 } | 851 } |
856 #endif | 852 #endif |
857 | 853 |
858 } // namespace safe_browsing | 854 } // namespace safe_browsing |
OLD | NEW |