Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(467)

Side by Side Diff: net/http/mock_http_cache.h

Issue 992733002: Remove //net (except for Android test stuff) and sdch (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « net/http/mock_gssapi_library_posix.cc ('k') | net/http/mock_http_cache.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2011 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 is a mock of the http cache and related testing classes. To be fair, it
6 // is not really a mock http cache given that it uses the real implementation of
7 // the http cache, but it has fake implementations of all required components,
8 // so it is useful for unit tests at the http layer.
9
10 #ifndef NET_HTTP_MOCK_HTTP_CACHE_H_
11 #define NET_HTTP_MOCK_HTTP_CACHE_H_
12
13 #include "base/containers/hash_tables.h"
14 #include "net/disk_cache/disk_cache.h"
15 #include "net/http/http_cache.h"
16 #include "net/http/http_transaction_test_util.h"
17
18 //-----------------------------------------------------------------------------
19 // Mock disk cache (a very basic memory cache implementation).
20
21 class MockDiskEntry : public disk_cache::Entry,
22 public base::RefCounted<MockDiskEntry> {
23 public:
24 explicit MockDiskEntry(const std::string& key);
25
26 bool is_doomed() const { return doomed_; }
27
28 void Doom() override;
29 void Close() override;
30 std::string GetKey() const override;
31 base::Time GetLastUsed() const override;
32 base::Time GetLastModified() const override;
33 int32 GetDataSize(int index) const override;
34 int ReadData(int index,
35 int offset,
36 net::IOBuffer* buf,
37 int buf_len,
38 const net::CompletionCallback& callback) override;
39 int WriteData(int index,
40 int offset,
41 net::IOBuffer* buf,
42 int buf_len,
43 const net::CompletionCallback& callback,
44 bool truncate) override;
45 int ReadSparseData(int64 offset,
46 net::IOBuffer* buf,
47 int buf_len,
48 const net::CompletionCallback& callback) override;
49 int WriteSparseData(int64 offset,
50 net::IOBuffer* buf,
51 int buf_len,
52 const net::CompletionCallback& callback) override;
53 int GetAvailableRange(int64 offset,
54 int len,
55 int64* start,
56 const net::CompletionCallback& callback) override;
57 bool CouldBeSparse() const override;
58 void CancelSparseIO() override;
59 int ReadyForSparseIO(
60 const net::CompletionCallback& completion_callback) override;
61
62 // Fail most subsequent requests.
63 void set_fail_requests() { fail_requests_ = true; }
64
65 void set_fail_sparse_requests() { fail_sparse_requests_ = true; }
66
67 // If |value| is true, don't deliver any completion callbacks until called
68 // again with |value| set to false. Caution: remember to enable callbacks
69 // again or all subsequent tests will fail.
70 static void IgnoreCallbacks(bool value);
71
72 private:
73 friend class base::RefCounted<MockDiskEntry>;
74 struct CallbackInfo;
75
76 ~MockDiskEntry() override;
77
78 // Unlike the callbacks for MockHttpTransaction, we want this one to run even
79 // if the consumer called Close on the MockDiskEntry. We achieve that by
80 // leveraging the fact that this class is reference counted.
81 void CallbackLater(const net::CompletionCallback& callback, int result);
82
83 void RunCallback(const net::CompletionCallback& callback, int result);
84
85 // When |store| is true, stores the callback to be delivered later; otherwise
86 // delivers any callback previously stored.
87 static void StoreAndDeliverCallbacks(bool store, MockDiskEntry* entry,
88 const net::CompletionCallback& callback,
89 int result);
90
91 static const int kNumCacheEntryDataIndices = 3;
92
93 std::string key_;
94 std::vector<char> data_[kNumCacheEntryDataIndices];
95 int test_mode_;
96 bool doomed_;
97 bool sparse_;
98 bool fail_requests_;
99 bool fail_sparse_requests_;
100 bool busy_;
101 bool delayed_;
102 static bool cancel_;
103 static bool ignore_callbacks_;
104 };
105
106 class MockDiskCache : public disk_cache::Backend {
107 public:
108 MockDiskCache();
109 ~MockDiskCache() override;
110
111 net::CacheType GetCacheType() const override;
112 int32 GetEntryCount() const override;
113 int OpenEntry(const std::string& key,
114 disk_cache::Entry** entry,
115 const net::CompletionCallback& callback) override;
116 int CreateEntry(const std::string& key,
117 disk_cache::Entry** entry,
118 const net::CompletionCallback& callback) override;
119 int DoomEntry(const std::string& key,
120 const net::CompletionCallback& callback) override;
121 int DoomAllEntries(const net::CompletionCallback& callback) override;
122 int DoomEntriesBetween(base::Time initial_time,
123 base::Time end_time,
124 const net::CompletionCallback& callback) override;
125 int DoomEntriesSince(base::Time initial_time,
126 const net::CompletionCallback& callback) override;
127 scoped_ptr<Iterator> CreateIterator() override;
128 void GetStats(
129 std::vector<std::pair<std::string, std::string>>* stats) override;
130 void OnExternalCacheHit(const std::string& key) override;
131
132 // Returns number of times a cache entry was successfully opened.
133 int open_count() const { return open_count_; }
134
135 // Returns number of times a cache entry was successfully created.
136 int create_count() const { return create_count_; }
137
138 // Fail any subsequent CreateEntry and OpenEntry.
139 void set_fail_requests() { fail_requests_ = true; }
140
141 // Return entries that fail some of their requests.
142 void set_soft_failures(bool value) { soft_failures_ = value; }
143
144 // Makes sure that CreateEntry is not called twice for a given key.
145 void set_double_create_check(bool value) { double_create_check_ = value; }
146
147 // Makes all requests for data ranges to fail as not implemented.
148 void set_fail_sparse_requests() { fail_sparse_requests_ = true; }
149
150 void ReleaseAll();
151
152 private:
153 typedef base::hash_map<std::string, MockDiskEntry*> EntryMap;
154 class NotImplementedIterator;
155
156 void CallbackLater(const net::CompletionCallback& callback, int result);
157
158 EntryMap entries_;
159 int open_count_;
160 int create_count_;
161 bool fail_requests_;
162 bool soft_failures_;
163 bool double_create_check_;
164 bool fail_sparse_requests_;
165 };
166
167 class MockBackendFactory : public net::HttpCache::BackendFactory {
168 public:
169 int CreateBackend(net::NetLog* net_log,
170 scoped_ptr<disk_cache::Backend>* backend,
171 const net::CompletionCallback& callback) override;
172 };
173
174 class MockHttpCache {
175 public:
176 MockHttpCache();
177 explicit MockHttpCache(net::HttpCache::BackendFactory* disk_cache_factory);
178
179 net::HttpCache* http_cache() { return &http_cache_; }
180
181 MockNetworkLayer* network_layer() {
182 return static_cast<MockNetworkLayer*>(http_cache_.network_layer());
183 }
184 MockDiskCache* disk_cache();
185
186 // Wrapper around http_cache()->CreateTransaction(net::DEFAULT_PRIORITY...)
187 int CreateTransaction(scoped_ptr<net::HttpTransaction>* trans);
188
189 // Wrapper to bypass the cache lock for new transactions.
190 void BypassCacheLock();
191
192 // Wrapper to fail request conditionalization for new transactions.
193 void FailConditionalizations();
194
195 // Helper function for reading response info from the disk cache.
196 static bool ReadResponseInfo(disk_cache::Entry* disk_entry,
197 net::HttpResponseInfo* response_info,
198 bool* response_truncated);
199
200 // Helper function for writing response info into the disk cache.
201 static bool WriteResponseInfo(disk_cache::Entry* disk_entry,
202 const net::HttpResponseInfo* response_info,
203 bool skip_transient_headers,
204 bool response_truncated);
205
206 // Helper function to synchronously open a backend entry.
207 bool OpenBackendEntry(const std::string& key, disk_cache::Entry** entry);
208
209 // Helper function to synchronously create a backend entry.
210 bool CreateBackendEntry(const std::string& key, disk_cache::Entry** entry,
211 net::NetLog* net_log);
212
213 // Returns the test mode after considering the global override.
214 static int GetTestMode(int test_mode);
215
216 // Overrides the test mode for a given operation. Remember to reset it after
217 // the test! (by setting test_mode to zero).
218 static void SetTestMode(int test_mode);
219
220 private:
221 net::HttpCache http_cache_;
222 };
223
224 // This version of the disk cache doesn't invoke CreateEntry callbacks.
225 class MockDiskCacheNoCB : public MockDiskCache {
226 int CreateEntry(const std::string& key,
227 disk_cache::Entry** entry,
228 const net::CompletionCallback& callback) override;
229 };
230
231 class MockBackendNoCbFactory : public net::HttpCache::BackendFactory {
232 public:
233 int CreateBackend(net::NetLog* net_log,
234 scoped_ptr<disk_cache::Backend>* backend,
235 const net::CompletionCallback& callback) override;
236 };
237
238 // This backend factory allows us to control the backend instantiation.
239 class MockBlockingBackendFactory : public net::HttpCache::BackendFactory {
240 public:
241 MockBlockingBackendFactory();
242 ~MockBlockingBackendFactory() override;
243
244 int CreateBackend(net::NetLog* net_log,
245 scoped_ptr<disk_cache::Backend>* backend,
246 const net::CompletionCallback& callback) override;
247
248 // Completes the backend creation. Any blocked call will be notified via the
249 // provided callback.
250 void FinishCreation();
251
252 scoped_ptr<disk_cache::Backend>* backend() { return backend_; }
253 void set_fail(bool fail) { fail_ = fail; }
254
255 const net::CompletionCallback& callback() { return callback_; }
256
257 private:
258 int Result() { return fail_ ? net::ERR_FAILED : net::OK; }
259
260 scoped_ptr<disk_cache::Backend>* backend_;
261 net::CompletionCallback callback_;
262 bool block_;
263 bool fail_;
264 };
265
266 #endif // NET_HTTP_MOCK_HTTP_CACHE_H_
OLDNEW
« no previous file with comments | « net/http/mock_gssapi_library_posix.cc ('k') | net/http/mock_http_cache.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698