OLD | NEW |
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 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
179 return Verify("LIST\r\n", data, PRE_QUIT, "200 OK\r\n"); | 179 return Verify("LIST\r\n", data, PRE_QUIT, "200 OK\r\n"); |
180 default: | 180 default: |
181 return FtpMockControlSocket::OnWrite(data); | 181 return FtpMockControlSocket::OnWrite(data); |
182 } | 182 } |
183 } | 183 } |
184 | 184 |
185 private: | 185 private: |
186 DISALLOW_COPY_AND_ASSIGN(FtpMockControlSocketDirectoryListing); | 186 DISALLOW_COPY_AND_ASSIGN(FtpMockControlSocketDirectoryListing); |
187 }; | 187 }; |
188 | 188 |
| 189 class FtpMockControlSocketVMSDirectoryListing : public FtpMockControlSocket { |
| 190 public: |
| 191 FtpMockControlSocketVMSDirectoryListing() { |
| 192 } |
| 193 |
| 194 virtual MockWriteResult OnWrite(const std::string& data) { |
| 195 if (InjectFault()) |
| 196 return MockWriteResult(true, data.length()); |
| 197 switch (state()) { |
| 198 case PRE_SYST: |
| 199 return Verify("SYST\r\n", data, PRE_PWD, "215 VMS\r\n"); |
| 200 case PRE_PWD: |
| 201 return Verify("PWD\r\n", data, PRE_TYPE, |
| 202 "257 \"ANONYMOUS_ROOT:[000000]\"\r\n"); |
| 203 case PRE_SIZE: |
| 204 return Verify("SIZE ANONYMOUS_ROOT:[000000]dir\r\n", data, PRE_MDTM, |
| 205 "550 I can only retrieve regular files\r\n"); |
| 206 case PRE_MDTM: |
| 207 return Verify("MDTM ANONYMOUS_ROOT:[000000]dir\r\n", data, PRE_RETR, |
| 208 "213 20070221112533\r\n"); |
| 209 case PRE_RETR: |
| 210 return Verify("RETR ANONYMOUS_ROOT:[000000]dir\r\n", data, PRE_CWD, |
| 211 "550 Can't download directory\r\n"); |
| 212 case PRE_CWD: |
| 213 return Verify("CWD ANONYMOUS_ROOT:[dir]\r\n", data, PRE_LIST, |
| 214 "200 OK\r\n"); |
| 215 case PRE_LIST: |
| 216 return Verify("LIST *.*;0\r\n", data, PRE_QUIT, "200 OK\r\n"); |
| 217 default: |
| 218 return FtpMockControlSocket::OnWrite(data); |
| 219 } |
| 220 } |
| 221 |
| 222 private: |
| 223 DISALLOW_COPY_AND_ASSIGN(FtpMockControlSocketVMSDirectoryListing); |
| 224 }; |
| 225 |
| 226 class FtpMockControlSocketVMSDirectoryListingRootDirectory |
| 227 : public FtpMockControlSocket { |
| 228 public: |
| 229 FtpMockControlSocketVMSDirectoryListingRootDirectory() { |
| 230 } |
| 231 |
| 232 virtual MockWriteResult OnWrite(const std::string& data) { |
| 233 if (InjectFault()) |
| 234 return MockWriteResult(true, data.length()); |
| 235 switch (state()) { |
| 236 case PRE_SYST: |
| 237 return Verify("SYST\r\n", data, PRE_PWD, "215 VMS\r\n"); |
| 238 case PRE_PWD: |
| 239 return Verify("PWD\r\n", data, PRE_TYPE, |
| 240 "257 \"ANONYMOUS_ROOT:[000000]\"\r\n"); |
| 241 case PRE_SIZE: |
| 242 return Verify("SIZE ANONYMOUS_ROOT\r\n", data, PRE_MDTM, |
| 243 "550 I can only retrieve regular files\r\n"); |
| 244 case PRE_MDTM: |
| 245 return Verify("MDTM ANONYMOUS_ROOT\r\n", data, PRE_RETR, |
| 246 "213 20070221112533\r\n"); |
| 247 case PRE_RETR: |
| 248 return Verify("RETR ANONYMOUS_ROOT\r\n", data, PRE_CWD, |
| 249 "550 Can't download directory\r\n"); |
| 250 case PRE_CWD: |
| 251 return Verify("CWD ANONYMOUS_ROOT:[000000]\r\n", data, PRE_LIST, |
| 252 "200 OK\r\n"); |
| 253 case PRE_LIST: |
| 254 return Verify("LIST *.*;0\r\n", data, PRE_QUIT, "200 OK\r\n"); |
| 255 default: |
| 256 return FtpMockControlSocket::OnWrite(data); |
| 257 } |
| 258 } |
| 259 |
| 260 private: |
| 261 DISALLOW_COPY_AND_ASSIGN( |
| 262 FtpMockControlSocketVMSDirectoryListingRootDirectory); |
| 263 }; |
| 264 |
189 class FtpMockControlSocketFileDownload : public FtpMockControlSocket { | 265 class FtpMockControlSocketFileDownload : public FtpMockControlSocket { |
190 public: | 266 public: |
191 FtpMockControlSocketFileDownload() { | 267 FtpMockControlSocketFileDownload() { |
192 } | 268 } |
193 | 269 |
194 virtual MockWriteResult OnWrite(const std::string& data) { | 270 virtual MockWriteResult OnWrite(const std::string& data) { |
195 if (InjectFault()) | 271 if (InjectFault()) |
196 return MockWriteResult(true, data.length()); | 272 return MockWriteResult(true, data.length()); |
197 switch (state()) { | 273 switch (state()) { |
198 case PRE_SIZE: | 274 case PRE_SIZE: |
199 return Verify("SIZE /file\r\n", data, PRE_MDTM, | 275 return Verify("SIZE /file\r\n", data, PRE_MDTM, |
200 "213 18\r\n"); | 276 "213 18\r\n"); |
201 case PRE_MDTM: | 277 case PRE_MDTM: |
202 return Verify("MDTM /file\r\n", data, PRE_RETR, | 278 return Verify("MDTM /file\r\n", data, PRE_RETR, |
203 "213 20070221112533\r\n"); | 279 "213 20070221112533\r\n"); |
204 case PRE_RETR: | 280 case PRE_RETR: |
205 return Verify("RETR /file\r\n", data, PRE_QUIT, "200 OK\r\n"); | 281 return Verify("RETR /file\r\n", data, PRE_QUIT, "200 OK\r\n"); |
206 default: | 282 default: |
207 return FtpMockControlSocket::OnWrite(data); | 283 return FtpMockControlSocket::OnWrite(data); |
208 } | 284 } |
209 } | 285 } |
210 | 286 |
211 private: | 287 private: |
212 DISALLOW_COPY_AND_ASSIGN(FtpMockControlSocketFileDownload); | 288 DISALLOW_COPY_AND_ASSIGN(FtpMockControlSocketFileDownload); |
213 }; | 289 }; |
214 | 290 |
| 291 class FtpMockControlSocketVMSFileDownload : public FtpMockControlSocket { |
| 292 public: |
| 293 FtpMockControlSocketVMSFileDownload() { |
| 294 } |
| 295 |
| 296 virtual MockWriteResult OnWrite(const std::string& data) { |
| 297 if (InjectFault()) |
| 298 return MockWriteResult(true, data.length()); |
| 299 switch (state()) { |
| 300 case PRE_SYST: |
| 301 return Verify("SYST\r\n", data, PRE_PWD, "215 VMS\r\n"); |
| 302 case PRE_PWD: |
| 303 return Verify("PWD\r\n", data, PRE_TYPE, |
| 304 "257 \"ANONYMOUS_ROOT:[000000]\"\r\n"); |
| 305 case PRE_SIZE: |
| 306 return Verify("SIZE ANONYMOUS_ROOT:[000000]file\r\n", data, PRE_MDTM, |
| 307 "213 18\r\n"); |
| 308 case PRE_MDTM: |
| 309 return Verify("MDTM ANONYMOUS_ROOT:[000000]file\r\n", data, PRE_RETR, |
| 310 "213 20070221112533\r\n"); |
| 311 case PRE_RETR: |
| 312 return Verify("RETR ANONYMOUS_ROOT:[000000]file\r\n", data, PRE_QUIT, |
| 313 "200 OK\r\n"); |
| 314 default: |
| 315 return FtpMockControlSocket::OnWrite(data); |
| 316 } |
| 317 } |
| 318 |
| 319 private: |
| 320 DISALLOW_COPY_AND_ASSIGN(FtpMockControlSocketVMSFileDownload); |
| 321 }; |
| 322 |
215 class FtpMockControlSocketEscaping : public FtpMockControlSocket { | 323 class FtpMockControlSocketEscaping : public FtpMockControlSocket { |
216 public: | 324 public: |
217 FtpMockControlSocketEscaping() { | 325 FtpMockControlSocketEscaping() { |
218 } | 326 } |
219 | 327 |
220 virtual MockWriteResult OnWrite(const std::string& data) { | 328 virtual MockWriteResult OnWrite(const std::string& data) { |
221 if (InjectFault()) | 329 if (InjectFault()) |
222 return MockWriteResult(true, data.length()); | 330 return MockWriteResult(true, data.length()); |
223 switch (state()) { | 331 switch (state()) { |
224 case PRE_SIZE: | 332 case PRE_SIZE: |
(...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
484 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionMultilineWelcomeShort) { | 592 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionMultilineWelcomeShort) { |
485 FtpMockControlSocketDirectoryListing ctrl_socket; | 593 FtpMockControlSocketDirectoryListing ctrl_socket; |
486 // The client will not consume all three 230 lines. That's good, we want to | 594 // The client will not consume all three 230 lines. That's good, we want to |
487 // test that scenario. | 595 // test that scenario. |
488 ctrl_socket.allow_unconsumed_reads(true); | 596 ctrl_socket.allow_unconsumed_reads(true); |
489 ctrl_socket.set_multiline_welcome(true); | 597 ctrl_socket.set_multiline_welcome(true); |
490 ctrl_socket.set_short_read_limit(5); | 598 ctrl_socket.set_short_read_limit(5); |
491 ExecuteTransaction(&ctrl_socket, "ftp://host", OK); | 599 ExecuteTransaction(&ctrl_socket, "ftp://host", OK); |
492 } | 600 } |
493 | 601 |
| 602 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionVMS) { |
| 603 FtpMockControlSocketVMSDirectoryListing ctrl_socket; |
| 604 ExecuteTransaction(&ctrl_socket, "ftp://host/dir", OK); |
| 605 } |
| 606 |
| 607 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionVMSRootDirectory) { |
| 608 FtpMockControlSocketVMSDirectoryListingRootDirectory ctrl_socket; |
| 609 ExecuteTransaction(&ctrl_socket, "ftp://host", OK); |
| 610 } |
| 611 |
494 TEST_F(FtpNetworkTransactionTest, DownloadTransaction) { | 612 TEST_F(FtpNetworkTransactionTest, DownloadTransaction) { |
495 FtpMockControlSocketFileDownload ctrl_socket; | 613 FtpMockControlSocketFileDownload ctrl_socket; |
496 ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK); | 614 ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK); |
497 } | 615 } |
498 | 616 |
499 TEST_F(FtpNetworkTransactionTest, DownloadTransactionMultilineWelcome) { | 617 TEST_F(FtpNetworkTransactionTest, DownloadTransactionMultilineWelcome) { |
500 FtpMockControlSocketFileDownload ctrl_socket; | 618 FtpMockControlSocketFileDownload ctrl_socket; |
501 ctrl_socket.set_multiline_welcome(true); | 619 ctrl_socket.set_multiline_welcome(true); |
502 ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK); | 620 ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK); |
503 } | 621 } |
504 | 622 |
505 TEST_F(FtpNetworkTransactionTest, DownloadTransactionShortReads2) { | 623 TEST_F(FtpNetworkTransactionTest, DownloadTransactionShortReads2) { |
506 FtpMockControlSocketFileDownload ctrl_socket; | 624 FtpMockControlSocketFileDownload ctrl_socket; |
507 ctrl_socket.set_short_read_limit(2); | 625 ctrl_socket.set_short_read_limit(2); |
508 ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK); | 626 ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK); |
509 } | 627 } |
510 | 628 |
511 TEST_F(FtpNetworkTransactionTest, DownloadTransactionShortReads5) { | 629 TEST_F(FtpNetworkTransactionTest, DownloadTransactionShortReads5) { |
512 FtpMockControlSocketFileDownload ctrl_socket; | 630 FtpMockControlSocketFileDownload ctrl_socket; |
513 ctrl_socket.set_short_read_limit(5); | 631 ctrl_socket.set_short_read_limit(5); |
514 ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK); | 632 ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK); |
515 } | 633 } |
516 | 634 |
| 635 TEST_F(FtpNetworkTransactionTest, DownloadTransactionVMS) { |
| 636 FtpMockControlSocketVMSFileDownload ctrl_socket; |
| 637 ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK); |
| 638 } |
| 639 |
517 TEST_F(FtpNetworkTransactionTest, DownloadTransactionAcceptedDataConnection) { | 640 TEST_F(FtpNetworkTransactionTest, DownloadTransactionAcceptedDataConnection) { |
518 FtpMockControlSocketFileDownloadAcceptedDataConnection ctrl_socket; | 641 FtpMockControlSocketFileDownloadAcceptedDataConnection ctrl_socket; |
519 std::string mock_data("mock-data"); | 642 std::string mock_data("mock-data"); |
520 MockRead data_reads[] = { | 643 MockRead data_reads[] = { |
521 MockRead(mock_data.c_str()), | 644 MockRead(mock_data.c_str()), |
522 }; | 645 }; |
523 StaticMockSocket data_socket1(data_reads, NULL); | 646 StaticMockSocket data_socket1(data_reads, NULL); |
524 mock_socket_factory_.AddMockSocket(&ctrl_socket); | 647 mock_socket_factory_.AddMockSocket(&ctrl_socket); |
525 mock_socket_factory_.AddMockSocket(&data_socket1); | 648 mock_socket_factory_.AddMockSocket(&data_socket1); |
526 FtpRequestInfo request_info = GetRequestInfo("ftp://host/file"); | 649 FtpRequestInfo request_info = GetRequestInfo("ftp://host/file"); |
(...skipping 382 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
909 FtpMockControlSocketFileDownloadRetrFail ctrl_socket; | 1032 FtpMockControlSocketFileDownloadRetrFail ctrl_socket; |
910 TransactionFailHelper(&ctrl_socket, | 1033 TransactionFailHelper(&ctrl_socket, |
911 "ftp://host/file", | 1034 "ftp://host/file", |
912 FtpMockControlSocket::PRE_RETR, | 1035 FtpMockControlSocket::PRE_RETR, |
913 FtpMockControlSocket::PRE_CWD, | 1036 FtpMockControlSocket::PRE_CWD, |
914 "550 cannot open file\r\n", | 1037 "550 cannot open file\r\n", |
915 ERR_FILE_NOT_FOUND); | 1038 ERR_FILE_NOT_FOUND); |
916 } | 1039 } |
917 | 1040 |
918 } // namespace net | 1041 } // namespace net |
OLD | NEW |