| OLD | NEW |
| 1 // Copyright (c) 2009 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 "net/base/io_buffer.h" | 11 #include "net/base/io_buffer.h" |
| 11 #include "net/base/mock_host_resolver.h" | 12 #include "net/base/mock_host_resolver.h" |
| 12 #include "net/base/net_util.h" | 13 #include "net/base/net_util.h" |
| 13 #include "net/base/sys_addrinfo.h" | 14 #include "net/base/sys_addrinfo.h" |
| 14 #include "net/base/test_completion_callback.h" | 15 #include "net/base/test_completion_callback.h" |
| 15 #include "net/ftp/ftp_network_session.h" | 16 #include "net/ftp/ftp_network_session.h" |
| 16 #include "net/ftp/ftp_request_info.h" | 17 #include "net/ftp/ftp_request_info.h" |
| 17 #include "net/socket/socket_test_util.h" | 18 #include "net/socket/socket_test_util.h" |
| 18 #include "testing/gtest/include/gtest/gtest.h" | 19 #include "testing/gtest/include/gtest/gtest.h" |
| 19 #include "testing/platform_test.h" | 20 #include "testing/platform_test.h" |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 74 case PRE_PWD: | 75 case PRE_PWD: |
| 75 return Verify("PWD\r\n", data, PRE_TYPE, | 76 return Verify("PWD\r\n", data, PRE_TYPE, |
| 76 "257 \"/\" is your current location\r\n"); | 77 "257 \"/\" is your current location\r\n"); |
| 77 case PRE_TYPE: | 78 case PRE_TYPE: |
| 78 return Verify(std::string("TYPE ") + data_type_ + "\r\n", data, | 79 return Verify(std::string("TYPE ") + data_type_ + "\r\n", data, |
| 79 PRE_EPSV, "200 TYPE set successfully\r\n"); | 80 PRE_EPSV, "200 TYPE set successfully\r\n"); |
| 80 case PRE_EPSV: | 81 case PRE_EPSV: |
| 81 return Verify("EPSV\r\n", data, PRE_SIZE, | 82 return Verify("EPSV\r\n", data, PRE_SIZE, |
| 82 "227 Entering Extended Passive Mode (|||31744|)\r\n"); | 83 "227 Entering Extended Passive Mode (|||31744|)\r\n"); |
| 83 case PRE_NOPASV: | 84 case PRE_NOPASV: |
| 84 // Use unallocated 599 FTP error code to make sure it falls into the gen
eric | 85 // Use unallocated 599 FTP error code to make sure it falls into the |
| 85 // ERR_FTP_FAILED bucket. | 86 // generic ERR_FTP_FAILED bucket. |
| 86 return Verify("PASV\r\n", data, PRE_QUIT, | 87 return Verify("PASV\r\n", data, PRE_QUIT, |
| 87 "599 fail\r\n"); | 88 "599 fail\r\n"); |
| 88 case PRE_QUIT: | 89 case PRE_QUIT: |
| 89 return Verify("QUIT\r\n", data, QUIT, "221 Goodbye.\r\n"); | 90 return Verify("QUIT\r\n", data, QUIT, "221 Goodbye.\r\n"); |
| 90 default: | 91 default: |
| 91 NOTREACHED() << "State not handled " << state(); | 92 NOTREACHED() << "State not handled " << state(); |
| 92 return MockWriteResult(true, ERR_UNEXPECTED); | 93 return MockWriteResult(true, ERR_UNEXPECTED); |
| 93 } | 94 } |
| 94 } | 95 } |
| 95 | 96 |
| (...skipping 942 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1038 MockRead("220 host TestFTPd\r\n"), | 1039 MockRead("220 host TestFTPd\r\n"), |
| 1039 MockRead("221 Goodbye!\r\n"), | 1040 MockRead("221 Goodbye!\r\n"), |
| 1040 MockRead(false, OK), | 1041 MockRead(false, OK), |
| 1041 }; | 1042 }; |
| 1042 MockWrite ctrl_writes[] = { | 1043 MockWrite ctrl_writes[] = { |
| 1043 MockWrite("QUIT\r\n"), | 1044 MockWrite("QUIT\r\n"), |
| 1044 }; | 1045 }; |
| 1045 StaticSocketDataProvider ctrl_socket2(ctrl_reads, arraysize(ctrl_reads), | 1046 StaticSocketDataProvider ctrl_socket2(ctrl_reads, arraysize(ctrl_reads), |
| 1046 ctrl_writes, arraysize(ctrl_writes)); | 1047 ctrl_writes, arraysize(ctrl_writes)); |
| 1047 mock_socket_factory_.AddSocketDataProvider(&ctrl_socket2); | 1048 mock_socket_factory_.AddSocketDataProvider(&ctrl_socket2); |
| 1048 ASSERT_EQ(ERR_IO_PENDING, transaction_.RestartWithAuth(L"foo\nownz0red", | 1049 ASSERT_EQ(ERR_IO_PENDING, |
| 1049 L"innocent", | 1050 transaction_.RestartWithAuth(ASCIIToUTF16("foo\nownz0red"), |
| 1050 &callback_)); | 1051 ASCIIToUTF16("innocent"), |
| 1052 &callback_)); |
| 1051 EXPECT_EQ(ERR_MALFORMED_IDENTITY, callback_.WaitForResult()); | 1053 EXPECT_EQ(ERR_MALFORMED_IDENTITY, callback_.WaitForResult()); |
| 1052 } | 1054 } |
| 1053 | 1055 |
| 1054 TEST_F(FtpNetworkTransactionTest, EvilRestartPassword) { | 1056 TEST_F(FtpNetworkTransactionTest, EvilRestartPassword) { |
| 1055 FtpSocketDataProvider ctrl_socket1; | 1057 FtpSocketDataProvider ctrl_socket1; |
| 1056 ctrl_socket1.InjectFailure(FtpSocketDataProvider::PRE_PASSWD, | 1058 ctrl_socket1.InjectFailure(FtpSocketDataProvider::PRE_PASSWD, |
| 1057 FtpSocketDataProvider::PRE_QUIT, | 1059 FtpSocketDataProvider::PRE_QUIT, |
| 1058 "530 Login authentication failed\r\n"); | 1060 "530 Login authentication failed\r\n"); |
| 1059 mock_socket_factory_.AddSocketDataProvider(&ctrl_socket1); | 1061 mock_socket_factory_.AddSocketDataProvider(&ctrl_socket1); |
| 1060 | 1062 |
| 1061 FtpRequestInfo request_info = GetRequestInfo("ftp://host/file"); | 1063 FtpRequestInfo request_info = GetRequestInfo("ftp://host/file"); |
| 1062 | 1064 |
| 1063 ASSERT_EQ(ERR_IO_PENDING, | 1065 ASSERT_EQ(ERR_IO_PENDING, |
| 1064 transaction_.Start(&request_info, &callback_, BoundNetLog())); | 1066 transaction_.Start(&request_info, &callback_, BoundNetLog())); |
| 1065 ASSERT_EQ(ERR_FTP_FAILED, callback_.WaitForResult()); | 1067 ASSERT_EQ(ERR_FTP_FAILED, callback_.WaitForResult()); |
| 1066 | 1068 |
| 1067 MockRead ctrl_reads[] = { | 1069 MockRead ctrl_reads[] = { |
| 1068 MockRead("220 host TestFTPd\r\n"), | 1070 MockRead("220 host TestFTPd\r\n"), |
| 1069 MockRead("331 User okay, send password\r\n"), | 1071 MockRead("331 User okay, send password\r\n"), |
| 1070 MockRead("221 Goodbye!\r\n"), | 1072 MockRead("221 Goodbye!\r\n"), |
| 1071 MockRead(false, OK), | 1073 MockRead(false, OK), |
| 1072 }; | 1074 }; |
| 1073 MockWrite ctrl_writes[] = { | 1075 MockWrite ctrl_writes[] = { |
| 1074 MockWrite("USER innocent\r\n"), | 1076 MockWrite("USER innocent\r\n"), |
| 1075 MockWrite("QUIT\r\n"), | 1077 MockWrite("QUIT\r\n"), |
| 1076 }; | 1078 }; |
| 1077 StaticSocketDataProvider ctrl_socket2(ctrl_reads, arraysize(ctrl_reads), | 1079 StaticSocketDataProvider ctrl_socket2(ctrl_reads, arraysize(ctrl_reads), |
| 1078 ctrl_writes, arraysize(ctrl_writes)); | 1080 ctrl_writes, arraysize(ctrl_writes)); |
| 1079 mock_socket_factory_.AddSocketDataProvider(&ctrl_socket2); | 1081 mock_socket_factory_.AddSocketDataProvider(&ctrl_socket2); |
| 1080 ASSERT_EQ(ERR_IO_PENDING, transaction_.RestartWithAuth(L"innocent", | 1082 ASSERT_EQ(ERR_IO_PENDING, |
| 1081 L"foo\nownz0red", | 1083 transaction_.RestartWithAuth(ASCIIToUTF16("innocent"), |
| 1082 &callback_)); | 1084 ASCIIToUTF16("foo\nownz0red"), |
| 1085 &callback_)); |
| 1083 EXPECT_EQ(ERR_MALFORMED_IDENTITY, callback_.WaitForResult()); | 1086 EXPECT_EQ(ERR_MALFORMED_IDENTITY, callback_.WaitForResult()); |
| 1084 } | 1087 } |
| 1085 | 1088 |
| 1086 TEST_F(FtpNetworkTransactionTest, Escaping) { | 1089 TEST_F(FtpNetworkTransactionTest, Escaping) { |
| 1087 FtpSocketDataProviderEscaping ctrl_socket; | 1090 FtpSocketDataProviderEscaping ctrl_socket; |
| 1088 ExecuteTransaction(&ctrl_socket, "ftp://host/%20%21%22%23%24%25%79%80%81", | 1091 ExecuteTransaction(&ctrl_socket, "ftp://host/%20%21%22%23%24%25%79%80%81", |
| 1089 OK); | 1092 OK); |
| 1090 } | 1093 } |
| 1091 | 1094 |
| 1092 // Test for http://crbug.com/23794. | 1095 // Test for http://crbug.com/23794. |
| (...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1337 FtpSocketDataProviderFileDownload ctrl_socket; | 1340 FtpSocketDataProviderFileDownload ctrl_socket; |
| 1338 TransactionFailHelper(&ctrl_socket, | 1341 TransactionFailHelper(&ctrl_socket, |
| 1339 "ftp://host/file", | 1342 "ftp://host/file", |
| 1340 FtpSocketDataProvider::PRE_PWD, | 1343 FtpSocketDataProvider::PRE_PWD, |
| 1341 FtpSocketDataProvider::PRE_TYPE, | 1344 FtpSocketDataProvider::PRE_TYPE, |
| 1342 "257 \"\"\r\n", | 1345 "257 \"\"\r\n", |
| 1343 OK); | 1346 OK); |
| 1344 } | 1347 } |
| 1345 | 1348 |
| 1346 } // namespace net | 1349 } // namespace net |
| OLD | NEW |