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