| 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 |