| 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 |