• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2006-2010 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 NET_DISK_CACHE_DISK_CACHE_TEST_BASE_H_
6 #define NET_DISK_CACHE_DISK_CACHE_TEST_BASE_H_
7 #pragma once
8 
9 #include "base/basictypes.h"
10 #include "base/threading/thread.h"
11 #include "net/base/cache_type.h"
12 #include "testing/gtest/include/gtest/gtest.h"
13 #include "testing/platform_test.h"
14 
15 class FilePath;
16 
17 namespace net {
18 
19 class IOBuffer;
20 
21 }  // namespace net
22 
23 namespace disk_cache {
24 
25 class Backend;
26 class BackendImpl;
27 class Entry;
28 class MemBackendImpl;
29 
30 }  // namespace disk_cache
31 
32 // These tests can use the path service, which uses autoreleased objects on the
33 // Mac, so this needs to be a PlatformTest.  Even tests that do not require a
34 // cache (and that do not need to be a DiskCacheTestWithCache) are susceptible
35 // to this problem; all such tests should use TEST_F(DiskCacheTest, ...).
36 class DiskCacheTest : public PlatformTest {
37   virtual void TearDown();
38 };
39 
40 // Provides basic support for cache related tests.
41 class DiskCacheTestWithCache : public DiskCacheTest {
42  protected:
43   DiskCacheTestWithCache();
44   virtual ~DiskCacheTestWithCache();
45 
46   void InitCache();
47   void SimulateCrash();
48   void SetTestMode();
49 
SetMemoryOnlyMode()50   void SetMemoryOnlyMode() {
51     memory_only_ = true;
52   }
53 
54   // Use the implementation directly instead of the factory provided object.
SetDirectMode()55   void SetDirectMode() {
56     implementation_ = true;
57   }
58 
SetMask(uint32 mask)59   void SetMask(uint32 mask) {
60     mask_ = mask;
61   }
62 
63   void SetMaxSize(int size);
64 
65   // Deletes and re-creates the files on initialization errors.
SetForceCreation()66   void SetForceCreation() {
67     force_creation_ = true;
68   }
69 
SetNewEviction()70   void SetNewEviction() {
71     new_eviction_ = true;
72   }
73 
DisableFirstCleanup()74   void DisableFirstCleanup() {
75     first_cleanup_ = false;
76   }
77 
DisableIntegrityCheck()78   void DisableIntegrityCheck() {
79     integrity_ = false;
80   }
81 
UseCurrentThread()82   void UseCurrentThread() {
83     use_current_thread_ = true;
84   }
85 
SetCacheType(net::CacheType type)86   void SetCacheType(net::CacheType type) {
87     type_ = type;
88   }
89 
90   // Utility methods to access the cache and wait for each operation to finish.
91   int OpenEntry(const std::string& key, disk_cache::Entry** entry);
92   int CreateEntry(const std::string& key, disk_cache::Entry** entry);
93   int DoomEntry(const std::string& key);
94   int DoomAllEntries();
95   int DoomEntriesBetween(const base::Time initial_time,
96                          const base::Time end_time);
97   int DoomEntriesSince(const base::Time initial_time);
98   int OpenNextEntry(void** iter, disk_cache::Entry** next_entry);
99   void FlushQueueForTest();
100   void RunTaskForTest(Task* task);
101   int ReadData(disk_cache::Entry* entry, int index, int offset,
102                net::IOBuffer* buf, int len);
103   int WriteData(disk_cache::Entry* entry, int index, int offset,
104                 net::IOBuffer* buf, int len, bool truncate);
105   int ReadSparseData(disk_cache::Entry* entry, int64 offset, net::IOBuffer* buf,
106                      int len);
107   int WriteSparseData(disk_cache::Entry* entry, int64 offset,
108                       net::IOBuffer* buf, int len);
109 
110   // Asks the cache to trim a an entry. If |empty| is true, the whole entry is
111   // deleted.
112   void TrimForTest(bool empty);
113 
114   // Asks the cache to trim a an entry from the deleted list. If |empty| is
115   // true, the whole entry is deleted.
116   void TrimDeletedListForTest(bool empty);
117 
118   // DiskCacheTest:
119   virtual void TearDown();
120 
121   // cache_ will always have a valid object, regardless of how the cache was
122   // initialized. The implementation pointers can be NULL.
123   disk_cache::Backend* cache_;
124   disk_cache::BackendImpl* cache_impl_;
125   disk_cache::MemBackendImpl* mem_cache_;
126 
127   uint32 mask_;
128   int size_;
129   net::CacheType type_;
130   bool memory_only_;
131   bool implementation_;
132   bool force_creation_;
133   bool new_eviction_;
134   bool first_cleanup_;
135   bool integrity_;
136   bool use_current_thread_;
137   // This is intentionally left uninitialized, to be used by any test.
138   bool success_;
139 
140  private:
141   void InitMemoryCache();
142   void InitDiskCache();
143   void InitDiskCacheImpl(const FilePath& path);
144 
145   base::Thread cache_thread_;
146   DISALLOW_COPY_AND_ASSIGN(DiskCacheTestWithCache);
147 };
148 
149 #endif  // NET_DISK_CACHE_DISK_CACHE_TEST_BASE_H_
150