blob: f53589610c2a3eefbcba7591188a93c829e447ea [file] [log] [blame]
[email protected]bc4fb8e2010-03-18 23:58:171// Copyright (c) 2006-2010 The Chromium Authors. All rights reserved.
license.botbf09a502008-08-24 00:55:552// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
initial.commit586acc5fe2008-07-26 22:42:524
[email protected]4d5e0362008-08-28 00:59:065#ifndef NET_DISK_CACHE_DISK_CACHE_TEST_BASE_H_
6#define NET_DISK_CACHE_DISK_CACHE_TEST_BASE_H_
[email protected]32b76ef2010-07-26 23:08:247#pragma once
initial.commit586acc5fe2008-07-26 22:42:528
9#include "base/basictypes.h"
[email protected]34b99632011-01-01 01:01:0610#include "base/threading/thread.h"
[email protected]67b09ec2010-08-27 17:49:4211#include "net/base/cache_type.h"
initial.commit586acc5fe2008-07-26 22:42:5212#include "testing/gtest/include/gtest/gtest.h"
[email protected]23887f04f2008-12-02 19:20:1513#include "testing/platform_test.h"
initial.commit586acc5fe2008-07-26 22:42:5214
[email protected]cfaa1f22009-10-12 17:14:5915class FilePath;
16
[email protected]e1fcf142010-08-23 18:47:2517namespace net {
18
19class IOBuffer;
20
21} // namespace net
22
initial.commit586acc5fe2008-07-26 22:42:5223namespace disk_cache {
24
25class Backend;
26class BackendImpl;
[email protected]bc4fb8e2010-03-18 23:58:1727class Entry;
initial.commit586acc5fe2008-07-26 22:42:5228class MemBackendImpl;
29
[email protected]4d5e0362008-08-28 00:59:0630} // namespace disk_cache
initial.commit586acc5fe2008-07-26 22:42:5231
[email protected]17b89142008-11-07 21:52:1532// 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, ...).
36class DiskCacheTest : public PlatformTest {
37 virtual void TearDown();
38};
39
initial.commit586acc5fe2008-07-26 22:42:5240// Provides basic support for cache related tests.
[email protected]4d5e0362008-08-28 00:59:0641class DiskCacheTestWithCache : public DiskCacheTest {
initial.commit586acc5fe2008-07-26 22:42:5242 protected:
[email protected]7aefb152011-01-21 23:46:4943 DiskCacheTestWithCache();
44 virtual ~DiskCacheTestWithCache();
initial.commit586acc5fe2008-07-26 22:42:5245
46 void InitCache();
initial.commit586acc5fe2008-07-26 22:42:5247 void SimulateCrash();
[email protected]a9da16d2008-07-30 21:41:5448 void SetTestMode();
initial.commit586acc5fe2008-07-26 22:42:5249
50 void SetMemoryOnlyMode() {
51 memory_only_ = true;
52 }
53
54 // Use the implementation directly instead of the factory provided object.
55 void SetDirectMode() {
56 implementation_ = true;
57 }
58
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.
66 void SetForceCreation() {
67 force_creation_ = true;
68 }
69
[email protected]220d71002009-04-17 00:50:0470 void SetNewEviction() {
71 new_eviction_ = true;
72 }
73
[email protected]a9da16d2008-07-30 21:41:5474 void DisableFirstCleanup() {
75 first_cleanup_ = false;
76 }
77
[email protected]220d71002009-04-17 00:50:0478 void DisableIntegrityCheck() {
79 integrity_ = false;
80 }
81
[email protected]fb2622f2010-07-13 18:00:5682 void UseCurrentThread() {
83 use_current_thread_ = true;
84 }
85
[email protected]67b09ec2010-08-27 17:49:4286 void SetCacheType(net::CacheType type) {
87 type_ = type;
88 }
89
[email protected]bc4fb8e2010-03-18 23:58:1790 // 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);
[email protected]fb2622f2010-07-13 18:00:5699 void FlushQueueForTest();
[email protected]65188eb2010-09-16 20:59:29100 void RunTaskForTest(Task* task);
[email protected]e1fcf142010-08-23 18:47:25101 int ReadData(disk_cache::Entry* entry, int index, int offset,
[email protected]67b09ec2010-08-27 17:49:42102 net::IOBuffer* buf, int len);
[email protected]e1fcf142010-08-23 18:47:25103 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);
[email protected]bc4fb8e2010-03-18 23:58:17109
[email protected]ceb61da32011-01-25 23:52:02110 // 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
[email protected]7aefb152011-01-21 23:46:49118 // DiskCacheTest:
119 virtual void TearDown();
120
initial.commit586acc5fe2008-07-26 22:42:52121 // 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_;
[email protected]67b09ec2010-08-27 17:49:42129 net::CacheType type_;
initial.commit586acc5fe2008-07-26 22:42:52130 bool memory_only_;
131 bool implementation_;
132 bool force_creation_;
[email protected]220d71002009-04-17 00:50:04133 bool new_eviction_;
[email protected]a9da16d2008-07-30 21:41:54134 bool first_cleanup_;
[email protected]220d71002009-04-17 00:50:04135 bool integrity_;
[email protected]fb2622f2010-07-13 18:00:56136 bool use_current_thread_;
[email protected]220d71002009-04-17 00:50:04137 // This is intentionally left uninitialized, to be used by any test.
138 bool success_;
initial.commit586acc5fe2008-07-26 22:42:52139
140 private:
141 void InitMemoryCache();
142 void InitDiskCache();
[email protected]cfaa1f22009-10-12 17:14:59143 void InitDiskCacheImpl(const FilePath& path);
[email protected]ec44a9a2010-06-15 19:31:51144
145 base::Thread cache_thread_;
146 DISALLOW_COPY_AND_ASSIGN(DiskCacheTestWithCache);
initial.commit586acc5fe2008-07-26 22:42:52147};
148
[email protected]4d5e0362008-08-28 00:59:06149#endif // NET_DISK_CACHE_DISK_CACHE_TEST_BASE_H_