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

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: Use const& 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
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 RepeatedField<int32> raw_removals;
220 store->MergeUpdate(prefix_map_old, prefix_map_additions)); 223 EXPECT_EQ(
221 const HashPrefixMap& prefix_map = store->hash_prefix_map_; 224 APPLY_UPDATE_SUCCESS,
225 store.MergeUpdate(prefix_map_old, prefix_map_additions, raw_removals));
226 const HashPrefixMap& prefix_map = store.hash_prefix_map_;
222 EXPECT_EQ(2u, prefix_map.size()); 227 EXPECT_EQ(2u, prefix_map.size());
223 228
224 PrefixSize prefix_size = 4; 229 PrefixSize prefix_size = 4;
225 HashPrefixes hash_prefixes = prefix_map.at(prefix_size); 230 HashPrefixes hash_prefixes = prefix_map.at(prefix_size);
226 EXPECT_EQ(5 * prefix_size, hash_prefixes.size()); 231 EXPECT_EQ(5 * prefix_size, hash_prefixes.size());
227 EXPECT_EQ("----", hash_prefixes.substr(0 * prefix_size, prefix_size)); 232 EXPECT_EQ("----", hash_prefixes.substr(0 * prefix_size, prefix_size));
228 EXPECT_EQ("1111", hash_prefixes.substr(1 * prefix_size, prefix_size)); 233 EXPECT_EQ("1111", hash_prefixes.substr(1 * prefix_size, prefix_size));
229 EXPECT_EQ("abcd", hash_prefixes.substr(2 * prefix_size, prefix_size)); 234 EXPECT_EQ("abcd", hash_prefixes.substr(2 * prefix_size, prefix_size));
230 EXPECT_EQ("bbbb", hash_prefixes.substr(3 * prefix_size, prefix_size)); 235 EXPECT_EQ("bbbb", hash_prefixes.substr(3 * prefix_size, prefix_size));
231 EXPECT_EQ("efgh", hash_prefixes.substr(4 * prefix_size, prefix_size)); 236 EXPECT_EQ("efgh", hash_prefixes.substr(4 * prefix_size, prefix_size));
232 237
233 prefix_size = 5; 238 prefix_size = 5;
234 hash_prefixes = prefix_map.at(prefix_size); 239 hash_prefixes = prefix_map.at(prefix_size);
235 EXPECT_EQ(4 * prefix_size, hash_prefixes.size()); 240 EXPECT_EQ(4 * prefix_size, hash_prefixes.size());
236 EXPECT_EQ("22222", hash_prefixes.substr(0 * prefix_size, prefix_size)); 241 EXPECT_EQ("22222", hash_prefixes.substr(0 * prefix_size, prefix_size));
237 EXPECT_EQ("54321", hash_prefixes.substr(1 * prefix_size, prefix_size)); 242 EXPECT_EQ("54321", hash_prefixes.substr(1 * prefix_size, prefix_size));
238 EXPECT_EQ("abcde", hash_prefixes.substr(2 * prefix_size, prefix_size)); 243 EXPECT_EQ("abcde", hash_prefixes.substr(2 * prefix_size, prefix_size));
239 EXPECT_EQ("bcdef", hash_prefixes.substr(3 * prefix_size, prefix_size)); 244 EXPECT_EQ("bcdef", hash_prefixes.substr(3 * prefix_size, prefix_size));
240 } 245 }
241 246
242 TEST_F(V4StoreTest, TestMergeUpdatesWithDifferentSizesInEachMap) { 247 TEST_F(V4StoreTest, TestMergeUpdatesWithDifferentSizesInEachMap) {
243 HashPrefixMap prefix_map_old; 248 HashPrefixMap prefix_map_old;
244 EXPECT_EQ(APPLY_UPDATE_SUCCESS, 249 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
245 V4Store::AddUnlumpedHashes(4, "1111abcdefgh", &prefix_map_old)); 250 V4Store::AddUnlumpedHashes(4, "1111abcdefgh", &prefix_map_old));
246 HashPrefixMap prefix_map_additions; 251 HashPrefixMap prefix_map_additions;
247 EXPECT_EQ(APPLY_UPDATE_SUCCESS, 252 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
248 V4Store::AddUnlumpedHashes(5, "22222bcdef", &prefix_map_additions)); 253 V4Store::AddUnlumpedHashes(5, "22222bcdef", &prefix_map_additions));
249 254
250 std::unique_ptr<V4Store> store(new V4Store(task_runner_, store_path_)); 255 V4Store store(task_runner_, store_path_);
251 EXPECT_EQ(APPLY_UPDATE_SUCCESS, 256 RepeatedField<int32> raw_removals;
252 store->MergeUpdate(prefix_map_old, prefix_map_additions)); 257 EXPECT_EQ(
253 const HashPrefixMap& prefix_map = store->hash_prefix_map_; 258 APPLY_UPDATE_SUCCESS,
259 store.MergeUpdate(prefix_map_old, prefix_map_additions, raw_removals));
260 const HashPrefixMap& prefix_map = store.hash_prefix_map_;
254 EXPECT_EQ(2u, prefix_map.size()); 261 EXPECT_EQ(2u, prefix_map.size());
255 262
256 PrefixSize prefix_size = 4; 263 PrefixSize prefix_size = 4;
257 HashPrefixes hash_prefixes = prefix_map.at(prefix_size); 264 HashPrefixes hash_prefixes = prefix_map.at(prefix_size);
258 EXPECT_EQ(3 * prefix_size, hash_prefixes.size()); 265 EXPECT_EQ(3 * prefix_size, hash_prefixes.size());
259 EXPECT_EQ("1111abcdefgh", hash_prefixes); 266 EXPECT_EQ("1111abcdefgh", hash_prefixes);
260 267
261 prefix_size = 5; 268 prefix_size = 5;
262 hash_prefixes = prefix_map.at(prefix_size); 269 hash_prefixes = prefix_map.at(prefix_size);
263 EXPECT_EQ(2 * prefix_size, hash_prefixes.size()); 270 EXPECT_EQ(2 * prefix_size, hash_prefixes.size());
264 EXPECT_EQ("22222bcdef", hash_prefixes); 271 EXPECT_EQ("22222bcdef", hash_prefixes);
265 } 272 }
266 273
267 TEST_F(V4StoreTest, TestMergeUpdatesOldMapRunsOutFirst) { 274 TEST_F(V4StoreTest, TestMergeUpdatesOldMapRunsOutFirst) {
268 HashPrefixMap prefix_map_old; 275 HashPrefixMap prefix_map_old;
269 EXPECT_EQ(APPLY_UPDATE_SUCCESS, 276 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
270 V4Store::AddUnlumpedHashes(4, "00001111", &prefix_map_old)); 277 V4Store::AddUnlumpedHashes(4, "00001111", &prefix_map_old));
271 HashPrefixMap prefix_map_additions; 278 HashPrefixMap prefix_map_additions;
272 EXPECT_EQ(APPLY_UPDATE_SUCCESS, 279 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
273 V4Store::AddUnlumpedHashes(4, "2222", &prefix_map_additions)); 280 V4Store::AddUnlumpedHashes(4, "2222", &prefix_map_additions));
274 281
275 std::unique_ptr<V4Store> store(new V4Store(task_runner_, store_path_)); 282 V4Store store(task_runner_, store_path_);
276 EXPECT_EQ(APPLY_UPDATE_SUCCESS, 283 RepeatedField<int32> raw_removals;
277 store->MergeUpdate(prefix_map_old, prefix_map_additions)); 284 EXPECT_EQ(
278 const HashPrefixMap& prefix_map = store->hash_prefix_map_; 285 APPLY_UPDATE_SUCCESS,
286 store.MergeUpdate(prefix_map_old, prefix_map_additions, raw_removals));
287 const HashPrefixMap& prefix_map = store.hash_prefix_map_;
279 EXPECT_EQ(1u, prefix_map.size()); 288 EXPECT_EQ(1u, prefix_map.size());
280 289
281 PrefixSize prefix_size = 4; 290 PrefixSize prefix_size = 4;
282 HashPrefixes hash_prefixes = prefix_map.at(prefix_size); 291 HashPrefixes hash_prefixes = prefix_map.at(prefix_size);
283 EXPECT_EQ(3 * prefix_size, hash_prefixes.size()); 292 EXPECT_EQ(3 * prefix_size, hash_prefixes.size());
284 EXPECT_EQ("0000", hash_prefixes.substr(0 * prefix_size, prefix_size)); 293 EXPECT_EQ("0000", hash_prefixes.substr(0 * prefix_size, prefix_size));
285 EXPECT_EQ("1111", hash_prefixes.substr(1 * prefix_size, prefix_size)); 294 EXPECT_EQ("1111", hash_prefixes.substr(1 * prefix_size, prefix_size));
286 EXPECT_EQ("2222", hash_prefixes.substr(2 * prefix_size, prefix_size)); 295 EXPECT_EQ("2222", hash_prefixes.substr(2 * prefix_size, prefix_size));
287 } 296 }
288 297
289 TEST_F(V4StoreTest, TestMergeUpdatesAdditionsMapRunsOutFirst) { 298 TEST_F(V4StoreTest, TestMergeUpdatesAdditionsMapRunsOutFirst) {
290 HashPrefixMap prefix_map_old; 299 HashPrefixMap prefix_map_old;
291 EXPECT_EQ(APPLY_UPDATE_SUCCESS, 300 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
292 V4Store::AddUnlumpedHashes(4, "2222", &prefix_map_old)); 301 V4Store::AddUnlumpedHashes(4, "2222", &prefix_map_old));
293 HashPrefixMap prefix_map_additions; 302 HashPrefixMap prefix_map_additions;
294 EXPECT_EQ(APPLY_UPDATE_SUCCESS, 303 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
295 V4Store::AddUnlumpedHashes(4, "00001111", &prefix_map_additions)); 304 V4Store::AddUnlumpedHashes(4, "00001111", &prefix_map_additions));
296 305
297 std::unique_ptr<V4Store> store(new V4Store(task_runner_, store_path_)); 306 V4Store store(task_runner_, store_path_);
298 EXPECT_EQ(APPLY_UPDATE_SUCCESS, 307 RepeatedField<int32> raw_removals;
299 store->MergeUpdate(prefix_map_old, prefix_map_additions)); 308 EXPECT_EQ(
300 const HashPrefixMap& prefix_map = store->hash_prefix_map_; 309 APPLY_UPDATE_SUCCESS,
310 store.MergeUpdate(prefix_map_old, prefix_map_additions, raw_removals));
311 const HashPrefixMap& prefix_map = store.hash_prefix_map_;
301 EXPECT_EQ(1u, prefix_map.size()); 312 EXPECT_EQ(1u, prefix_map.size());
302 313
303 PrefixSize prefix_size = 4; 314 PrefixSize prefix_size = 4;
304 HashPrefixes hash_prefixes = prefix_map.at(prefix_size); 315 HashPrefixes hash_prefixes = prefix_map.at(prefix_size);
305 EXPECT_EQ(3 * prefix_size, hash_prefixes.size()); 316 EXPECT_EQ(3 * prefix_size, hash_prefixes.size());
306 EXPECT_EQ("0000", hash_prefixes.substr(0 * prefix_size, prefix_size)); 317 EXPECT_EQ("0000", hash_prefixes.substr(0 * prefix_size, prefix_size));
307 EXPECT_EQ("1111", hash_prefixes.substr(1 * prefix_size, prefix_size)); 318 EXPECT_EQ("1111", hash_prefixes.substr(1 * prefix_size, prefix_size));
308 EXPECT_EQ("2222", hash_prefixes.substr(2 * prefix_size, prefix_size)); 319 EXPECT_EQ("2222", hash_prefixes.substr(2 * prefix_size, prefix_size));
309 } 320 }
310 321
311 TEST_F(V4StoreTest, TestMergeUpdatesFailsForRepeatedHashPrefix) { 322 TEST_F(V4StoreTest, TestMergeUpdatesFailsForRepeatedHashPrefix) {
312 HashPrefixMap prefix_map_old; 323 HashPrefixMap prefix_map_old;
313 EXPECT_EQ(APPLY_UPDATE_SUCCESS, 324 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
314 V4Store::AddUnlumpedHashes(4, "2222", &prefix_map_old)); 325 V4Store::AddUnlumpedHashes(4, "2222", &prefix_map_old));
315 HashPrefixMap prefix_map_additions; 326 HashPrefixMap prefix_map_additions;
316 EXPECT_EQ(APPLY_UPDATE_SUCCESS, 327 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
317 V4Store::AddUnlumpedHashes(4, "2222", &prefix_map_additions)); 328 V4Store::AddUnlumpedHashes(4, "2222", &prefix_map_additions));
318 329
319 std::unique_ptr<V4Store> store(new V4Store(task_runner_, store_path_)); 330 V4Store store(task_runner_, store_path_);
320 EXPECT_EQ(ADDITIONS_HAS_EXISTING_PREFIX_FAILURE, 331 RepeatedField<int32> raw_removals;
321 store->MergeUpdate(prefix_map_old, prefix_map_additions)); 332 EXPECT_EQ(
333 ADDITIONS_HAS_EXISTING_PREFIX_FAILURE,
334 store.MergeUpdate(prefix_map_old, prefix_map_additions, raw_removals));
335 }
336
337 TEST_F(V4StoreTest, TestMergeUpdatesFailsWhenRemovalsIndexTooLarge) {
338 HashPrefixMap prefix_map_old;
339 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
340 V4Store::AddUnlumpedHashes(4, "2222", &prefix_map_old));
341 HashPrefixMap prefix_map_additions;
342 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
343 V4Store::AddUnlumpedHashes(4, "11113333", &prefix_map_additions));
344
345 // Even though the merged map could have size 3 without removals, the
346 // removals index should only count the entries in the old map.
347 V4Store store(task_runner_, store_path_);
348 RepeatedField<int32> raw_removals;
349 // old_store: ["2222"]
350 raw_removals.Add(1);
351 EXPECT_EQ(
352 REMOVALS_INDEX_TOO_LARGE,
353 store.MergeUpdate(prefix_map_old, prefix_map_additions, raw_removals));
354 }
355
356 TEST_F(V4StoreTest, TestMergeUpdatesRemovesOnlyElement) {
357 HashPrefixMap prefix_map_old;
358 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
359 V4Store::AddUnlumpedHashes(4, "2222", &prefix_map_old));
360 HashPrefixMap prefix_map_additions;
361 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
362 V4Store::AddUnlumpedHashes(5, "1111133333", &prefix_map_additions));
363
364 V4Store store(task_runner_, store_path_);
365 RepeatedField<int32> raw_removals;
366 // old_store: ["2222"]
367 raw_removals.Add(0); // Removes "2222"
368 EXPECT_EQ(
369 APPLY_UPDATE_SUCCESS,
370 store.MergeUpdate(prefix_map_old, prefix_map_additions, raw_removals));
371 const HashPrefixMap& prefix_map = store.hash_prefix_map_;
372 // The size is 2 since we reserve space anyway.
373 EXPECT_EQ(2u, prefix_map.size());
374 EXPECT_TRUE(prefix_map.at(4).empty());
375 EXPECT_EQ("1111133333", prefix_map.at(5));
376 }
377
378 TEST_F(V4StoreTest, TestMergeUpdatesRemovesFirstElement) {
379 HashPrefixMap prefix_map_old;
380 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
381 V4Store::AddUnlumpedHashes(4, "22224444", &prefix_map_old));
382 HashPrefixMap prefix_map_additions;
383 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
384 V4Store::AddUnlumpedHashes(5, "1111133333", &prefix_map_additions));
385
386 V4Store store(task_runner_, store_path_);
387 RepeatedField<int32> raw_removals;
388 // old_store: ["2222", "4444"]
389 raw_removals.Add(0); // Removes "2222"
390 EXPECT_EQ(
391 APPLY_UPDATE_SUCCESS,
392 store.MergeUpdate(prefix_map_old, prefix_map_additions, raw_removals));
393 const HashPrefixMap& prefix_map = store.hash_prefix_map_;
394 // The size is 2 since we reserve space anyway.
395 EXPECT_EQ(2u, prefix_map.size());
396 EXPECT_EQ("4444", prefix_map.at(4));
397 EXPECT_EQ("1111133333", prefix_map.at(5));
398 }
399
400 TEST_F(V4StoreTest, TestMergeUpdatesRemovesMiddleElement) {
401 HashPrefixMap prefix_map_old;
402 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
403 V4Store::AddUnlumpedHashes(4, "222233334444", &prefix_map_old));
404 HashPrefixMap prefix_map_additions;
405 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
406 V4Store::AddUnlumpedHashes(5, "1111133333", &prefix_map_additions));
407
408 V4Store store(task_runner_, store_path_);
409 RepeatedField<int32> raw_removals;
410 // old_store: ["2222", "3333", 4444"]
411 raw_removals.Add(1); // Removes "3333"
412 EXPECT_EQ(
413 APPLY_UPDATE_SUCCESS,
414 store.MergeUpdate(prefix_map_old, prefix_map_additions, raw_removals));
415 const HashPrefixMap& prefix_map = store.hash_prefix_map_;
416 // The size is 2 since we reserve space anyway.
417 EXPECT_EQ(2u, prefix_map.size());
418 EXPECT_EQ("22224444", prefix_map.at(4));
419 EXPECT_EQ("1111133333", prefix_map.at(5));
420 }
421
422 TEST_F(V4StoreTest, TestMergeUpdatesRemovesLastElement) {
423 HashPrefixMap prefix_map_old;
424 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
425 V4Store::AddUnlumpedHashes(4, "222233334444", &prefix_map_old));
426 HashPrefixMap prefix_map_additions;
427 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
428 V4Store::AddUnlumpedHashes(5, "1111133333", &prefix_map_additions));
429
430 V4Store store(task_runner_, store_path_);
431 RepeatedField<int32> raw_removals;
432 // old_store: ["2222", "3333", 4444"]
433 raw_removals.Add(2); // Removes "4444"
434 EXPECT_EQ(
435 APPLY_UPDATE_SUCCESS,
436 store.MergeUpdate(prefix_map_old, prefix_map_additions, raw_removals));
437 const HashPrefixMap& prefix_map = store.hash_prefix_map_;
438 // The size is 2 since we reserve space anyway.
439 EXPECT_EQ(2u, prefix_map.size());
440 EXPECT_EQ("22223333", prefix_map.at(4));
441 EXPECT_EQ("1111133333", prefix_map.at(5));
442 }
443
444 TEST_F(V4StoreTest, TestMergeUpdatesRemovesWhenOldHasDifferentSizes) {
445 HashPrefixMap prefix_map_old;
446 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
447 V4Store::AddUnlumpedHashes(4, "222233334444", &prefix_map_old));
448 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
449 V4Store::AddUnlumpedHashes(5, "aaaaabbbbb", &prefix_map_old));
450 HashPrefixMap prefix_map_additions;
451 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
452 V4Store::AddUnlumpedHashes(5, "1111133333", &prefix_map_additions));
453
454 V4Store store(task_runner_, store_path_);
455 RepeatedField<int32> raw_removals;
456 // old_store: ["2222", "3333", 4444", "aaaaa", "bbbbb"]
457 raw_removals.Add(3); // Removes "aaaaa"
458 EXPECT_EQ(
459 APPLY_UPDATE_SUCCESS,
460 store.MergeUpdate(prefix_map_old, prefix_map_additions, raw_removals));
461 const HashPrefixMap& prefix_map = store.hash_prefix_map_;
462 // The size is 2 since we reserve space anyway.
463 EXPECT_EQ(2u, prefix_map.size());
464 EXPECT_EQ("222233334444", prefix_map.at(4));
465 EXPECT_EQ("1111133333bbbbb", prefix_map.at(5));
466 }
467
468 TEST_F(V4StoreTest, TestMergeUpdatesRemovesMultipleAcrossDifferentSizes) {
469 HashPrefixMap prefix_map_old;
470 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
471 V4Store::AddUnlumpedHashes(4, "22223333aaaa", &prefix_map_old));
472 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
473 V4Store::AddUnlumpedHashes(5, "3333344444bbbbb", &prefix_map_old));
474 HashPrefixMap prefix_map_additions;
475 EXPECT_EQ(APPLY_UPDATE_SUCCESS,
476 V4Store::AddUnlumpedHashes(5, "11111", &prefix_map_additions));
477
478 V4Store store(task_runner_, store_path_);
479 RepeatedField<int32> raw_removals;
480 // old_store: ["2222", "3333", "33333", "44444", "aaaa", "bbbbb"]
481 raw_removals.Add(1); // Removes "3333"
482 raw_removals.Add(3); // Removes "44444"
483 EXPECT_EQ(
484 APPLY_UPDATE_SUCCESS,
485 store.MergeUpdate(prefix_map_old, prefix_map_additions, raw_removals));
486 const HashPrefixMap& prefix_map = store.hash_prefix_map_;
487 // The size is 2 since we reserve space anyway.
488 EXPECT_EQ(2u, prefix_map.size());
489 EXPECT_EQ("2222aaaa", prefix_map.at(4));
490 EXPECT_EQ("1111133333bbbbb", prefix_map.at(5));
322 } 491 }
323 492
324 TEST_F(V4StoreTest, TestReadFullResponseWithValidHashPrefixMap) { 493 TEST_F(V4StoreTest, TestReadFullResponseWithValidHashPrefixMap) {
325 std::unique_ptr<ListUpdateResponse> lur(new ListUpdateResponse); 494 std::unique_ptr<ListUpdateResponse> lur(new ListUpdateResponse);
326 lur->set_response_type(ListUpdateResponse::FULL_UPDATE); 495 lur->set_response_type(ListUpdateResponse::FULL_UPDATE);
327 lur->set_new_client_state("test_client_state"); 496 lur->set_new_client_state("test_client_state");
328 lur->set_platform_type(WINDOWS_PLATFORM); 497 lur->set_platform_type(WINDOWS_PLATFORM);
329 lur->set_threat_entry_type(URL); 498 lur->set_threat_entry_type(URL);
330 lur->set_threat_type(MALWARE_THREAT); 499 lur->set_threat_type(MALWARE_THREAT);
331 ThreatEntrySet* additions = lur->add_additions(); 500 ThreatEntrySet* additions = lur->add_additions();
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
365 EXPECT_EQ(WRITE_SUCCESS, 534 EXPECT_EQ(WRITE_SUCCESS,
366 V4Store(task_runner_, store_path_).WriteToDisk(std::move(lur))); 535 V4Store(task_runner_, store_path_).WriteToDisk(std::move(lur)));
367 536
368 V4Store read_store(task_runner_, store_path_); 537 V4Store read_store(task_runner_, store_path_);
369 EXPECT_EQ(HASH_PREFIX_MAP_GENERATION_FAILURE, read_store.ReadFromDisk()); 538 EXPECT_EQ(HASH_PREFIX_MAP_GENERATION_FAILURE, read_store.ReadFromDisk());
370 EXPECT_TRUE(read_store.state_.empty()); 539 EXPECT_TRUE(read_store.state_.empty());
371 EXPECT_TRUE(read_store.hash_prefix_map_.empty()); 540 EXPECT_TRUE(read_store.hash_prefix_map_.empty());
372 } 541 }
373 542
374 } // namespace safe_browsing 543 } // namespace safe_browsing
OLDNEW
« components/safe_browsing_db/v4_store.cc ('K') | « 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