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