disk_cache_test_util.h revision c7f5f8508d98d5952d42ed7648c2a8f30a4da156
1// Copyright (c) 2006-2009 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_UTIL_H_
6#define NET_DISK_CACHE_DISK_CACHE_TEST_UTIL_H_
7
8#include <string>
9
10#include "base/file_path.h"
11#include "base/message_loop.h"
12#include "base/task.h"
13#include "base/timer.h"
14#include "build/build_config.h"
15
16class FilePath;
17
18// Re-creates a given test file inside the cache test folder.
19bool CreateCacheTestFile(const FilePath& name);
20
21// Deletes all file son the cache.
22bool DeleteCache(const FilePath& path);
23
24// Gets the path to the cache test folder.
25FilePath GetCacheFilePath();
26
27// Fills buffer with random values (may contain nulls unless no_nulls is true).
28void CacheTestFillBuffer(char* buffer, size_t len, bool no_nulls);
29
30// Generates a random key of up to 200 bytes.
31std::string GenerateKey(bool same_length);
32
33// Returns true if the cache is not corrupt.
34bool CheckCacheIntegrity(const FilePath& path, bool new_eviction);
35
36// Helper class which ensures that the cache dir returned by GetCacheFilePath
37// exists and is clear in ctor and that the directory gets deleted in dtor.
38class ScopedTestCache {
39 public:
40  ScopedTestCache();
41  ScopedTestCache(const std::string& name);  // Use a specific folder name.
42  ~ScopedTestCache();
43
44  FilePath path() const { return path_; }
45
46 private:
47  const FilePath path_;  // Path to the cache test folder.
48
49  DISALLOW_COPY_AND_ASSIGN(ScopedTestCache);
50};
51
52// -----------------------------------------------------------------------
53
54// Simple callback to process IO completions from the cache. It allows tests
55// with multiple simultaneous IO operations.
56class CallbackTest : public CallbackRunner< Tuple1<int> >  {
57 public:
58  explicit CallbackTest(bool reuse) : result_(-1), reuse_(reuse ? 0 : 1) {}
59  ~CallbackTest() {}
60
61  virtual void RunWithParams(const Tuple1<int>& params);
62  int result() const { return result_; }
63
64 private:
65  int result_;
66  int reuse_;
67  DISALLOW_COPY_AND_ASSIGN(CallbackTest);
68};
69
70// -----------------------------------------------------------------------
71
72// Simple helper to deal with the message loop on a test.
73class MessageLoopHelper {
74 public:
75  MessageLoopHelper();
76
77  // Run the message loop and wait for num_callbacks before returning. Returns
78  // false if we are waiting to long.
79  bool WaitUntilCacheIoFinished(int num_callbacks);
80
81 private:
82  // Sets the number of callbacks that can be received so far.
83  void ExpectCallbacks(int num_callbacks) {
84    num_callbacks_ = num_callbacks;
85    num_iterations_ = last_ = 0;
86    completed_ = false;
87  }
88
89  // Called periodically to test if WaitUntilCacheIoFinished should return.
90  void TimerExpired();
91
92  base::RepeatingTimer<MessageLoopHelper> timer_;
93  int num_callbacks_;
94  int num_iterations_;
95  int last_;
96  bool completed_;
97
98  DISALLOW_COPY_AND_ASSIGN(MessageLoopHelper);
99};
100
101#endif  // NET_DISK_CACHE_DISK_CACHE_TEST_UTIL_H_
102