OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 <stdint.h> |
| 6 #include <string.h> |
| 7 |
5 #include "chrome/browser/safe_browsing/safe_browsing_store.h" | 8 #include "chrome/browser/safe_browsing/safe_browsing_store.h" |
6 #include "components/safe_browsing_db/util.h" | 9 #include "components/safe_browsing_db/util.h" |
7 | 10 |
8 #include "testing/gtest/include/gtest/gtest.h" | 11 #include "testing/gtest/include/gtest/gtest.h" |
9 | 12 |
10 namespace safe_browsing { | 13 namespace safe_browsing { |
11 | 14 |
12 namespace { | 15 namespace { |
13 | 16 |
14 const SBFullHash kHash1 = SBFullHashForString("one"); | 17 const SBFullHash kHash1 = SBFullHashForString("one"); |
(...skipping 19 matching lines...) Expand all Loading... |
34 | 37 |
35 SBFullHash ModifyHashAfterPrefix(SBFullHash hash, unsigned char mask) { | 38 SBFullHash ModifyHashAfterPrefix(SBFullHash hash, unsigned char mask) { |
36 hash.full_hash[sizeof(hash.full_hash) - 1] ^= mask; | 39 hash.full_hash[sizeof(hash.full_hash) - 1] ^= mask; |
37 return hash; | 40 return hash; |
38 } | 41 } |
39 | 42 |
40 void ProcessHelper(SBAddPrefixes* add_prefixes, | 43 void ProcessHelper(SBAddPrefixes* add_prefixes, |
41 SBSubPrefixes* sub_prefixes, | 44 SBSubPrefixes* sub_prefixes, |
42 std::vector<SBAddFullHash>* add_full_hashes, | 45 std::vector<SBAddFullHash>* add_full_hashes, |
43 std::vector<SBSubFullHash>* sub_full_hashes, | 46 std::vector<SBSubFullHash>* sub_full_hashes, |
44 const base::hash_set<int32>& add_chunks_deleted, | 47 const base::hash_set<int32_t>& add_chunks_deleted, |
45 const base::hash_set<int32>& sub_chunks_deleted) { | 48 const base::hash_set<int32_t>& sub_chunks_deleted) { |
46 std::sort(add_prefixes->begin(), add_prefixes->end(), | 49 std::sort(add_prefixes->begin(), add_prefixes->end(), |
47 SBAddPrefixLess<SBAddPrefix,SBAddPrefix>); | 50 SBAddPrefixLess<SBAddPrefix,SBAddPrefix>); |
48 std::sort(sub_prefixes->begin(), sub_prefixes->end(), | 51 std::sort(sub_prefixes->begin(), sub_prefixes->end(), |
49 SBAddPrefixLess<SBSubPrefix,SBSubPrefix>); | 52 SBAddPrefixLess<SBSubPrefix,SBSubPrefix>); |
50 std::sort(add_full_hashes->begin(), add_full_hashes->end(), | 53 std::sort(add_full_hashes->begin(), add_full_hashes->end(), |
51 SBAddPrefixHashLess<SBAddFullHash,SBAddFullHash>); | 54 SBAddPrefixHashLess<SBAddFullHash,SBAddFullHash>); |
52 std::sort(sub_full_hashes->begin(), sub_full_hashes->end(), | 55 std::sort(sub_full_hashes->begin(), sub_full_hashes->end(), |
53 SBAddPrefixHashLess<SBSubFullHash,SBSubFullHash>); | 56 SBAddPrefixHashLess<SBSubFullHash,SBSubFullHash>); |
54 | 57 |
55 SBProcessSubs(add_prefixes, sub_prefixes, add_full_hashes, sub_full_hashes, | 58 SBProcessSubs(add_prefixes, sub_prefixes, add_full_hashes, sub_full_hashes, |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
159 } | 162 } |
160 | 163 |
161 // SBProcessSubs does a lot of iteration, run through empty just to | 164 // SBProcessSubs does a lot of iteration, run through empty just to |
162 // make sure degenerate cases work. | 165 // make sure degenerate cases work. |
163 TEST(SafeBrowsingStoreTest, SBProcessSubsEmpty) { | 166 TEST(SafeBrowsingStoreTest, SBProcessSubsEmpty) { |
164 SBAddPrefixes add_prefixes; | 167 SBAddPrefixes add_prefixes; |
165 std::vector<SBAddFullHash> add_hashes; | 168 std::vector<SBAddFullHash> add_hashes; |
166 SBSubPrefixes sub_prefixes; | 169 SBSubPrefixes sub_prefixes; |
167 std::vector<SBSubFullHash> sub_hashes; | 170 std::vector<SBSubFullHash> sub_hashes; |
168 | 171 |
169 const base::hash_set<int32> no_deletions; | 172 const base::hash_set<int32_t> no_deletions; |
170 SBProcessSubs(&add_prefixes, &sub_prefixes, &add_hashes, &sub_hashes, | 173 SBProcessSubs(&add_prefixes, &sub_prefixes, &add_hashes, &sub_hashes, |
171 no_deletions, no_deletions); | 174 no_deletions, no_deletions); |
172 EXPECT_TRUE(add_prefixes.empty()); | 175 EXPECT_TRUE(add_prefixes.empty()); |
173 EXPECT_TRUE(sub_prefixes.empty()); | 176 EXPECT_TRUE(sub_prefixes.empty()); |
174 EXPECT_TRUE(add_hashes.empty()); | 177 EXPECT_TRUE(add_hashes.empty()); |
175 EXPECT_TRUE(sub_hashes.empty()); | 178 EXPECT_TRUE(sub_hashes.empty()); |
176 } | 179 } |
177 | 180 |
178 // Test that subs knock out adds. | 181 // Test that subs knock out adds. |
179 TEST(SafeBrowsingStoreTest, SBProcessSubsKnockout) { | 182 TEST(SafeBrowsingStoreTest, SBProcessSubsKnockout) { |
(...skipping 25 matching lines...) Expand all Loading... |
205 // Subs with no corresponding add. Both items should be retained. | 208 // Subs with no corresponding add. Both items should be retained. |
206 sub_hashes.push_back(SBSubFullHash(kSubChunk3, kAddChunk3, kHash7)); | 209 sub_hashes.push_back(SBSubFullHash(kSubChunk3, kAddChunk3, kHash7)); |
207 sub_prefixes.push_back(SBSubPrefix(kSubChunk4, kAddChunk4, kHash3.prefix)); | 210 sub_prefixes.push_back(SBSubPrefix(kSubChunk4, kAddChunk4, kHash3.prefix)); |
208 | 211 |
209 // Add hashes with the same prefix, with a sub that will knock one of them | 212 // Add hashes with the same prefix, with a sub that will knock one of them |
210 // out. | 213 // out. |
211 add_hashes.push_back(SBAddFullHash(kAddChunk5, kHash4)); | 214 add_hashes.push_back(SBAddFullHash(kAddChunk5, kHash4)); |
212 add_hashes.push_back(SBAddFullHash(kAddChunk5, kHash4mod)); | 215 add_hashes.push_back(SBAddFullHash(kAddChunk5, kHash4mod)); |
213 sub_hashes.push_back(SBSubFullHash(kSubChunk5, kAddChunk5, kHash4mod)); | 216 sub_hashes.push_back(SBSubFullHash(kSubChunk5, kAddChunk5, kHash4mod)); |
214 | 217 |
215 const base::hash_set<int32> no_deletions; | 218 const base::hash_set<int32_t> no_deletions; |
216 ProcessHelper(&add_prefixes, &sub_prefixes, &add_hashes, &sub_hashes, | 219 ProcessHelper(&add_prefixes, &sub_prefixes, &add_hashes, &sub_hashes, |
217 no_deletions, no_deletions); | 220 no_deletions, no_deletions); |
218 | 221 |
219 ASSERT_EQ(1U, add_prefixes.size()); | 222 ASSERT_EQ(1U, add_prefixes.size()); |
220 EXPECT_EQ(kAddChunk7, add_prefixes[0].chunk_id); | 223 EXPECT_EQ(kAddChunk7, add_prefixes[0].chunk_id); |
221 EXPECT_EQ(kHash2.prefix, add_prefixes[0].prefix); | 224 EXPECT_EQ(kHash2.prefix, add_prefixes[0].prefix); |
222 | 225 |
223 ASSERT_EQ(2U, add_hashes.size()); | 226 ASSERT_EQ(2U, add_hashes.size()); |
224 EXPECT_EQ(kAddChunk5, add_hashes[0].chunk_id); | 227 EXPECT_EQ(kAddChunk5, add_hashes[0].chunk_id); |
225 EXPECT_TRUE(SBFullHashEqual(kHash4, add_hashes[0].full_hash)); | 228 EXPECT_TRUE(SBFullHashEqual(kHash4, add_hashes[0].full_hash)); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
260 | 263 |
261 // Adds with no corresponding sub. Both items should be retained. | 264 // Adds with no corresponding sub. Both items should be retained. |
262 add_hashes.push_back(SBAddFullHash(kAddChunk1, kHash6)); | 265 add_hashes.push_back(SBAddFullHash(kAddChunk1, kHash6)); |
263 add_prefixes.push_back(SBAddPrefix(kAddChunk1, kHash2.prefix)); | 266 add_prefixes.push_back(SBAddPrefix(kAddChunk1, kHash2.prefix)); |
264 | 267 |
265 // Subs with no corresponding add. Both items should be retained. | 268 // Subs with no corresponding add. Both items should be retained. |
266 sub_hashes.push_back(SBSubFullHash(kSubChunk1, kAddChunk1, kHash7)); | 269 sub_hashes.push_back(SBSubFullHash(kSubChunk1, kAddChunk1, kHash7)); |
267 sub_prefixes.push_back(SBSubPrefix(kSubChunk1, kAddChunk1, kHash3.prefix)); | 270 sub_prefixes.push_back(SBSubPrefix(kSubChunk1, kAddChunk1, kHash3.prefix)); |
268 | 271 |
269 // Subs apply before being deleted. | 272 // Subs apply before being deleted. |
270 const base::hash_set<int32> no_deletions; | 273 const base::hash_set<int32_t> no_deletions; |
271 base::hash_set<int32> sub_deletions; | 274 base::hash_set<int32_t> sub_deletions; |
272 sub_deletions.insert(kSubChunk1); | 275 sub_deletions.insert(kSubChunk1); |
273 ProcessHelper(&add_prefixes, &sub_prefixes, &add_hashes, &sub_hashes, | 276 ProcessHelper(&add_prefixes, &sub_prefixes, &add_hashes, &sub_hashes, |
274 no_deletions, sub_deletions); | 277 no_deletions, sub_deletions); |
275 | 278 |
276 ASSERT_EQ(1U, add_prefixes.size()); | 279 ASSERT_EQ(1U, add_prefixes.size()); |
277 EXPECT_EQ(kAddChunk1, add_prefixes[0].chunk_id); | 280 EXPECT_EQ(kAddChunk1, add_prefixes[0].chunk_id); |
278 EXPECT_EQ(kHash2.prefix, add_prefixes[0].prefix); | 281 EXPECT_EQ(kHash2.prefix, add_prefixes[0].prefix); |
279 | 282 |
280 ASSERT_EQ(1U, add_hashes.size()); | 283 ASSERT_EQ(1U, add_hashes.size()); |
281 EXPECT_EQ(kAddChunk1, add_hashes[0].chunk_id); | 284 EXPECT_EQ(kAddChunk1, add_hashes[0].chunk_id); |
282 EXPECT_TRUE(SBFullHashEqual(kHash6, add_hashes[0].full_hash)); | 285 EXPECT_TRUE(SBFullHashEqual(kHash6, add_hashes[0].full_hash)); |
283 | 286 |
284 EXPECT_TRUE(sub_prefixes.empty()); | 287 EXPECT_TRUE(sub_prefixes.empty()); |
285 EXPECT_TRUE(sub_hashes.empty()); | 288 EXPECT_TRUE(sub_hashes.empty()); |
286 | 289 |
287 // Delete the adds, also. | 290 // Delete the adds, also. |
288 base::hash_set<int32> add_deletions; | 291 base::hash_set<int32_t> add_deletions; |
289 add_deletions.insert(kAddChunk1); | 292 add_deletions.insert(kAddChunk1); |
290 ProcessHelper(&add_prefixes, &sub_prefixes, &add_hashes, &sub_hashes, | 293 ProcessHelper(&add_prefixes, &sub_prefixes, &add_hashes, &sub_hashes, |
291 add_deletions, no_deletions); | 294 add_deletions, no_deletions); |
292 | 295 |
293 EXPECT_TRUE(add_prefixes.empty()); | 296 EXPECT_TRUE(add_prefixes.empty()); |
294 EXPECT_TRUE(add_hashes.empty()); | 297 EXPECT_TRUE(add_hashes.empty()); |
295 EXPECT_TRUE(sub_prefixes.empty()); | 298 EXPECT_TRUE(sub_prefixes.empty()); |
296 EXPECT_TRUE(sub_hashes.empty()); | 299 EXPECT_TRUE(sub_hashes.empty()); |
297 } | 300 } |
298 | 301 |
299 TEST(SafeBrowsingStoreTest, Y2K38) { | 302 TEST(SafeBrowsingStoreTest, Y2K38) { |
300 const base::Time now = base::Time::Now(); | 303 const base::Time now = base::Time::Now(); |
301 const base::Time future = now + base::TimeDelta::FromDays(3*365); | 304 const base::Time future = now + base::TimeDelta::FromDays(3*365); |
302 | 305 |
303 // TODO: Fix file format before 2035. | 306 // TODO: Fix file format before 2035. |
304 EXPECT_GT(static_cast<int32>(future.ToTimeT()), 0) | 307 EXPECT_GT(static_cast<int32_t>(future.ToTimeT()), 0) |
305 << " (int32)time_t is running out."; | 308 << " (int32_t)time_t is running out."; |
306 } | 309 } |
307 | 310 |
308 } // namespace safe_browsing | 311 } // namespace safe_browsing |
OLD | NEW |