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