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

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

Issue 1420053005: Move code in components/safe_browsing_db and chrome/browser/s_b/ under the safe_browsing namespace. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@02_components_move
Patch Set: Other minor fixes incl. using "using safe_browsing::ClassName" instead of safe_browsing::ClassName everywhere. Created 5 years, 1 month 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 #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
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
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
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
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698