| 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/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 Loading... |
| 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 Loading... |
| 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 Loading... |
| 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 |
| OLD | NEW |