1// Copyright (c) 2006-2008 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
8#include "base/basictypes.h"
9#include "testing/gtest/include/gtest/gtest.h"
10#include "testing/platform_test.h"
11
12class FilePath;
13
14namespace disk_cache {
15
16class Backend;
17class BackendImpl;
18class MemBackendImpl;
19
20}  // namespace disk_cache
21
22// These tests can use the path service, which uses autoreleased objects on the
23// Mac, so this needs to be a PlatformTest.  Even tests that do not require a
24// cache (and that do not need to be a DiskCacheTestWithCache) are susceptible
25// to this problem; all such tests should use TEST_F(DiskCacheTest, ...).
26class DiskCacheTest : public PlatformTest {
27  virtual void TearDown();
28};
29
30// Provides basic support for cache related tests.
31class DiskCacheTestWithCache : public DiskCacheTest {
32 protected:
33  DiskCacheTestWithCache()
34      : cache_(NULL), cache_impl_(NULL), mem_cache_(NULL), mask_(0), size_(0),
35        memory_only_(false), implementation_(false), force_creation_(false),
36        new_eviction_(false), first_cleanup_(true), integrity_(true) {}
37
38  void InitCache();
39  virtual void TearDown();
40  void SimulateCrash();
41  void SetTestMode();
42
43  void SetMemoryOnlyMode() {
44    memory_only_ = true;
45  }
46
47  // Use the implementation directly instead of the factory provided object.
48  void SetDirectMode() {
49    implementation_ = true;
50  }
51
52  void SetMask(uint32 mask) {
53    mask_ = mask;
54  }
55
56  void SetMaxSize(int size);
57
58  // Deletes and re-creates the files on initialization errors.
59  void SetForceCreation() {
60    force_creation_ = true;
61  }
62
63  void SetNewEviction() {
64    new_eviction_ = true;
65  }
66
67  void DisableFirstCleanup() {
68    first_cleanup_ = false;
69  }
70
71  void DisableIntegrityCheck() {
72    integrity_ = false;
73  }
74
75  // cache_ will always have a valid object, regardless of how the cache was
76  // initialized. The implementation pointers can be NULL.
77  disk_cache::Backend* cache_;
78  disk_cache::BackendImpl* cache_impl_;
79  disk_cache::MemBackendImpl* mem_cache_;
80
81  uint32 mask_;
82  int size_;
83  bool memory_only_;
84  bool implementation_;
85  bool force_creation_;
86  bool new_eviction_;
87  bool first_cleanup_;
88  bool integrity_;
89  // This is intentionally left uninitialized, to be used by any test.
90  bool success_;
91
92 private:
93  void InitMemoryCache();
94  void InitDiskCache();
95  void InitDiskCacheImpl(const FilePath& path);
96};
97
98#endif  // NET_DISK_CACHE_DISK_CACHE_TEST_BASE_H_
99