[email protected] | c41737d | 2014-05-14 07:47:19 | [diff] [blame] | 1 | // Copyright 2014 The Chromium Authors. All rights reserved. |
license.bot | bf09a50 | 2008-08-24 00:55:55 | [diff] [blame] | 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 4 | |
| 5 | #ifndef NET_HTTP_HTTP_TRANSACTION_UNITTEST_H_ |
| 6 | #define NET_HTTP_HTTP_TRANSACTION_UNITTEST_H_ |
| 7 | |
| 8 | #include "net/http/http_transaction.h" |
| 9 | |
sclittle | fb24989 | 2015-09-10 21:33:22 | [diff] [blame] | 10 | #include <stdint.h> |
| 11 | |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 12 | #include <string> |
| 13 | |
[email protected] | 2041cf34 | 2010-02-19 03:15:59 | [diff] [blame] | 14 | #include "base/callback.h" |
[email protected] | cad155b | 2008-09-23 14:44:27 | [diff] [blame] | 15 | #include "base/compiler_specific.h" |
[email protected] | 5033ab8 | 2013-03-22 20:17:46 | [diff] [blame] | 16 | #include "base/memory/weak_ptr.h" |
[email protected] | 125ef48 | 2013-06-11 18:32:47 | [diff] [blame] | 17 | #include "base/strings/string16.h" |
[email protected] | 74a85ce | 2009-02-12 00:03:19 | [diff] [blame] | 18 | #include "net/base/io_buffer.h" |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 19 | #include "net/base/load_flags.h" |
zhongyi | 48704c18 | 2015-12-07 07:52:02 | [diff] [blame] | 20 | #include "net/base/net_error_details.h" |
[email protected] | d8eb8424 | 2010-09-25 02:25:06 | [diff] [blame] | 21 | #include "net/base/net_errors.h" |
[email protected] | 262eec8 | 2013-03-19 21:01:36 | [diff] [blame] | 22 | #include "net/base/request_priority.h" |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 23 | #include "net/base/test_completion_callback.h" |
| 24 | #include "net/disk_cache/disk_cache.h" |
| 25 | #include "net/http/http_cache.h" |
| 26 | #include "net/http/http_request_info.h" |
[email protected] | 319d9e6f | 2009-02-18 19:47:21 | [diff] [blame] | 27 | #include "net/http/http_response_headers.h" |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 28 | #include "net/http/http_response_info.h" |
eroman | 87c53d6 | 2015-04-02 06:51:07 | [diff] [blame] | 29 | #include "net/log/net_log.h" |
ttuttle | 1f2d7e9 | 2015-04-28 16:17:47 | [diff] [blame] | 30 | #include "net/socket/connection_attempts.h" |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 31 | |
[email protected] | d2db029 | 2011-01-26 20:23:44 | [diff] [blame] | 32 | namespace net { |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 33 | |
[email protected] | 79e1fd6 | 2013-06-20 06:50:04 | [diff] [blame] | 34 | class HttpRequestHeaders; |
[email protected] | d2db029 | 2011-01-26 20:23:44 | [diff] [blame] | 35 | class IOBuffer; |
svaldez | 7872fd0 | 2015-11-19 21:10:54 | [diff] [blame] | 36 | class SSLPrivateKey; |
davidben | 2ec0ed34 | 2015-06-08 21:17:28 | [diff] [blame] | 37 | class X509Certificate; |
[email protected] | 33acd5b | 2014-08-19 19:56:22 | [diff] [blame] | 38 | struct HttpRequestInfo; |
[email protected] | d2db029 | 2011-01-26 20:23:44 | [diff] [blame] | 39 | |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 40 | //----------------------------------------------------------------------------- |
| 41 | // mock transaction data |
| 42 | |
| 43 | // these flags may be combined to form the test_mode field |
| 44 | enum { |
| 45 | TEST_MODE_NORMAL = 0, |
| 46 | TEST_MODE_SYNC_NET_START = 1 << 0, |
| 47 | TEST_MODE_SYNC_NET_READ = 1 << 1, |
| 48 | TEST_MODE_SYNC_CACHE_START = 1 << 2, |
| 49 | TEST_MODE_SYNC_CACHE_READ = 1 << 3, |
[email protected] | 73cae57 | 2009-10-22 18:36:19 | [diff] [blame] | 50 | TEST_MODE_SYNC_CACHE_WRITE = 1 << 4, |
[email protected] | 2227c69 | 2010-05-04 15:36:11 | [diff] [blame] | 51 | TEST_MODE_SYNC_ALL = (TEST_MODE_SYNC_NET_START | TEST_MODE_SYNC_NET_READ | |
| 52 | TEST_MODE_SYNC_CACHE_START | TEST_MODE_SYNC_CACHE_READ | |
[email protected] | 0ede7cc5 | 2014-05-03 03:30:07 | [diff] [blame] | 53 | TEST_MODE_SYNC_CACHE_WRITE), |
| 54 | TEST_MODE_SLOW_READ = 1 << 5 |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 55 | }; |
| 56 | |
asanka | b5fb4b4 | 2016-06-29 11:06:08 | [diff] [blame] | 57 | using MockTransactionReadHandler = int (*)(int64_t content_length, |
| 58 | int64_t offset, |
| 59 | IOBuffer* buf, |
| 60 | int buf_len); |
| 61 | using MockTransactionHandler = void (*)(const HttpRequestInfo* request, |
| 62 | std::string* response_status, |
| 63 | std::string* response_headers, |
| 64 | std::string* response_data); |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 65 | |
| 66 | struct MockTransaction { |
| 67 | const char* url; |
| 68 | const char* method; |
[email protected] | ca2f19e | 2009-09-04 22:53:16 | [diff] [blame] | 69 | // If |request_time| is unspecified, the current time will be used. |
| 70 | base::Time request_time; |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 71 | const char* request_headers; |
| 72 | int load_flags; |
| 73 | const char* status; |
| 74 | const char* response_headers; |
[email protected] | 207d58c7 | 2009-09-04 18:59:29 | [diff] [blame] | 75 | // If |response_time| is unspecified, the current time will be used. |
| 76 | base::Time response_time; |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 77 | const char* data; |
| 78 | int test_mode; |
| 79 | MockTransactionHandler handler; |
asanka | b5fb4b4 | 2016-06-29 11:06:08 | [diff] [blame] | 80 | MockTransactionReadHandler read_handler; |
davidben | 2ec0ed34 | 2015-06-08 21:17:28 | [diff] [blame] | 81 | scoped_refptr<X509Certificate> cert; |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 82 | CertStatus cert_status; |
davidben | 2ec0ed34 | 2015-06-08 21:17:28 | [diff] [blame] | 83 | int ssl_connection_status; |
[email protected] | 2ef5d00e | 2013-03-23 16:17:27 | [diff] [blame] | 84 | // Value returned by MockNetworkTransaction::Start (potentially |
| 85 | // asynchronously if |!(test_mode & TEST_MODE_SYNC_NET_START)|.) |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 86 | Error return_code; |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 87 | }; |
| 88 | |
| 89 | extern const MockTransaction kSimpleGET_Transaction; |
| 90 | extern const MockTransaction kSimplePOST_Transaction; |
| 91 | extern const MockTransaction kTypicalGET_Transaction; |
| 92 | extern const MockTransaction kETagGET_Transaction; |
| 93 | extern const MockTransaction kRangeGET_Transaction; |
| 94 | |
| 95 | // returns the mock transaction for the given URL |
| 96 | const MockTransaction* FindMockTransaction(const GURL& url); |
| 97 | |
| 98 | // Add/Remove a mock transaction that can be accessed via FindMockTransaction. |
| 99 | // There can be only one MockTransaction associated with a given URL. |
| 100 | void AddMockTransaction(const MockTransaction* trans); |
| 101 | void RemoveMockTransaction(const MockTransaction* trans); |
| 102 | |
| 103 | struct ScopedMockTransaction : MockTransaction { |
| 104 | ScopedMockTransaction() { |
| 105 | AddMockTransaction(this); |
| 106 | } |
| 107 | explicit ScopedMockTransaction(const MockTransaction& t) |
| 108 | : MockTransaction(t) { |
| 109 | AddMockTransaction(this); |
| 110 | } |
| 111 | ~ScopedMockTransaction() { |
| 112 | RemoveMockTransaction(this); |
| 113 | } |
| 114 | }; |
| 115 | |
| 116 | //----------------------------------------------------------------------------- |
| 117 | // mock http request |
| 118 | |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 119 | class MockHttpRequest : public HttpRequestInfo { |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 120 | public: |
[email protected] | d2db029 | 2011-01-26 20:23:44 | [diff] [blame] | 121 | explicit MockHttpRequest(const MockTransaction& t); |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 122 | }; |
| 123 | |
| 124 | //----------------------------------------------------------------------------- |
| 125 | // use this class to test completely consuming a transaction |
| 126 | |
[email protected] | b35f629f | 2011-12-23 02:53:32 | [diff] [blame] | 127 | class TestTransactionConsumer { |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 128 | public: |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 129 | TestTransactionConsumer(RequestPriority priority, |
| 130 | HttpTransactionFactory* factory); |
[email protected] | d2db029 | 2011-01-26 20:23:44 | [diff] [blame] | 131 | virtual ~TestTransactionConsumer(); |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 132 | |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 133 | void Start(const HttpRequestInfo* request, const BoundNetLog& net_log); |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 134 | |
| 135 | bool is_done() const { return state_ == DONE; } |
| 136 | int error() const { return error_; } |
| 137 | |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 138 | const HttpResponseInfo* response_info() const { |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 139 | return trans_->GetResponseInfo(); |
| 140 | } |
nharper | d5cddca | 2016-02-27 03:37:52 | [diff] [blame] | 141 | const HttpTransaction* transaction() const { return trans_.get(); } |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 142 | const std::string& content() const { return content_; } |
| 143 | |
| 144 | private: |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 145 | enum State { |
| 146 | IDLE, |
| 147 | STARTING, |
| 148 | READING, |
| 149 | DONE |
[email protected] | d2db029 | 2011-01-26 20:23:44 | [diff] [blame] | 150 | }; |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 151 | |
[email protected] | d2db029 | 2011-01-26 20:23:44 | [diff] [blame] | 152 | void DidStart(int result); |
| 153 | void DidRead(int result); |
| 154 | void DidFinish(int result); |
| 155 | void Read(); |
| 156 | |
[email protected] | b35f629f | 2011-12-23 02:53:32 | [diff] [blame] | 157 | void OnIOComplete(int result); |
[email protected] | d2db029 | 2011-01-26 20:23:44 | [diff] [blame] | 158 | |
| 159 | State state_; |
danakj | 1fd259a0 | 2016-04-16 03:17:09 | [diff] [blame] | 160 | std::unique_ptr<HttpTransaction> trans_; |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 161 | std::string content_; |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 162 | scoped_refptr<IOBuffer> read_buf_; |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 163 | int error_; |
| 164 | |
| 165 | static int quit_counter_; |
| 166 | }; |
| 167 | |
| 168 | //----------------------------------------------------------------------------- |
| 169 | // mock network layer |
| 170 | |
[email protected] | 5c04f72 | 2011-08-12 17:52:47 | [diff] [blame] | 171 | class MockNetworkLayer; |
| 172 | |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 173 | // This transaction class inspects the available set of mock transactions to |
| 174 | // find data for the request URL. It supports IO operations that complete |
| 175 | // synchronously or asynchronously to help exercise different code paths in the |
| 176 | // HttpCache implementation. |
[email protected] | 5033ab8 | 2013-03-22 20:17:46 | [diff] [blame] | 177 | class MockNetworkTransaction |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 178 | : public HttpTransaction, |
[email protected] | 5033ab8 | 2013-03-22 20:17:46 | [diff] [blame] | 179 | public base::SupportsWeakPtr<MockNetworkTransaction> { |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 180 | typedef WebSocketHandshakeStreamBase::CreateHelper CreateHelper; |
| 181 | |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 182 | public: |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 183 | MockNetworkTransaction(RequestPriority priority, MockNetworkLayer* factory); |
dcheng | b03027d | 2014-10-21 12:00:20 | [diff] [blame] | 184 | ~MockNetworkTransaction() override; |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 185 | |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 186 | int Start(const HttpRequestInfo* request, |
| 187 | const CompletionCallback& callback, |
| 188 | const BoundNetLog& net_log) override; |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 189 | |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 190 | int RestartIgnoringLastError(const CompletionCallback& callback) override; |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 191 | |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 192 | int RestartWithCertificate(X509Certificate* client_cert, |
svaldez | 7872fd0 | 2015-11-19 21:10:54 | [diff] [blame] | 193 | SSLPrivateKey* client_private_key, |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 194 | const CompletionCallback& callback) override; |
[email protected] | 0b45559b | 2009-06-12 21:45:11 | [diff] [blame] | 195 | |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 196 | int RestartWithAuth(const AuthCredentials& credentials, |
| 197 | const CompletionCallback& callback) override; |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 198 | |
dcheng | b03027d | 2014-10-21 12:00:20 | [diff] [blame] | 199 | bool IsReadyToRestartForAuth() override; |
[email protected] | 0757e770 | 2009-03-27 04:00:22 | [diff] [blame] | 200 | |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 201 | int Read(IOBuffer* buf, |
dcheng | b03027d | 2014-10-21 12:00:20 | [diff] [blame] | 202 | int buf_len, |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 203 | const CompletionCallback& callback) override; |
zhongyi | 48704c18 | 2015-12-07 07:52:02 | [diff] [blame] | 204 | void PopulateNetErrorDetails(NetErrorDetails* details) const override; |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 205 | |
dcheng | b03027d | 2014-10-21 12:00:20 | [diff] [blame] | 206 | void StopCaching() override; |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 207 | |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 208 | bool GetFullRequestHeaders(HttpRequestHeaders* headers) const override; |
[email protected] | 79e1fd6 | 2013-06-20 06:50:04 | [diff] [blame] | 209 | |
sclittle | 4de1bab9 | 2015-09-22 21:28:24 | [diff] [blame] | 210 | int64_t GetTotalReceivedBytes() const override; |
[email protected] | b8015c4 | 2013-12-24 15:18:19 | [diff] [blame] | 211 | |
sclittle | fb24989 | 2015-09-10 21:33:22 | [diff] [blame] | 212 | int64_t GetTotalSentBytes() const override; |
| 213 | |
dcheng | b03027d | 2014-10-21 12:00:20 | [diff] [blame] | 214 | void DoneReading() override; |
[email protected] | 5c04f72 | 2011-08-12 17:52:47 | [diff] [blame] | 215 | |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 216 | const HttpResponseInfo* GetResponseInfo() const override; |
[email protected] | 9dd90e5 | 2010-02-23 19:15:01 | [diff] [blame] | 217 | |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 218 | LoadState GetLoadState() const override; |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 219 | |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 220 | void SetQuicServerInfo(QuicServerInfo* quic_server_info) override; |
[email protected] | 8cd06c0 | 2014-01-25 07:50:14 | [diff] [blame] | 221 | |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 222 | bool GetLoadTimingInfo(LoadTimingInfo* load_timing_info) const override; |
[email protected] | 58e32bb | 2013-01-21 18:23:25 | [diff] [blame] | 223 | |
ttuttle | d9dbc65 | 2015-09-29 20:00:59 | [diff] [blame] | 224 | bool GetRemoteEndpoint(IPEndPoint* endpoint) const override; |
| 225 | |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 226 | void SetPriority(RequestPriority priority) override; |
[email protected] | 5033ab8 | 2013-03-22 20:17:46 | [diff] [blame] | 227 | |
dcheng | b03027d | 2014-10-21 12:00:20 | [diff] [blame] | 228 | void SetWebSocketHandshakeStreamCreateHelper( |
mostynb | ba063d603 | 2014-10-09 11:01:13 | [diff] [blame] | 229 | CreateHelper* create_helper) override; |
[email protected] | 831e4a3 | 2013-11-14 02:14:44 | [diff] [blame] | 230 | |
dcheng | b03027d | 2014-10-21 12:00:20 | [diff] [blame] | 231 | void SetBeforeNetworkStartCallback( |
mostynb | ba063d603 | 2014-10-09 11:01:13 | [diff] [blame] | 232 | const BeforeNetworkStartCallback& callback) override; |
[email protected] | 1826a40 | 2014-01-08 15:40:48 | [diff] [blame] | 233 | |
ryansturm | 49a8cb1 | 2016-06-15 16:51:09 | [diff] [blame] | 234 | void SetBeforeHeadersSentCallback( |
| 235 | const BeforeHeadersSentCallback& callback) override; |
[email protected] | 597a1ab | 2014-06-26 08:12:27 | [diff] [blame] | 236 | |
dcheng | b03027d | 2014-10-21 12:00:20 | [diff] [blame] | 237 | int ResumeNetworkStart() override; |
[email protected] | 1826a40 | 2014-01-08 15:40:48 | [diff] [blame] | 238 | |
ttuttle | 1f2d7e9 | 2015-04-28 16:17:47 | [diff] [blame] | 239 | void GetConnectionAttempts(ConnectionAttempts* out) const override; |
| 240 | |
[email protected] | 831e4a3 | 2013-11-14 02:14:44 | [diff] [blame] | 241 | CreateHelper* websocket_handshake_stream_create_helper() { |
| 242 | return websocket_handshake_stream_create_helper_; |
| 243 | } |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 244 | RequestPriority priority() const { return priority_; } |
| 245 | const HttpRequestInfo* request() const { return request_; } |
[email protected] | 5033ab8 | 2013-03-22 20:17:46 | [diff] [blame] | 246 | |
sclittle | fb24989 | 2015-09-10 21:33:22 | [diff] [blame] | 247 | // Bogus value that will be returned by GetTotalReceivedBytes() if the |
| 248 | // MockNetworkTransaction was started. |
| 249 | static const int64_t kTotalReceivedBytes; |
| 250 | // Bogus value that will be returned by GetTotalSentBytes() if the |
| 251 | // MockNetworkTransaction was started. |
| 252 | static const int64_t kTotalSentBytes; |
| 253 | |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 254 | private: |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 255 | int StartInternal(const HttpRequestInfo* request, |
| 256 | const CompletionCallback& callback, |
| 257 | const BoundNetLog& net_log); |
| 258 | void CallbackLater(const CompletionCallback& callback, int result); |
| 259 | void RunCallback(const CompletionCallback& callback, int result); |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 260 | |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 261 | const HttpRequestInfo* request_; |
| 262 | HttpResponseInfo response_; |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 263 | std::string data_; |
asanka | b5fb4b4 | 2016-06-29 11:06:08 | [diff] [blame] | 264 | int64_t data_cursor_; |
| 265 | int64_t content_length_; |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 266 | int test_mode_; |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 267 | RequestPriority priority_; |
asanka | b5fb4b4 | 2016-06-29 11:06:08 | [diff] [blame] | 268 | MockTransactionReadHandler read_handler_; |
[email protected] | 831e4a3 | 2013-11-14 02:14:44 | [diff] [blame] | 269 | CreateHelper* websocket_handshake_stream_create_helper_; |
asanka | b5fb4b4 | 2016-06-29 11:06:08 | [diff] [blame] | 270 | BeforeNetworkStartCallback before_network_start_callback_; |
[email protected] | 5c04f72 | 2011-08-12 17:52:47 | [diff] [blame] | 271 | base::WeakPtr<MockNetworkLayer> transaction_factory_; |
sclittle | 4de1bab9 | 2015-09-22 21:28:24 | [diff] [blame] | 272 | int64_t received_bytes_; |
sclittle | fb24989 | 2015-09-10 21:33:22 | [diff] [blame] | 273 | int64_t sent_bytes_; |
[email protected] | 3b23a22 | 2013-05-15 21:33:25 | [diff] [blame] | 274 | |
| 275 | // NetLog ID of the fake / non-existent underlying socket used by the |
| 276 | // connection. Requires Start() be passed a BoundNetLog with a real NetLog to |
| 277 | // be initialized. |
| 278 | unsigned int socket_log_id_; |
kulkarni.a | cd7b446 | 2014-08-28 07:41:34 | [diff] [blame] | 279 | |
xunjieli | 26ede96 | 2015-11-23 19:39:13 | [diff] [blame] | 280 | bool done_reading_called_; |
| 281 | |
kulkarni.a | cd7b446 | 2014-08-28 07:41:34 | [diff] [blame] | 282 | base::WeakPtrFactory<MockNetworkTransaction> weak_factory_; |
| 283 | |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 284 | }; |
| 285 | |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 286 | class MockNetworkLayer : public HttpTransactionFactory, |
[email protected] | 5c04f72 | 2011-08-12 17:52:47 | [diff] [blame] | 287 | public base::SupportsWeakPtr<MockNetworkLayer> { |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 288 | public: |
[email protected] | d2db029 | 2011-01-26 20:23:44 | [diff] [blame] | 289 | MockNetworkLayer(); |
dcheng | b03027d | 2014-10-21 12:00:20 | [diff] [blame] | 290 | ~MockNetworkLayer() override; |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 291 | |
| 292 | int transaction_count() const { return transaction_count_; } |
[email protected] | 5c04f72 | 2011-08-12 17:52:47 | [diff] [blame] | 293 | bool done_reading_called() const { return done_reading_called_; } |
[email protected] | e50efea | 2014-03-24 18:41:00 | [diff] [blame] | 294 | bool stop_caching_called() const { return stop_caching_called_; } |
[email protected] | 5c04f72 | 2011-08-12 17:52:47 | [diff] [blame] | 295 | void TransactionDoneReading(); |
[email protected] | e50efea | 2014-03-24 18:41:00 | [diff] [blame] | 296 | void TransactionStopCaching(); |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 297 | |
asanka | b5fb4b4 | 2016-06-29 11:06:08 | [diff] [blame] | 298 | // Resets the transaction count. Can be called after test setup in order to |
| 299 | // make test expectations independent of how test setup is performed. |
| 300 | void ResetTransactionCount(); |
| 301 | |
[email protected] | 5033ab8 | 2013-03-22 20:17:46 | [diff] [blame] | 302 | // Returns the last priority passed to CreateTransaction, or |
| 303 | // DEFAULT_PRIORITY if it hasn't been called yet. |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 304 | RequestPriority last_create_transaction_priority() const { |
[email protected] | 5033ab8 | 2013-03-22 20:17:46 | [diff] [blame] | 305 | return last_create_transaction_priority_; |
| 306 | } |
| 307 | |
| 308 | // Returns the last transaction created by |
| 309 | // CreateTransaction. Returns a NULL WeakPtr if one has not been |
| 310 | // created yet, or the last transaction has been destroyed, or |
| 311 | // ClearLastTransaction() has been called and a new transaction |
| 312 | // hasn't been created yet. |
| 313 | base::WeakPtr<MockNetworkTransaction> last_transaction() { |
| 314 | return last_transaction_; |
| 315 | } |
| 316 | |
| 317 | // Makes last_transaction() return NULL until the next transaction |
| 318 | // is created. |
| 319 | void ClearLastTransaction() { |
| 320 | last_transaction_.reset(); |
| 321 | } |
| 322 | |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 323 | // HttpTransactionFactory: |
| 324 | int CreateTransaction(RequestPriority priority, |
danakj | 1fd259a0 | 2016-04-16 03:17:09 | [diff] [blame] | 325 | std::unique_ptr<HttpTransaction>* trans) override; |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 326 | HttpCache* GetCache() override; |
| 327 | HttpNetworkSession* GetSession() override; |
[email protected] | d2db029 | 2011-01-26 20:23:44 | [diff] [blame] | 328 | |
jkarlin | fb1d517 | 2015-01-12 14:10:29 | [diff] [blame] | 329 | // The caller must guarantee that |clock| will outlive this object. |
| 330 | void SetClock(base::Clock* clock); |
| 331 | base::Clock* clock() const { return clock_; } |
| 332 | |
| 333 | // The current time (will use clock_ if it is non NULL). |
| 334 | base::Time Now(); |
| 335 | |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 336 | private: |
| 337 | int transaction_count_; |
[email protected] | 5c04f72 | 2011-08-12 17:52:47 | [diff] [blame] | 338 | bool done_reading_called_; |
[email protected] | e50efea | 2014-03-24 18:41:00 | [diff] [blame] | 339 | bool stop_caching_called_; |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 340 | RequestPriority last_create_transaction_priority_; |
jkarlin | fb1d517 | 2015-01-12 14:10:29 | [diff] [blame] | 341 | |
| 342 | // By default clock_ is NULL but it can be set to a custom clock by test |
| 343 | // frameworks using SetClock. |
| 344 | base::Clock* clock_; |
| 345 | |
[email protected] | 5033ab8 | 2013-03-22 20:17:46 | [diff] [blame] | 346 | base::WeakPtr<MockNetworkTransaction> last_transaction_; |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 347 | }; |
| 348 | |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 349 | //----------------------------------------------------------------------------- |
| 350 | // helpers |
| 351 | |
| 352 | // read the transaction completely |
ttuttle | 859dc7a | 2015-04-23 19:42:29 | [diff] [blame] | 353 | int ReadTransaction(HttpTransaction* trans, std::string* result); |
| 354 | |
| 355 | } // namespace net |
initial.commit | 586acc5fe | 2008-07-26 22:42:52 | [diff] [blame] | 356 | |
| 357 | #endif // NET_HTTP_HTTP_TRANSACTION_UNITTEST_H_ |