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

Side by Side Diff: net/ftp/ftp_network_transaction_unittest.cc

Issue 384024: There was confusion in the mock socket classes due to... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « net/flip/flip_network_transaction_unittest.cc ('k') | net/http/http_network_layer_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/ftp/ftp_network_transaction.h" 5 #include "net/ftp/ftp_network_transaction.h"
6 6
7 #include "build/build_config.h" 7 #include "build/build_config.h"
8 8
9 #if defined(OS_WIN) 9 #if defined(OS_WIN)
10 #include <ws2tcpip.h> 10 #include <ws2tcpip.h>
(...skipping 15 matching lines...) Expand all
26 26
27 namespace { 27 namespace {
28 28
29 // Size we use for IOBuffers used to receive data from the test data socket. 29 // Size we use for IOBuffers used to receive data from the test data socket.
30 const int kBufferSize = 128; 30 const int kBufferSize = 128;
31 31
32 } // namespace 32 } // namespace
33 33
34 namespace net { 34 namespace net {
35 35
36 class FtpMockControlSocket : public DynamicMockSocket { 36 class FtpSocketDataProvider : public DynamicSocketDataProvider {
37 public: 37 public:
38 enum State { 38 enum State {
39 NONE, 39 NONE,
40 PRE_USER, 40 PRE_USER,
41 PRE_PASSWD, 41 PRE_PASSWD,
42 PRE_SYST, 42 PRE_SYST,
43 PRE_PWD, 43 PRE_PWD,
44 PRE_TYPE, 44 PRE_TYPE,
45 PRE_PASV, 45 PRE_PASV,
46 PRE_SIZE, 46 PRE_SIZE,
47 PRE_MDTM, 47 PRE_MDTM,
48 PRE_LIST, 48 PRE_LIST,
49 PRE_RETR, 49 PRE_RETR,
50 PRE_PASV2, 50 PRE_PASV2,
51 PRE_CWD, 51 PRE_CWD,
52 PRE_QUIT, 52 PRE_QUIT,
53 QUIT 53 QUIT
54 }; 54 };
55 55
56 FtpMockControlSocket() 56 FtpSocketDataProvider()
57 : failure_injection_state_(NONE), 57 : failure_injection_state_(NONE),
58 multiline_welcome_(false) { 58 multiline_welcome_(false) {
59 Init(); 59 Init();
60 } 60 }
61 61
62 virtual MockWriteResult OnWrite(const std::string& data) { 62 virtual MockWriteResult OnWrite(const std::string& data) {
63 if (InjectFault()) 63 if (InjectFault())
64 return MockWriteResult(true, data.length()); 64 return MockWriteResult(true, data.length());
65 switch (state()) { 65 switch (state()) {
66 case PRE_USER: 66 case PRE_USER:
(...skipping 10 matching lines...) Expand all
77 return Verify("SYST\r\n", data, PRE_PWD, "215 UNIX\r\n"); 77 return Verify("SYST\r\n", data, PRE_PWD, "215 UNIX\r\n");
78 case PRE_PWD: 78 case PRE_PWD:
79 return Verify("PWD\r\n", data, PRE_TYPE, 79 return Verify("PWD\r\n", data, PRE_TYPE,
80 "257 \"/\" is your current location\r\n"); 80 "257 \"/\" is your current location\r\n");
81 case PRE_TYPE: 81 case PRE_TYPE:
82 return Verify("TYPE I\r\n", data, PRE_PASV, 82 return Verify("TYPE I\r\n", data, PRE_PASV,
83 "200 TYPE is now 8-bit binary\r\n"); 83 "200 TYPE is now 8-bit binary\r\n");
84 case PRE_PASV: 84 case PRE_PASV:
85 return Verify("PASV\r\n", data, PRE_SIZE, 85 return Verify("PASV\r\n", data, PRE_SIZE,
86 "227 Entering Passive Mode 127,0,0,1,123,456\r\n"); 86 "227 Entering Passive Mode 127,0,0,1,123,456\r\n");
87 case PRE_PASV2:» 87 case PRE_PASV2:
88 // Parser should also accept format without parentheses.» 88 // Parser should also accept format without parentheses.
89 return Verify("PASV\r\n", data, PRE_CWD,» 89 return Verify("PASV\r\n", data, PRE_CWD,
90 "227 Entering Passive Mode 127,0,0,1,123,456\r\n"); 90 "227 Entering Passive Mode 127,0,0,1,123,456\r\n");
91 case PRE_QUIT: 91 case PRE_QUIT:
92 return Verify("QUIT\r\n", data, QUIT, "221 Goodbye.\r\n"); 92 return Verify("QUIT\r\n", data, QUIT, "221 Goodbye.\r\n");
93 default: 93 default:
94 NOTREACHED() << "State not handled " << state(); 94 NOTREACHED() << "State not handled " << state();
95 return MockWriteResult(true, ERR_UNEXPECTED); 95 return MockWriteResult(true, ERR_UNEXPECTED);
96 } 96 }
97 } 97 }
98 98
99 void InjectFailure(State state, State next_state, const char* response) { 99 void InjectFailure(State state, State next_state, const char* response) {
100 DCHECK_EQ(NONE, failure_injection_state_); 100 DCHECK_EQ(NONE, failure_injection_state_);
101 DCHECK_NE(NONE, state); 101 DCHECK_NE(NONE, state);
102 DCHECK_NE(NONE, next_state); 102 DCHECK_NE(NONE, next_state);
103 DCHECK_NE(state, next_state); 103 DCHECK_NE(state, next_state);
104 failure_injection_state_ = state; 104 failure_injection_state_ = state;
105 failure_injection_next_state_ = next_state; 105 failure_injection_next_state_ = next_state;
106 fault_response_ = response; 106 fault_response_ = response;
107 } 107 }
108 108
109 State state() const { 109 State state() const {
110 return state_; 110 return state_;
111 } 111 }
112 112
113 virtual void Reset() { 113 virtual void Reset() {
114 DynamicMockSocket::Reset(); 114 DynamicSocketDataProvider::Reset();
115 Init(); 115 Init();
116 } 116 }
117 117
118 void set_multiline_welcome(bool multiline) { 118 void set_multiline_welcome(bool multiline) {
119 multiline_welcome_ = multiline; 119 multiline_welcome_ = multiline;
120 } 120 }
121 121
122 protected: 122 protected:
123 void Init() { 123 void Init() {
124 state_ = PRE_USER; 124 state_ = PRE_USER;
(...skipping 25 matching lines...) Expand all
150 150
151 private: 151 private:
152 State state_; 152 State state_;
153 State failure_injection_state_; 153 State failure_injection_state_;
154 State failure_injection_next_state_; 154 State failure_injection_next_state_;
155 const char* fault_response_; 155 const char* fault_response_;
156 156
157 // If true, we will send multiple 230 lines as response after PASS. 157 // If true, we will send multiple 230 lines as response after PASS.
158 bool multiline_welcome_; 158 bool multiline_welcome_;
159 159
160 DISALLOW_COPY_AND_ASSIGN(FtpMockControlSocket); 160 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProvider);
161 }; 161 };
162 162
163 class FtpMockControlSocketDirectoryListing : public FtpMockControlSocket { 163 class FtpSocketDataProviderDirectoryListing : public FtpSocketDataProvider {
164 public: 164 public:
165 FtpMockControlSocketDirectoryListing() { 165 FtpSocketDataProviderDirectoryListing() {
166 } 166 }
167 167
168 virtual MockWriteResult OnWrite(const std::string& data) { 168 virtual MockWriteResult OnWrite(const std::string& data) {
169 if (InjectFault()) 169 if (InjectFault())
170 return MockWriteResult(true, data.length()); 170 return MockWriteResult(true, data.length());
171 switch (state()) { 171 switch (state()) {
172 case PRE_SIZE: 172 case PRE_SIZE:
173 return Verify("SIZE /\r\n", data, PRE_MDTM, 173 return Verify("SIZE /\r\n", data, PRE_MDTM,
174 "550 I can only retrieve regular files\r\n"); 174 "550 I can only retrieve regular files\r\n");
175 case PRE_MDTM: 175 case PRE_MDTM:
176 return Verify("MDTM /\r\n", data, PRE_RETR, 176 return Verify("MDTM /\r\n", data, PRE_RETR,
177 "213 20070221112533\r\n"); 177 "213 20070221112533\r\n");
178 case PRE_RETR: 178 case PRE_RETR:
179 return Verify("RETR /\r\n", data, PRE_PASV2, 179 return Verify("RETR /\r\n", data, PRE_PASV2,
180 "550 Can't download directory\r\n"); 180 "550 Can't download directory\r\n");
181 181
182 case PRE_CWD: 182 case PRE_CWD:
183 return Verify("CWD /\r\n", data, PRE_LIST, "200 OK\r\n"); 183 return Verify("CWD /\r\n", data, PRE_LIST, "200 OK\r\n");
184 case PRE_LIST: 184 case PRE_LIST:
185 // TODO(phajdan.jr): Also test with "150 Accepted Data Connection". 185 // TODO(phajdan.jr): Also test with "150 Accepted Data Connection".
186 return Verify("LIST\r\n", data, PRE_QUIT, "200 OK\r\n"); 186 return Verify("LIST\r\n", data, PRE_QUIT, "200 OK\r\n");
187 default: 187 default:
188 return FtpMockControlSocket::OnWrite(data); 188 return FtpSocketDataProvider::OnWrite(data);
189 } 189 }
190 } 190 }
191 191
192 private: 192 private:
193 DISALLOW_COPY_AND_ASSIGN(FtpMockControlSocketDirectoryListing); 193 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderDirectoryListing);
194 }; 194 };
195 195
196 class FtpMockControlSocketVMSDirectoryListing : public FtpMockControlSocket { 196 class FtpSocketDataProviderVMSDirectoryListing : public FtpSocketDataProvider {
197 public: 197 public:
198 FtpMockControlSocketVMSDirectoryListing() { 198 FtpSocketDataProviderVMSDirectoryListing() {
199 } 199 }
200 200
201 virtual MockWriteResult OnWrite(const std::string& data) { 201 virtual MockWriteResult OnWrite(const std::string& data) {
202 if (InjectFault()) 202 if (InjectFault())
203 return MockWriteResult(true, data.length()); 203 return MockWriteResult(true, data.length());
204 switch (state()) { 204 switch (state()) {
205 case PRE_SYST: 205 case PRE_SYST:
206 return Verify("SYST\r\n", data, PRE_PWD, "215 VMS\r\n"); 206 return Verify("SYST\r\n", data, PRE_PWD, "215 VMS\r\n");
207 case PRE_PWD: 207 case PRE_PWD:
208 return Verify("PWD\r\n", data, PRE_TYPE, 208 return Verify("PWD\r\n", data, PRE_TYPE,
209 "257 \"ANONYMOUS_ROOT:[000000]\"\r\n"); 209 "257 \"ANONYMOUS_ROOT:[000000]\"\r\n");
210 case PRE_SIZE: 210 case PRE_SIZE:
211 return Verify("SIZE ANONYMOUS_ROOT:[000000]dir\r\n", data, PRE_MDTM, 211 return Verify("SIZE ANONYMOUS_ROOT:[000000]dir\r\n", data, PRE_MDTM,
212 "550 I can only retrieve regular files\r\n"); 212 "550 I can only retrieve regular files\r\n");
213 case PRE_MDTM: 213 case PRE_MDTM:
214 return Verify("MDTM ANONYMOUS_ROOT:[000000]dir\r\n", data, PRE_RETR, 214 return Verify("MDTM ANONYMOUS_ROOT:[000000]dir\r\n", data, PRE_RETR,
215 "213 20070221112533\r\n"); 215 "213 20070221112533\r\n");
216 case PRE_RETR: 216 case PRE_RETR:
217 return Verify("RETR ANONYMOUS_ROOT:[000000]dir\r\n", data, PRE_PASV2, 217 return Verify("RETR ANONYMOUS_ROOT:[000000]dir\r\n", data, PRE_PASV2,
218 "550 Can't download directory\r\n"); 218 "550 Can't download directory\r\n");
219 case PRE_CWD: 219 case PRE_CWD:
220 return Verify("CWD ANONYMOUS_ROOT:[dir]\r\n", data, PRE_LIST, 220 return Verify("CWD ANONYMOUS_ROOT:[dir]\r\n", data, PRE_LIST,
221 "200 OK\r\n"); 221 "200 OK\r\n");
222 case PRE_LIST: 222 case PRE_LIST:
223 return Verify("LIST *.*;0\r\n", data, PRE_QUIT, "200 OK\r\n"); 223 return Verify("LIST *.*;0\r\n", data, PRE_QUIT, "200 OK\r\n");
224 default: 224 default:
225 return FtpMockControlSocket::OnWrite(data); 225 return FtpSocketDataProvider::OnWrite(data);
226 } 226 }
227 } 227 }
228 228
229 private: 229 private:
230 DISALLOW_COPY_AND_ASSIGN(FtpMockControlSocketVMSDirectoryListing); 230 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderVMSDirectoryListing);
231 }; 231 };
232 232
233 class FtpMockControlSocketVMSDirectoryListingRootDirectory 233 class FtpSocketDataProviderVMSDirectoryListingRootDirectory
234 : public FtpMockControlSocket { 234 : public FtpSocketDataProvider {
235 public: 235 public:
236 FtpMockControlSocketVMSDirectoryListingRootDirectory() { 236 FtpSocketDataProviderVMSDirectoryListingRootDirectory() {
237 } 237 }
238 238
239 virtual MockWriteResult OnWrite(const std::string& data) { 239 virtual MockWriteResult OnWrite(const std::string& data) {
240 if (InjectFault()) 240 if (InjectFault())
241 return MockWriteResult(true, data.length()); 241 return MockWriteResult(true, data.length());
242 switch (state()) { 242 switch (state()) {
243 case PRE_SYST: 243 case PRE_SYST:
244 return Verify("SYST\r\n", data, PRE_PWD, "215 VMS\r\n"); 244 return Verify("SYST\r\n", data, PRE_PWD, "215 VMS\r\n");
245 case PRE_PWD: 245 case PRE_PWD:
246 return Verify("PWD\r\n", data, PRE_TYPE, 246 return Verify("PWD\r\n", data, PRE_TYPE,
247 "257 \"ANONYMOUS_ROOT:[000000]\"\r\n"); 247 "257 \"ANONYMOUS_ROOT:[000000]\"\r\n");
248 case PRE_SIZE: 248 case PRE_SIZE:
249 return Verify("SIZE ANONYMOUS_ROOT\r\n", data, PRE_MDTM, 249 return Verify("SIZE ANONYMOUS_ROOT\r\n", data, PRE_MDTM,
250 "550 I can only retrieve regular files\r\n"); 250 "550 I can only retrieve regular files\r\n");
251 case PRE_MDTM: 251 case PRE_MDTM:
252 return Verify("MDTM ANONYMOUS_ROOT\r\n", data, PRE_RETR, 252 return Verify("MDTM ANONYMOUS_ROOT\r\n", data, PRE_RETR,
253 "213 20070221112533\r\n"); 253 "213 20070221112533\r\n");
254 case PRE_RETR: 254 case PRE_RETR:
255 return Verify("RETR ANONYMOUS_ROOT\r\n", data, PRE_PASV2, 255 return Verify("RETR ANONYMOUS_ROOT\r\n", data, PRE_PASV2,
256 "550 Can't download directory\r\n"); 256 "550 Can't download directory\r\n");
257 case PRE_CWD: 257 case PRE_CWD:
258 return Verify("CWD ANONYMOUS_ROOT:[000000]\r\n", data, PRE_LIST, 258 return Verify("CWD ANONYMOUS_ROOT:[000000]\r\n", data, PRE_LIST,
259 "200 OK\r\n"); 259 "200 OK\r\n");
260 case PRE_LIST: 260 case PRE_LIST:
261 return Verify("LIST *.*;0\r\n", data, PRE_QUIT, "200 OK\r\n"); 261 return Verify("LIST *.*;0\r\n", data, PRE_QUIT, "200 OK\r\n");
262 default: 262 default:
263 return FtpMockControlSocket::OnWrite(data); 263 return FtpSocketDataProvider::OnWrite(data);
264 } 264 }
265 } 265 }
266 266
267 private: 267 private:
268 DISALLOW_COPY_AND_ASSIGN( 268 DISALLOW_COPY_AND_ASSIGN(
269 FtpMockControlSocketVMSDirectoryListingRootDirectory); 269 FtpSocketDataProviderVMSDirectoryListingRootDirectory);
270 }; 270 };
271 271
272 class FtpMockControlSocketFileDownload : public FtpMockControlSocket { 272 class FtpSocketDataProviderFileDownload : public FtpSocketDataProvider {
273 public: 273 public:
274 FtpMockControlSocketFileDownload() { 274 FtpSocketDataProviderFileDownload() {
275 } 275 }
276 276
277 virtual MockWriteResult OnWrite(const std::string& data) { 277 virtual MockWriteResult OnWrite(const std::string& data) {
278 if (InjectFault()) 278 if (InjectFault())
279 return MockWriteResult(true, data.length()); 279 return MockWriteResult(true, data.length());
280 switch (state()) { 280 switch (state()) {
281 case PRE_SIZE: 281 case PRE_SIZE:
282 return Verify("SIZE /file\r\n", data, PRE_MDTM, 282 return Verify("SIZE /file\r\n", data, PRE_MDTM,
283 "213 18\r\n"); 283 "213 18\r\n");
284 case PRE_MDTM: 284 case PRE_MDTM:
285 return Verify("MDTM /file\r\n", data, PRE_RETR, 285 return Verify("MDTM /file\r\n", data, PRE_RETR,
286 "213 20070221112533\r\n"); 286 "213 20070221112533\r\n");
287 case PRE_RETR: 287 case PRE_RETR:
288 return Verify("RETR /file\r\n", data, PRE_QUIT, "200 OK\r\n"); 288 return Verify("RETR /file\r\n", data, PRE_QUIT, "200 OK\r\n");
289 default: 289 default:
290 return FtpMockControlSocket::OnWrite(data); 290 return FtpSocketDataProvider::OnWrite(data);
291 } 291 }
292 } 292 }
293 293
294 private: 294 private:
295 DISALLOW_COPY_AND_ASSIGN(FtpMockControlSocketFileDownload); 295 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderFileDownload);
296 }; 296 };
297 297
298 class FtpMockControlSocketVMSFileDownload : public FtpMockControlSocket { 298 class FtpSocketDataProviderVMSFileDownload : public FtpSocketDataProvider {
299 public: 299 public:
300 FtpMockControlSocketVMSFileDownload() { 300 FtpSocketDataProviderVMSFileDownload() {
301 } 301 }
302 302
303 virtual MockWriteResult OnWrite(const std::string& data) { 303 virtual MockWriteResult OnWrite(const std::string& data) {
304 if (InjectFault()) 304 if (InjectFault())
305 return MockWriteResult(true, data.length()); 305 return MockWriteResult(true, data.length());
306 switch (state()) { 306 switch (state()) {
307 case PRE_SYST: 307 case PRE_SYST:
308 return Verify("SYST\r\n", data, PRE_PWD, "215 VMS\r\n"); 308 return Verify("SYST\r\n", data, PRE_PWD, "215 VMS\r\n");
309 case PRE_PWD: 309 case PRE_PWD:
310 return Verify("PWD\r\n", data, PRE_TYPE, 310 return Verify("PWD\r\n", data, PRE_TYPE,
311 "257 \"ANONYMOUS_ROOT:[000000]\"\r\n"); 311 "257 \"ANONYMOUS_ROOT:[000000]\"\r\n");
312 case PRE_SIZE: 312 case PRE_SIZE:
313 return Verify("SIZE ANONYMOUS_ROOT:[000000]file\r\n", data, PRE_MDTM, 313 return Verify("SIZE ANONYMOUS_ROOT:[000000]file\r\n", data, PRE_MDTM,
314 "213 18\r\n"); 314 "213 18\r\n");
315 case PRE_MDTM: 315 case PRE_MDTM:
316 return Verify("MDTM ANONYMOUS_ROOT:[000000]file\r\n", data, PRE_RETR, 316 return Verify("MDTM ANONYMOUS_ROOT:[000000]file\r\n", data, PRE_RETR,
317 "213 20070221112533\r\n"); 317 "213 20070221112533\r\n");
318 case PRE_RETR: 318 case PRE_RETR:
319 return Verify("RETR ANONYMOUS_ROOT:[000000]file\r\n", data, PRE_QUIT, 319 return Verify("RETR ANONYMOUS_ROOT:[000000]file\r\n", data, PRE_QUIT,
320 "200 OK\r\n"); 320 "200 OK\r\n");
321 default: 321 default:
322 return FtpMockControlSocket::OnWrite(data); 322 return FtpSocketDataProvider::OnWrite(data);
323 } 323 }
324 } 324 }
325 325
326 private: 326 private:
327 DISALLOW_COPY_AND_ASSIGN(FtpMockControlSocketVMSFileDownload); 327 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderVMSFileDownload);
328 }; 328 };
329 329
330 class FtpMockControlSocketEscaping : public FtpMockControlSocket { 330 class FtpSocketDataProviderEscaping : public FtpSocketDataProvider {
331 public: 331 public:
332 FtpMockControlSocketEscaping() { 332 FtpSocketDataProviderEscaping() {
333 } 333 }
334 334
335 virtual MockWriteResult OnWrite(const std::string& data) { 335 virtual MockWriteResult OnWrite(const std::string& data) {
336 if (InjectFault()) 336 if (InjectFault())
337 return MockWriteResult(true, data.length()); 337 return MockWriteResult(true, data.length());
338 switch (state()) { 338 switch (state()) {
339 case PRE_SIZE: 339 case PRE_SIZE:
340 return Verify("SIZE / !\"#$%y\200\201\r\n", data, PRE_MDTM, 340 return Verify("SIZE / !\"#$%y\200\201\r\n", data, PRE_MDTM,
341 "213 18\r\n"); 341 "213 18\r\n");
342 case PRE_MDTM: 342 case PRE_MDTM:
343 return Verify("MDTM / !\"#$%y\200\201\r\n", data, PRE_RETR, 343 return Verify("MDTM / !\"#$%y\200\201\r\n", data, PRE_RETR,
344 "213 20070221112533\r\n"); 344 "213 20070221112533\r\n");
345 case PRE_RETR: 345 case PRE_RETR:
346 return Verify("RETR / !\"#$%y\200\201\r\n", data, PRE_QUIT, 346 return Verify("RETR / !\"#$%y\200\201\r\n", data, PRE_QUIT,
347 "200 OK\r\n"); 347 "200 OK\r\n");
348 default: 348 default:
349 return FtpMockControlSocket::OnWrite(data); 349 return FtpSocketDataProvider::OnWrite(data);
350 } 350 }
351 } 351 }
352 352
353 private: 353 private:
354 DISALLOW_COPY_AND_ASSIGN(FtpMockControlSocketEscaping); 354 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderEscaping);
355 }; 355 };
356 356
357 class FtpMockControlSocketFileDownloadAcceptedDataConnection 357 class FtpSocketDataProviderFileDownloadAcceptedDataConnection
358 : public FtpMockControlSocketFileDownload { 358 : public FtpSocketDataProviderFileDownload {
359 public: 359 public:
360 FtpMockControlSocketFileDownloadAcceptedDataConnection() { 360 FtpSocketDataProviderFileDownloadAcceptedDataConnection() {
361 } 361 }
362 362
363 virtual MockWriteResult OnWrite(const std::string& data) { 363 virtual MockWriteResult OnWrite(const std::string& data) {
364 if (InjectFault()) 364 if (InjectFault())
365 return MockWriteResult(true, data.length()); 365 return MockWriteResult(true, data.length());
366 switch (state()) { 366 switch (state()) {
367 case PRE_RETR: 367 case PRE_RETR:
368 return Verify("RETR /file\r\n", data, PRE_QUIT, 368 return Verify("RETR /file\r\n", data, PRE_QUIT,
369 "150 Accepted Data Connection\r\n"); 369 "150 Accepted Data Connection\r\n");
370 default: 370 default:
371 return FtpMockControlSocketFileDownload::OnWrite(data); 371 return FtpSocketDataProviderFileDownload::OnWrite(data);
372 } 372 }
373 } 373 }
374 374
375 private: 375 private:
376 DISALLOW_COPY_AND_ASSIGN( 376 DISALLOW_COPY_AND_ASSIGN(
377 FtpMockControlSocketFileDownloadAcceptedDataConnection); 377 FtpSocketDataProviderFileDownloadAcceptedDataConnection);
378 }; 378 };
379 379
380 class FtpMockControlSocketFileDownloadTransferStarting 380 class FtpSocketDataProviderFileDownloadTransferStarting
381 : public FtpMockControlSocketFileDownload { 381 : public FtpSocketDataProviderFileDownload {
382 public: 382 public:
383 FtpMockControlSocketFileDownloadTransferStarting() { 383 FtpSocketDataProviderFileDownloadTransferStarting() {
384 } 384 }
385 385
386 virtual MockWriteResult OnWrite(const std::string& data) { 386 virtual MockWriteResult OnWrite(const std::string& data) {
387 if (InjectFault()) 387 if (InjectFault())
388 return MockWriteResult(true, data.length()); 388 return MockWriteResult(true, data.length());
389 switch (state()) { 389 switch (state()) {
390 case PRE_RETR: 390 case PRE_RETR:
391 return Verify("RETR /file\r\n", data, PRE_QUIT, 391 return Verify("RETR /file\r\n", data, PRE_QUIT,
392 "125-Data connection already open.\r\n" 392 "125-Data connection already open.\r\n"
393 "125 Transfer starting.\r\n" 393 "125 Transfer starting.\r\n"
394 "226 Transfer complete.\r\n"); 394 "226 Transfer complete.\r\n");
395 default: 395 default:
396 return FtpMockControlSocketFileDownload::OnWrite(data); 396 return FtpSocketDataProviderFileDownload::OnWrite(data);
397 } 397 }
398 } 398 }
399 399
400 private: 400 private:
401 DISALLOW_COPY_AND_ASSIGN(FtpMockControlSocketFileDownloadTransferStarting); 401 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderFileDownloadTransferStarting);
402 }; 402 };
403 403
404 class FtpMockControlSocketFileDownloadInvalidResponse 404 class FtpSocketDataProviderFileDownloadInvalidResponse
405 : public FtpMockControlSocketFileDownload { 405 : public FtpSocketDataProviderFileDownload {
406 public: 406 public:
407 FtpMockControlSocketFileDownloadInvalidResponse() { 407 FtpSocketDataProviderFileDownloadInvalidResponse() {
408 } 408 }
409 409
410 virtual MockWriteResult OnWrite(const std::string& data) { 410 virtual MockWriteResult OnWrite(const std::string& data) {
411 if (InjectFault()) 411 if (InjectFault())
412 return MockWriteResult(true, data.length()); 412 return MockWriteResult(true, data.length());
413 switch (state()) { 413 switch (state()) {
414 case PRE_SIZE: 414 case PRE_SIZE:
415 return Verify("SIZE /file\r\n", data, PRE_QUIT, 415 return Verify("SIZE /file\r\n", data, PRE_QUIT,
416 "500 Evil Response\r\n" 416 "500 Evil Response\r\n"
417 "500 More Evil\r\n"); 417 "500 More Evil\r\n");
418 default: 418 default:
419 return FtpMockControlSocketFileDownload::OnWrite(data); 419 return FtpSocketDataProviderFileDownload::OnWrite(data);
420 } 420 }
421 } 421 }
422 422
423 private: 423 private:
424 DISALLOW_COPY_AND_ASSIGN(FtpMockControlSocketFileDownloadInvalidResponse); 424 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderFileDownloadInvalidResponse);
425 }; 425 };
426 426
427 class FtpMockControlSocketFileDownloadRetrFail 427 class FtpSocketDataProviderFileDownloadRetrFail
428 : public FtpMockControlSocketFileDownload { 428 : public FtpSocketDataProviderFileDownload {
429 public: 429 public:
430 FtpMockControlSocketFileDownloadRetrFail() { 430 FtpSocketDataProviderFileDownloadRetrFail() {
431 } 431 }
432 432
433 virtual MockWriteResult OnWrite(const std::string& data) { 433 virtual MockWriteResult OnWrite(const std::string& data) {
434 if (InjectFault()) 434 if (InjectFault())
435 return MockWriteResult(true, data.length()); 435 return MockWriteResult(true, data.length());
436 switch (state()) { 436 switch (state()) {
437 case PRE_CWD: 437 case PRE_CWD:
438 return Verify("CWD /file\r\n", data, PRE_QUIT, 438 return Verify("CWD /file\r\n", data, PRE_QUIT,
439 "550 file is a directory\r\n"); 439 "550 file is a directory\r\n");
440 default: 440 default:
441 return FtpMockControlSocketFileDownload::OnWrite(data); 441 return FtpSocketDataProviderFileDownload::OnWrite(data);
442 } 442 }
443 } 443 }
444 444
445 private: 445 private:
446 DISALLOW_COPY_AND_ASSIGN(FtpMockControlSocketFileDownloadRetrFail); 446 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderFileDownloadRetrFail);
447 }; 447 };
448 448
449 class FtpMockControlSocketEvilPasv : public FtpMockControlSocketFileDownload { 449 class FtpSocketDataProviderEvilPasv : public FtpSocketDataProviderFileDownload {
450 public: 450 public:
451 explicit FtpMockControlSocketEvilPasv(const char* pasv_response, 451 explicit FtpSocketDataProviderEvilPasv(const char* pasv_response,
452 State expected_state) 452 State expected_state)
453 : pasv_response_(pasv_response), 453 : pasv_response_(pasv_response),
454 expected_state_(expected_state) { 454 expected_state_(expected_state) {
455 } 455 }
456 456
457 virtual MockWriteResult OnWrite(const std::string& data) { 457 virtual MockWriteResult OnWrite(const std::string& data) {
458 if (InjectFault()) 458 if (InjectFault())
459 return MockWriteResult(true, data.length()); 459 return MockWriteResult(true, data.length());
460 switch (state()) { 460 switch (state()) {
461 case PRE_PASV: 461 case PRE_PASV:
462 return Verify("PASV\r\n", data, expected_state_, pasv_response_); 462 return Verify("PASV\r\n", data, expected_state_, pasv_response_);
463 default: 463 default:
464 return FtpMockControlSocketFileDownload::OnWrite(data); 464 return FtpSocketDataProviderFileDownload::OnWrite(data);
465 } 465 }
466 } 466 }
467 467
468 private: 468 private:
469 const char* pasv_response_; 469 const char* pasv_response_;
470 const State expected_state_; 470 const State expected_state_;
471 471
472 DISALLOW_COPY_AND_ASSIGN(FtpMockControlSocketEvilPasv); 472 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderEvilPasv);
473 }; 473 };
474 474
475 class FtpMockControlSocketEvilLogin : public FtpMockControlSocketFileDownload { 475 class FtpSocketDataProviderEvilLogin : public FtpSocketDataProviderFileDownload {
476 public: 476 public:
477 FtpMockControlSocketEvilLogin(const char* expected_user, 477 FtpSocketDataProviderEvilLogin(const char* expected_user,
478 const char* expected_password) 478 const char* expected_password)
479 : expected_user_(expected_user), 479 : expected_user_(expected_user),
480 expected_password_(expected_password) { 480 expected_password_(expected_password) {
481 } 481 }
482 482
483 virtual MockWriteResult OnWrite(const std::string& data) { 483 virtual MockWriteResult OnWrite(const std::string& data) {
484 if (InjectFault()) 484 if (InjectFault())
485 return MockWriteResult(true, data.length()); 485 return MockWriteResult(true, data.length());
486 switch (state()) { 486 switch (state()) {
487 case PRE_USER: 487 case PRE_USER:
488 return Verify(std::string("USER ") + expected_user_ + "\r\n", data, 488 return Verify(std::string("USER ") + expected_user_ + "\r\n", data,
489 PRE_PASSWD, "331 Password needed\r\n"); 489 PRE_PASSWD, "331 Password needed\r\n");
490 case PRE_PASSWD: 490 case PRE_PASSWD:
491 return Verify(std::string("PASS ") + expected_password_ + "\r\n", data, 491 return Verify(std::string("PASS ") + expected_password_ + "\r\n", data,
492 PRE_SYST, "230 Welcome\r\n"); 492 PRE_SYST, "230 Welcome\r\n");
493 default: 493 default:
494 return FtpMockControlSocketFileDownload::OnWrite(data); 494 return FtpSocketDataProviderFileDownload::OnWrite(data);
495 } 495 }
496 } 496 }
497 497
498 private: 498 private:
499 const char* expected_user_; 499 const char* expected_user_;
500 const char* expected_password_; 500 const char* expected_password_;
501 501
502 DISALLOW_COPY_AND_ASSIGN(FtpMockControlSocketEvilLogin); 502 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderEvilLogin);
503 }; 503 };
504 504
505 class FtpMockControlSocketCloseConnection : public FtpMockControlSocket { 505 class FtpSocketDataProviderCloseConnection : public FtpSocketDataProvider {
506 public: 506 public:
507 FtpMockControlSocketCloseConnection() { 507 FtpSocketDataProviderCloseConnection() {
508 } 508 }
509 509
510 virtual MockWriteResult OnWrite(const std::string& data) { 510 virtual MockWriteResult OnWrite(const std::string& data) {
511 if (InjectFault()) 511 if (InjectFault())
512 return MockWriteResult(true, data.length()); 512 return MockWriteResult(true, data.length());
513 switch (state()) { 513 switch (state()) {
514 case PRE_USER: 514 case PRE_USER:
515 return Verify("USER anonymous\r\n", data, 515 return Verify("USER anonymous\r\n", data,
516 PRE_QUIT, ""); 516 PRE_QUIT, "");
517 default: 517 default:
518 return FtpMockControlSocket::OnWrite(data); 518 return FtpSocketDataProvider::OnWrite(data);
519 } 519 }
520 } 520 }
521 521
522 private: 522 private:
523 DISALLOW_COPY_AND_ASSIGN(FtpMockControlSocketCloseConnection); 523 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderCloseConnection);
524 }; 524 };
525 525
526 class FtpNetworkTransactionTest : public PlatformTest { 526 class FtpNetworkTransactionTest : public PlatformTest {
527 public: 527 public:
528 FtpNetworkTransactionTest() 528 FtpNetworkTransactionTest()
529 : host_resolver_(new MockHostResolver), 529 : host_resolver_(new MockHostResolver),
530 session_(new FtpNetworkSession(host_resolver_)), 530 session_(new FtpNetworkSession(host_resolver_)),
531 transaction_(session_.get(), &mock_socket_factory_) { 531 transaction_(session_.get(), &mock_socket_factory_) {
532 } 532 }
533 533
534 protected: 534 protected:
535 FtpRequestInfo GetRequestInfo(const std::string& url) { 535 FtpRequestInfo GetRequestInfo(const std::string& url) {
536 FtpRequestInfo info; 536 FtpRequestInfo info;
537 info.url = GURL(url); 537 info.url = GURL(url);
538 return info; 538 return info;
539 } 539 }
540 540
541 void ExecuteTransaction(FtpMockControlSocket* ctrl_socket, 541 void ExecuteTransaction(FtpSocketDataProvider* ctrl_socket,
542 const char* request, 542 const char* request,
543 int expected_result) { 543 int expected_result) {
544 std::string mock_data("mock-data"); 544 std::string mock_data("mock-data");
545 MockRead data_reads[] = { 545 MockRead data_reads[] = {
546 MockRead(mock_data.c_str()), 546 MockRead(mock_data.c_str()),
547 }; 547 };
548 // For compatibility with FileZilla, the transaction code will use two data 548 // For compatibility with FileZilla, the transaction code will use two data
549 // sockets for directory requests. For more info see http://crbug.com/25316. 549 // sockets for directory requests. For more info see http://crbug.com/25316.
550 StaticMockSocket data_socket1(data_reads, NULL); 550 StaticSocketDataProvider data1(data_reads, NULL);
551 StaticMockSocket data_socket2(data_reads, NULL); 551 StaticSocketDataProvider data2(data_reads, NULL);
552 mock_socket_factory_.AddMockSocket(ctrl_socket); 552 mock_socket_factory_.AddSocketDataProvider(ctrl_socket);
553 mock_socket_factory_.AddMockSocket(&data_socket1); 553 mock_socket_factory_.AddSocketDataProvider(&data1);
554 mock_socket_factory_.AddMockSocket(&data_socket2); 554 mock_socket_factory_.AddSocketDataProvider(&data2);
555 FtpRequestInfo request_info = GetRequestInfo(request); 555 FtpRequestInfo request_info = GetRequestInfo(request);
556 EXPECT_EQ(LOAD_STATE_IDLE, transaction_.GetLoadState()); 556 EXPECT_EQ(LOAD_STATE_IDLE, transaction_.GetLoadState());
557 ASSERT_EQ(ERR_IO_PENDING, 557 ASSERT_EQ(ERR_IO_PENDING,
558 transaction_.Start(&request_info, &callback_, NULL)); 558 transaction_.Start(&request_info, &callback_, NULL));
559 EXPECT_NE(LOAD_STATE_IDLE, transaction_.GetLoadState()); 559 EXPECT_NE(LOAD_STATE_IDLE, transaction_.GetLoadState());
560 EXPECT_EQ(expected_result, callback_.WaitForResult()); 560 EXPECT_EQ(expected_result, callback_.WaitForResult());
561 EXPECT_EQ(FtpMockControlSocket::QUIT, ctrl_socket->state()); 561 EXPECT_EQ(FtpSocketDataProvider::QUIT, ctrl_socket->state());
562 if (expected_result == OK) { 562 if (expected_result == OK) {
563 scoped_refptr<IOBuffer> io_buffer(new IOBuffer(kBufferSize)); 563 scoped_refptr<IOBuffer> io_buffer(new IOBuffer(kBufferSize));
564 memset(io_buffer->data(), 0, kBufferSize); 564 memset(io_buffer->data(), 0, kBufferSize);
565 ASSERT_EQ(ERR_IO_PENDING, 565 ASSERT_EQ(ERR_IO_PENDING,
566 transaction_.Read(io_buffer.get(), kBufferSize, &callback_)); 566 transaction_.Read(io_buffer.get(), kBufferSize, &callback_));
567 EXPECT_EQ(static_cast<int>(mock_data.length()), 567 EXPECT_EQ(static_cast<int>(mock_data.length()),
568 callback_.WaitForResult()); 568 callback_.WaitForResult());
569 EXPECT_EQ(mock_data, std::string(io_buffer->data(), mock_data.length())); 569 EXPECT_EQ(mock_data, std::string(io_buffer->data(), mock_data.length()));
570 } 570 }
571 EXPECT_EQ(LOAD_STATE_IDLE, transaction_.GetLoadState()); 571 EXPECT_EQ(LOAD_STATE_IDLE, transaction_.GetLoadState());
572 } 572 }
573 573
574 void TransactionFailHelper(FtpMockControlSocket* ctrl_socket, 574 void TransactionFailHelper(FtpSocketDataProvider* ctrl_socket,
575 const char* request, 575 const char* request,
576 FtpMockControlSocket::State state, 576 FtpSocketDataProvider::State state,
577 FtpMockControlSocket::State next_state, 577 FtpSocketDataProvider::State next_state,
578 const char* response, 578 const char* response,
579 int expected_result) { 579 int expected_result) {
580 ctrl_socket->InjectFailure(state, next_state, response); 580 ctrl_socket->InjectFailure(state, next_state, response);
581 ExecuteTransaction(ctrl_socket, request, expected_result); 581 ExecuteTransaction(ctrl_socket, request, expected_result);
582 } 582 }
583 583
584 scoped_refptr<MockHostResolver> host_resolver_; 584 scoped_refptr<MockHostResolver> host_resolver_;
585 scoped_refptr<FtpNetworkSession> session_; 585 scoped_refptr<FtpNetworkSession> session_;
586 MockClientSocketFactory mock_socket_factory_; 586 MockClientSocketFactory mock_socket_factory_;
587 FtpNetworkTransaction transaction_; 587 FtpNetworkTransaction transaction_;
588 TestCompletionCallback callback_; 588 TestCompletionCallback callback_;
589 }; 589 };
590 590
591 TEST_F(FtpNetworkTransactionTest, FailedLookup) { 591 TEST_F(FtpNetworkTransactionTest, FailedLookup) {
592 FtpRequestInfo request_info = GetRequestInfo("ftp://badhost"); 592 FtpRequestInfo request_info = GetRequestInfo("ftp://badhost");
593 host_resolver_->rules()->AddSimulatedFailure("badhost"); 593 host_resolver_->rules()->AddSimulatedFailure("badhost");
594 EXPECT_EQ(LOAD_STATE_IDLE, transaction_.GetLoadState()); 594 EXPECT_EQ(LOAD_STATE_IDLE, transaction_.GetLoadState());
595 ASSERT_EQ(ERR_IO_PENDING, 595 ASSERT_EQ(ERR_IO_PENDING,
596 transaction_.Start(&request_info, &callback_, NULL)); 596 transaction_.Start(&request_info, &callback_, NULL));
597 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, callback_.WaitForResult()); 597 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, callback_.WaitForResult());
598 EXPECT_EQ(LOAD_STATE_IDLE, transaction_.GetLoadState()); 598 EXPECT_EQ(LOAD_STATE_IDLE, transaction_.GetLoadState());
599 } 599 }
600 600
601 TEST_F(FtpNetworkTransactionTest, DirectoryTransaction) { 601 TEST_F(FtpNetworkTransactionTest, DirectoryTransaction) {
602 FtpMockControlSocketDirectoryListing ctrl_socket; 602 FtpSocketDataProviderDirectoryListing ctrl_socket;
603 ExecuteTransaction(&ctrl_socket, "ftp://host", OK); 603 ExecuteTransaction(&ctrl_socket, "ftp://host", OK);
604 } 604 }
605 605
606 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionMultilineWelcome) { 606 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionMultilineWelcome) {
607 FtpMockControlSocketDirectoryListing ctrl_socket; 607 FtpSocketDataProviderDirectoryListing ctrl_socket;
608 ctrl_socket.set_multiline_welcome(true); 608 ctrl_socket.set_multiline_welcome(true);
609 ExecuteTransaction(&ctrl_socket, "ftp://host", OK); 609 ExecuteTransaction(&ctrl_socket, "ftp://host", OK);
610 } 610 }
611 611
612 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionShortReads2) { 612 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionShortReads2) {
613 FtpMockControlSocketDirectoryListing ctrl_socket; 613 FtpSocketDataProviderDirectoryListing ctrl_socket;
614 ctrl_socket.set_short_read_limit(2); 614 ctrl_socket.set_short_read_limit(2);
615 ExecuteTransaction(&ctrl_socket, "ftp://host", OK); 615 ExecuteTransaction(&ctrl_socket, "ftp://host", OK);
616 } 616 }
617 617
618 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionShortReads5) { 618 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionShortReads5) {
619 FtpMockControlSocketDirectoryListing ctrl_socket; 619 FtpSocketDataProviderDirectoryListing ctrl_socket;
620 ctrl_socket.set_short_read_limit(5); 620 ctrl_socket.set_short_read_limit(5);
621 ExecuteTransaction(&ctrl_socket, "ftp://host", OK); 621 ExecuteTransaction(&ctrl_socket, "ftp://host", OK);
622 } 622 }
623 623
624 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionMultilineWelcomeShort) { 624 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionMultilineWelcomeShort) {
625 FtpMockControlSocketDirectoryListing ctrl_socket; 625 FtpSocketDataProviderDirectoryListing ctrl_socket;
626 // The client will not consume all three 230 lines. That's good, we want to 626 // The client will not consume all three 230 lines. That's good, we want to
627 // test that scenario. 627 // test that scenario.
628 ctrl_socket.allow_unconsumed_reads(true); 628 ctrl_socket.allow_unconsumed_reads(true);
629 ctrl_socket.set_multiline_welcome(true); 629 ctrl_socket.set_multiline_welcome(true);
630 ctrl_socket.set_short_read_limit(5); 630 ctrl_socket.set_short_read_limit(5);
631 ExecuteTransaction(&ctrl_socket, "ftp://host", OK); 631 ExecuteTransaction(&ctrl_socket, "ftp://host", OK);
632 } 632 }
633 633
634 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionVMS) { 634 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionVMS) {
635 FtpMockControlSocketVMSDirectoryListing ctrl_socket; 635 FtpSocketDataProviderVMSDirectoryListing ctrl_socket;
636 ExecuteTransaction(&ctrl_socket, "ftp://host/dir", OK); 636 ExecuteTransaction(&ctrl_socket, "ftp://host/dir", OK);
637 } 637 }
638 638
639 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionVMSRootDirectory) { 639 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionVMSRootDirectory) {
640 FtpMockControlSocketVMSDirectoryListingRootDirectory ctrl_socket; 640 FtpSocketDataProviderVMSDirectoryListingRootDirectory ctrl_socket;
641 ExecuteTransaction(&ctrl_socket, "ftp://host", OK); 641 ExecuteTransaction(&ctrl_socket, "ftp://host", OK);
642 } 642 }
643 643
644 TEST_F(FtpNetworkTransactionTest, DownloadTransaction) { 644 TEST_F(FtpNetworkTransactionTest, DownloadTransaction) {
645 FtpMockControlSocketFileDownload ctrl_socket; 645 FtpSocketDataProviderFileDownload ctrl_socket;
646 ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK); 646 ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK);
647 } 647 }
648 648
649 TEST_F(FtpNetworkTransactionTest, DownloadTransactionMultilineWelcome) { 649 TEST_F(FtpNetworkTransactionTest, DownloadTransactionMultilineWelcome) {
650 FtpMockControlSocketFileDownload ctrl_socket; 650 FtpSocketDataProviderFileDownload ctrl_socket;
651 ctrl_socket.set_multiline_welcome(true); 651 ctrl_socket.set_multiline_welcome(true);
652 ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK); 652 ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK);
653 } 653 }
654 654
655 TEST_F(FtpNetworkTransactionTest, DownloadTransactionShortReads2) { 655 TEST_F(FtpNetworkTransactionTest, DownloadTransactionShortReads2) {
656 FtpMockControlSocketFileDownload ctrl_socket; 656 FtpSocketDataProviderFileDownload ctrl_socket;
657 ctrl_socket.set_short_read_limit(2); 657 ctrl_socket.set_short_read_limit(2);
658 ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK); 658 ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK);
659 } 659 }
660 660
661 TEST_F(FtpNetworkTransactionTest, DownloadTransactionShortReads5) { 661 TEST_F(FtpNetworkTransactionTest, DownloadTransactionShortReads5) {
662 FtpMockControlSocketFileDownload ctrl_socket; 662 FtpSocketDataProviderFileDownload ctrl_socket;
663 ctrl_socket.set_short_read_limit(5); 663 ctrl_socket.set_short_read_limit(5);
664 ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK); 664 ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK);
665 } 665 }
666 666
667 TEST_F(FtpNetworkTransactionTest, DownloadTransactionVMS) { 667 TEST_F(FtpNetworkTransactionTest, DownloadTransactionVMS) {
668 FtpMockControlSocketVMSFileDownload ctrl_socket; 668 FtpSocketDataProviderVMSFileDownload ctrl_socket;
669 ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK); 669 ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK);
670 } 670 }
671 671
672 TEST_F(FtpNetworkTransactionTest, DownloadTransactionAcceptedDataConnection) { 672 TEST_F(FtpNetworkTransactionTest, DownloadTransactionAcceptedDataConnection) {
673 FtpMockControlSocketFileDownloadAcceptedDataConnection ctrl_socket; 673 FtpSocketDataProviderFileDownloadAcceptedDataConnection ctrl_socket;
674 std::string mock_data("mock-data"); 674 std::string mock_data("mock-data");
675 MockRead data_reads[] = { 675 MockRead data_reads[] = {
676 MockRead(mock_data.c_str()), 676 MockRead(mock_data.c_str()),
677 }; 677 };
678 StaticMockSocket data_socket1(data_reads, NULL); 678 StaticSocketDataProvider data_socket1(data_reads, NULL);
679 mock_socket_factory_.AddMockSocket(&ctrl_socket); 679 mock_socket_factory_.AddSocketDataProvider(&ctrl_socket);
680 mock_socket_factory_.AddMockSocket(&data_socket1); 680 mock_socket_factory_.AddSocketDataProvider(&data_socket1);
681 FtpRequestInfo request_info = GetRequestInfo("ftp://host/file"); 681 FtpRequestInfo request_info = GetRequestInfo("ftp://host/file");
682 682
683 // Start the transaction. 683 // Start the transaction.
684 ASSERT_EQ(ERR_IO_PENDING, 684 ASSERT_EQ(ERR_IO_PENDING,
685 transaction_.Start(&request_info, &callback_, NULL)); 685 transaction_.Start(&request_info, &callback_, NULL));
686 EXPECT_EQ(OK, callback_.WaitForResult()); 686 EXPECT_EQ(OK, callback_.WaitForResult());
687 687
688 // The transaction fires the callback when we can start reading data. 688 // The transaction fires the callback when we can start reading data.
689 EXPECT_EQ(FtpMockControlSocket::PRE_QUIT, ctrl_socket.state()); 689 EXPECT_EQ(FtpSocketDataProvider::PRE_QUIT, ctrl_socket.state());
690 EXPECT_EQ(LOAD_STATE_SENDING_REQUEST, transaction_.GetLoadState()); 690 EXPECT_EQ(LOAD_STATE_SENDING_REQUEST, transaction_.GetLoadState());
691 scoped_refptr<IOBuffer> io_buffer(new IOBuffer(kBufferSize)); 691 scoped_refptr<IOBuffer> io_buffer(new IOBuffer(kBufferSize));
692 memset(io_buffer->data(), 0, kBufferSize); 692 memset(io_buffer->data(), 0, kBufferSize);
693 ASSERT_EQ(ERR_IO_PENDING, 693 ASSERT_EQ(ERR_IO_PENDING,
694 transaction_.Read(io_buffer.get(), kBufferSize, &callback_)); 694 transaction_.Read(io_buffer.get(), kBufferSize, &callback_));
695 EXPECT_EQ(LOAD_STATE_READING_RESPONSE, transaction_.GetLoadState()); 695 EXPECT_EQ(LOAD_STATE_READING_RESPONSE, transaction_.GetLoadState());
696 EXPECT_EQ(static_cast<int>(mock_data.length()), 696 EXPECT_EQ(static_cast<int>(mock_data.length()),
697 callback_.WaitForResult()); 697 callback_.WaitForResult());
698 EXPECT_EQ(LOAD_STATE_READING_RESPONSE, transaction_.GetLoadState()); 698 EXPECT_EQ(LOAD_STATE_READING_RESPONSE, transaction_.GetLoadState());
699 EXPECT_EQ(mock_data, std::string(io_buffer->data(), mock_data.length())); 699 EXPECT_EQ(mock_data, std::string(io_buffer->data(), mock_data.length()));
700 700
701 // FTP server should disconnect the data socket. It is also a signal for the 701 // FTP server should disconnect the data socket. It is also a signal for the
702 // FtpNetworkTransaction that the data transfer is finished. 702 // FtpNetworkTransaction that the data transfer is finished.
703 ClientSocket* data_socket = mock_socket_factory_.GetMockTCPClientSocket(1); 703 ClientSocket* data_socket = mock_socket_factory_.GetMockTCPClientSocket(1);
704 ASSERT_TRUE(data_socket); 704 ASSERT_TRUE(data_socket);
705 data_socket->Disconnect(); 705 data_socket->Disconnect();
706 706
707 // We should issue Reads until one returns EOF... 707 // We should issue Reads until one returns EOF...
708 ASSERT_EQ(ERR_IO_PENDING, 708 ASSERT_EQ(ERR_IO_PENDING,
709 transaction_.Read(io_buffer.get(), kBufferSize, &callback_)); 709 transaction_.Read(io_buffer.get(), kBufferSize, &callback_));
710 710
711 // Make sure the transaction finishes cleanly. 711 // Make sure the transaction finishes cleanly.
712 EXPECT_EQ(LOAD_STATE_IDLE, transaction_.GetLoadState()); 712 EXPECT_EQ(LOAD_STATE_IDLE, transaction_.GetLoadState());
713 EXPECT_EQ(OK, callback_.WaitForResult()); 713 EXPECT_EQ(OK, callback_.WaitForResult());
714 EXPECT_EQ(FtpMockControlSocket::QUIT, ctrl_socket.state()); 714 EXPECT_EQ(FtpSocketDataProvider::QUIT, ctrl_socket.state());
715 EXPECT_EQ(LOAD_STATE_IDLE, transaction_.GetLoadState()); 715 EXPECT_EQ(LOAD_STATE_IDLE, transaction_.GetLoadState());
716 } 716 }
717 717
718 TEST_F(FtpNetworkTransactionTest, DownloadTransactionTransferStarting) { 718 TEST_F(FtpNetworkTransactionTest, DownloadTransactionTransferStarting) {
719 FtpMockControlSocketFileDownloadTransferStarting ctrl_socket; 719 FtpSocketDataProviderFileDownloadTransferStarting ctrl_socket;
720 ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK); 720 ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK);
721 } 721 }
722 722
723 TEST_F(FtpNetworkTransactionTest, DownloadTransactionInvalidResponse) { 723 TEST_F(FtpNetworkTransactionTest, DownloadTransactionInvalidResponse) {
724 FtpMockControlSocketFileDownloadInvalidResponse ctrl_socket; 724 FtpSocketDataProviderFileDownloadInvalidResponse ctrl_socket;
725 ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_INVALID_RESPONSE); 725 ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_INVALID_RESPONSE);
726 } 726 }
727 727
728 TEST_F(FtpNetworkTransactionTest, DownloadTransactionEvilPasvUnsafePort1) { 728 TEST_F(FtpNetworkTransactionTest, DownloadTransactionEvilPasvUnsafePort1) {
729 FtpMockControlSocketEvilPasv ctrl_socket("227 Portscan (127,0,0,1,0,22)\r\n", 729 FtpSocketDataProviderEvilPasv ctrl_socket("227 Portscan (127,0,0,1,0,22)\r\n",
730 FtpMockControlSocket::PRE_QUIT); 730 FtpSocketDataProvider::PRE_QUIT);
731 ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_UNSAFE_PORT); 731 ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_UNSAFE_PORT);
732 } 732 }
733 733
734 TEST_F(FtpNetworkTransactionTest, DownloadTransactionEvilPasvUnsafePort2) { 734 TEST_F(FtpNetworkTransactionTest, DownloadTransactionEvilPasvUnsafePort2) {
735 // Still unsafe. 1 * 256 + 2 = 258, which is < 1024. 735 // Still unsafe. 1 * 256 + 2 = 258, which is < 1024.
736 FtpMockControlSocketEvilPasv ctrl_socket("227 Portscan (127,0,0,1,1,2)\r\n", 736 FtpSocketDataProviderEvilPasv ctrl_socket("227 Portscan (127,0,0,1,1,2)\r\n",
737 FtpMockControlSocket::PRE_QUIT); 737 FtpSocketDataProvider::PRE_QUIT);
738 ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_UNSAFE_PORT); 738 ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_UNSAFE_PORT);
739 } 739 }
740 740
741 TEST_F(FtpNetworkTransactionTest, DownloadTransactionEvilPasvUnsafePort3) { 741 TEST_F(FtpNetworkTransactionTest, DownloadTransactionEvilPasvUnsafePort3) {
742 // Still unsafe. 3 * 256 + 4 = 772, which is < 1024. 742 // Still unsafe. 3 * 256 + 4 = 772, which is < 1024.
743 FtpMockControlSocketEvilPasv ctrl_socket("227 Portscan (127,0,0,1,3,4)\r\n", 743 FtpSocketDataProviderEvilPasv ctrl_socket("227 Portscan (127,0,0,1,3,4)\r\n",
744 FtpMockControlSocket::PRE_QUIT); 744 FtpSocketDataProvider::PRE_QUIT);
745 ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_UNSAFE_PORT); 745 ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_UNSAFE_PORT);
746 } 746 }
747 747
748 TEST_F(FtpNetworkTransactionTest, DownloadTransactionEvilPasvUnsafePort4) { 748 TEST_F(FtpNetworkTransactionTest, DownloadTransactionEvilPasvUnsafePort4) {
749 // Unsafe. 8 * 256 + 1 = 2049, which is used by nfs. 749 // Unsafe. 8 * 256 + 1 = 2049, which is used by nfs.
750 FtpMockControlSocketEvilPasv ctrl_socket("227 Portscan (127,0,0,1,8,1)\r\n", 750 FtpSocketDataProviderEvilPasv ctrl_socket("227 Portscan (127,0,0,1,8,1)\r\n",
751 FtpMockControlSocket::PRE_QUIT); 751 FtpSocketDataProvider::PRE_QUIT);
752 ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_UNSAFE_PORT); 752 ExecuteTransaction(&ctrl_socket, "ftp://host/file", ERR_UNSAFE_PORT);
753 } 753 }
754 754
755 TEST_F(FtpNetworkTransactionTest, DownloadTransactionEvilPasvUnsafeHost) { 755 TEST_F(FtpNetworkTransactionTest, DownloadTransactionEvilPasvUnsafeHost) {
756 FtpMockControlSocketEvilPasv ctrl_socket( 756 FtpSocketDataProviderEvilPasv ctrl_socket(
757 "227 Portscan (10,1,2,3,4,123,456)\r\n", FtpMockControlSocket::PRE_SIZE); 757 "227 Portscan (10,1,2,3,4,123,456)\r\n", FtpSocketDataProvider::PRE_SIZE);
758 std::string mock_data("mock-data"); 758 std::string mock_data("mock-data");
759 MockRead data_reads[] = { 759 MockRead data_reads[] = {
760 MockRead(mock_data.c_str()), 760 MockRead(mock_data.c_str()),
761 }; 761 };
762 StaticMockSocket data_socket1(data_reads, NULL); 762 StaticSocketDataProvider data_socket1(data_reads, NULL);
763 mock_socket_factory_.AddMockSocket(&ctrl_socket); 763 mock_socket_factory_.AddSocketDataProvider(&ctrl_socket);
764 mock_socket_factory_.AddMockSocket(&data_socket1); 764 mock_socket_factory_.AddSocketDataProvider(&data_socket1);
765 FtpRequestInfo request_info = GetRequestInfo("ftp://host/file"); 765 FtpRequestInfo request_info = GetRequestInfo("ftp://host/file");
766 766
767 // Start the transaction. 767 // Start the transaction.
768 ASSERT_EQ(ERR_IO_PENDING, 768 ASSERT_EQ(ERR_IO_PENDING,
769 transaction_.Start(&request_info, &callback_, NULL)); 769 transaction_.Start(&request_info, &callback_, NULL));
770 EXPECT_EQ(OK, callback_.WaitForResult()); 770 EXPECT_EQ(OK, callback_.WaitForResult());
771 771
772 // The transaction fires the callback when we can start reading data. That 772 // The transaction fires the callback when we can start reading data. That
773 // means that the data socket should be open. 773 // means that the data socket should be open.
774 MockTCPClientSocket* data_socket = 774 MockTCPClientSocket* data_socket =
775 mock_socket_factory_.GetMockTCPClientSocket(1); 775 mock_socket_factory_.GetMockTCPClientSocket(1);
776 ASSERT_TRUE(data_socket); 776 ASSERT_TRUE(data_socket);
777 ASSERT_TRUE(data_socket->IsConnected()); 777 ASSERT_TRUE(data_socket->IsConnected());
778 778
779 // Even if the PASV response specified some other address, we connect 779 // Even if the PASV response specified some other address, we connect
780 // to the address we used for control connection. 780 // to the address we used for control connection.
781 EXPECT_EQ("127.0.0.1", NetAddressToString(data_socket->addresses().head())); 781 EXPECT_EQ("127.0.0.1", NetAddressToString(data_socket->addresses().head()));
782 782
783 // Make sure we have only one host entry in the AddressList. 783 // Make sure we have only one host entry in the AddressList.
784 EXPECT_FALSE(data_socket->addresses().head()->ai_next); 784 EXPECT_FALSE(data_socket->addresses().head()->ai_next);
785 } 785 }
786 786
787 TEST_F(FtpNetworkTransactionTest, DownloadTransactionEvilLoginBadUsername) { 787 TEST_F(FtpNetworkTransactionTest, DownloadTransactionEvilLoginBadUsername) {
788 FtpMockControlSocketEvilLogin ctrl_socket("hello%0Aworld", "test"); 788 FtpSocketDataProviderEvilLogin ctrl_socket("hello%0Aworld", "test");
789 ExecuteTransaction(&ctrl_socket, "ftp://hello%0Aworld:test@host/file", OK); 789 ExecuteTransaction(&ctrl_socket, "ftp://hello%0Aworld:test@host/file", OK);
790 } 790 }
791 791
792 TEST_F(FtpNetworkTransactionTest, DownloadTransactionEvilLoginBadPassword) { 792 TEST_F(FtpNetworkTransactionTest, DownloadTransactionEvilLoginBadPassword) {
793 FtpMockControlSocketEvilLogin ctrl_socket("test", "hello%0Dworld"); 793 FtpSocketDataProviderEvilLogin ctrl_socket("test", "hello%0Dworld");
794 ExecuteTransaction(&ctrl_socket, "ftp://test:hello%0Dworld@host/file", OK); 794 ExecuteTransaction(&ctrl_socket, "ftp://test:hello%0Dworld@host/file", OK);
795 } 795 }
796 796
797 TEST_F(FtpNetworkTransactionTest, DownloadTransactionSpaceInLogin) { 797 TEST_F(FtpNetworkTransactionTest, DownloadTransactionSpaceInLogin) {
798 FtpMockControlSocketEvilLogin ctrl_socket("hello world", "test"); 798 FtpSocketDataProviderEvilLogin ctrl_socket("hello world", "test");
799 ExecuteTransaction(&ctrl_socket, "ftp://hello%20world:test@host/file", OK); 799 ExecuteTransaction(&ctrl_socket, "ftp://hello%20world:test@host/file", OK);
800 } 800 }
801 801
802 TEST_F(FtpNetworkTransactionTest, DownloadTransactionSpaceInPassword) { 802 TEST_F(FtpNetworkTransactionTest, DownloadTransactionSpaceInPassword) {
803 FtpMockControlSocketEvilLogin ctrl_socket("test", "hello world"); 803 FtpSocketDataProviderEvilLogin ctrl_socket("test", "hello world");
804 ExecuteTransaction(&ctrl_socket, "ftp://test:hello%20world@host/file", OK); 804 ExecuteTransaction(&ctrl_socket, "ftp://test:hello%20world@host/file", OK);
805 } 805 }
806 806
807 TEST_F(FtpNetworkTransactionTest, EvilRestartUser) { 807 TEST_F(FtpNetworkTransactionTest, EvilRestartUser) {
808 FtpMockControlSocket ctrl_socket1; 808 FtpSocketDataProvider ctrl_socket1;
809 ctrl_socket1.InjectFailure(FtpMockControlSocket::PRE_PASSWD, 809 ctrl_socket1.InjectFailure(FtpSocketDataProvider::PRE_PASSWD,
810 FtpMockControlSocket::PRE_QUIT, 810 FtpSocketDataProvider::PRE_QUIT,
811 "530 Login authentication failed\r\n"); 811 "530 Login authentication failed\r\n");
812 mock_socket_factory_.AddMockSocket(&ctrl_socket1); 812 mock_socket_factory_.AddSocketDataProvider(&ctrl_socket1);
813 813
814 FtpRequestInfo request_info = GetRequestInfo("ftp://host/file"); 814 FtpRequestInfo request_info = GetRequestInfo("ftp://host/file");
815 815
816 ASSERT_EQ(ERR_IO_PENDING, 816 ASSERT_EQ(ERR_IO_PENDING,
817 transaction_.Start(&request_info, &callback_, NULL)); 817 transaction_.Start(&request_info, &callback_, NULL));
818 EXPECT_EQ(ERR_FAILED, callback_.WaitForResult()); 818 EXPECT_EQ(ERR_FAILED, callback_.WaitForResult());
819 819
820 MockRead ctrl_reads[] = { 820 MockRead ctrl_reads[] = {
821 MockRead("220 host TestFTPd\r\n"), 821 MockRead("220 host TestFTPd\r\n"),
822 MockRead("221 Goodbye!\r\n"), 822 MockRead("221 Goodbye!\r\n"),
823 MockRead(false, OK), 823 MockRead(false, OK),
824 }; 824 };
825 MockWrite ctrl_writes[] = { 825 MockWrite ctrl_writes[] = {
826 MockWrite("QUIT\r\n"), 826 MockWrite("QUIT\r\n"),
827 }; 827 };
828 StaticMockSocket ctrl_socket2(ctrl_reads, ctrl_writes); 828 StaticSocketDataProvider ctrl_socket2(ctrl_reads, ctrl_writes);
829 mock_socket_factory_.AddMockSocket(&ctrl_socket2); 829 mock_socket_factory_.AddSocketDataProvider(&ctrl_socket2);
830 ASSERT_EQ(ERR_IO_PENDING, transaction_.RestartWithAuth(L"foo\nownz0red", 830 ASSERT_EQ(ERR_IO_PENDING, transaction_.RestartWithAuth(L"foo\nownz0red",
831 L"innocent", 831 L"innocent",
832 &callback_)); 832 &callback_));
833 EXPECT_EQ(ERR_MALFORMED_IDENTITY, callback_.WaitForResult()); 833 EXPECT_EQ(ERR_MALFORMED_IDENTITY, callback_.WaitForResult());
834 } 834 }
835 835
836 TEST_F(FtpNetworkTransactionTest, EvilRestartPassword) { 836 TEST_F(FtpNetworkTransactionTest, EvilRestartPassword) {
837 FtpMockControlSocket ctrl_socket1; 837 FtpSocketDataProvider ctrl_socket1;
838 ctrl_socket1.InjectFailure(FtpMockControlSocket::PRE_PASSWD, 838 ctrl_socket1.InjectFailure(FtpSocketDataProvider::PRE_PASSWD,
839 FtpMockControlSocket::PRE_QUIT, 839 FtpSocketDataProvider::PRE_QUIT,
840 "530 Login authentication failed\r\n"); 840 "530 Login authentication failed\r\n");
841 mock_socket_factory_.AddMockSocket(&ctrl_socket1); 841 mock_socket_factory_.AddSocketDataProvider(&ctrl_socket1);
842 842
843 FtpRequestInfo request_info = GetRequestInfo("ftp://host/file"); 843 FtpRequestInfo request_info = GetRequestInfo("ftp://host/file");
844 844
845 ASSERT_EQ(ERR_IO_PENDING, 845 ASSERT_EQ(ERR_IO_PENDING,
846 transaction_.Start(&request_info, &callback_, NULL)); 846 transaction_.Start(&request_info, &callback_, NULL));
847 EXPECT_EQ(ERR_FAILED, callback_.WaitForResult()); 847 EXPECT_EQ(ERR_FAILED, callback_.WaitForResult());
848 848
849 MockRead ctrl_reads[] = { 849 MockRead ctrl_reads[] = {
850 MockRead("220 host TestFTPd\r\n"), 850 MockRead("220 host TestFTPd\r\n"),
851 MockRead("331 User okay, send password\r\n"), 851 MockRead("331 User okay, send password\r\n"),
852 MockRead("221 Goodbye!\r\n"), 852 MockRead("221 Goodbye!\r\n"),
853 MockRead(false, OK), 853 MockRead(false, OK),
854 }; 854 };
855 MockWrite ctrl_writes[] = { 855 MockWrite ctrl_writes[] = {
856 MockWrite("USER innocent\r\n"), 856 MockWrite("USER innocent\r\n"),
857 MockWrite("QUIT\r\n"), 857 MockWrite("QUIT\r\n"),
858 }; 858 };
859 StaticMockSocket ctrl_socket2(ctrl_reads, ctrl_writes); 859 StaticSocketDataProvider ctrl_socket2(ctrl_reads, ctrl_writes);
860 mock_socket_factory_.AddMockSocket(&ctrl_socket2); 860 mock_socket_factory_.AddSocketDataProvider(&ctrl_socket2);
861 ASSERT_EQ(ERR_IO_PENDING, transaction_.RestartWithAuth(L"innocent", 861 ASSERT_EQ(ERR_IO_PENDING, transaction_.RestartWithAuth(L"innocent",
862 L"foo\nownz0red", 862 L"foo\nownz0red",
863 &callback_)); 863 &callback_));
864 EXPECT_EQ(ERR_MALFORMED_IDENTITY, callback_.WaitForResult()); 864 EXPECT_EQ(ERR_MALFORMED_IDENTITY, callback_.WaitForResult());
865 } 865 }
866 866
867 TEST_F(FtpNetworkTransactionTest, Escaping) { 867 TEST_F(FtpNetworkTransactionTest, Escaping) {
868 FtpMockControlSocketEscaping ctrl_socket; 868 FtpSocketDataProviderEscaping ctrl_socket;
869 ExecuteTransaction(&ctrl_socket, "ftp://host/%20%21%22%23%24%25%79%80%81", 869 ExecuteTransaction(&ctrl_socket, "ftp://host/%20%21%22%23%24%25%79%80%81",
870 OK); 870 OK);
871 } 871 }
872 872
873 // Regression test for http://crbug.com/25023. 873 // Regression test for http://crbug.com/25023.
874 TEST_F(FtpNetworkTransactionTest, CloseConnection) { 874 TEST_F(FtpNetworkTransactionTest, CloseConnection) {
875 FtpMockControlSocketCloseConnection ctrl_socket; 875 FtpSocketDataProviderCloseConnection ctrl_socket;
876 ExecuteTransaction(&ctrl_socket, "ftp://host", ERR_EMPTY_RESPONSE); 876 ExecuteTransaction(&ctrl_socket, "ftp://host", ERR_EMPTY_RESPONSE);
877 } 877 }
878 878
879 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailUser) { 879 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailUser) {
880 FtpMockControlSocketDirectoryListing ctrl_socket; 880 FtpSocketDataProviderDirectoryListing ctrl_socket;
881 TransactionFailHelper(&ctrl_socket, 881 TransactionFailHelper(&ctrl_socket,
882 "ftp://host", 882 "ftp://host",
883 FtpMockControlSocket::PRE_USER, 883 FtpSocketDataProvider::PRE_USER,
884 FtpMockControlSocket::PRE_QUIT, 884 FtpSocketDataProvider::PRE_QUIT,
885 "500 no such user\r\n", 885 "500 no such user\r\n",
886 ERR_FAILED); 886 ERR_FAILED);
887 } 887 }
888 888
889 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailPass) { 889 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailPass) {
890 FtpMockControlSocketDirectoryListing ctrl_socket; 890 FtpSocketDataProviderDirectoryListing ctrl_socket;
891 TransactionFailHelper(&ctrl_socket, 891 TransactionFailHelper(&ctrl_socket,
892 "ftp://host", 892 "ftp://host",
893 FtpMockControlSocket::PRE_PASSWD, 893 FtpSocketDataProvider::PRE_PASSWD,
894 FtpMockControlSocket::PRE_QUIT, 894 FtpSocketDataProvider::PRE_QUIT,
895 "530 Login authentication failed\r\n", 895 "530 Login authentication failed\r\n",
896 ERR_FAILED); 896 ERR_FAILED);
897 } 897 }
898 898
899 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailSyst) { 899 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailSyst) {
900 FtpMockControlSocketDirectoryListing ctrl_socket; 900 FtpSocketDataProviderDirectoryListing ctrl_socket;
901 TransactionFailHelper(&ctrl_socket, 901 TransactionFailHelper(&ctrl_socket,
902 "ftp://host", 902 "ftp://host",
903 FtpMockControlSocket::PRE_SYST, 903 FtpSocketDataProvider::PRE_SYST,
904 FtpMockControlSocket::PRE_PWD, 904 FtpSocketDataProvider::PRE_PWD,
905 "500 failed syst\r\n", 905 "500 failed syst\r\n",
906 OK); 906 OK);
907 } 907 }
908 908
909 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailPwd) { 909 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailPwd) {
910 FtpMockControlSocketDirectoryListing ctrl_socket; 910 FtpSocketDataProviderDirectoryListing ctrl_socket;
911 TransactionFailHelper(&ctrl_socket, 911 TransactionFailHelper(&ctrl_socket,
912 "ftp://host", 912 "ftp://host",
913 FtpMockControlSocket::PRE_PWD, 913 FtpSocketDataProvider::PRE_PWD,
914 FtpMockControlSocket::PRE_QUIT, 914 FtpSocketDataProvider::PRE_QUIT,
915 "500 failed pwd\r\n", 915 "500 failed pwd\r\n",
916 ERR_FAILED); 916 ERR_FAILED);
917 } 917 }
918 918
919 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailType) { 919 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailType) {
920 FtpMockControlSocketDirectoryListing ctrl_socket; 920 FtpSocketDataProviderDirectoryListing ctrl_socket;
921 TransactionFailHelper(&ctrl_socket, 921 TransactionFailHelper(&ctrl_socket,
922 "ftp://host", 922 "ftp://host",
923 FtpMockControlSocket::PRE_TYPE, 923 FtpSocketDataProvider::PRE_TYPE,
924 FtpMockControlSocket::PRE_QUIT, 924 FtpSocketDataProvider::PRE_QUIT,
925 "500 failed type\r\n", 925 "500 failed type\r\n",
926 ERR_FAILED); 926 ERR_FAILED);
927 } 927 }
928 928
929 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailPasv) { 929 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailPasv) {
930 FtpMockControlSocketDirectoryListing ctrl_socket; 930 FtpSocketDataProviderDirectoryListing ctrl_socket;
931 TransactionFailHelper(&ctrl_socket, 931 TransactionFailHelper(&ctrl_socket,
932 "ftp://host", 932 "ftp://host",
933 FtpMockControlSocket::PRE_PASV, 933 FtpSocketDataProvider::PRE_PASV,
934 FtpMockControlSocket::PRE_QUIT, 934 FtpSocketDataProvider::PRE_QUIT,
935 "500 failed pasv\r\n", 935 "500 failed pasv\r\n",
936 ERR_FAILED); 936 ERR_FAILED);
937 } 937 }
938 938
939 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionMalformedMdtm) { 939 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionMalformedMdtm) {
940 FtpMockControlSocketDirectoryListing ctrl_socket; 940 FtpSocketDataProviderDirectoryListing ctrl_socket;
941 TransactionFailHelper(&ctrl_socket, 941 TransactionFailHelper(&ctrl_socket,
942 "ftp://host", 942 "ftp://host",
943 FtpMockControlSocket::PRE_MDTM, 943 FtpSocketDataProvider::PRE_MDTM,
944 FtpMockControlSocket::PRE_RETR, 944 FtpSocketDataProvider::PRE_RETR,
945 "213 foobar\r\n", 945 "213 foobar\r\n",
946 OK); 946 OK);
947 } 947 }
948 948
949 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailMdtm) { 949 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailMdtm) {
950 FtpMockControlSocketDirectoryListing ctrl_socket; 950 FtpSocketDataProviderDirectoryListing ctrl_socket;
951 TransactionFailHelper(&ctrl_socket, 951 TransactionFailHelper(&ctrl_socket,
952 "ftp://host", 952 "ftp://host",
953 FtpMockControlSocket::PRE_MDTM, 953 FtpSocketDataProvider::PRE_MDTM,
954 FtpMockControlSocket::PRE_RETR, 954 FtpSocketDataProvider::PRE_RETR,
955 "500 failed mdtm\r\n", 955 "500 failed mdtm\r\n",
956 OK); 956 OK);
957 } 957 }
958 958
959 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailPasv2) { 959 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailPasv2) {
960 FtpMockControlSocketDirectoryListing ctrl_socket; 960 FtpSocketDataProviderDirectoryListing ctrl_socket;
961 TransactionFailHelper(&ctrl_socket, 961 TransactionFailHelper(&ctrl_socket,
962 "ftp://host", 962 "ftp://host",
963 FtpMockControlSocket::PRE_PASV2, 963 FtpSocketDataProvider::PRE_PASV2,
964 FtpMockControlSocket::PRE_QUIT, 964 FtpSocketDataProvider::PRE_QUIT,
965 "500 failed pasv2\r\n", 965 "500 failed pasv2\r\n",
966 ERR_FAILED); 966 ERR_FAILED);
967 } 967 }
968 968
969 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailCwd) { 969 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailCwd) {
970 FtpMockControlSocketDirectoryListing ctrl_socket; 970 FtpSocketDataProviderDirectoryListing ctrl_socket;
971 TransactionFailHelper(&ctrl_socket, 971 TransactionFailHelper(&ctrl_socket,
972 "ftp://host", 972 "ftp://host",
973 FtpMockControlSocket::PRE_CWD, 973 FtpSocketDataProvider::PRE_CWD,
974 FtpMockControlSocket::PRE_QUIT, 974 FtpSocketDataProvider::PRE_QUIT,
975 "500 failed cwd\r\n", 975 "500 failed cwd\r\n",
976 ERR_FAILED); 976 ERR_FAILED);
977 } 977 }
978 978
979 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFileNotFound) { 979 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFileNotFound) {
980 FtpMockControlSocketDirectoryListing ctrl_socket; 980 FtpSocketDataProviderDirectoryListing ctrl_socket;
981 TransactionFailHelper(&ctrl_socket, 981 TransactionFailHelper(&ctrl_socket,
982 "ftp://host", 982 "ftp://host",
983 FtpMockControlSocket::PRE_CWD, 983 FtpSocketDataProvider::PRE_CWD,
984 FtpMockControlSocket::PRE_QUIT, 984 FtpSocketDataProvider::PRE_QUIT,
985 "550 cannot open file\r\n", 985 "550 cannot open file\r\n",
986 ERR_FILE_NOT_FOUND); 986 ERR_FILE_NOT_FOUND);
987 } 987 }
988 988
989 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailList) { 989 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailList) {
990 FtpMockControlSocketDirectoryListing ctrl_socket; 990 FtpSocketDataProviderDirectoryListing ctrl_socket;
991 TransactionFailHelper(&ctrl_socket, 991 TransactionFailHelper(&ctrl_socket,
992 "ftp://host", 992 "ftp://host",
993 FtpMockControlSocket::PRE_LIST, 993 FtpSocketDataProvider::PRE_LIST,
994 FtpMockControlSocket::PRE_QUIT, 994 FtpSocketDataProvider::PRE_QUIT,
995 "500 failed list\r\n", 995 "500 failed list\r\n",
996 ERR_FAILED); 996 ERR_FAILED);
997 } 997 }
998 998
999 TEST_F(FtpNetworkTransactionTest, DownloadTransactionFailUser) { 999 TEST_F(FtpNetworkTransactionTest, DownloadTransactionFailUser) {
1000 FtpMockControlSocketFileDownload ctrl_socket; 1000 FtpSocketDataProviderFileDownload ctrl_socket;
1001 TransactionFailHelper(&ctrl_socket, 1001 TransactionFailHelper(&ctrl_socket,
1002 "ftp://host/file", 1002 "ftp://host/file",
1003 FtpMockControlSocket::PRE_USER, 1003 FtpSocketDataProvider::PRE_USER,
1004 FtpMockControlSocket::PRE_QUIT, 1004 FtpSocketDataProvider::PRE_QUIT,
1005 "500 no such user\r\n", 1005 "500 no such user\r\n",
1006 ERR_FAILED); 1006 ERR_FAILED);
1007 } 1007 }
1008 1008
1009 TEST_F(FtpNetworkTransactionTest, DownloadTransactionFailPass) { 1009 TEST_F(FtpNetworkTransactionTest, DownloadTransactionFailPass) {
1010 FtpMockControlSocketFileDownload ctrl_socket; 1010 FtpSocketDataProviderFileDownload ctrl_socket;
1011 TransactionFailHelper(&ctrl_socket, 1011 TransactionFailHelper(&ctrl_socket,
1012 "ftp://host/file", 1012 "ftp://host/file",
1013 FtpMockControlSocket::PRE_PASSWD, 1013 FtpSocketDataProvider::PRE_PASSWD,
1014 FtpMockControlSocket::PRE_QUIT, 1014 FtpSocketDataProvider::PRE_QUIT,
1015 "530 Login authentication failed\r\n", 1015 "530 Login authentication failed\r\n",
1016 ERR_FAILED); 1016 ERR_FAILED);
1017 } 1017 }
1018 1018
1019 TEST_F(FtpNetworkTransactionTest, DownloadTransactionFailSyst) { 1019 TEST_F(FtpNetworkTransactionTest, DownloadTransactionFailSyst) {
1020 FtpMockControlSocketFileDownload ctrl_socket; 1020 FtpSocketDataProviderFileDownload ctrl_socket;
1021 TransactionFailHelper(&ctrl_socket, 1021 TransactionFailHelper(&ctrl_socket,
1022 "ftp://host/file", 1022 "ftp://host/file",
1023 FtpMockControlSocket::PRE_SYST, 1023 FtpSocketDataProvider::PRE_SYST,
1024 FtpMockControlSocket::PRE_PWD, 1024 FtpSocketDataProvider::PRE_PWD,
1025 "500 failed syst\r\n", 1025 "500 failed syst\r\n",
1026 OK); 1026 OK);
1027 } 1027 }
1028 1028
1029 TEST_F(FtpNetworkTransactionTest, DownloadTransactionFailPwd) { 1029 TEST_F(FtpNetworkTransactionTest, DownloadTransactionFailPwd) {
1030 FtpMockControlSocketFileDownload ctrl_socket; 1030 FtpSocketDataProviderFileDownload ctrl_socket;
1031 TransactionFailHelper(&ctrl_socket, 1031 TransactionFailHelper(&ctrl_socket,
1032 "ftp://host/file", 1032 "ftp://host/file",
1033 FtpMockControlSocket::PRE_PWD, 1033 FtpSocketDataProvider::PRE_PWD,
1034 FtpMockControlSocket::PRE_QUIT, 1034 FtpSocketDataProvider::PRE_QUIT,
1035 "500 failed pwd\r\n", 1035 "500 failed pwd\r\n",
1036 ERR_FAILED); 1036 ERR_FAILED);
1037 } 1037 }
1038 1038
1039 TEST_F(FtpNetworkTransactionTest, DownloadTransactionFailType) { 1039 TEST_F(FtpNetworkTransactionTest, DownloadTransactionFailType) {
1040 FtpMockControlSocketFileDownload ctrl_socket; 1040 FtpSocketDataProviderFileDownload ctrl_socket;
1041 TransactionFailHelper(&ctrl_socket, 1041 TransactionFailHelper(&ctrl_socket,
1042 "ftp://host/file", 1042 "ftp://host/file",
1043 FtpMockControlSocket::PRE_TYPE, 1043 FtpSocketDataProvider::PRE_TYPE,
1044 FtpMockControlSocket::PRE_QUIT, 1044 FtpSocketDataProvider::PRE_QUIT,
1045 "500 failed type\r\n", 1045 "500 failed type\r\n",
1046 ERR_FAILED); 1046 ERR_FAILED);
1047 } 1047 }
1048 1048
1049 TEST_F(FtpNetworkTransactionTest, DownloadTransactionFailPasv) { 1049 TEST_F(FtpNetworkTransactionTest, DownloadTransactionFailPasv) {
1050 FtpMockControlSocketFileDownload ctrl_socket; 1050 FtpSocketDataProviderFileDownload ctrl_socket;
1051 TransactionFailHelper(&ctrl_socket, 1051 TransactionFailHelper(&ctrl_socket,
1052 "ftp://host/file", 1052 "ftp://host/file",
1053 FtpMockControlSocket::PRE_PASV, 1053 FtpSocketDataProvider::PRE_PASV,
1054 FtpMockControlSocket::PRE_QUIT, 1054 FtpSocketDataProvider::PRE_QUIT,
1055 "500 failed pasv\r\n", 1055 "500 failed pasv\r\n",
1056 ERR_FAILED); 1056 ERR_FAILED);
1057 } 1057 }
1058 1058
1059 TEST_F(FtpNetworkTransactionTest, DownloadTransactionFailMdtm) { 1059 TEST_F(FtpNetworkTransactionTest, DownloadTransactionFailMdtm) {
1060 FtpMockControlSocketFileDownload ctrl_socket; 1060 FtpSocketDataProviderFileDownload ctrl_socket;
1061 TransactionFailHelper(&ctrl_socket, 1061 TransactionFailHelper(&ctrl_socket,
1062 "ftp://host/file", 1062 "ftp://host/file",
1063 FtpMockControlSocket::PRE_MDTM, 1063 FtpSocketDataProvider::PRE_MDTM,
1064 FtpMockControlSocket::PRE_RETR, 1064 FtpSocketDataProvider::PRE_RETR,
1065 "500 failed mdtm\r\n", 1065 "500 failed mdtm\r\n",
1066 OK); 1066 OK);
1067 } 1067 }
1068 1068
1069 TEST_F(FtpNetworkTransactionTest, DownloadTransactionFailRetr) { 1069 TEST_F(FtpNetworkTransactionTest, DownloadTransactionFailRetr) {
1070 FtpMockControlSocketFileDownloadRetrFail ctrl_socket; 1070 FtpSocketDataProviderFileDownloadRetrFail ctrl_socket;
1071 TransactionFailHelper(&ctrl_socket, 1071 TransactionFailHelper(&ctrl_socket,
1072 "ftp://host/file", 1072 "ftp://host/file",
1073 FtpMockControlSocket::PRE_RETR, 1073 FtpSocketDataProvider::PRE_RETR,
1074 FtpMockControlSocket::PRE_QUIT, 1074 FtpSocketDataProvider::PRE_QUIT,
1075 "500 failed retr\r\n", 1075 "500 failed retr\r\n",
1076 ERR_FAILED); 1076 ERR_FAILED);
1077 } 1077 }
1078 1078
1079 TEST_F(FtpNetworkTransactionTest, DownloadTransactionFileNotFound) { 1079 TEST_F(FtpNetworkTransactionTest, DownloadTransactionFileNotFound) {
1080 FtpMockControlSocketFileDownloadRetrFail ctrl_socket; 1080 FtpSocketDataProviderFileDownloadRetrFail ctrl_socket;
1081 TransactionFailHelper(&ctrl_socket, 1081 TransactionFailHelper(&ctrl_socket,
1082 "ftp://host/file", 1082 "ftp://host/file",
1083 FtpMockControlSocket::PRE_RETR, 1083 FtpSocketDataProvider::PRE_RETR,
1084 FtpMockControlSocket::PRE_PASV2, 1084 FtpSocketDataProvider::PRE_PASV2,
1085 "550 cannot open file\r\n", 1085 "550 cannot open file\r\n",
1086 ERR_FILE_NOT_FOUND); 1086 ERR_FILE_NOT_FOUND);
1087 } 1087 }
1088 1088
1089 } // namespace net 1089 } // namespace net
OLDNEW
« no previous file with comments | « net/flip/flip_network_transaction_unittest.cc ('k') | net/http/http_network_layer_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698