xref: /aosp_15_r20/external/cronet/net/base/mock_file_stream.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2012 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker // This file defines MockFileStream, a test class for FileStream.
6*6777b538SAndroid Build Coastguard Worker 
7*6777b538SAndroid Build Coastguard Worker #ifndef NET_BASE_MOCK_FILE_STREAM_H_
8*6777b538SAndroid Build Coastguard Worker #define NET_BASE_MOCK_FILE_STREAM_H_
9*6777b538SAndroid Build Coastguard Worker 
10*6777b538SAndroid Build Coastguard Worker #include <stdint.h>
11*6777b538SAndroid Build Coastguard Worker 
12*6777b538SAndroid Build Coastguard Worker #include "base/compiler_specific.h"
13*6777b538SAndroid Build Coastguard Worker #include "base/files/file_path.h"
14*6777b538SAndroid Build Coastguard Worker #include "base/memory/weak_ptr.h"
15*6777b538SAndroid Build Coastguard Worker #include "net/base/completion_once_callback.h"
16*6777b538SAndroid Build Coastguard Worker #include "net/base/file_stream.h"
17*6777b538SAndroid Build Coastguard Worker #include "net/base/net_errors.h"
18*6777b538SAndroid Build Coastguard Worker 
19*6777b538SAndroid Build Coastguard Worker namespace net {
20*6777b538SAndroid Build Coastguard Worker 
21*6777b538SAndroid Build Coastguard Worker class IOBuffer;
22*6777b538SAndroid Build Coastguard Worker 
23*6777b538SAndroid Build Coastguard Worker namespace testing {
24*6777b538SAndroid Build Coastguard Worker 
25*6777b538SAndroid Build Coastguard Worker class MockFileStream : public FileStream {
26*6777b538SAndroid Build Coastguard Worker  public:
27*6777b538SAndroid Build Coastguard Worker   explicit MockFileStream(const scoped_refptr<base::TaskRunner>& task_runner);
28*6777b538SAndroid Build Coastguard Worker   MockFileStream(base::File file,
29*6777b538SAndroid Build Coastguard Worker                  const scoped_refptr<base::TaskRunner>& task_runner);
30*6777b538SAndroid Build Coastguard Worker   ~MockFileStream() override;
31*6777b538SAndroid Build Coastguard Worker 
32*6777b538SAndroid Build Coastguard Worker   // FileStream methods.
33*6777b538SAndroid Build Coastguard Worker   int Seek(int64_t offset, Int64CompletionOnceCallback callback) override;
34*6777b538SAndroid Build Coastguard Worker   int Read(IOBuffer* buf,
35*6777b538SAndroid Build Coastguard Worker            int buf_len,
36*6777b538SAndroid Build Coastguard Worker            CompletionOnceCallback callback) override;
37*6777b538SAndroid Build Coastguard Worker   int Write(IOBuffer* buf,
38*6777b538SAndroid Build Coastguard Worker             int buf_len,
39*6777b538SAndroid Build Coastguard Worker             CompletionOnceCallback callback) override;
40*6777b538SAndroid Build Coastguard Worker   int Flush(CompletionOnceCallback callback) override;
41*6777b538SAndroid Build Coastguard Worker 
set_forced_error_async(int error)42*6777b538SAndroid Build Coastguard Worker   void set_forced_error_async(int error) {
43*6777b538SAndroid Build Coastguard Worker     forced_error_ = error;
44*6777b538SAndroid Build Coastguard Worker     async_error_ = true;
45*6777b538SAndroid Build Coastguard Worker   }
set_forced_error(int error)46*6777b538SAndroid Build Coastguard Worker   void set_forced_error(int error) {
47*6777b538SAndroid Build Coastguard Worker     forced_error_ = error;
48*6777b538SAndroid Build Coastguard Worker     async_error_ = false;
49*6777b538SAndroid Build Coastguard Worker   }
clear_forced_error()50*6777b538SAndroid Build Coastguard Worker   void clear_forced_error() {
51*6777b538SAndroid Build Coastguard Worker     forced_error_ = OK;
52*6777b538SAndroid Build Coastguard Worker     async_error_ = false;
53*6777b538SAndroid Build Coastguard Worker   }
forced_error()54*6777b538SAndroid Build Coastguard Worker   int forced_error() const { return forced_error_; }
get_path()55*6777b538SAndroid Build Coastguard Worker   const base::FilePath& get_path() const { return path_; }
56*6777b538SAndroid Build Coastguard Worker 
57*6777b538SAndroid Build Coastguard Worker   // Throttles all asynchronous callbacks, including forced errors, until a
58*6777b538SAndroid Build Coastguard Worker   // matching ReleaseCallbacks call.
59*6777b538SAndroid Build Coastguard Worker   void ThrottleCallbacks();
60*6777b538SAndroid Build Coastguard Worker 
61*6777b538SAndroid Build Coastguard Worker   // Resumes running asynchronous callbacks and runs any throttled callbacks.
62*6777b538SAndroid Build Coastguard Worker   void ReleaseCallbacks();
63*6777b538SAndroid Build Coastguard Worker 
64*6777b538SAndroid Build Coastguard Worker  private:
ReturnError(int function_error)65*6777b538SAndroid Build Coastguard Worker   int ReturnError(int function_error) {
66*6777b538SAndroid Build Coastguard Worker     if (forced_error_ != OK) {
67*6777b538SAndroid Build Coastguard Worker       int ret = forced_error_;
68*6777b538SAndroid Build Coastguard Worker       clear_forced_error();
69*6777b538SAndroid Build Coastguard Worker       return ret;
70*6777b538SAndroid Build Coastguard Worker     }
71*6777b538SAndroid Build Coastguard Worker 
72*6777b538SAndroid Build Coastguard Worker     return function_error;
73*6777b538SAndroid Build Coastguard Worker   }
74*6777b538SAndroid Build Coastguard Worker 
ReturnError64(int64_t function_error)75*6777b538SAndroid Build Coastguard Worker   int64_t ReturnError64(int64_t function_error) {
76*6777b538SAndroid Build Coastguard Worker     if (forced_error_ != OK) {
77*6777b538SAndroid Build Coastguard Worker       int64_t ret = forced_error_;
78*6777b538SAndroid Build Coastguard Worker       clear_forced_error();
79*6777b538SAndroid Build Coastguard Worker       return ret;
80*6777b538SAndroid Build Coastguard Worker     }
81*6777b538SAndroid Build Coastguard Worker 
82*6777b538SAndroid Build Coastguard Worker     return function_error;
83*6777b538SAndroid Build Coastguard Worker   }
84*6777b538SAndroid Build Coastguard Worker 
85*6777b538SAndroid Build Coastguard Worker   // Wrappers for callbacks to make them honor ThrottleCallbacks and
86*6777b538SAndroid Build Coastguard Worker   // ReleaseCallbacks.
87*6777b538SAndroid Build Coastguard Worker   void DoCallback(CompletionOnceCallback callback, int result);
88*6777b538SAndroid Build Coastguard Worker   void DoCallback64(Int64CompletionOnceCallback callback, int64_t result);
89*6777b538SAndroid Build Coastguard Worker 
90*6777b538SAndroid Build Coastguard Worker   // Depending on |async_error_|, either synchronously returns |forced_error_|
91*6777b538SAndroid Build Coastguard Worker   // asynchronously calls |callback| with |async_error_|.
92*6777b538SAndroid Build Coastguard Worker   int ErrorCallback(CompletionOnceCallback callback);
93*6777b538SAndroid Build Coastguard Worker   int64_t ErrorCallback64(Int64CompletionOnceCallback callback);
94*6777b538SAndroid Build Coastguard Worker 
95*6777b538SAndroid Build Coastguard Worker   int forced_error_ = OK;
96*6777b538SAndroid Build Coastguard Worker   bool async_error_ = false;
97*6777b538SAndroid Build Coastguard Worker   bool throttled_ = false;
98*6777b538SAndroid Build Coastguard Worker   base::OnceClosure throttled_task_;
99*6777b538SAndroid Build Coastguard Worker   base::FilePath path_;
100*6777b538SAndroid Build Coastguard Worker 
101*6777b538SAndroid Build Coastguard Worker   base::WeakPtrFactory<MockFileStream> weak_factory_{this};
102*6777b538SAndroid Build Coastguard Worker };
103*6777b538SAndroid Build Coastguard Worker 
104*6777b538SAndroid Build Coastguard Worker }  // namespace testing
105*6777b538SAndroid Build Coastguard Worker 
106*6777b538SAndroid Build Coastguard Worker }  // namespace net
107*6777b538SAndroid Build Coastguard Worker 
108*6777b538SAndroid Build Coastguard Worker #endif  // NET_BASE_MOCK_FILE_STREAM_H_
109