| // Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef NET_DISK_CACHE_DISK_CACHE_TEST_UTIL_H_ |
| #define NET_DISK_CACHE_DISK_CACHE_TEST_UTIL_H_ |
| #pragma once |
| |
| #include <string> |
| |
| #include "base/callback.h" |
| #include "base/file_path.h" |
| #include "base/message_loop.h" |
| #include "base/timer.h" |
| #include "build/build_config.h" |
| |
| // Re-creates a given test file inside the cache test folder. |
| bool CreateCacheTestFile(const FilePath& name); |
| |
| // Deletes all file son the cache. |
| bool DeleteCache(const FilePath& path); |
| |
| // Copies a set of cache files from the data folder to the test folder. |
| bool CopyTestCache(const std::string& name); |
| |
| // Gets the path to the cache test folder. |
| FilePath GetCacheFilePath(); |
| |
| // Fills buffer with random values (may contain nulls unless no_nulls is true). |
| void CacheTestFillBuffer(char* buffer, size_t len, bool no_nulls); |
| |
| // Generates a random key of up to 200 bytes. |
| std::string GenerateKey(bool same_length); |
| |
| // Returns true if the cache is not corrupt. |
| bool CheckCacheIntegrity(const FilePath& path, bool new_eviction); |
| |
| // Helper class which ensures that the cache dir returned by GetCacheFilePath |
| // exists and is clear in ctor and that the directory gets deleted in dtor. |
| class ScopedTestCache { |
| public: |
| ScopedTestCache(); |
| // Use a specific folder name. |
| explicit ScopedTestCache(const std::string& name); |
| ~ScopedTestCache(); |
| |
| FilePath path() const { return path_; } |
| |
| private: |
| const FilePath path_; // Path to the cache test folder. |
| |
| DISALLOW_COPY_AND_ASSIGN(ScopedTestCache); |
| }; |
| |
| // ----------------------------------------------------------------------- |
| |
| // Simple callback to process IO completions from the cache. It allows tests |
| // with multiple simultaneous IO operations. |
| class CallbackTest : public CallbackRunner< Tuple1<int> > { |
| public: |
| explicit CallbackTest(bool reuse); |
| virtual ~CallbackTest(); |
| |
| int result() const { return result_; } |
| virtual void RunWithParams(const Tuple1<int>& params); |
| |
| private: |
| int result_; |
| int reuse_; |
| DISALLOW_COPY_AND_ASSIGN(CallbackTest); |
| }; |
| |
| // ----------------------------------------------------------------------- |
| |
| // Simple helper to deal with the message loop on a test. |
| class MessageLoopHelper { |
| public: |
| MessageLoopHelper(); |
| ~MessageLoopHelper(); |
| |
| // Run the message loop and wait for num_callbacks before returning. Returns |
| // false if we are waiting to long. |
| bool WaitUntilCacheIoFinished(int num_callbacks); |
| |
| private: |
| // Sets the number of callbacks that can be received so far. |
| void ExpectCallbacks(int num_callbacks) { |
| num_callbacks_ = num_callbacks; |
| num_iterations_ = last_ = 0; |
| completed_ = false; |
| } |
| |
| // Called periodically to test if WaitUntilCacheIoFinished should return. |
| void TimerExpired(); |
| |
| base::RepeatingTimer<MessageLoopHelper> timer_; |
| int num_callbacks_; |
| int num_iterations_; |
| int last_; |
| bool completed_; |
| |
| DISALLOW_COPY_AND_ASSIGN(MessageLoopHelper); |
| }; |
| |
| #endif // NET_DISK_CACHE_DISK_CACHE_TEST_UTIL_H_ |