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

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

Issue 207014: Various cleanups FTP-related. (Closed)
Patch Set: Created 11 years, 3 months 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 29 matching lines...) Expand all
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,
51 PRE_CWD, 50 PRE_CWD,
52 PRE_QUIT, 51 PRE_QUIT,
53 QUIT 52 QUIT
54 }; 53 };
55 54
56 FtpMockControlSocket() 55 FtpMockControlSocket()
57 : failure_injection_state_(NONE), 56 : failure_injection_state_(NONE),
58 multiline_welcome_(false) { 57 multiline_welcome_(false) {
59 Init(); 58 Init();
60 } 59 }
(...skipping 15 matching lines...) Expand all
76 case PRE_SYST: 75 case PRE_SYST:
77 return Verify("SYST\r\n", data, PRE_PWD, "215 UNIX\r\n"); 76 return Verify("SYST\r\n", data, PRE_PWD, "215 UNIX\r\n");
78 case PRE_PWD: 77 case PRE_PWD:
79 return Verify("PWD\r\n", data, PRE_TYPE, 78 return Verify("PWD\r\n", data, PRE_TYPE,
80 "257 \"/\" is your current location\r\n"); 79 "257 \"/\" is your current location\r\n");
81 case PRE_TYPE: 80 case PRE_TYPE:
82 return Verify("TYPE I\r\n", data, PRE_PASV, 81 return Verify("TYPE I\r\n", data, PRE_PASV,
83 "200 TYPE is now 8-bit binary\r\n"); 82 "200 TYPE is now 8-bit binary\r\n");
84 case PRE_PASV: 83 case PRE_PASV:
85 return Verify("PASV\r\n", data, PRE_SIZE, 84 return Verify("PASV\r\n", data, PRE_SIZE,
86 "227 Entering Passive Mode (127,0,0,1,123,456)\r\n"); 85 "227 Entering Passive Mode 127,0,0,1,123,456\r\n");
87 case PRE_QUIT: 86 case PRE_QUIT:
88 return Verify("QUIT\r\n", data, QUIT, "221 Goodbye.\r\n"); 87 return Verify("QUIT\r\n", data, QUIT, "221 Goodbye.\r\n");
89 default: 88 default:
90 return MockWriteResult(true, ERR_UNEXPECTED); 89 return MockWriteResult(true, ERR_UNEXPECTED);
91 } 90 }
92 } 91 }
93 92
94 void InjectFailure(State state, State next_state, const char* response) { 93 void InjectFailure(State state, State next_state, const char* response) {
95 DCHECK_EQ(NONE, failure_injection_state_); 94 DCHECK_EQ(NONE, failure_injection_state_);
96 DCHECK_NE(NONE, state); 95 DCHECK_NE(NONE, state);
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 if (InjectFault()) 163 if (InjectFault())
165 return MockWriteResult(true, data.length()); 164 return MockWriteResult(true, data.length());
166 switch (state()) { 165 switch (state()) {
167 case PRE_SIZE: 166 case PRE_SIZE:
168 return Verify("SIZE /\r\n", data, PRE_MDTM, 167 return Verify("SIZE /\r\n", data, PRE_MDTM,
169 "550 I can only retrieve regular files\r\n"); 168 "550 I can only retrieve regular files\r\n");
170 case PRE_MDTM: 169 case PRE_MDTM:
171 return Verify("MDTM /\r\n", data, PRE_RETR, 170 return Verify("MDTM /\r\n", data, PRE_RETR,
172 "213 20070221112533\r\n"); 171 "213 20070221112533\r\n");
173 case PRE_RETR: 172 case PRE_RETR:
174 return Verify("RETR /\r\n", data, PRE_PASV2, 173 return Verify("RETR /\r\n", data, PRE_CWD,
175 "550 Can't download directory\r\n"); 174 "550 Can't download directory\r\n");
176 case PRE_PASV2:
177 // Parser should also accept format without parentheses.
178 return Verify("PASV\r\n", data, PRE_CWD,
179 "227 Entering Passive Mode 127,0,0,1,123,456\r\n");
180 case PRE_CWD: 175 case PRE_CWD:
181 return Verify("CWD /\r\n", data, PRE_LIST, "200 OK\r\n"); 176 return Verify("CWD /\r\n", data, PRE_LIST, "200 OK\r\n");
182 case PRE_LIST: 177 case PRE_LIST:
183 // TODO(phajdan.jr): Also test with "150 Accepted Data Connection". 178 // TODO(phajdan.jr): Also test with "150 Accepted Data Connection".
184 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");
185 default: 180 default:
186 return FtpMockControlSocket::OnWrite(data); 181 return FtpMockControlSocket::OnWrite(data);
187 } 182 }
188 } 183 }
189 184
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 class FtpMockControlSocketFileDownloadRetrFail 286 class FtpMockControlSocketFileDownloadRetrFail
292 : public FtpMockControlSocketFileDownload { 287 : public FtpMockControlSocketFileDownload {
293 public: 288 public:
294 FtpMockControlSocketFileDownloadRetrFail() { 289 FtpMockControlSocketFileDownloadRetrFail() {
295 } 290 }
296 291
297 virtual MockWriteResult OnWrite(const std::string& data) { 292 virtual MockWriteResult OnWrite(const std::string& data) {
298 if (InjectFault()) 293 if (InjectFault())
299 return MockWriteResult(true, data.length()); 294 return MockWriteResult(true, data.length());
300 switch (state()) { 295 switch (state()) {
301 case PRE_PASV2:
302 return Verify("PASV\r\n", data, PRE_CWD,
303 "227 Entering Passive Mode (127,0,0,1,123,456)\r\n");
304 case PRE_CWD: 296 case PRE_CWD:
305 return Verify("CWD /file\r\n", data, PRE_QUIT, 297 return Verify("CWD /file\r\n", data, PRE_QUIT,
306 "550 file is a directory\r\n"); 298 "550 file is a directory\r\n");
307 default: 299 default:
308 return FtpMockControlSocketFileDownload::OnWrite(data); 300 return FtpMockControlSocketFileDownload::OnWrite(data);
309 } 301 }
310 } 302 }
311 303
312 private: 304 private:
313 DISALLOW_COPY_AND_ASSIGN(FtpMockControlSocketFileDownloadRetrFail); 305 DISALLOW_COPY_AND_ASSIGN(FtpMockControlSocketFileDownloadRetrFail);
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
384 return info; 376 return info;
385 } 377 }
386 378
387 void ExecuteTransaction(FtpMockControlSocket* ctrl_socket, 379 void ExecuteTransaction(FtpMockControlSocket* ctrl_socket,
388 const char* request, 380 const char* request,
389 int expected_result) { 381 int expected_result) {
390 std::string mock_data("mock-data"); 382 std::string mock_data("mock-data");
391 MockRead data_reads[] = { 383 MockRead data_reads[] = {
392 MockRead(mock_data.c_str()), 384 MockRead(mock_data.c_str()),
393 }; 385 };
394 // TODO(phajdan.jr): FTP transaction should not open two data sockets. 386 StaticMockSocket data_socket(data_reads, NULL);
395 StaticMockSocket data_socket1(data_reads, NULL);
396 StaticMockSocket data_socket2(data_reads, NULL);
397 mock_socket_factory_.AddMockSocket(ctrl_socket); 387 mock_socket_factory_.AddMockSocket(ctrl_socket);
398 mock_socket_factory_.AddMockSocket(&data_socket1); 388 mock_socket_factory_.AddMockSocket(&data_socket);
399 mock_socket_factory_.AddMockSocket(&data_socket2);
400 FtpRequestInfo request_info = GetRequestInfo(request); 389 FtpRequestInfo request_info = GetRequestInfo(request);
401 EXPECT_EQ(LOAD_STATE_IDLE, transaction_.GetLoadState()); 390 EXPECT_EQ(LOAD_STATE_IDLE, transaction_.GetLoadState());
402 ASSERT_EQ(ERR_IO_PENDING, 391 ASSERT_EQ(ERR_IO_PENDING,
403 transaction_.Start(&request_info, &callback_, NULL)); 392 transaction_.Start(&request_info, &callback_, NULL));
404 EXPECT_NE(LOAD_STATE_IDLE, transaction_.GetLoadState()); 393 EXPECT_NE(LOAD_STATE_IDLE, transaction_.GetLoadState());
405 EXPECT_EQ(expected_result, callback_.WaitForResult()); 394 EXPECT_EQ(expected_result, callback_.WaitForResult());
406 EXPECT_EQ(FtpMockControlSocket::QUIT, ctrl_socket->state()); 395 EXPECT_EQ(FtpMockControlSocket::QUIT, ctrl_socket->state());
407 if (expected_result == OK) { 396 if (expected_result == OK) {
408 scoped_refptr<IOBuffer> io_buffer(new IOBuffer(kBufferSize)); 397 scoped_refptr<IOBuffer> io_buffer(new IOBuffer(kBufferSize));
409 memset(io_buffer->data(), 0, kBufferSize); 398 memset(io_buffer->data(), 0, kBufferSize);
(...skipping 357 matching lines...) Expand 10 before | Expand all | Expand 10 after
767 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailMdtm) { 756 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailMdtm) {
768 FtpMockControlSocketDirectoryListing ctrl_socket; 757 FtpMockControlSocketDirectoryListing ctrl_socket;
769 TransactionFailHelper(&ctrl_socket, 758 TransactionFailHelper(&ctrl_socket,
770 "ftp://host", 759 "ftp://host",
771 FtpMockControlSocket::PRE_MDTM, 760 FtpMockControlSocket::PRE_MDTM,
772 FtpMockControlSocket::PRE_RETR, 761 FtpMockControlSocket::PRE_RETR,
773 "500 failed mdtm\r\n", 762 "500 failed mdtm\r\n",
774 OK); 763 OK);
775 } 764 }
776 765
777 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailPasv2) {
778 FtpMockControlSocketDirectoryListing ctrl_socket;
779 TransactionFailHelper(&ctrl_socket,
780 "ftp://host",
781 FtpMockControlSocket::PRE_PASV2,
782 FtpMockControlSocket::PRE_QUIT,
783 "500 failed pasv\r\n",
784 ERR_FAILED);
785 }
786
787 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailCwd) { 766 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailCwd) {
788 FtpMockControlSocketDirectoryListing ctrl_socket; 767 FtpMockControlSocketDirectoryListing ctrl_socket;
789 TransactionFailHelper(&ctrl_socket, 768 TransactionFailHelper(&ctrl_socket,
790 "ftp://host", 769 "ftp://host",
791 FtpMockControlSocket::PRE_CWD, 770 FtpMockControlSocket::PRE_CWD,
792 FtpMockControlSocket::PRE_QUIT, 771 FtpMockControlSocket::PRE_QUIT,
793 "500 failed cwd\r\n", 772 "500 failed cwd\r\n",
794 ERR_FAILED); 773 ERR_FAILED);
795 } 774 }
796 775
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
892 FtpMockControlSocket::PRE_QUIT, 871 FtpMockControlSocket::PRE_QUIT,
893 "500 failed retr\r\n", 872 "500 failed retr\r\n",
894 ERR_FAILED); 873 ERR_FAILED);
895 } 874 }
896 875
897 TEST_F(FtpNetworkTransactionTest, DownloadTransactionFileNotFound) { 876 TEST_F(FtpNetworkTransactionTest, DownloadTransactionFileNotFound) {
898 FtpMockControlSocketFileDownloadRetrFail ctrl_socket; 877 FtpMockControlSocketFileDownloadRetrFail ctrl_socket;
899 TransactionFailHelper(&ctrl_socket, 878 TransactionFailHelper(&ctrl_socket,
900 "ftp://host/file", 879 "ftp://host/file",
901 FtpMockControlSocket::PRE_RETR, 880 FtpMockControlSocket::PRE_RETR,
902 FtpMockControlSocket::PRE_PASV2, 881 FtpMockControlSocket::PRE_CWD,
903 "550 cannot open file\r\n", 882 "550 cannot open file\r\n",
904 ERR_FILE_NOT_FOUND); 883 ERR_FILE_NOT_FOUND);
905 } 884 }
906 885
907 } // namespace net 886 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698