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

Side by Side Diff: components/safe_browsing_db/v4_store_unittest.cc

Issue 2151953003: PVer4: Drop hash prefixes based on the removals field in the response (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@02_iterators
Patch Set: Don't iterate over removals. Update removals comment. Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « components/safe_browsing_db/v4_store.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 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 "base/files/file_util.h" 5 #include "base/files/file_util.h"
6 #include "base/files/scoped_temp_dir.h" 6 #include "base/files/scoped_temp_dir.h"
7 #include "base/memory/ptr_util.h" 7 #include "base/memory/ptr_util.h"
8 #include "base/run_loop.h" 8 #include "base/run_loop.h"
9 #include "base/test/test_simple_task_runner.h" 9 #include "base/test/test_simple_task_runner.h"
10 #include "base/time/time.h" 10 #include "base/time/time.h"
11 #include "components/safe_browsing_db/v4_store.h" 11 #include "components/safe_browsing_db/v4_store.h"
12 #include "components/safe_browsing_db/v4_store.pb.h" 12 #include "components/safe_browsing_db/v4_store.pb.h"
13 #include "content/public/test/test_browser_thread_bundle.h" 13 #include "content/public/test/test_browser_thread_bundle.h"
14 #include "testing/platform_test.h" 14 #include "testing/platform_test.h"
15 15
16 namespace safe_browsing { 16 namespace safe_browsing {
17 17
18 using ::google::protobuf::RepeatedField;
19 using ::google::protobuf::int32;
20
18 class V4StoreTest : public PlatformTest { 21 class V4StoreTest : public PlatformTest {
19 public: 22 public:
20 V4StoreTest() : task_runner_(new base::TestSimpleTaskRunner) {} 23 V4StoreTest() : task_runner_(new base::TestSimpleTaskRunner) {}
21 24
22 void SetUp() override { 25 void SetUp() override {
23 PlatformTest::SetUp(); 26 PlatformTest::SetUp();
24 27
25 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); 28 ASSERT_TRUE(temp_dir_.CreateUniqueTempDir());
26 store_path_ = temp_dir_.path().AppendASCII("V4StoreTest.store"); 29 store_path_ = temp_dir_.path().AppendASCII("V4StoreTest.store");
27 DVLOG(1) << "store_path_: " << store_path_.value(); 30 DVLOG(1) << "store_path_: " << store_path_.value();
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
129 } 132 }
130 133
131 TEST_F(V4StoreTest, TestWriteFullResponseType) { 134 TEST_F(V4StoreTest, TestWriteFullResponseType) {
132 std::unique_ptr<ListUpdateResponse> list_update_response( 135 std::unique_ptr<ListUpdateResponse> list_update_response(
133 new ListUpdateResponse); 136 new ListUpdateResponse);
134 list_update_response->set_response_type(ListUpdateResponse::FULL_UPDATE); 137 list_update_response->set_response_type(ListUpdateResponse::FULL_UPDATE);
135 list_update_response->set_new_client_state("test_client_state"); 138 list_update_response->set_new_client_state("test_client_state");
136 EXPECT_EQ(WRITE_SUCCESS, V4Store(task_runner_, store_path_) 139 EXPECT_EQ(WRITE_SUCCESS, V4Store(task_runner_, store_path_)
137 .WriteToDisk(std::move(list_update_response))); 140 .WriteToDisk(std::move(list_update_response)));
138 141
139 std::unique_ptr<V4Store> read_store(new V4Store(task_runner_, store_path_)); 142 V4Store read_store(task_runner_, store_path_);
140 EXPECT_EQ(READ_SUCCESS, read_store->ReadFromDisk()); 143 EXPECT_EQ(READ_SUCCESS, read_store.ReadFromDisk());
141 EXPECT_EQ("test_client_state", read_store->state_); 144 EXPECT_EQ("test_client_state", read_store.state_);
142 EXPECT_TRUE(read_store->hash_prefix_map_.empty()); 145 EXPECT_TRUE(read_store.hash_prefix_map_.empty());
143 } 146 }
144 147
145 TEST_F(V4StoreTest, TestAddUnlumpedHashesWithInvalidAddition) { 148 TEST_F(V4StoreTest, TestAddUnlumpedHashesWithInvalidAddition) {
146 HashPrefixMap prefix_map; 149 HashPrefixMap prefix_map;
147 EXPECT_EQ(ADDITIONS_SIZE_UNEXPECTED_FAILURE, 150 EXPECT_EQ(ADDITIONS_SIZE_UNEXPECTED_FAILURE,
148 V4Store::AddUnlumpedHashes(5, "a", &prefix_map)); 151 V4Store::AddUnlumpedHashes(5, "a", &prefix_map));
149 EXPECT_TRUE(prefix_map.empty()); 152 EXPECT_TRUE(prefix_map.empty());
150 } 153 }
151 154
152 TEST_F(V4StoreTest, TestAddUnlumpedHashesWithEmptyString) { 155 TEST_F(V4StoreTest, TestAddUnlumpedHashesWithEmptyString) {
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
208 V4Store::AddUnlumpedHashes(4, "abcdefgh", &prefix_map_old)); 211 V4Store::AddUnlumpedHashes(4, "abcdefgh", &prefix_map_old));
209 EXPECT_EQ(APPLY_UPDATE_SUCCESS, 212 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
210 V4Store::AddUnlumpedHashes(5, "54321abcde", &prefix_map_old)); 213 V4Store::AddUnlumpedHashes(5, "54321abcde", &prefix_map_old));
211 HashPrefixMap prefix_map_additions; 214 HashPrefixMap prefix_map_additions;
212 EXPECT_EQ( 215 EXPECT_EQ(
213 APPLY_UPDATE_SUCCESS, 216 APPLY_UPDATE_SUCCESS,
214 V4Store::AddUnlumpedHashes(4, "----1111bbbb", &prefix_map_additions)); 217 V4Store::AddUnlumpedHashes(4, "----1111bbbb", &prefix_map_additions));
215 EXPECT_EQ(APPLY_UPDATE_SUCCESS, 218 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
216 V4Store::AddUnlumpedHashes(5, "22222bcdef", &prefix_map_additions)); 219 V4Store::AddUnlumpedHashes(5, "22222bcdef", &prefix_map_additions));
217 220
218 std::unique_ptr<V4Store> store(new V4Store(task_runner_, store_path_)); 221 V4Store store(task_runner_, store_path_);
219 EXPECT_EQ(APPLY_UPDATE_SUCCESS, 222 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
220 store->MergeUpdate(prefix_map_old, prefix_map_additions)); 223 store.MergeUpdate(prefix_map_old, prefix_map_additions, nullptr));
221 const HashPrefixMap& prefix_map = store->hash_prefix_map_; 224 const HashPrefixMap& prefix_map = store.hash_prefix_map_;
222 EXPECT_EQ(2u, prefix_map.size()); 225 EXPECT_EQ(2u, prefix_map.size());
223 226
224 PrefixSize prefix_size = 4; 227 PrefixSize prefix_size = 4;
225 HashPrefixes hash_prefixes = prefix_map.at(prefix_size); 228 HashPrefixes hash_prefixes = prefix_map.at(prefix_size);
226 EXPECT_EQ(5 * prefix_size, hash_prefixes.size()); 229 EXPECT_EQ(5 * prefix_size, hash_prefixes.size());
227 EXPECT_EQ("----", hash_prefixes.substr(0 * prefix_size, prefix_size)); 230 EXPECT_EQ("----", hash_prefixes.substr(0 * prefix_size, prefix_size));
228 EXPECT_EQ("1111", hash_prefixes.substr(1 * prefix_size, prefix_size)); 231 EXPECT_EQ("1111", hash_prefixes.substr(1 * prefix_size, prefix_size));
229 EXPECT_EQ("abcd", hash_prefixes.substr(2 * prefix_size, prefix_size)); 232 EXPECT_EQ("abcd", hash_prefixes.substr(2 * prefix_size, prefix_size));
230 EXPECT_EQ("bbbb", hash_prefixes.substr(3 * prefix_size, prefix_size)); 233 EXPECT_EQ("bbbb", hash_prefixes.substr(3 * prefix_size, prefix_size));
231 EXPECT_EQ("efgh", hash_prefixes.substr(4 * prefix_size, prefix_size)); 234 EXPECT_EQ("efgh", hash_prefixes.substr(4 * prefix_size, prefix_size));
232 235
233 prefix_size = 5; 236 prefix_size = 5;
234 hash_prefixes = prefix_map.at(prefix_size); 237 hash_prefixes = prefix_map.at(prefix_size);
235 EXPECT_EQ(4 * prefix_size, hash_prefixes.size()); 238 EXPECT_EQ(4 * prefix_size, hash_prefixes.size());
236 EXPECT_EQ("22222", hash_prefixes.substr(0 * prefix_size, prefix_size)); 239 EXPECT_EQ("22222", hash_prefixes.substr(0 * prefix_size, prefix_size));
237 EXPECT_EQ("54321", hash_prefixes.substr(1 * prefix_size, prefix_size)); 240 EXPECT_EQ("54321", hash_prefixes.substr(1 * prefix_size, prefix_size));
238 EXPECT_EQ("abcde", hash_prefixes.substr(2 * prefix_size, prefix_size)); 241 EXPECT_EQ("abcde", hash_prefixes.substr(2 * prefix_size, prefix_size));
239 EXPECT_EQ("bcdef", hash_prefixes.substr(3 * prefix_size, prefix_size)); 242 EXPECT_EQ("bcdef", hash_prefixes.substr(3 * prefix_size, prefix_size));
240 } 243 }
241 244
242 TEST_F(V4StoreTest, TestMergeUpdatesWithDifferentSizesInEachMap) { 245 TEST_F(V4StoreTest, TestMergeUpdatesWithDifferentSizesInEachMap) {
243 HashPrefixMap prefix_map_old; 246 HashPrefixMap prefix_map_old;
244 EXPECT_EQ(APPLY_UPDATE_SUCCESS, 247 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
245 V4Store::AddUnlumpedHashes(4, "1111abcdefgh", &prefix_map_old)); 248 V4Store::AddUnlumpedHashes(4, "1111abcdefgh", &prefix_map_old));
246 HashPrefixMap prefix_map_additions; 249 HashPrefixMap prefix_map_additions;
247 EXPECT_EQ(APPLY_UPDATE_SUCCESS, 250 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
248 V4Store::AddUnlumpedHashes(5, "22222bcdef", &prefix_map_additions)); 251 V4Store::AddUnlumpedHashes(5, "22222bcdef", &prefix_map_additions));
249 252
250 std::unique_ptr<V4Store> store(new V4Store(task_runner_, store_path_)); 253 V4Store store(task_runner_, store_path_);
251 EXPECT_EQ(APPLY_UPDATE_SUCCESS, 254 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
252 store->MergeUpdate(prefix_map_old, prefix_map_additions)); 255 store.MergeUpdate(prefix_map_old, prefix_map_additions, nullptr));
253 const HashPrefixMap& prefix_map = store->hash_prefix_map_; 256 const HashPrefixMap& prefix_map = store.hash_prefix_map_;
254 EXPECT_EQ(2u, prefix_map.size()); 257 EXPECT_EQ(2u, prefix_map.size());
255 258
256 PrefixSize prefix_size = 4; 259 PrefixSize prefix_size = 4;
257 HashPrefixes hash_prefixes = prefix_map.at(prefix_size); 260 HashPrefixes hash_prefixes = prefix_map.at(prefix_size);
258 EXPECT_EQ(3 * prefix_size, hash_prefixes.size()); 261 EXPECT_EQ(3 * prefix_size, hash_prefixes.size());
259 EXPECT_EQ("1111abcdefgh", hash_prefixes); 262 EXPECT_EQ("1111abcdefgh", hash_prefixes);
260 263
261 prefix_size = 5; 264 prefix_size = 5;
262 hash_prefixes = prefix_map.at(prefix_size); 265 hash_prefixes = prefix_map.at(prefix_size);
263 EXPECT_EQ(2 * prefix_size, hash_prefixes.size()); 266 EXPECT_EQ(2 * prefix_size, hash_prefixes.size());
264 EXPECT_EQ("22222bcdef", hash_prefixes); 267 EXPECT_EQ("22222bcdef", hash_prefixes);
265 } 268 }
266 269
267 TEST_F(V4StoreTest, TestMergeUpdatesOldMapRunsOutFirst) { 270 TEST_F(V4StoreTest, TestMergeUpdatesOldMapRunsOutFirst) {
268 HashPrefixMap prefix_map_old; 271 HashPrefixMap prefix_map_old;
269 EXPECT_EQ(APPLY_UPDATE_SUCCESS, 272 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
270 V4Store::AddUnlumpedHashes(4, "00001111", &prefix_map_old)); 273 V4Store::AddUnlumpedHashes(4, "00001111", &prefix_map_old));
271 HashPrefixMap prefix_map_additions; 274 HashPrefixMap prefix_map_additions;
272 EXPECT_EQ(APPLY_UPDATE_SUCCESS, 275 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
273 V4Store::AddUnlumpedHashes(4, "2222", &prefix_map_additions)); 276 V4Store::AddUnlumpedHashes(4, "2222", &prefix_map_additions));
274 277
275 std::unique_ptr<V4Store> store(new V4Store(task_runner_, store_path_)); 278 V4Store store(task_runner_, store_path_);
276 EXPECT_EQ(APPLY_UPDATE_SUCCESS, 279 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
277 store->MergeUpdate(prefix_map_old, prefix_map_additions)); 280 store.MergeUpdate(prefix_map_old, prefix_map_additions, nullptr));
278 const HashPrefixMap& prefix_map = store->hash_prefix_map_; 281 const HashPrefixMap& prefix_map = store.hash_prefix_map_;
279 EXPECT_EQ(1u, prefix_map.size()); 282 EXPECT_EQ(1u, prefix_map.size());
280 283
281 PrefixSize prefix_size = 4; 284 PrefixSize prefix_size = 4;
282 HashPrefixes hash_prefixes = prefix_map.at(prefix_size); 285 HashPrefixes hash_prefixes = prefix_map.at(prefix_size);
283 EXPECT_EQ(3 * prefix_size, hash_prefixes.size()); 286 EXPECT_EQ(3 * prefix_size, hash_prefixes.size());
284 EXPECT_EQ("0000", hash_prefixes.substr(0 * prefix_size, prefix_size)); 287 EXPECT_EQ("0000", hash_prefixes.substr(0 * prefix_size, prefix_size));
285 EXPECT_EQ("1111", hash_prefixes.substr(1 * prefix_size, prefix_size)); 288 EXPECT_EQ("1111", hash_prefixes.substr(1 * prefix_size, prefix_size));
286 EXPECT_EQ("2222", hash_prefixes.substr(2 * prefix_size, prefix_size)); 289 EXPECT_EQ("2222", hash_prefixes.substr(2 * prefix_size, prefix_size));
287 } 290 }
288 291
289 TEST_F(V4StoreTest, TestMergeUpdatesAdditionsMapRunsOutFirst) { 292 TEST_F(V4StoreTest, TestMergeUpdatesAdditionsMapRunsOutFirst) {
290 HashPrefixMap prefix_map_old; 293 HashPrefixMap prefix_map_old;
291 EXPECT_EQ(APPLY_UPDATE_SUCCESS, 294 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
292 V4Store::AddUnlumpedHashes(4, "2222", &prefix_map_old)); 295 V4Store::AddUnlumpedHashes(4, "2222", &prefix_map_old));
293 HashPrefixMap prefix_map_additions; 296 HashPrefixMap prefix_map_additions;
294 EXPECT_EQ(APPLY_UPDATE_SUCCESS, 297 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
295 V4Store::AddUnlumpedHashes(4, "00001111", &prefix_map_additions)); 298 V4Store::AddUnlumpedHashes(4, "00001111", &prefix_map_additions));
296 299
297 std::unique_ptr<V4Store> store(new V4Store(task_runner_, store_path_)); 300 V4Store store(task_runner_, store_path_);
298 EXPECT_EQ(APPLY_UPDATE_SUCCESS, 301 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
299 store->MergeUpdate(prefix_map_old, prefix_map_additions)); 302 store.MergeUpdate(prefix_map_old, prefix_map_additions, nullptr));
300 const HashPrefixMap& prefix_map = store->hash_prefix_map_; 303 const HashPrefixMap& prefix_map = store.hash_prefix_map_;
301 EXPECT_EQ(1u, prefix_map.size()); 304 EXPECT_EQ(1u, prefix_map.size());
302 305
303 PrefixSize prefix_size = 4; 306 PrefixSize prefix_size = 4;
304 HashPrefixes hash_prefixes = prefix_map.at(prefix_size); 307 HashPrefixes hash_prefixes = prefix_map.at(prefix_size);
305 EXPECT_EQ(3 * prefix_size, hash_prefixes.size()); 308 EXPECT_EQ(3 * prefix_size, hash_prefixes.size());
306 EXPECT_EQ("0000", hash_prefixes.substr(0 * prefix_size, prefix_size)); 309 EXPECT_EQ("0000", hash_prefixes.substr(0 * prefix_size, prefix_size));
307 EXPECT_EQ("1111", hash_prefixes.substr(1 * prefix_size, prefix_size)); 310 EXPECT_EQ("1111", hash_prefixes.substr(1 * prefix_size, prefix_size));
308 EXPECT_EQ("2222", hash_prefixes.substr(2 * prefix_size, prefix_size)); 311 EXPECT_EQ("2222", hash_prefixes.substr(2 * prefix_size, prefix_size));
309 } 312 }
310 313
311 TEST_F(V4StoreTest, TestMergeUpdatesFailsForRepeatedHashPrefix) { 314 TEST_F(V4StoreTest, TestMergeUpdatesFailsForRepeatedHashPrefix) {
312 HashPrefixMap prefix_map_old; 315 HashPrefixMap prefix_map_old;
313 EXPECT_EQ(APPLY_UPDATE_SUCCESS, 316 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
314 V4Store::AddUnlumpedHashes(4, "2222", &prefix_map_old)); 317 V4Store::AddUnlumpedHashes(4, "2222", &prefix_map_old));
315 HashPrefixMap prefix_map_additions; 318 HashPrefixMap prefix_map_additions;
316 EXPECT_EQ(APPLY_UPDATE_SUCCESS, 319 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
317 V4Store::AddUnlumpedHashes(4, "2222", &prefix_map_additions)); 320 V4Store::AddUnlumpedHashes(4, "2222", &prefix_map_additions));
318 321
319 std::unique_ptr<V4Store> store(new V4Store(task_runner_, store_path_)); 322 V4Store store(task_runner_, store_path_);
320 EXPECT_EQ(ADDITIONS_HAS_EXISTING_PREFIX_FAILURE, 323 EXPECT_EQ(ADDITIONS_HAS_EXISTING_PREFIX_FAILURE,
321 store->MergeUpdate(prefix_map_old, prefix_map_additions)); 324 store.MergeUpdate(prefix_map_old, prefix_map_additions, nullptr));
325 }
326
327 TEST_F(V4StoreTest, TestMergeUpdatesFailsWhenRemovalsIndexTooLarge) {
328 HashPrefixMap prefix_map_old;
329 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
330 V4Store::AddUnlumpedHashes(4, "2222", &prefix_map_old));
331 HashPrefixMap prefix_map_additions;
332 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
333 V4Store::AddUnlumpedHashes(4, "11113333", &prefix_map_additions));
334
335 // Even though the merged map could have size 3 without removals, the
336 // removals index should only count the entries in the old map.
337 V4Store store(task_runner_, store_path_);
338 RepeatedField<int32> raw_removals;
339 // old_store: ["2222"]
340 raw_removals.Add(1);
341 EXPECT_EQ(
342 REMOVALS_INDEX_TOO_LARGE,
343 store.MergeUpdate(prefix_map_old, prefix_map_additions, &raw_removals));
344 }
345
346 TEST_F(V4StoreTest, TestMergeUpdatesRemovesOnlyElement) {
347 HashPrefixMap prefix_map_old;
348 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
349 V4Store::AddUnlumpedHashes(4, "2222", &prefix_map_old));
350 HashPrefixMap prefix_map_additions;
351 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
352 V4Store::AddUnlumpedHashes(5, "1111133333", &prefix_map_additions));
353
354 V4Store store(task_runner_, store_path_);
355 RepeatedField<int32> raw_removals;
356 // old_store: ["2222"]
357 raw_removals.Add(0); // Removes "2222"
358 EXPECT_EQ(
359 APPLY_UPDATE_SUCCESS,
360 store.MergeUpdate(prefix_map_old, prefix_map_additions, &raw_removals));
361 const HashPrefixMap& prefix_map = store.hash_prefix_map_;
362 // The size is 2 since we reserve space anyway.
363 EXPECT_EQ(2u, prefix_map.size());
364 EXPECT_TRUE(prefix_map.at(4).empty());
365 EXPECT_EQ("1111133333", prefix_map.at(5));
366 }
367
368 TEST_F(V4StoreTest, TestMergeUpdatesRemovesFirstElement) {
369 HashPrefixMap prefix_map_old;
370 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
371 V4Store::AddUnlumpedHashes(4, "22224444", &prefix_map_old));
372 HashPrefixMap prefix_map_additions;
373 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
374 V4Store::AddUnlumpedHashes(5, "1111133333", &prefix_map_additions));
375
376 V4Store store(task_runner_, store_path_);
377 RepeatedField<int32> raw_removals;
378 // old_store: ["2222", "4444"]
379 raw_removals.Add(0); // Removes "2222"
380 EXPECT_EQ(
381 APPLY_UPDATE_SUCCESS,
382 store.MergeUpdate(prefix_map_old, prefix_map_additions, &raw_removals));
383 const HashPrefixMap& prefix_map = store.hash_prefix_map_;
384 // The size is 2 since we reserve space anyway.
385 EXPECT_EQ(2u, prefix_map.size());
386 EXPECT_EQ("4444", prefix_map.at(4));
387 EXPECT_EQ("1111133333", prefix_map.at(5));
388 }
389
390 TEST_F(V4StoreTest, TestMergeUpdatesRemovesMiddleElement) {
391 HashPrefixMap prefix_map_old;
392 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
393 V4Store::AddUnlumpedHashes(4, "222233334444", &prefix_map_old));
394 HashPrefixMap prefix_map_additions;
395 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
396 V4Store::AddUnlumpedHashes(5, "1111133333", &prefix_map_additions));
397
398 V4Store store(task_runner_, store_path_);
399 RepeatedField<int32> raw_removals;
400 // old_store: ["2222", "3333", 4444"]
401 raw_removals.Add(1); // Removes "3333"
402 EXPECT_EQ(
403 APPLY_UPDATE_SUCCESS,
404 store.MergeUpdate(prefix_map_old, prefix_map_additions, &raw_removals));
405 const HashPrefixMap& prefix_map = store.hash_prefix_map_;
406 // The size is 2 since we reserve space anyway.
407 EXPECT_EQ(2u, prefix_map.size());
408 EXPECT_EQ("22224444", prefix_map.at(4));
409 EXPECT_EQ("1111133333", prefix_map.at(5));
410 }
411
412 TEST_F(V4StoreTest, TestMergeUpdatesRemovesLastElement) {
413 HashPrefixMap prefix_map_old;
414 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
415 V4Store::AddUnlumpedHashes(4, "222233334444", &prefix_map_old));
416 HashPrefixMap prefix_map_additions;
417 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
418 V4Store::AddUnlumpedHashes(5, "1111133333", &prefix_map_additions));
419
420 V4Store store(task_runner_, store_path_);
421 RepeatedField<int32> raw_removals;
422 // old_store: ["2222", "3333", 4444"]
423 raw_removals.Add(2); // Removes "4444"
424 EXPECT_EQ(
425 APPLY_UPDATE_SUCCESS,
426 store.MergeUpdate(prefix_map_old, prefix_map_additions, &raw_removals));
427 const HashPrefixMap& prefix_map = store.hash_prefix_map_;
428 // The size is 2 since we reserve space anyway.
429 EXPECT_EQ(2u, prefix_map.size());
430 EXPECT_EQ("22223333", prefix_map.at(4));
431 EXPECT_EQ("1111133333", prefix_map.at(5));
432 }
433
434 TEST_F(V4StoreTest, TestMergeUpdatesRemovesWhenOldHasDifferentSizes) {
435 HashPrefixMap prefix_map_old;
436 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
437 V4Store::AddUnlumpedHashes(4, "222233334444", &prefix_map_old));
438 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
439 V4Store::AddUnlumpedHashes(5, "aaaaabbbbb", &prefix_map_old));
440 HashPrefixMap prefix_map_additions;
441 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
442 V4Store::AddUnlumpedHashes(5, "1111133333", &prefix_map_additions));
443
444 V4Store store(task_runner_, store_path_);
445 RepeatedField<int32> raw_removals;
446 // old_store: ["2222", "3333", 4444", "aaaaa", "bbbbb"]
447 raw_removals.Add(3); // Removes "aaaaa"
448 EXPECT_EQ(
449 APPLY_UPDATE_SUCCESS,
450 store.MergeUpdate(prefix_map_old, prefix_map_additions, &raw_removals));
451 const HashPrefixMap& prefix_map = store.hash_prefix_map_;
452 // The size is 2 since we reserve space anyway.
453 EXPECT_EQ(2u, prefix_map.size());
454 EXPECT_EQ("222233334444", prefix_map.at(4));
455 EXPECT_EQ("1111133333bbbbb", prefix_map.at(5));
456 }
457
458 TEST_F(V4StoreTest, TestMergeUpdatesRemovesMultipleAcrossDifferentSizes) {
459 HashPrefixMap prefix_map_old;
460 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
461 V4Store::AddUnlumpedHashes(4, "22223333aaaa", &prefix_map_old));
462 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
463 V4Store::AddUnlumpedHashes(5, "3333344444bbbbb", &prefix_map_old));
464 HashPrefixMap prefix_map_additions;
465 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
466 V4Store::AddUnlumpedHashes(5, "11111", &prefix_map_additions));
467
468 V4Store store(task_runner_, store_path_);
469 RepeatedField<int32> raw_removals;
470 // old_store: ["2222", "3333", "33333", "44444", "aaaa", "bbbbb"]
471 raw_removals.Add(1); // Removes "3333"
472 raw_removals.Add(3); // Removes "44444"
473 EXPECT_EQ(
474 APPLY_UPDATE_SUCCESS,
475 store.MergeUpdate(prefix_map_old, prefix_map_additions, &raw_removals));
476 const HashPrefixMap& prefix_map = store.hash_prefix_map_;
477 // The size is 2 since we reserve space anyway.
478 EXPECT_EQ(2u, prefix_map.size());
479 EXPECT_EQ("2222aaaa", prefix_map.at(4));
480 EXPECT_EQ("1111133333bbbbb", prefix_map.at(5));
322 } 481 }
323 482
324 TEST_F(V4StoreTest, TestReadFullResponseWithValidHashPrefixMap) { 483 TEST_F(V4StoreTest, TestReadFullResponseWithValidHashPrefixMap) {
325 std::unique_ptr<ListUpdateResponse> lur(new ListUpdateResponse); 484 std::unique_ptr<ListUpdateResponse> lur(new ListUpdateResponse);
326 lur->set_response_type(ListUpdateResponse::FULL_UPDATE); 485 lur->set_response_type(ListUpdateResponse::FULL_UPDATE);
327 lur->set_new_client_state("test_client_state"); 486 lur->set_new_client_state("test_client_state");
328 lur->set_platform_type(WINDOWS_PLATFORM); 487 lur->set_platform_type(WINDOWS_PLATFORM);
329 lur->set_threat_entry_type(URL); 488 lur->set_threat_entry_type(URL);
330 lur->set_threat_type(MALWARE_THREAT); 489 lur->set_threat_type(MALWARE_THREAT);
331 ThreatEntrySet* additions = lur->add_additions(); 490 ThreatEntrySet* additions = lur->add_additions();
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 EXPECT_EQ(WRITE_SUCCESS, 524 EXPECT_EQ(WRITE_SUCCESS,
366 V4Store(task_runner_, store_path_).WriteToDisk(std::move(lur))); 525 V4Store(task_runner_, store_path_).WriteToDisk(std::move(lur)));
367 526
368 V4Store read_store(task_runner_, store_path_); 527 V4Store read_store(task_runner_, store_path_);
369 EXPECT_EQ(HASH_PREFIX_MAP_GENERATION_FAILURE, read_store.ReadFromDisk()); 528 EXPECT_EQ(HASH_PREFIX_MAP_GENERATION_FAILURE, read_store.ReadFromDisk());
370 EXPECT_TRUE(read_store.state_.empty()); 529 EXPECT_TRUE(read_store.state_.empty());
371 EXPECT_TRUE(read_store.hash_prefix_map_.empty()); 530 EXPECT_TRUE(read_store.hash_prefix_map_.empty());
372 } 531 }
373 532
374 } // namespace safe_browsing 533 } // namespace safe_browsing
OLDNEW
« no previous file with comments | « components/safe_browsing_db/v4_store.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698