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
3 // found in the LICENSE file.
4
5 #ifndef CHROME_BROWSER_SAFE_BROWSING_SAFE_BROWSING_STORE_UNITTEST_HELPER_H_
6 #define CHROME_BROWSER_SAFE_BROWSING_SAFE_BROWSING_STORE_UNITTEST_HELPER_H_
7 #pragma once
8
9 #include "chrome/browser/safe_browsing/safe_browsing_store.h"
10
11 #include "crypto/sha2.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13
14 // Helper code for testing that a SafeBrowsingStore implementation
15 // works to spec.
16
17 // Helper to make it easy to initialize SBFullHash constants.
SBFullHashFromString(const char * str)18 inline const SBFullHash SBFullHashFromString(const char* str) {
19 SBFullHash h;
20 crypto::SHA256HashString(str, &h.full_hash, sizeof(h.full_hash));
21 return h;
22 }
23
24 // TODO(shess): There's an == operator defined in
25 // safe_browsing_utils.h, but using it gives me the heebie-jeebies.
SBFullHashEq(const SBFullHash & a,const SBFullHash & b)26 inline bool SBFullHashEq(const SBFullHash& a, const SBFullHash& b) {
27 return !memcmp(a.full_hash, b.full_hash, sizeof(a.full_hash));
28 }
29
30 // Test that the empty store looks empty.
31 void SafeBrowsingStoreTestEmpty(SafeBrowsingStore* store);
32
33 // Write some prefix data to the store and verify that it looks like
34 // it is still there after the transaction completes.
35 void SafeBrowsingStoreTestStorePrefix(SafeBrowsingStore* store);
36
37 // Test that subs knockout adds.
38 void SafeBrowsingStoreTestSubKnockout(SafeBrowsingStore* store);
39
40 // Test that deletes delete the chunk's data.
41 void SafeBrowsingStoreTestDeleteChunks(SafeBrowsingStore* store);
42
43 // Test that deleting the store deletes the store.
44 void SafeBrowsingStoreTestDelete(SafeBrowsingStore* store,
45 const FilePath& filename);
46
47 // Wrap all the tests up for implementation subclasses.
48 // |test_fixture| is the class that would be passed to TEST_F(),
49 // |instance_name| is the name of the SafeBrowsingStore instance
50 // within the class, as a pointer, and |filename| is that store's
51 // filename, for the Delete() test.
52 #define TEST_STORE(test_fixture, instance_name, filename) \
53 TEST_F(test_fixture, Empty) { \
54 SafeBrowsingStoreTestEmpty(instance_name); \
55 } \
56 TEST_F(test_fixture, StorePrefix) { \
57 SafeBrowsingStoreTestStorePrefix(instance_name); \
58 } \
59 TEST_F(test_fixture, SubKnockout) { \
60 SafeBrowsingStoreTestSubKnockout(instance_name); \
61 } \
62 TEST_F(test_fixture, DeleteChunks) { \
63 SafeBrowsingStoreTestDeleteChunks(instance_name); \
64 } \
65 TEST_F(test_fixture, Delete) { \
66 SafeBrowsingStoreTestDelete(instance_name, filename); \
67 }
68
69 #endif // CHROME_BROWSER_SAFE_BROWSING_SAFE_BROWSING_STORE_UNITTEST_HELPER_H_
70