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 |