OLD | NEW |
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 #include "base/ref_counted.h" | 9 #include "base/ref_counted.h" |
10 #include "base/string_util.h" | 10 #include "base/string_util.h" |
(...skipping 23 matching lines...) Expand all Loading... |
34 enum State { | 34 enum State { |
35 NONE, | 35 NONE, |
36 PRE_USER, | 36 PRE_USER, |
37 PRE_PASSWD, | 37 PRE_PASSWD, |
38 PRE_SYST, | 38 PRE_SYST, |
39 PRE_PWD, | 39 PRE_PWD, |
40 PRE_TYPE, | 40 PRE_TYPE, |
41 PRE_SIZE, | 41 PRE_SIZE, |
42 PRE_EPSV, | 42 PRE_EPSV, |
43 PRE_PASV, | 43 PRE_PASV, |
44 PRE_MLSD, | |
45 PRE_LIST, | 44 PRE_LIST, |
46 PRE_RETR, | 45 PRE_RETR, |
47 PRE_CWD, | 46 PRE_CWD, |
48 PRE_QUIT, | 47 PRE_QUIT, |
49 PRE_NOPASV, | 48 PRE_NOPASV, |
50 QUIT | 49 QUIT |
51 }; | 50 }; |
52 | 51 |
53 FtpSocketDataProvider() | 52 FtpSocketDataProvider() |
54 : failure_injection_state_(NONE), | 53 : failure_injection_state_(NONE), |
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
182 } | 181 } |
183 | 182 |
184 virtual MockWriteResult OnWrite(const std::string& data) { | 183 virtual MockWriteResult OnWrite(const std::string& data) { |
185 if (InjectFault()) | 184 if (InjectFault()) |
186 return MockWriteResult(true, data.length()); | 185 return MockWriteResult(true, data.length()); |
187 switch (state()) { | 186 switch (state()) { |
188 case PRE_SIZE: | 187 case PRE_SIZE: |
189 return Verify("SIZE /\r\n", data, PRE_CWD, | 188 return Verify("SIZE /\r\n", data, PRE_CWD, |
190 "550 I can only retrieve regular files\r\n"); | 189 "550 I can only retrieve regular files\r\n"); |
191 case PRE_CWD: | 190 case PRE_CWD: |
192 return Verify("CWD /\r\n", data, PRE_MLSD, "200 OK\r\n"); | 191 return Verify("CWD /\r\n", data, PRE_LIST, "200 OK\r\n"); |
193 case PRE_MLSD: | |
194 return Verify("MLSD\r\n", data, PRE_QUIT, | |
195 "150 Accepted data connection\r\n" | |
196 "226 MLSD complete\r\n"); | |
197 case PRE_LIST: | 192 case PRE_LIST: |
198 return Verify("LIST\r\n", data, PRE_QUIT, "200 OK\r\n"); | 193 return Verify("LIST\r\n", data, PRE_QUIT, "200 OK\r\n"); |
199 default: | 194 default: |
200 return FtpSocketDataProvider::OnWrite(data); | 195 return FtpSocketDataProvider::OnWrite(data); |
201 } | 196 } |
202 } | 197 } |
203 | 198 |
204 private: | 199 private: |
205 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderDirectoryListing); | 200 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderDirectoryListing); |
206 }; | 201 }; |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
268 "257 \"ANONYMOUS_ROOT:[000000]\"\r\n"); | 263 "257 \"ANONYMOUS_ROOT:[000000]\"\r\n"); |
269 case PRE_EPSV: | 264 case PRE_EPSV: |
270 return Verify("EPSV\r\n", data, PRE_PASV, "500 Invalid command\r\n"); | 265 return Verify("EPSV\r\n", data, PRE_PASV, "500 Invalid command\r\n"); |
271 case PRE_PASV: | 266 case PRE_PASV: |
272 return Verify("PASV\r\n", data, PRE_SIZE, | 267 return Verify("PASV\r\n", data, PRE_SIZE, |
273 "227 Entering Passive Mode 127,0,0,1,123,456\r\n"); | 268 "227 Entering Passive Mode 127,0,0,1,123,456\r\n"); |
274 case PRE_SIZE: | 269 case PRE_SIZE: |
275 return Verify("SIZE ANONYMOUS_ROOT:[000000]dir\r\n", data, PRE_CWD, | 270 return Verify("SIZE ANONYMOUS_ROOT:[000000]dir\r\n", data, PRE_CWD, |
276 "550 I can only retrieve regular files\r\n"); | 271 "550 I can only retrieve regular files\r\n"); |
277 case PRE_CWD: | 272 case PRE_CWD: |
278 return Verify("CWD ANONYMOUS_ROOT:[dir]\r\n", data, PRE_MLSD, | 273 return Verify("CWD ANONYMOUS_ROOT:[dir]\r\n", data, PRE_LIST, |
279 "200 OK\r\n"); | 274 "200 OK\r\n"); |
280 case PRE_MLSD: | |
281 return Verify("MLSD\r\n", data, PRE_LIST, "500 Invalid command\r\n"); | |
282 case PRE_LIST: | 275 case PRE_LIST: |
283 return Verify("LIST *.*;0\r\n", data, PRE_QUIT, "200 OK\r\n"); | 276 return Verify("LIST *.*;0\r\n", data, PRE_QUIT, "200 OK\r\n"); |
284 default: | 277 default: |
285 return FtpSocketDataProvider::OnWrite(data); | 278 return FtpSocketDataProvider::OnWrite(data); |
286 } | 279 } |
287 } | 280 } |
288 | 281 |
289 private: | 282 private: |
290 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderVMSDirectoryListing); | 283 DISALLOW_COPY_AND_ASSIGN(FtpSocketDataProviderVMSDirectoryListing); |
291 }; | 284 }; |
(...skipping 16 matching lines...) Expand all Loading... |
308 case PRE_EPSV: | 301 case PRE_EPSV: |
309 return Verify("EPSV\r\n", data, PRE_PASV, | 302 return Verify("EPSV\r\n", data, PRE_PASV, |
310 "500 EPSV command unknown\r\n"); | 303 "500 EPSV command unknown\r\n"); |
311 case PRE_PASV: | 304 case PRE_PASV: |
312 return Verify("PASV\r\n", data, PRE_SIZE, | 305 return Verify("PASV\r\n", data, PRE_SIZE, |
313 "227 Entering Passive Mode 127,0,0,1,123,456\r\n"); | 306 "227 Entering Passive Mode 127,0,0,1,123,456\r\n"); |
314 case PRE_SIZE: | 307 case PRE_SIZE: |
315 return Verify("SIZE ANONYMOUS_ROOT\r\n", data, PRE_CWD, | 308 return Verify("SIZE ANONYMOUS_ROOT\r\n", data, PRE_CWD, |
316 "550 I can only retrieve regular files\r\n"); | 309 "550 I can only retrieve regular files\r\n"); |
317 case PRE_CWD: | 310 case PRE_CWD: |
318 return Verify("CWD ANONYMOUS_ROOT:[000000]\r\n", data, PRE_MLSD, | 311 return Verify("CWD ANONYMOUS_ROOT:[000000]\r\n", data, PRE_LIST, |
319 "200 OK\r\n"); | 312 "200 OK\r\n"); |
320 case PRE_MLSD: | |
321 return Verify("MLSD\r\n", data, PRE_LIST, "500 Invalid command\r\n"); | |
322 case PRE_LIST: | 313 case PRE_LIST: |
323 return Verify("LIST *.*;0\r\n", data, PRE_QUIT, "200 OK\r\n"); | 314 return Verify("LIST *.*;0\r\n", data, PRE_QUIT, "200 OK\r\n"); |
324 default: | 315 default: |
325 return FtpSocketDataProvider::OnWrite(data); | 316 return FtpSocketDataProvider::OnWrite(data); |
326 } | 317 } |
327 } | 318 } |
328 | 319 |
329 private: | 320 private: |
330 DISALLOW_COPY_AND_ASSIGN( | 321 DISALLOW_COPY_AND_ASSIGN( |
331 FtpSocketDataProviderVMSDirectoryListingRootDirectory); | 322 FtpSocketDataProviderVMSDirectoryListingRootDirectory); |
(...skipping 990 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1322 // Use unallocated 599 FTP error code to make sure it falls into the generic | 1313 // Use unallocated 599 FTP error code to make sure it falls into the generic |
1323 // ERR_FTP_FAILED bucket. | 1314 // ERR_FTP_FAILED bucket. |
1324 TransactionFailHelper(&ctrl_socket, | 1315 TransactionFailHelper(&ctrl_socket, |
1325 "ftp://host", | 1316 "ftp://host", |
1326 FtpSocketDataProvider::PRE_CWD, | 1317 FtpSocketDataProvider::PRE_CWD, |
1327 FtpSocketDataProvider::PRE_QUIT, | 1318 FtpSocketDataProvider::PRE_QUIT, |
1328 "599 fail\r\n", | 1319 "599 fail\r\n", |
1329 ERR_FTP_FAILED); | 1320 ERR_FTP_FAILED); |
1330 } | 1321 } |
1331 | 1322 |
1332 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailMlsd) { | |
1333 FtpSocketDataProviderDirectoryListing ctrl_socket; | |
1334 TransactionFailHelper(&ctrl_socket, | |
1335 "ftp://host", | |
1336 FtpSocketDataProvider::PRE_MLSD, | |
1337 FtpSocketDataProvider::PRE_LIST, | |
1338 "500 Unrecognized command\r\n", | |
1339 OK); | |
1340 } | |
1341 | |
1342 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailList) { | 1323 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailList) { |
1343 FtpSocketDataProviderVMSDirectoryListing ctrl_socket; | 1324 FtpSocketDataProviderVMSDirectoryListing ctrl_socket; |
1344 // Use unallocated 599 FTP error code to make sure it falls into the generic | 1325 // Use unallocated 599 FTP error code to make sure it falls into the generic |
1345 // ERR_FTP_FAILED bucket. | 1326 // ERR_FTP_FAILED bucket. |
1346 TransactionFailHelper(&ctrl_socket, | 1327 TransactionFailHelper(&ctrl_socket, |
1347 "ftp://host/dir", | 1328 "ftp://host/dir", |
1348 FtpSocketDataProvider::PRE_LIST, | 1329 FtpSocketDataProvider::PRE_LIST, |
1349 FtpSocketDataProvider::PRE_QUIT, | 1330 FtpSocketDataProvider::PRE_QUIT, |
1350 "599 fail\r\n", | 1331 "599 fail\r\n", |
1351 ERR_FTP_FAILED); | 1332 ERR_FTP_FAILED); |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1443 FtpSocketDataProviderFileDownload ctrl_socket; | 1424 FtpSocketDataProviderFileDownload ctrl_socket; |
1444 TransactionFailHelper(&ctrl_socket, | 1425 TransactionFailHelper(&ctrl_socket, |
1445 "ftp://host/file", | 1426 "ftp://host/file", |
1446 FtpSocketDataProvider::PRE_PWD, | 1427 FtpSocketDataProvider::PRE_PWD, |
1447 FtpSocketDataProvider::PRE_TYPE, | 1428 FtpSocketDataProvider::PRE_TYPE, |
1448 "257 \"\"\r\n", | 1429 "257 \"\"\r\n", |
1449 OK); | 1430 OK); |
1450 } | 1431 } |
1451 | 1432 |
1452 } // namespace net | 1433 } // namespace net |
OLD | NEW |