Home | History | Annotate | Download | only in disk_cache
      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.
     18 bool CreateCacheTestFile(const FilePath& name);
     19 
     20 // Deletes all file son the cache.
     21 bool DeleteCache(const FilePath& path);
     22 
     23 // Copies a set of cache files from the data folder to the test folder.
     24 bool CopyTestCache(const std::string& name);
     25 
     26 // Gets the path to the cache test folder.
     27 FilePath GetCacheFilePath();
     28 
     29 // Fills buffer with random values (may contain nulls unless no_nulls is true).
     30 void CacheTestFillBuffer(char* buffer, size_t len, bool no_nulls);
     31 
     32 // Generates a random key of up to 200 bytes.
     33 std::string GenerateKey(bool same_length);
     34 
     35 // Returns true if the cache is not corrupt.
     36 bool 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.
     40 class 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.
     59 class 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.
     76 class 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