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

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

Powered by Google App Engine
This is Rietveld 408576698