10a9239c3bca6d8a7147c80243b17a02340fe6d31Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved. 2c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Use of this source code is governed by a BSD-style license that can be 3c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// found in the LICENSE file. 4c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 5c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#ifndef NET_DISK_CACHE_DISK_CACHE_TEST_BASE_H_ 6c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#define NET_DISK_CACHE_DISK_CACHE_TEST_BASE_H_ 73345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#pragma once 8c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 9c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "base/basictypes.h" 103f50c38dc070f4bb515c1b64450dae14f316474eKristian Monsen#include "base/threading/thread.h" 113345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick#include "net/base/cache_type.h" 12c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "testing/gtest/include/gtest/gtest.h" 13c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#include "testing/platform_test.h" 14c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 15c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass FilePath; 16c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 173345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merricknamespace net { 183345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickclass IOBuffer; 203345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 213345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick} // namespace net 223345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 23c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottnamespace disk_cache { 24c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 25c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass Backend; 26c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass BackendImpl; 27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochclass Entry; 28c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass MemBackendImpl; 29c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 30c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott} // namespace disk_cache 31c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 32c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// These tests can use the path service, which uses autoreleased objects on the 33c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Mac, so this needs to be a PlatformTest. Even tests that do not require a 34c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// cache (and that do not need to be a DiskCacheTestWithCache) are susceptible 35c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// to this problem; all such tests should use TEST_F(DiskCacheTest, ...). 36c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass DiskCacheTest : public PlatformTest { 37c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott virtual void TearDown(); 38c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}; 39c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 40c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott// Provides basic support for cache related tests. 41c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scottclass DiskCacheTestWithCache : public DiskCacheTest { 42c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott protected: 4372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen DiskCacheTestWithCache(); 4472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual ~DiskCacheTestWithCache(); 45c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 46c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott void InitCache(); 47c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott void SimulateCrash(); 48c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott void SetTestMode(); 49c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 50c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott void SetMemoryOnlyMode() { 51c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott memory_only_ = true; 52c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 53c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 54c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Use the implementation directly instead of the factory provided object. 55c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott void SetDirectMode() { 56c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott implementation_ = true; 57c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 58c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 59c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott void SetMask(uint32 mask) { 60c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott mask_ = mask; 61c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 62c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 63c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott void SetMaxSize(int size); 64c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 65c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // Deletes and re-creates the files on initialization errors. 66c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott void SetForceCreation() { 67c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott force_creation_ = true; 68c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 69c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 70c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott void SetNewEviction() { 71c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott new_eviction_ = true; 72c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 73c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 74c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott void DisableFirstCleanup() { 75c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott first_cleanup_ = false; 76c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 77c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 78c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott void DisableIntegrityCheck() { 79c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott integrity_ = false; 80c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott } 81c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 82c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void UseCurrentThread() { 83c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch use_current_thread_ = true; 84c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch } 85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 863345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick void SetCacheType(net::CacheType type) { 873345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick type_ = type; 883345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick } 893345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick 90c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch // Utility methods to access the cache and wait for each operation to finish. 91c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int OpenEntry(const std::string& key, disk_cache::Entry** entry); 92c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int CreateEntry(const std::string& key, disk_cache::Entry** entry); 93c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int DoomEntry(const std::string& key); 94c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int DoomAllEntries(); 95c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int DoomEntriesBetween(const base::Time initial_time, 96c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch const base::Time end_time); 97c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int DoomEntriesSince(const base::Time initial_time); 98c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch int OpenNextEntry(void** iter, disk_cache::Entry** next_entry); 99c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch void FlushQueueForTest(); 1003345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick void RunTaskForTest(Task* task); 1013345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int ReadData(disk_cache::Entry* entry, int index, int offset, 1023345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick net::IOBuffer* buf, int len); 1033345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int WriteData(disk_cache::Entry* entry, int index, int offset, 1043345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick net::IOBuffer* buf, int len, bool truncate); 1053345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int ReadSparseData(disk_cache::Entry* entry, int64 offset, net::IOBuffer* buf, 1063345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int len); 1073345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick int WriteSparseData(disk_cache::Entry* entry, int64 offset, 1083345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick net::IOBuffer* buf, int len); 109c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 1100a9239c3bca6d8a7147c80243b17a02340fe6d31Kristian Monsen // Asks the cache to trim an entry. If |empty| is true, the whole cache is 11172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // deleted. 11272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void TrimForTest(bool empty); 11372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 1140a9239c3bca6d8a7147c80243b17a02340fe6d31Kristian Monsen // Asks the cache to trim an entry from the deleted list. If |empty| is 1150a9239c3bca6d8a7147c80243b17a02340fe6d31Kristian Monsen // true, the whole list is deleted. 11672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen void TrimDeletedListForTest(bool empty); 11772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 11872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen // DiskCacheTest: 11972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen virtual void TearDown(); 12072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen 121c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // cache_ will always have a valid object, regardless of how the cache was 122c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // initialized. The implementation pointers can be NULL. 123c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott disk_cache::Backend* cache_; 124c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott disk_cache::BackendImpl* cache_impl_; 125c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott disk_cache::MemBackendImpl* mem_cache_; 126c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 127c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott uint32 mask_; 128c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott int size_; 1293345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick net::CacheType type_; 130c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott bool memory_only_; 131c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott bool implementation_; 132c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott bool force_creation_; 133c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott bool new_eviction_; 134c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott bool first_cleanup_; 135c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott bool integrity_; 136c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch bool use_current_thread_; 137c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott // This is intentionally left uninitialized, to be used by any test. 138c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott bool success_; 139c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 140c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott private: 141c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott void InitMemoryCache(); 142c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott void InitDiskCache(); 143c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott void InitDiskCacheImpl(const FilePath& path); 144c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch 145c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch base::Thread cache_thread_; 146c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch DISALLOW_COPY_AND_ASSIGN(DiskCacheTestWithCache); 147c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott}; 148c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott 149c7f5f8508d98d5952d42ed7648c2a8f30a4da156Patrick Scott#endif // NET_DISK_CACHE_DISK_CACHE_TEST_BASE_H_ 150