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