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

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

Issue 340054: Correctly handle FTP servers which unexpectedly close the control connection. (Closed)
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
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 484 matching lines...) Expand 10 before | Expand all | Expand 10 after
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(FtpMockControlSocketEvilLogin);
503 }; 503 };
504 504
505 class FtpMockControlSocketCloseConnection : public FtpMockControlSocket {
506 public:
507 FtpMockControlSocketCloseConnection() {
508 }
509
510 virtual MockWriteResult OnWrite(const std::string& data) {
511 if (InjectFault())
512 return MockWriteResult(true, data.length());
513 switch (state()) {
514 case PRE_USER:
515 return Verify("USER anonymous\r\n", data,
516 PRE_QUIT, "");
517 default:
518 return FtpMockControlSocket::OnWrite(data);
519 }
520 }
521
522 private:
523 DISALLOW_COPY_AND_ASSIGN(FtpMockControlSocketCloseConnection);
524 };
525
505 class FtpNetworkTransactionTest : public PlatformTest { 526 class FtpNetworkTransactionTest : public PlatformTest {
506 public: 527 public:
507 FtpNetworkTransactionTest() 528 FtpNetworkTransactionTest()
508 : host_resolver_(new MockHostResolver), 529 : host_resolver_(new MockHostResolver),
509 session_(new FtpNetworkSession(host_resolver_)), 530 session_(new FtpNetworkSession(host_resolver_)),
510 transaction_(session_.get(), &mock_socket_factory_) { 531 transaction_(session_.get(), &mock_socket_factory_) {
511 } 532 }
512 533
513 protected: 534 protected:
514 FtpRequestInfo GetRequestInfo(const std::string& url) { 535 FtpRequestInfo GetRequestInfo(const std::string& url) {
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after
842 &callback_)); 863 &callback_));
843 EXPECT_EQ(ERR_MALFORMED_IDENTITY, callback_.WaitForResult()); 864 EXPECT_EQ(ERR_MALFORMED_IDENTITY, callback_.WaitForResult());
844 } 865 }
845 866
846 TEST_F(FtpNetworkTransactionTest, Escaping) { 867 TEST_F(FtpNetworkTransactionTest, Escaping) {
847 FtpMockControlSocketEscaping ctrl_socket; 868 FtpMockControlSocketEscaping ctrl_socket;
848 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",
849 OK); 870 OK);
850 } 871 }
851 872
873 // Regression test for http://crbug.com/25023.
874 TEST_F(FtpNetworkTransactionTest, CloseConnection) {
875 FtpMockControlSocketCloseConnection ctrl_socket;
876 ExecuteTransaction(&ctrl_socket, "ftp://host", ERR_EMPTY_RESPONSE);
877 }
878
852 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailUser) { 879 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailUser) {
853 FtpMockControlSocketDirectoryListing ctrl_socket; 880 FtpMockControlSocketDirectoryListing ctrl_socket;
854 TransactionFailHelper(&ctrl_socket, 881 TransactionFailHelper(&ctrl_socket,
855 "ftp://host", 882 "ftp://host",
856 FtpMockControlSocket::PRE_USER, 883 FtpMockControlSocket::PRE_USER,
857 FtpMockControlSocket::PRE_QUIT, 884 FtpMockControlSocket::PRE_QUIT,
858 "500 no such user\r\n", 885 "500 no such user\r\n",
859 ERR_FAILED); 886 ERR_FAILED);
860 } 887 }
861 888
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
1053 FtpMockControlSocketFileDownloadRetrFail ctrl_socket; 1080 FtpMockControlSocketFileDownloadRetrFail ctrl_socket;
1054 TransactionFailHelper(&ctrl_socket, 1081 TransactionFailHelper(&ctrl_socket,
1055 "ftp://host/file", 1082 "ftp://host/file",
1056 FtpMockControlSocket::PRE_RETR, 1083 FtpMockControlSocket::PRE_RETR,
1057 FtpMockControlSocket::PRE_PASV2, 1084 FtpMockControlSocket::PRE_PASV2,
1058 "550 cannot open file\r\n", 1085 "550 cannot open file\r\n",
1059 ERR_FILE_NOT_FOUND); 1086 ERR_FILE_NOT_FOUND);
1060 } 1087 }
1061 1088
1062 } // namespace net 1089 } // namespace net
OLDNEW
« net/ftp/ftp_network_transaction.cc ('K') | « net/ftp/ftp_network_transaction.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698