• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright (c) 2012 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 // This file defines MockFileStream, a test class for FileStream.
6 
7 #ifndef NET_BASE_MOCK_FILE_STREAM_H_
8 #define NET_BASE_MOCK_FILE_STREAM_H_
9 
10 #include "base/basictypes.h"
11 #include "base/compiler_specific.h"
12 #include "base/files/file_path.h"
13 #include "base/memory/weak_ptr.h"
14 #include "net/base/file_stream.h"
15 #include "net/base/net_errors.h"
16 
17 namespace net {
18 
19 class IOBuffer;
20 
21 namespace testing {
22 
23 class MockFileStream : public net::FileStream {
24  public:
25   explicit MockFileStream(const scoped_refptr<base::TaskRunner>& task_runner);
26   MockFileStream(base::File file,
27                  const scoped_refptr<base::TaskRunner>& task_runner);
28   virtual ~MockFileStream();
29 
30   // FileStream methods.
31   virtual int Seek(base::File::Whence whence, int64 offset,
32                    const Int64CompletionCallback& callback) OVERRIDE;
33   virtual int Read(IOBuffer* buf,
34                    int buf_len,
35                    const CompletionCallback& callback) OVERRIDE;
36   virtual int Write(IOBuffer* buf,
37                     int buf_len,
38                     const CompletionCallback& callback) OVERRIDE;
39   virtual int Flush(const CompletionCallback& callback) OVERRIDE;
40 
set_forced_error_async(int error)41   void set_forced_error_async(int error) {
42     forced_error_ = error;
43     async_error_ = true;
44   }
set_forced_error(int error)45   void set_forced_error(int error) {
46     forced_error_ = error;
47     async_error_ = false;
48   }
clear_forced_error()49   void clear_forced_error() {
50     forced_error_ = net::OK;
51     async_error_ = false;
52   }
forced_error()53   int forced_error() const { return forced_error_; }
get_path()54   const base::FilePath& get_path() const { return path_; }
55 
56   // Throttles all asynchronous callbacks, including forced errors, until a
57   // matching ReleaseCallbacks call.
58   void ThrottleCallbacks();
59 
60   // Resumes running asynchronous callbacks and runs any throttled callbacks.
61   void ReleaseCallbacks();
62 
63  private:
ReturnError(int function_error)64   int ReturnError(int function_error) {
65     if (forced_error_ != net::OK) {
66       int ret = forced_error_;
67       clear_forced_error();
68       return ret;
69     }
70 
71     return function_error;
72   }
73 
ReturnError64(int64 function_error)74   int64 ReturnError64(int64 function_error) {
75     if (forced_error_ != net::OK) {
76       int64 ret = forced_error_;
77       clear_forced_error();
78       return ret;
79     }
80 
81     return function_error;
82   }
83 
84   // Wrappers for callbacks to make them honor ThrottleCallbacks and
85   // ReleaseCallbacks.
86   void DoCallback(const CompletionCallback& callback, int result);
87   void DoCallback64(const Int64CompletionCallback& callback, int64 result);
88 
89   // Depending on |async_error_|, either synchronously returns |forced_error_|
90   // asynchronously calls |callback| with |async_error_|.
91   int ErrorCallback(const CompletionCallback& callback);
92   int64 ErrorCallback64(const Int64CompletionCallback& callback);
93 
94   int forced_error_;
95   bool async_error_;
96   bool throttled_;
97   base::Closure throttled_task_;
98   base::FilePath path_;
99 
100   base::WeakPtrFactory<MockFileStream> weak_factory_;
101 };
102 
103 }  // namespace testing
104 
105 }  // namespace net
106 
107 #endif  // NET_BASE_MOCK_FILE_STREAM_H_
108