| OLD | NEW |
| 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/bind.h" | 5 #include "base/bind.h" |
| 6 #include "base/files/file_util.h" | 6 #include "base/files/file_util.h" |
| 7 #include "base/files/scoped_temp_dir.h" | 7 #include "base/files/scoped_temp_dir.h" |
| 8 #include "base/memory/ptr_util.h" | 8 #include "base/memory/ptr_util.h" |
| 9 #include "base/run_loop.h" | 9 #include "base/run_loop.h" |
| 10 #include "base/test/test_simple_task_runner.h" | 10 #include "base/test/test_simple_task_runner.h" |
| 11 #include "base/time/time.h" | 11 #include "base/time/time.h" |
| 12 #include "components/safe_browsing_db/v4_store.h" | 12 #include "components/safe_browsing_db/v4_store.h" |
| 13 #include "components/safe_browsing_db/v4_store.pb.h" | 13 #include "components/safe_browsing_db/v4_store.pb.h" |
| 14 #include "content/public/test/test_browser_thread_bundle.h" | 14 #include "content/public/test/test_browser_thread_bundle.h" |
| 15 #include "crypto/sha2.h" |
| 15 #include "testing/platform_test.h" | 16 #include "testing/platform_test.h" |
| 16 | 17 |
| 17 namespace safe_browsing { | 18 namespace safe_browsing { |
| 18 | 19 |
| 19 using ::google::protobuf::RepeatedField; | 20 using ::google::protobuf::RepeatedField; |
| 20 using ::google::protobuf::RepeatedPtrField; | 21 using ::google::protobuf::RepeatedPtrField; |
| 21 using ::google::protobuf::int32; | 22 using ::google::protobuf::int32; |
| 22 | 23 |
| 23 class V4StoreTest : public PlatformTest { | 24 class V4StoreTest : public PlatformTest { |
| 24 public: | 25 public: |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 115 | 116 |
| 116 TEST_F(V4StoreTest, TestReadFromNoHashPrefixInfoFile) { | 117 TEST_F(V4StoreTest, TestReadFromNoHashPrefixInfoFile) { |
| 117 WriteFileFormatProtoToFile(0x600D71FE, 9); | 118 WriteFileFormatProtoToFile(0x600D71FE, 9); |
| 118 EXPECT_EQ(HASH_PREFIX_INFO_MISSING_FAILURE, | 119 EXPECT_EQ(HASH_PREFIX_INFO_MISSING_FAILURE, |
| 119 V4Store(task_runner_, store_path_).ReadFromDisk()); | 120 V4Store(task_runner_, store_path_).ReadFromDisk()); |
| 120 } | 121 } |
| 121 | 122 |
| 122 TEST_F(V4StoreTest, TestReadFromNoHashPrefixesFile) { | 123 TEST_F(V4StoreTest, TestReadFromNoHashPrefixesFile) { |
| 123 ListUpdateResponse list_update_response; | 124 ListUpdateResponse list_update_response; |
| 124 list_update_response.set_platform_type(LINUX_PLATFORM); | 125 list_update_response.set_platform_type(LINUX_PLATFORM); |
| 126 list_update_response.set_response_type(ListUpdateResponse::FULL_UPDATE); |
| 125 WriteFileFormatProtoToFile(0x600D71FE, 9, &list_update_response); | 127 WriteFileFormatProtoToFile(0x600D71FE, 9, &list_update_response); |
| 126 EXPECT_EQ(READ_SUCCESS, V4Store(task_runner_, store_path_).ReadFromDisk()); | 128 EXPECT_EQ(READ_SUCCESS, V4Store(task_runner_, store_path_).ReadFromDisk()); |
| 127 } | 129 } |
| 128 | 130 |
| 129 TEST_F(V4StoreTest, TestWriteNoResponseType) { | 131 TEST_F(V4StoreTest, TestWriteNoResponseType) { |
| 130 EXPECT_EQ(INVALID_RESPONSE_TYPE_FAILURE, | 132 EXPECT_EQ(INVALID_RESPONSE_TYPE_FAILURE, |
| 131 V4Store(task_runner_, store_path_) | 133 V4Store(task_runner_, store_path_) |
| 132 .WriteToDisk(base::WrapUnique(new ListUpdateResponse))); | 134 .WriteToDisk(base::WrapUnique(new ListUpdateResponse))); |
| 133 } | 135 } |
| 134 | 136 |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 222 EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 224 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 223 V4Store::AddUnlumpedHashes(5, "54321abcde", &prefix_map_old)); | 225 V4Store::AddUnlumpedHashes(5, "54321abcde", &prefix_map_old)); |
| 224 HashPrefixMap prefix_map_additions; | 226 HashPrefixMap prefix_map_additions; |
| 225 EXPECT_EQ( | 227 EXPECT_EQ( |
| 226 APPLY_UPDATE_SUCCESS, | 228 APPLY_UPDATE_SUCCESS, |
| 227 V4Store::AddUnlumpedHashes(4, "----1111bbbb", &prefix_map_additions)); | 229 V4Store::AddUnlumpedHashes(4, "----1111bbbb", &prefix_map_additions)); |
| 228 EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 230 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 229 V4Store::AddUnlumpedHashes(5, "22222bcdef", &prefix_map_additions)); | 231 V4Store::AddUnlumpedHashes(5, "22222bcdef", &prefix_map_additions)); |
| 230 | 232 |
| 231 V4Store store(task_runner_, store_path_); | 233 V4Store store(task_runner_, store_path_); |
| 234 // Proof of checksum validity using python: |
| 235 // >>> import hashlib |
| 236 // >>> m = hashlib.sha256() |
| 237 // >>> m.update("----11112222254321abcdabcdebbbbbcdefefgh") |
| 238 // >>> m.digest() |
| 239 // "\xbc\xb3\xedk\xe3x\xd1(\xa9\xedz7]" |
| 240 // "x\x18\xbdn]\xa5\xa8R\xf7\xab\xcf\xc1\xa3\xa3\xc5Z,\xa6o" |
| 241 std::string expected_checksum = std::string( |
| 242 "\xBC\xB3\xEDk\xE3x\xD1(\xA9\xEDz7]x\x18\xBDn]" |
| 243 "\xA5\xA8R\xF7\xAB\xCF\xC1\xA3\xA3\xC5Z,\xA6o", |
| 244 crypto::kSHA256Length); |
| 232 EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 245 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 233 store.MergeUpdate(prefix_map_old, prefix_map_additions, nullptr)); | 246 store.MergeUpdate(prefix_map_old, prefix_map_additions, nullptr, |
| 247 expected_checksum)); |
| 248 |
| 234 const HashPrefixMap& prefix_map = store.hash_prefix_map_; | 249 const HashPrefixMap& prefix_map = store.hash_prefix_map_; |
| 235 EXPECT_EQ(2u, prefix_map.size()); | 250 EXPECT_EQ(2u, prefix_map.size()); |
| 236 | 251 |
| 237 PrefixSize prefix_size = 4; | 252 PrefixSize prefix_size = 4; |
| 238 HashPrefixes hash_prefixes = prefix_map.at(prefix_size); | 253 HashPrefixes hash_prefixes = prefix_map.at(prefix_size); |
| 239 EXPECT_EQ(5 * prefix_size, hash_prefixes.size()); | 254 EXPECT_EQ(5 * prefix_size, hash_prefixes.size()); |
| 240 EXPECT_EQ("----", hash_prefixes.substr(0 * prefix_size, prefix_size)); | 255 EXPECT_EQ("----", hash_prefixes.substr(0 * prefix_size, prefix_size)); |
| 241 EXPECT_EQ("1111", hash_prefixes.substr(1 * prefix_size, prefix_size)); | 256 EXPECT_EQ("1111", hash_prefixes.substr(1 * prefix_size, prefix_size)); |
| 242 EXPECT_EQ("abcd", hash_prefixes.substr(2 * prefix_size, prefix_size)); | 257 EXPECT_EQ("abcd", hash_prefixes.substr(2 * prefix_size, prefix_size)); |
| 243 EXPECT_EQ("bbbb", hash_prefixes.substr(3 * prefix_size, prefix_size)); | 258 EXPECT_EQ("bbbb", hash_prefixes.substr(3 * prefix_size, prefix_size)); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 254 | 269 |
| 255 TEST_F(V4StoreTest, TestMergeUpdatesWithDifferentSizesInEachMap) { | 270 TEST_F(V4StoreTest, TestMergeUpdatesWithDifferentSizesInEachMap) { |
| 256 HashPrefixMap prefix_map_old; | 271 HashPrefixMap prefix_map_old; |
| 257 EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 272 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 258 V4Store::AddUnlumpedHashes(4, "1111abcdefgh", &prefix_map_old)); | 273 V4Store::AddUnlumpedHashes(4, "1111abcdefgh", &prefix_map_old)); |
| 259 HashPrefixMap prefix_map_additions; | 274 HashPrefixMap prefix_map_additions; |
| 260 EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 275 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 261 V4Store::AddUnlumpedHashes(5, "22222bcdef", &prefix_map_additions)); | 276 V4Store::AddUnlumpedHashes(5, "22222bcdef", &prefix_map_additions)); |
| 262 | 277 |
| 263 V4Store store(task_runner_, store_path_); | 278 V4Store store(task_runner_, store_path_); |
| 279 std::string expected_checksum = std::string( |
| 280 "\xA5\x8B\xCAsD\xC7\xF9\xCE\xD2\xF4\x4=" |
| 281 "\xB2\"\x82\x1A\xC1\xB8\x1F\x10\r\v\x9A\x93\xFD\xE1\xB8" |
| 282 "B\x1Eh\xF7\xB4", |
| 283 crypto::kSHA256Length); |
| 264 EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 284 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 265 store.MergeUpdate(prefix_map_old, prefix_map_additions, nullptr)); | 285 store.MergeUpdate(prefix_map_old, prefix_map_additions, nullptr, |
| 286 expected_checksum)); |
| 287 |
| 266 const HashPrefixMap& prefix_map = store.hash_prefix_map_; | 288 const HashPrefixMap& prefix_map = store.hash_prefix_map_; |
| 267 EXPECT_EQ(2u, prefix_map.size()); | 289 EXPECT_EQ(2u, prefix_map.size()); |
| 268 | 290 |
| 269 PrefixSize prefix_size = 4; | 291 PrefixSize prefix_size = 4; |
| 270 HashPrefixes hash_prefixes = prefix_map.at(prefix_size); | 292 HashPrefixes hash_prefixes = prefix_map.at(prefix_size); |
| 271 EXPECT_EQ(3 * prefix_size, hash_prefixes.size()); | 293 EXPECT_EQ(3 * prefix_size, hash_prefixes.size()); |
| 272 EXPECT_EQ("1111abcdefgh", hash_prefixes); | 294 EXPECT_EQ("1111abcdefgh", hash_prefixes); |
| 273 | 295 |
| 274 prefix_size = 5; | 296 prefix_size = 5; |
| 275 hash_prefixes = prefix_map.at(prefix_size); | 297 hash_prefixes = prefix_map.at(prefix_size); |
| 276 EXPECT_EQ(2 * prefix_size, hash_prefixes.size()); | 298 EXPECT_EQ(2 * prefix_size, hash_prefixes.size()); |
| 277 EXPECT_EQ("22222bcdef", hash_prefixes); | 299 EXPECT_EQ("22222bcdef", hash_prefixes); |
| 278 } | 300 } |
| 279 | 301 |
| 280 TEST_F(V4StoreTest, TestMergeUpdatesOldMapRunsOutFirst) { | 302 TEST_F(V4StoreTest, TestMergeUpdatesOldMapRunsOutFirst) { |
| 281 HashPrefixMap prefix_map_old; | 303 HashPrefixMap prefix_map_old; |
| 282 EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 304 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 283 V4Store::AddUnlumpedHashes(4, "00001111", &prefix_map_old)); | 305 V4Store::AddUnlumpedHashes(4, "00001111", &prefix_map_old)); |
| 284 HashPrefixMap prefix_map_additions; | 306 HashPrefixMap prefix_map_additions; |
| 285 EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 307 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 286 V4Store::AddUnlumpedHashes(4, "2222", &prefix_map_additions)); | 308 V4Store::AddUnlumpedHashes(4, "2222", &prefix_map_additions)); |
| 287 | 309 |
| 288 V4Store store(task_runner_, store_path_); | 310 V4Store store(task_runner_, store_path_); |
| 311 std::string expected_checksum = std::string( |
| 312 "\x84\x92\xET\xED\xF7\x97" |
| 313 "C\xCE}\xFF" |
| 314 "E\x1\xAB-\b>\xDB\x95\b\xD8H\xD5\x1D\xF9]8x\xA4\xD4\xC2\xFA", |
| 315 crypto::kSHA256Length); |
| 289 EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 316 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 290 store.MergeUpdate(prefix_map_old, prefix_map_additions, nullptr)); | 317 store.MergeUpdate(prefix_map_old, prefix_map_additions, nullptr, |
| 318 expected_checksum)); |
| 319 |
| 291 const HashPrefixMap& prefix_map = store.hash_prefix_map_; | 320 const HashPrefixMap& prefix_map = store.hash_prefix_map_; |
| 292 EXPECT_EQ(1u, prefix_map.size()); | 321 EXPECT_EQ(1u, prefix_map.size()); |
| 293 | 322 |
| 294 PrefixSize prefix_size = 4; | 323 PrefixSize prefix_size = 4; |
| 295 HashPrefixes hash_prefixes = prefix_map.at(prefix_size); | 324 HashPrefixes hash_prefixes = prefix_map.at(prefix_size); |
| 296 EXPECT_EQ(3 * prefix_size, hash_prefixes.size()); | 325 EXPECT_EQ(3 * prefix_size, hash_prefixes.size()); |
| 297 EXPECT_EQ("0000", hash_prefixes.substr(0 * prefix_size, prefix_size)); | 326 EXPECT_EQ("0000", hash_prefixes.substr(0 * prefix_size, prefix_size)); |
| 298 EXPECT_EQ("1111", hash_prefixes.substr(1 * prefix_size, prefix_size)); | 327 EXPECT_EQ("1111", hash_prefixes.substr(1 * prefix_size, prefix_size)); |
| 299 EXPECT_EQ("2222", hash_prefixes.substr(2 * prefix_size, prefix_size)); | 328 EXPECT_EQ("2222", hash_prefixes.substr(2 * prefix_size, prefix_size)); |
| 300 } | 329 } |
| 301 | 330 |
| 302 TEST_F(V4StoreTest, TestMergeUpdatesAdditionsMapRunsOutFirst) { | 331 TEST_F(V4StoreTest, TestMergeUpdatesAdditionsMapRunsOutFirst) { |
| 303 HashPrefixMap prefix_map_old; | 332 HashPrefixMap prefix_map_old; |
| 304 EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 333 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 305 V4Store::AddUnlumpedHashes(4, "2222", &prefix_map_old)); | 334 V4Store::AddUnlumpedHashes(4, "2222", &prefix_map_old)); |
| 306 HashPrefixMap prefix_map_additions; | 335 HashPrefixMap prefix_map_additions; |
| 307 EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 336 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 308 V4Store::AddUnlumpedHashes(4, "00001111", &prefix_map_additions)); | 337 V4Store::AddUnlumpedHashes(4, "00001111", &prefix_map_additions)); |
| 309 | 338 |
| 310 V4Store store(task_runner_, store_path_); | 339 V4Store store(task_runner_, store_path_); |
| 340 std::string expected_checksum = std::string( |
| 341 "\x84\x92\xET\xED\xF7\x97" |
| 342 "C\xCE}\xFF" |
| 343 "E\x1\xAB-\b>\xDB\x95\b\xD8H\xD5\x1D\xF9]8x\xA4\xD4\xC2\xFA", |
| 344 crypto::kSHA256Length); |
| 311 EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 345 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 312 store.MergeUpdate(prefix_map_old, prefix_map_additions, nullptr)); | 346 store.MergeUpdate(prefix_map_old, prefix_map_additions, nullptr, |
| 347 expected_checksum)); |
| 348 |
| 313 const HashPrefixMap& prefix_map = store.hash_prefix_map_; | 349 const HashPrefixMap& prefix_map = store.hash_prefix_map_; |
| 314 EXPECT_EQ(1u, prefix_map.size()); | 350 EXPECT_EQ(1u, prefix_map.size()); |
| 315 | 351 |
| 316 PrefixSize prefix_size = 4; | 352 PrefixSize prefix_size = 4; |
| 317 HashPrefixes hash_prefixes = prefix_map.at(prefix_size); | 353 HashPrefixes hash_prefixes = prefix_map.at(prefix_size); |
| 318 EXPECT_EQ(3 * prefix_size, hash_prefixes.size()); | 354 EXPECT_EQ(3 * prefix_size, hash_prefixes.size()); |
| 319 EXPECT_EQ("0000", hash_prefixes.substr(0 * prefix_size, prefix_size)); | 355 EXPECT_EQ("0000", hash_prefixes.substr(0 * prefix_size, prefix_size)); |
| 320 EXPECT_EQ("1111", hash_prefixes.substr(1 * prefix_size, prefix_size)); | 356 EXPECT_EQ("1111", hash_prefixes.substr(1 * prefix_size, prefix_size)); |
| 321 EXPECT_EQ("2222", hash_prefixes.substr(2 * prefix_size, prefix_size)); | 357 EXPECT_EQ("2222", hash_prefixes.substr(2 * prefix_size, prefix_size)); |
| 322 } | 358 } |
| 323 | 359 |
| 324 TEST_F(V4StoreTest, TestMergeUpdatesFailsForRepeatedHashPrefix) { | 360 TEST_F(V4StoreTest, TestMergeUpdatesFailsForRepeatedHashPrefix) { |
| 325 HashPrefixMap prefix_map_old; | 361 HashPrefixMap prefix_map_old; |
| 326 EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 362 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 327 V4Store::AddUnlumpedHashes(4, "2222", &prefix_map_old)); | 363 V4Store::AddUnlumpedHashes(4, "2222", &prefix_map_old)); |
| 328 HashPrefixMap prefix_map_additions; | 364 HashPrefixMap prefix_map_additions; |
| 329 EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 365 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 330 V4Store::AddUnlumpedHashes(4, "2222", &prefix_map_additions)); | 366 V4Store::AddUnlumpedHashes(4, "2222", &prefix_map_additions)); |
| 331 | 367 |
| 332 V4Store store(task_runner_, store_path_); | 368 V4Store store(task_runner_, store_path_); |
| 369 std::string expected_checksum; |
| 333 EXPECT_EQ(ADDITIONS_HAS_EXISTING_PREFIX_FAILURE, | 370 EXPECT_EQ(ADDITIONS_HAS_EXISTING_PREFIX_FAILURE, |
| 334 store.MergeUpdate(prefix_map_old, prefix_map_additions, nullptr)); | 371 store.MergeUpdate(prefix_map_old, prefix_map_additions, nullptr, |
| 372 expected_checksum)); |
| 335 } | 373 } |
| 336 | 374 |
| 337 TEST_F(V4StoreTest, TestMergeUpdatesFailsWhenRemovalsIndexTooLarge) { | 375 TEST_F(V4StoreTest, TestMergeUpdatesFailsWhenRemovalsIndexTooLarge) { |
| 338 HashPrefixMap prefix_map_old; | 376 HashPrefixMap prefix_map_old; |
| 339 EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 377 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 340 V4Store::AddUnlumpedHashes(4, "2222", &prefix_map_old)); | 378 V4Store::AddUnlumpedHashes(4, "2222", &prefix_map_old)); |
| 341 HashPrefixMap prefix_map_additions; | 379 HashPrefixMap prefix_map_additions; |
| 342 EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 380 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 343 V4Store::AddUnlumpedHashes(4, "11113333", &prefix_map_additions)); | 381 V4Store::AddUnlumpedHashes(4, "11113333", &prefix_map_additions)); |
| 344 | 382 |
| 345 // Even though the merged map could have size 3 without removals, the | 383 // Even though the merged map could have size 3 without removals, the |
| 346 // removals index should only count the entries in the old map. | 384 // removals index should only count the entries in the old map. |
| 347 V4Store store(task_runner_, store_path_); | 385 V4Store store(task_runner_, store_path_); |
| 348 RepeatedField<int32> raw_removals; | 386 RepeatedField<int32> raw_removals; |
| 349 // old_store: ["2222"] | 387 // old_store: ["2222"] |
| 350 raw_removals.Add(1); | 388 raw_removals.Add(1); |
| 351 EXPECT_EQ( | 389 std::string expected_checksum; |
| 352 REMOVALS_INDEX_TOO_LARGE_FAILURE, | 390 EXPECT_EQ(REMOVALS_INDEX_TOO_LARGE_FAILURE, |
| 353 store.MergeUpdate(prefix_map_old, prefix_map_additions, &raw_removals)); | 391 store.MergeUpdate(prefix_map_old, prefix_map_additions, |
| 392 &raw_removals, expected_checksum)); |
| 354 } | 393 } |
| 355 | 394 |
| 356 TEST_F(V4StoreTest, TestMergeUpdatesRemovesOnlyElement) { | 395 TEST_F(V4StoreTest, TestMergeUpdatesRemovesOnlyElement) { |
| 357 HashPrefixMap prefix_map_old; | 396 HashPrefixMap prefix_map_old; |
| 358 EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 397 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 359 V4Store::AddUnlumpedHashes(4, "2222", &prefix_map_old)); | 398 V4Store::AddUnlumpedHashes(4, "2222", &prefix_map_old)); |
| 360 HashPrefixMap prefix_map_additions; | 399 HashPrefixMap prefix_map_additions; |
| 361 EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 400 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 362 V4Store::AddUnlumpedHashes(5, "1111133333", &prefix_map_additions)); | 401 V4Store::AddUnlumpedHashes(5, "1111133333", &prefix_map_additions)); |
| 363 | 402 |
| 364 V4Store store(task_runner_, store_path_); | 403 V4Store store(task_runner_, store_path_); |
| 365 RepeatedField<int32> raw_removals; | 404 RepeatedField<int32> raw_removals; |
| 366 // old_store: ["2222"] | 405 // old_store: ["2222"] |
| 367 raw_removals.Add(0); // Removes "2222" | 406 raw_removals.Add(0); // Removes "2222" |
| 368 EXPECT_EQ( | 407 std::string expected_checksum = std::string( |
| 369 APPLY_UPDATE_SUCCESS, | 408 "\xE6\xB0\x1\x12\x89\x83\xF0/" |
| 370 store.MergeUpdate(prefix_map_old, prefix_map_additions, &raw_removals)); | 409 "\xE7\xD2\xE6\xDC\x16\xB9\x8C+\xA2\xB3\x9E\x89<,\x88" |
| 410 "B3\xA5\xB1" |
| 411 "D\x9E\x9E'\x14", |
| 412 crypto::kSHA256Length); |
| 413 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 414 store.MergeUpdate(prefix_map_old, prefix_map_additions, |
| 415 &raw_removals, expected_checksum)); |
| 416 |
| 371 const HashPrefixMap& prefix_map = store.hash_prefix_map_; | 417 const HashPrefixMap& prefix_map = store.hash_prefix_map_; |
| 372 // The size is 2 since we reserve space anyway. | 418 // The size is 2 since we reserve space anyway. |
| 373 EXPECT_EQ(2u, prefix_map.size()); | 419 EXPECT_EQ(2u, prefix_map.size()); |
| 374 EXPECT_TRUE(prefix_map.at(4).empty()); | 420 EXPECT_TRUE(prefix_map.at(4).empty()); |
| 375 EXPECT_EQ("1111133333", prefix_map.at(5)); | 421 EXPECT_EQ("1111133333", prefix_map.at(5)); |
| 376 } | 422 } |
| 377 | 423 |
| 378 TEST_F(V4StoreTest, TestMergeUpdatesRemovesFirstElement) { | 424 TEST_F(V4StoreTest, TestMergeUpdatesRemovesFirstElement) { |
| 379 HashPrefixMap prefix_map_old; | 425 HashPrefixMap prefix_map_old; |
| 380 EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 426 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 381 V4Store::AddUnlumpedHashes(4, "22224444", &prefix_map_old)); | 427 V4Store::AddUnlumpedHashes(4, "22224444", &prefix_map_old)); |
| 382 HashPrefixMap prefix_map_additions; | 428 HashPrefixMap prefix_map_additions; |
| 383 EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 429 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 384 V4Store::AddUnlumpedHashes(5, "1111133333", &prefix_map_additions)); | 430 V4Store::AddUnlumpedHashes(5, "1111133333", &prefix_map_additions)); |
| 385 | 431 |
| 386 V4Store store(task_runner_, store_path_); | 432 V4Store store(task_runner_, store_path_); |
| 387 RepeatedField<int32> raw_removals; | 433 RepeatedField<int32> raw_removals; |
| 388 // old_store: ["2222", "4444"] | 434 // old_store: ["2222", "4444"] |
| 389 raw_removals.Add(0); // Removes "2222" | 435 raw_removals.Add(0); // Removes "2222" |
| 390 EXPECT_EQ( | 436 std::string expected_checksum = std::string( |
| 391 APPLY_UPDATE_SUCCESS, | 437 "\x9D\xF3\xF2\x82\0\x1E{\xDF\xCD\xC0V\xBE\xD6<\x85" |
| 392 store.MergeUpdate(prefix_map_old, prefix_map_additions, &raw_removals)); | 438 "D7=\xB5v\xAD\b1\xC9\xB3" |
| 439 "A\xAC" |
| 440 "b\xF1lf\xA4", |
| 441 crypto::kSHA256Length); |
| 442 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 443 store.MergeUpdate(prefix_map_old, prefix_map_additions, |
| 444 &raw_removals, expected_checksum)); |
| 445 |
| 393 const HashPrefixMap& prefix_map = store.hash_prefix_map_; | 446 const HashPrefixMap& prefix_map = store.hash_prefix_map_; |
| 394 // The size is 2 since we reserve space anyway. | 447 // The size is 2 since we reserve space anyway. |
| 395 EXPECT_EQ(2u, prefix_map.size()); | 448 EXPECT_EQ(2u, prefix_map.size()); |
| 396 EXPECT_EQ("4444", prefix_map.at(4)); | 449 EXPECT_EQ("4444", prefix_map.at(4)); |
| 397 EXPECT_EQ("1111133333", prefix_map.at(5)); | 450 EXPECT_EQ("1111133333", prefix_map.at(5)); |
| 398 } | 451 } |
| 399 | 452 |
| 400 TEST_F(V4StoreTest, TestMergeUpdatesRemovesMiddleElement) { | 453 TEST_F(V4StoreTest, TestMergeUpdatesRemovesMiddleElement) { |
| 401 HashPrefixMap prefix_map_old; | 454 HashPrefixMap prefix_map_old; |
| 402 EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 455 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 403 V4Store::AddUnlumpedHashes(4, "222233334444", &prefix_map_old)); | 456 V4Store::AddUnlumpedHashes(4, "222233334444", &prefix_map_old)); |
| 404 HashPrefixMap prefix_map_additions; | 457 HashPrefixMap prefix_map_additions; |
| 405 EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 458 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 406 V4Store::AddUnlumpedHashes(5, "1111133333", &prefix_map_additions)); | 459 V4Store::AddUnlumpedHashes(5, "1111133333", &prefix_map_additions)); |
| 407 | 460 |
| 408 V4Store store(task_runner_, store_path_); | 461 V4Store store(task_runner_, store_path_); |
| 409 RepeatedField<int32> raw_removals; | 462 RepeatedField<int32> raw_removals; |
| 410 // old_store: ["2222", "3333", 4444"] | 463 // old_store: ["2222", "3333", 4444"] |
| 411 raw_removals.Add(1); // Removes "3333" | 464 raw_removals.Add(1); // Removes "3333" |
| 412 EXPECT_EQ( | 465 std::string expected_checksum = std::string( |
| 413 APPLY_UPDATE_SUCCESS, | 466 "\xFA-A\x15{\x17\0>\xAE" |
| 414 store.MergeUpdate(prefix_map_old, prefix_map_additions, &raw_removals)); | 467 "8\xACigR\xD1\x93<\xB2\xC9\xB5\x81\xC0\xFB\xBB\x2\f\xAFpN\xEA" |
| 468 "44", |
| 469 crypto::kSHA256Length); |
| 470 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 471 store.MergeUpdate(prefix_map_old, prefix_map_additions, |
| 472 &raw_removals, expected_checksum)); |
| 473 |
| 415 const HashPrefixMap& prefix_map = store.hash_prefix_map_; | 474 const HashPrefixMap& prefix_map = store.hash_prefix_map_; |
| 416 // The size is 2 since we reserve space anyway. | 475 // The size is 2 since we reserve space anyway. |
| 417 EXPECT_EQ(2u, prefix_map.size()); | 476 EXPECT_EQ(2u, prefix_map.size()); |
| 418 EXPECT_EQ("22224444", prefix_map.at(4)); | 477 EXPECT_EQ("22224444", prefix_map.at(4)); |
| 419 EXPECT_EQ("1111133333", prefix_map.at(5)); | 478 EXPECT_EQ("1111133333", prefix_map.at(5)); |
| 420 } | 479 } |
| 421 | 480 |
| 422 TEST_F(V4StoreTest, TestMergeUpdatesRemovesLastElement) { | 481 TEST_F(V4StoreTest, TestMergeUpdatesRemovesLastElement) { |
| 423 HashPrefixMap prefix_map_old; | 482 HashPrefixMap prefix_map_old; |
| 424 EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 483 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 425 V4Store::AddUnlumpedHashes(4, "222233334444", &prefix_map_old)); | 484 V4Store::AddUnlumpedHashes(4, "222233334444", &prefix_map_old)); |
| 426 HashPrefixMap prefix_map_additions; | 485 HashPrefixMap prefix_map_additions; |
| 427 EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 486 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 428 V4Store::AddUnlumpedHashes(5, "1111133333", &prefix_map_additions)); | 487 V4Store::AddUnlumpedHashes(5, "1111133333", &prefix_map_additions)); |
| 429 | 488 |
| 430 V4Store store(task_runner_, store_path_); | 489 V4Store store(task_runner_, store_path_); |
| 431 RepeatedField<int32> raw_removals; | 490 RepeatedField<int32> raw_removals; |
| 432 // old_store: ["2222", "3333", 4444"] | 491 // old_store: ["2222", "3333", 4444"] |
| 433 raw_removals.Add(2); // Removes "4444" | 492 raw_removals.Add(2); // Removes "4444" |
| 434 EXPECT_EQ( | 493 std::string expected_checksum = std::string( |
| 435 APPLY_UPDATE_SUCCESS, | 494 "a\xE1\xAD\x96\xFE\xA6" |
| 436 store.MergeUpdate(prefix_map_old, prefix_map_additions, &raw_removals)); | 495 "A\xCA~7W\xF6z\xD8\n\xCA?\x96\x8A\x17U\x5\v\r\x88]\n\xB2JX\xC4S", |
| 496 crypto::kSHA256Length); |
| 497 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 498 store.MergeUpdate(prefix_map_old, prefix_map_additions, |
| 499 &raw_removals, expected_checksum)); |
| 500 |
| 437 const HashPrefixMap& prefix_map = store.hash_prefix_map_; | 501 const HashPrefixMap& prefix_map = store.hash_prefix_map_; |
| 438 // The size is 2 since we reserve space anyway. | 502 // The size is 2 since we reserve space anyway. |
| 439 EXPECT_EQ(2u, prefix_map.size()); | 503 EXPECT_EQ(2u, prefix_map.size()); |
| 440 EXPECT_EQ("22223333", prefix_map.at(4)); | 504 EXPECT_EQ("22223333", prefix_map.at(4)); |
| 441 EXPECT_EQ("1111133333", prefix_map.at(5)); | 505 EXPECT_EQ("1111133333", prefix_map.at(5)); |
| 442 } | 506 } |
| 443 | 507 |
| 444 TEST_F(V4StoreTest, TestMergeUpdatesRemovesWhenOldHasDifferentSizes) { | 508 TEST_F(V4StoreTest, TestMergeUpdatesRemovesWhenOldHasDifferentSizes) { |
| 445 HashPrefixMap prefix_map_old; | 509 HashPrefixMap prefix_map_old; |
| 446 EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 510 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 447 V4Store::AddUnlumpedHashes(4, "222233334444", &prefix_map_old)); | 511 V4Store::AddUnlumpedHashes(4, "222233334444", &prefix_map_old)); |
| 448 EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 512 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 449 V4Store::AddUnlumpedHashes(5, "aaaaabbbbb", &prefix_map_old)); | 513 V4Store::AddUnlumpedHashes(5, "aaaaabbbbb", &prefix_map_old)); |
| 450 HashPrefixMap prefix_map_additions; | 514 HashPrefixMap prefix_map_additions; |
| 451 EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 515 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 452 V4Store::AddUnlumpedHashes(5, "1111133333", &prefix_map_additions)); | 516 V4Store::AddUnlumpedHashes(5, "1111133333", &prefix_map_additions)); |
| 453 | 517 |
| 454 V4Store store(task_runner_, store_path_); | 518 V4Store store(task_runner_, store_path_); |
| 455 RepeatedField<int32> raw_removals; | 519 RepeatedField<int32> raw_removals; |
| 456 // old_store: ["2222", "3333", 4444", "aaaaa", "bbbbb"] | 520 // old_store: ["2222", "3333", 4444", "aaaaa", "bbbbb"] |
| 457 raw_removals.Add(3); // Removes "aaaaa" | 521 raw_removals.Add(3); // Removes "aaaaa" |
| 458 EXPECT_EQ( | 522 std::string expected_checksum = std::string( |
| 459 APPLY_UPDATE_SUCCESS, | 523 "\xA7OG\x9D\x83.\x9D-f\x8A\xE\x8B\r&\x19" |
| 460 store.MergeUpdate(prefix_map_old, prefix_map_additions, &raw_removals)); | 524 "6\xE3\xF0\xEFTi\xA7\x5\xEA\xF7" |
| 525 "ej,\xA8\x9D\xAD\x91", |
| 526 crypto::kSHA256Length); |
| 527 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 528 store.MergeUpdate(prefix_map_old, prefix_map_additions, |
| 529 &raw_removals, expected_checksum)); |
| 530 |
| 461 const HashPrefixMap& prefix_map = store.hash_prefix_map_; | 531 const HashPrefixMap& prefix_map = store.hash_prefix_map_; |
| 462 // The size is 2 since we reserve space anyway. | 532 // The size is 2 since we reserve space anyway. |
| 463 EXPECT_EQ(2u, prefix_map.size()); | 533 EXPECT_EQ(2u, prefix_map.size()); |
| 464 EXPECT_EQ("222233334444", prefix_map.at(4)); | 534 EXPECT_EQ("222233334444", prefix_map.at(4)); |
| 465 EXPECT_EQ("1111133333bbbbb", prefix_map.at(5)); | 535 EXPECT_EQ("1111133333bbbbb", prefix_map.at(5)); |
| 466 } | 536 } |
| 467 | 537 |
| 468 TEST_F(V4StoreTest, TestMergeUpdatesRemovesMultipleAcrossDifferentSizes) { | 538 TEST_F(V4StoreTest, TestMergeUpdatesRemovesMultipleAcrossDifferentSizes) { |
| 469 HashPrefixMap prefix_map_old; | 539 HashPrefixMap prefix_map_old; |
| 470 EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 540 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 471 V4Store::AddUnlumpedHashes(4, "22223333aaaa", &prefix_map_old)); | 541 V4Store::AddUnlumpedHashes(4, "22223333aaaa", &prefix_map_old)); |
| 472 EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 542 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 473 V4Store::AddUnlumpedHashes(5, "3333344444bbbbb", &prefix_map_old)); | 543 V4Store::AddUnlumpedHashes(5, "3333344444bbbbb", &prefix_map_old)); |
| 474 HashPrefixMap prefix_map_additions; | 544 HashPrefixMap prefix_map_additions; |
| 475 EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 545 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 476 V4Store::AddUnlumpedHashes(5, "11111", &prefix_map_additions)); | 546 V4Store::AddUnlumpedHashes(5, "11111", &prefix_map_additions)); |
| 477 | 547 |
| 478 V4Store store(task_runner_, store_path_); | 548 V4Store store(task_runner_, store_path_); |
| 479 RepeatedField<int32> raw_removals; | 549 RepeatedField<int32> raw_removals; |
| 480 // old_store: ["2222", "3333", "33333", "44444", "aaaa", "bbbbb"] | 550 // old_store: ["2222", "3333", "33333", "44444", "aaaa", "bbbbb"] |
| 481 raw_removals.Add(1); // Removes "3333" | 551 raw_removals.Add(1); // Removes "3333" |
| 482 raw_removals.Add(3); // Removes "44444" | 552 raw_removals.Add(3); // Removes "44444" |
| 483 EXPECT_EQ( | 553 std::string expected_checksum = std::string( |
| 484 APPLY_UPDATE_SUCCESS, | 554 "!D\xB7&L\xA7&G0\x85\xB4" |
| 485 store.MergeUpdate(prefix_map_old, prefix_map_additions, &raw_removals)); | 555 "E\xDD\x10\"\x9A\xCA\xF1" |
| 556 "3^\x83w\xBBL\x19n\xAD\xBDM\x9D" |
| 557 "b\x9F", |
| 558 crypto::kSHA256Length); |
| 559 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 560 store.MergeUpdate(prefix_map_old, prefix_map_additions, |
| 561 &raw_removals, expected_checksum)); |
| 562 |
| 486 const HashPrefixMap& prefix_map = store.hash_prefix_map_; | 563 const HashPrefixMap& prefix_map = store.hash_prefix_map_; |
| 487 // The size is 2 since we reserve space anyway. | 564 // The size is 2 since we reserve space anyway. |
| 488 EXPECT_EQ(2u, prefix_map.size()); | 565 EXPECT_EQ(2u, prefix_map.size()); |
| 489 EXPECT_EQ("2222aaaa", prefix_map.at(4)); | 566 EXPECT_EQ("2222aaaa", prefix_map.at(4)); |
| 490 EXPECT_EQ("1111133333bbbbb", prefix_map.at(5)); | 567 EXPECT_EQ("1111133333bbbbb", prefix_map.at(5)); |
| 491 } | 568 } |
| 492 | 569 |
| 493 TEST_F(V4StoreTest, TestReadFullResponseWithValidHashPrefixMap) { | 570 TEST_F(V4StoreTest, TestReadFullResponseWithValidHashPrefixMap) { |
| 494 std::unique_ptr<ListUpdateResponse> lur(new ListUpdateResponse); | 571 std::unique_ptr<ListUpdateResponse> lur(new ListUpdateResponse); |
| 495 lur->set_response_type(ListUpdateResponse::FULL_UPDATE); | 572 lur->set_response_type(ListUpdateResponse::FULL_UPDATE); |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 660 | 737 |
| 661 TEST_F(V4StoreTest, TestRemovalsWithRiceEncodingSucceeds) { | 738 TEST_F(V4StoreTest, TestRemovalsWithRiceEncodingSucceeds) { |
| 662 HashPrefixMap prefix_map_old; | 739 HashPrefixMap prefix_map_old; |
| 663 EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 740 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 664 V4Store::AddUnlumpedHashes(4, "1111abcdefgh", &prefix_map_old)); | 741 V4Store::AddUnlumpedHashes(4, "1111abcdefgh", &prefix_map_old)); |
| 665 HashPrefixMap prefix_map_additions; | 742 HashPrefixMap prefix_map_additions; |
| 666 EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 743 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 667 V4Store::AddUnlumpedHashes(5, "22222bcdef", &prefix_map_additions)); | 744 V4Store::AddUnlumpedHashes(5, "22222bcdef", &prefix_map_additions)); |
| 668 | 745 |
| 669 V4Store store(task_runner_, store_path_); | 746 V4Store store(task_runner_, store_path_); |
| 747 std::string expected_checksum = std::string( |
| 748 "\xA5\x8B\xCAsD\xC7\xF9\xCE\xD2\xF4\x4=" |
| 749 "\xB2\"\x82\x1A\xC1\xB8\x1F\x10\r\v\x9A\x93\xFD\xE1\xB8" |
| 750 "B\x1Eh\xF7\xB4", |
| 751 crypto::kSHA256Length); |
| 670 EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 752 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 671 store.MergeUpdate(prefix_map_old, prefix_map_additions, nullptr)); | 753 store.MergeUpdate(prefix_map_old, prefix_map_additions, nullptr, |
| 754 expected_checksum)); |
| 672 | 755 |
| 673 // At this point, the store map looks like this: | 756 // At this point, the store map looks like this: |
| 674 // 4: 1111abcdefgh | 757 // 4: 1111abcdefgh |
| 675 // 5: 22222bcdef | 758 // 5: 22222bcdef |
| 676 // sorted: 1111, 22222, abcd, bcdef, efgh | 759 // sorted: 1111, 22222, abcd, bcdef, efgh |
| 677 // We'll now try to delete hashes at indexes 0, 3 and 4 in the sorted list. | 760 // We'll now try to delete hashes at indexes 0, 3 and 4 in the sorted list. |
| 678 | 761 |
| 679 std::unique_ptr<ListUpdateResponse> lur(new ListUpdateResponse); | 762 std::unique_ptr<ListUpdateResponse> lur(new ListUpdateResponse); |
| 680 lur->set_response_type(ListUpdateResponse::PARTIAL_UPDATE); | 763 lur->set_response_type(ListUpdateResponse::PARTIAL_UPDATE); |
| 681 ThreatEntrySet* removal = lur->add_removals(); | 764 ThreatEntrySet* removal = lur->add_removals(); |
| 682 removal->set_compression_type(RICE); | 765 removal->set_compression_type(RICE); |
| 683 RiceDeltaEncoding* rice_indices = removal->mutable_rice_indices(); | 766 RiceDeltaEncoding* rice_indices = removal->mutable_rice_indices(); |
| 684 rice_indices->set_first_value(0); | 767 rice_indices->set_first_value(0); |
| 685 rice_indices->set_num_entries(2); | 768 rice_indices->set_num_entries(2); |
| 686 rice_indices->set_rice_parameter(2); | 769 rice_indices->set_rice_parameter(2); |
| 687 rice_indices->set_encoded_data("\x16"); | 770 rice_indices->set_encoded_data("\x16"); |
| 688 | 771 |
| 689 bool called_back = false; | 772 bool called_back = false; |
| 690 UpdatedStoreReadyCallback store_ready_callback = | 773 UpdatedStoreReadyCallback store_ready_callback = |
| 691 base::Bind(&V4StoreTest::UpdatedStoreReadyAfterRiceRemovals, | 774 base::Bind(&V4StoreTest::UpdatedStoreReadyAfterRiceRemovals, |
| 692 base::Unretained(this), &called_back); | 775 base::Unretained(this), &called_back); |
| 693 store.ApplyUpdate(std::move(lur), task_runner_, store_ready_callback); | 776 store.ApplyUpdate(std::move(lur), task_runner_, store_ready_callback); |
| 694 task_runner_->RunPendingTasks(); | 777 task_runner_->RunPendingTasks(); |
| 695 base::RunLoop().RunUntilIdle(); | 778 base::RunLoop().RunUntilIdle(); |
| 696 | 779 |
| 697 // This ensures that the callback was called. | 780 // This ensures that the callback was called. |
| 698 EXPECT_TRUE(called_back); | 781 EXPECT_TRUE(called_back); |
| 699 } | 782 } |
| 700 | 783 |
| 784 TEST_F(V4StoreTest, TestMergeUpdatesFailsChecksum) { |
| 785 // Proof of checksum mismatch using python: |
| 786 // >>> import hashlib |
| 787 // >>> m = hashlib.sha256() |
| 788 // >>> m.update("2222") |
| 789 // >>> m.digest() |
| 790 // "\xed\xee)\xf8\x82T;\x95f |
| 791 // \xb2m\x0e\xe0\xe7\xe9P9\x9b\x1cB"\xf5\xde\x05\xe0d%\xb4\xc9\x95\xe9" |
| 792 |
| 793 HashPrefixMap prefix_map_old; |
| 794 EXPECT_EQ(APPLY_UPDATE_SUCCESS, |
| 795 V4Store::AddUnlumpedHashes(4, "2222", &prefix_map_old)); |
| 796 EXPECT_EQ(CHECKSUM_MISMATCH_FAILURE, |
| 797 V4Store(task_runner_, store_path_) |
| 798 .MergeUpdate(prefix_map_old, HashPrefixMap(), nullptr, "aawc")); |
| 799 } |
| 800 |
| 701 } // namespace safe_browsing | 801 } // namespace safe_browsing |
| OLD | NEW |