| 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" | 
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  134   list_update_response->set_response_type(ListUpdateResponse::FULL_UPDATE); |  134   list_update_response->set_response_type(ListUpdateResponse::FULL_UPDATE); | 
|  135   list_update_response->set_new_client_state("test_client_state"); |  135   list_update_response->set_new_client_state("test_client_state"); | 
|  136   EXPECT_EQ(WRITE_SUCCESS, V4Store(task_runner_, store_path_) |  136   EXPECT_EQ(WRITE_SUCCESS, V4Store(task_runner_, store_path_) | 
|  137                                .WriteToDisk(std::move(list_update_response))); |  137                                .WriteToDisk(std::move(list_update_response))); | 
|  138  |  138  | 
|  139   std::unique_ptr<V4Store> read_store(new V4Store(task_runner_, store_path_)); |  139   std::unique_ptr<V4Store> read_store(new V4Store(task_runner_, store_path_)); | 
|  140   EXPECT_EQ(READ_SUCCESS, read_store->ReadFromDisk()); |  140   EXPECT_EQ(READ_SUCCESS, read_store->ReadFromDisk()); | 
|  141   EXPECT_EQ("test_client_state", read_store->state_); |  141   EXPECT_EQ("test_client_state", read_store->state_); | 
|  142 } |  142 } | 
|  143  |  143  | 
 |  144 TEST_F(V4StoreTest, TestAddUnlumpedHashesWithInvalidAddition) { | 
 |  145   HashPrefixMap prefix_map; | 
 |  146   EXPECT_EQ(ADDITIONS_SIZE_UNEXPECTED_FAILURE, | 
 |  147             V4Store::AddUnlumpedHashes(5, "a", &prefix_map)); | 
 |  148   EXPECT_TRUE(prefix_map.empty()); | 
 |  149 } | 
 |  150  | 
 |  151 TEST_F(V4StoreTest, TestAddUnlumpedHashesWithEmptyString) { | 
 |  152   HashPrefixMap prefix_map; | 
 |  153   EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 
 |  154             V4Store::AddUnlumpedHashes(5, "", &prefix_map)); | 
 |  155   EXPECT_TRUE(prefix_map[5].empty()); | 
 |  156 } | 
 |  157  | 
 |  158 TEST_F(V4StoreTest, TestAddUnlumpedHashes) { | 
 |  159   HashPrefixMap prefix_map; | 
 |  160   PrefixSize prefix_size = 5; | 
 |  161   EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 
 |  162             V4Store::AddUnlumpedHashes(prefix_size, "abcde5432100000-----", | 
 |  163                                        &prefix_map)); | 
 |  164   EXPECT_EQ(1u, prefix_map.size()); | 
 |  165   HashPrefixes hash_prefixes = prefix_map.at(prefix_size); | 
 |  166   EXPECT_EQ(4 * prefix_size, hash_prefixes.size()); | 
 |  167   EXPECT_EQ("abcde5432100000-----", hash_prefixes); | 
 |  168  | 
 |  169   prefix_size = 4; | 
 |  170   EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 
 |  171             V4Store::AddUnlumpedHashes(prefix_size, "abcde5432100000-----", | 
 |  172                                        &prefix_map)); | 
 |  173   EXPECT_EQ(2u, prefix_map.size()); | 
 |  174   hash_prefixes = prefix_map.at(prefix_size); | 
 |  175   EXPECT_EQ(5 * prefix_size, hash_prefixes.size()); | 
 |  176   EXPECT_EQ("abcde5432100000-----", hash_prefixes); | 
 |  177 } | 
 |  178  | 
 |  179 TEST_F(V4StoreTest, TestGetNextSmallestPrefixSizeWithEmptyPrefixMap) { | 
 |  180   HashPrefixMap prefix_map; | 
 |  181   CounterMap counter_map; | 
 |  182   V4Store::InitializeCounterMap(prefix_map, &counter_map); | 
 |  183  | 
 |  184   PrefixSize prefix_size; | 
 |  185   EXPECT_FALSE(V4Store::GetNextSmallestPrefixSize(prefix_map, counter_map, | 
 |  186                                                   &prefix_size)); | 
 |  187 } | 
 |  188  | 
 |  189 TEST_F(V4StoreTest, TestGetNextSmallestPrefixSize) { | 
 |  190   HashPrefixMap prefix_map; | 
 |  191   EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 
 |  192             V4Store::AddUnlumpedHashes(5, "-----0000054321abcde", &prefix_map)); | 
 |  193   EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 
 |  194             V4Store::AddUnlumpedHashes(4, "-----0000054321abcde", &prefix_map)); | 
 |  195   CounterMap counter_map; | 
 |  196   V4Store::InitializeCounterMap(prefix_map, &counter_map); | 
 |  197  | 
 |  198   PrefixSize prefix_size; | 
 |  199   EXPECT_TRUE(V4Store::GetNextSmallestPrefixSize(prefix_map, counter_map, | 
 |  200                                                  &prefix_size)); | 
 |  201   EXPECT_EQ(4u, prefix_size); | 
 |  202 } | 
 |  203  | 
 |  204 TEST_F(V4StoreTest, TestGetNextUnmergedPrefix) { | 
 |  205   HashPrefixMap prefix_map; | 
 |  206   EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 
 |  207             V4Store::AddUnlumpedHashes(5, "-----0000054321abcde", &prefix_map)); | 
 |  208   EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 
 |  209             V4Store::AddUnlumpedHashes(4, "-----0000054321abcde", &prefix_map)); | 
 |  210   CounterMap counter_map; | 
 |  211   V4Store::InitializeCounterMap(prefix_map, &counter_map); | 
 |  212  | 
 |  213   PrefixSize prefix_size; | 
 |  214   EXPECT_TRUE(V4Store::GetNextSmallestPrefixSize(prefix_map, counter_map, | 
 |  215                                                  &prefix_size)); | 
 |  216   const HashPrefix& prefix = V4Store::GetNextUnmergedPrefixForSize( | 
 |  217       prefix_size, prefix_map, counter_map); | 
 |  218   EXPECT_EQ("----", prefix); | 
 |  219 } | 
 |  220  | 
 |  221 TEST_F(V4StoreTest, TestMergeUpdatesWithSameSizesInEachMap) { | 
 |  222   HashPrefixMap prefix_map_old; | 
 |  223   EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 
 |  224             V4Store::AddUnlumpedHashes(4, "abcdefgh", &prefix_map_old)); | 
 |  225   EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 
 |  226             V4Store::AddUnlumpedHashes(5, "54321abcde", &prefix_map_old)); | 
 |  227   HashPrefixMap prefix_map_additions; | 
 |  228   EXPECT_EQ( | 
 |  229       APPLY_UPDATE_SUCCESS, | 
 |  230       V4Store::AddUnlumpedHashes(4, "----1111bbbb", &prefix_map_additions)); | 
 |  231   EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 
 |  232             V4Store::AddUnlumpedHashes(5, "22222bcdef", &prefix_map_additions)); | 
 |  233  | 
 |  234   std::unique_ptr<V4Store> store(new V4Store(task_runner_, store_path_)); | 
 |  235   EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 
 |  236             store->MergeUpdate(prefix_map_old, prefix_map_additions)); | 
 |  237   const HashPrefixMap& prefix_map = store->hash_prefix_map_; | 
 |  238   EXPECT_EQ(2u, prefix_map.size()); | 
 |  239  | 
 |  240   PrefixSize prefix_size = 4; | 
 |  241   HashPrefixes hash_prefixes = prefix_map.at(prefix_size); | 
 |  242   EXPECT_EQ(5 * prefix_size, hash_prefixes.size()); | 
 |  243   EXPECT_EQ("----", hash_prefixes.substr(0 * prefix_size, prefix_size)); | 
 |  244   EXPECT_EQ("1111", hash_prefixes.substr(1 * prefix_size, prefix_size)); | 
 |  245   EXPECT_EQ("abcd", hash_prefixes.substr(2 * prefix_size, prefix_size)); | 
 |  246   EXPECT_EQ("bbbb", hash_prefixes.substr(3 * prefix_size, prefix_size)); | 
 |  247   EXPECT_EQ("efgh", hash_prefixes.substr(4 * prefix_size, prefix_size)); | 
 |  248  | 
 |  249   prefix_size = 5; | 
 |  250   hash_prefixes = prefix_map.at(prefix_size); | 
 |  251   EXPECT_EQ(4 * prefix_size, hash_prefixes.size()); | 
 |  252   EXPECT_EQ("22222", hash_prefixes.substr(0 * prefix_size, prefix_size)); | 
 |  253   EXPECT_EQ("54321", hash_prefixes.substr(1 * prefix_size, prefix_size)); | 
 |  254   EXPECT_EQ("abcde", hash_prefixes.substr(2 * prefix_size, prefix_size)); | 
 |  255   EXPECT_EQ("bcdef", hash_prefixes.substr(3 * prefix_size, prefix_size)); | 
 |  256 } | 
 |  257  | 
 |  258 TEST_F(V4StoreTest, TestMergeUpdatesWithDifferentSizesInEachMap) { | 
 |  259   HashPrefixMap prefix_map_old; | 
 |  260   EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 
 |  261             V4Store::AddUnlumpedHashes(4, "1111abcdefgh", &prefix_map_old)); | 
 |  262   HashPrefixMap prefix_map_additions; | 
 |  263   EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 
 |  264             V4Store::AddUnlumpedHashes(5, "22222bcdef", &prefix_map_additions)); | 
 |  265  | 
 |  266   std::unique_ptr<V4Store> store(new V4Store(task_runner_, store_path_)); | 
 |  267   EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 
 |  268             store->MergeUpdate(prefix_map_old, prefix_map_additions)); | 
 |  269   const HashPrefixMap& prefix_map = store->hash_prefix_map_; | 
 |  270   EXPECT_EQ(2u, prefix_map.size()); | 
 |  271  | 
 |  272   PrefixSize prefix_size = 4; | 
 |  273   HashPrefixes hash_prefixes = prefix_map.at(prefix_size); | 
 |  274   EXPECT_EQ(3 * prefix_size, hash_prefixes.size()); | 
 |  275   EXPECT_EQ("1111abcdefgh", hash_prefixes); | 
 |  276  | 
 |  277   prefix_size = 5; | 
 |  278   hash_prefixes = prefix_map.at(prefix_size); | 
 |  279   EXPECT_EQ(2 * prefix_size, hash_prefixes.size()); | 
 |  280   EXPECT_EQ("22222bcdef", hash_prefixes); | 
 |  281 } | 
 |  282  | 
 |  283 TEST_F(V4StoreTest, TestMergeUpdatesOldMapRunsOutFirst) { | 
 |  284   HashPrefixMap prefix_map_old; | 
 |  285   EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 
 |  286             V4Store::AddUnlumpedHashes(4, "00001111", &prefix_map_old)); | 
 |  287   HashPrefixMap prefix_map_additions; | 
 |  288   EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 
 |  289             V4Store::AddUnlumpedHashes(4, "2222", &prefix_map_additions)); | 
 |  290  | 
 |  291   std::unique_ptr<V4Store> store(new V4Store(task_runner_, store_path_)); | 
 |  292   EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 
 |  293             store->MergeUpdate(prefix_map_old, prefix_map_additions)); | 
 |  294   const HashPrefixMap& prefix_map = store->hash_prefix_map_; | 
 |  295   EXPECT_EQ(1u, prefix_map.size()); | 
 |  296  | 
 |  297   PrefixSize prefix_size = 4; | 
 |  298   HashPrefixes hash_prefixes = prefix_map.at(prefix_size); | 
 |  299   EXPECT_EQ(3 * prefix_size, hash_prefixes.size()); | 
 |  300   EXPECT_EQ("0000", hash_prefixes.substr(0 * prefix_size, prefix_size)); | 
 |  301   EXPECT_EQ("1111", hash_prefixes.substr(1 * prefix_size, prefix_size)); | 
 |  302   EXPECT_EQ("2222", hash_prefixes.substr(2 * prefix_size, prefix_size)); | 
 |  303 } | 
 |  304  | 
 |  305 TEST_F(V4StoreTest, TestMergeUpdatesAdditionsMapRunsOutFirst) { | 
 |  306   HashPrefixMap prefix_map_old; | 
 |  307   EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 
 |  308             V4Store::AddUnlumpedHashes(4, "2222", &prefix_map_old)); | 
 |  309   HashPrefixMap prefix_map_additions; | 
 |  310   EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 
 |  311             V4Store::AddUnlumpedHashes(4, "00001111", &prefix_map_additions)); | 
 |  312  | 
 |  313   std::unique_ptr<V4Store> store(new V4Store(task_runner_, store_path_)); | 
 |  314   EXPECT_EQ(APPLY_UPDATE_SUCCESS, | 
 |  315             store->MergeUpdate(prefix_map_old, prefix_map_additions)); | 
 |  316   const HashPrefixMap& prefix_map = store->hash_prefix_map_; | 
 |  317   EXPECT_EQ(1u, prefix_map.size()); | 
 |  318  | 
 |  319   PrefixSize prefix_size = 4; | 
 |  320   HashPrefixes hash_prefixes = prefix_map.at(prefix_size); | 
 |  321   EXPECT_EQ(3 * prefix_size, hash_prefixes.size()); | 
 |  322   EXPECT_EQ("0000", hash_prefixes.substr(0 * prefix_size, prefix_size)); | 
 |  323   EXPECT_EQ("1111", hash_prefixes.substr(1 * prefix_size, prefix_size)); | 
 |  324   EXPECT_EQ("2222", hash_prefixes.substr(2 * prefix_size, prefix_size)); | 
 |  325 } | 
 |  326  | 
 |  327 TEST_F(V4StoreTest, TestMergeUpdatesFailsForRepeatedhashPrefix) { | 
 |  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, "2222", &prefix_map_additions)); | 
 |  334  | 
 |  335   std::unique_ptr<V4Store> store(new V4Store(task_runner_, store_path_)); | 
 |  336   EXPECT_EQ(ADDITIONS_HAS_EXISTING_PREFIX_FAILURE, | 
 |  337             store->MergeUpdate(prefix_map_old, prefix_map_additions)); | 
 |  338 } | 
 |  339  | 
|  144 }  // namespace safe_browsing |  340 }  // namespace safe_browsing | 
| OLD | NEW |