| 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 #include "base/ref_counted.h" | 9 #include "base/ref_counted.h" |
| 10 #include "net/base/io_buffer.h" | 10 #include "net/base/io_buffer.h" |
| (...skipping 697 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 708 // For compatibility with FileZilla, the transaction code will use two data | 708 // For compatibility with FileZilla, the transaction code will use two data |
| 709 // sockets for directory requests. For more info see http://crbug.com/25316. | 709 // sockets for directory requests. For more info see http://crbug.com/25316. |
| 710 StaticSocketDataProvider data1(data_reads, arraysize(data_reads), NULL, 0); | 710 StaticSocketDataProvider data1(data_reads, arraysize(data_reads), NULL, 0); |
| 711 StaticSocketDataProvider data2(data_reads, arraysize(data_reads), NULL, 0); | 711 StaticSocketDataProvider data2(data_reads, arraysize(data_reads), NULL, 0); |
| 712 mock_socket_factory_.AddSocketDataProvider(ctrl_socket); | 712 mock_socket_factory_.AddSocketDataProvider(ctrl_socket); |
| 713 mock_socket_factory_.AddSocketDataProvider(&data1); | 713 mock_socket_factory_.AddSocketDataProvider(&data1); |
| 714 mock_socket_factory_.AddSocketDataProvider(&data2); | 714 mock_socket_factory_.AddSocketDataProvider(&data2); |
| 715 FtpRequestInfo request_info = GetRequestInfo(request); | 715 FtpRequestInfo request_info = GetRequestInfo(request); |
| 716 EXPECT_EQ(LOAD_STATE_IDLE, transaction_.GetLoadState()); | 716 EXPECT_EQ(LOAD_STATE_IDLE, transaction_.GetLoadState()); |
| 717 ASSERT_EQ(ERR_IO_PENDING, | 717 ASSERT_EQ(ERR_IO_PENDING, |
| 718 transaction_.Start(&request_info, &callback_, NULL)); | 718 transaction_.Start(&request_info, &callback_, BoundNetLog())); |
| 719 EXPECT_NE(LOAD_STATE_IDLE, transaction_.GetLoadState()); | 719 EXPECT_NE(LOAD_STATE_IDLE, transaction_.GetLoadState()); |
| 720 ASSERT_EQ(expected_result, callback_.WaitForResult()); | 720 ASSERT_EQ(expected_result, callback_.WaitForResult()); |
| 721 if (expected_result == OK) { | 721 if (expected_result == OK) { |
| 722 scoped_refptr<IOBuffer> io_buffer(new IOBuffer(kBufferSize)); | 722 scoped_refptr<IOBuffer> io_buffer(new IOBuffer(kBufferSize)); |
| 723 memset(io_buffer->data(), 0, kBufferSize); | 723 memset(io_buffer->data(), 0, kBufferSize); |
| 724 ASSERT_EQ(ERR_IO_PENDING, | 724 ASSERT_EQ(ERR_IO_PENDING, |
| 725 transaction_.Read(io_buffer.get(), kBufferSize, &callback_)); | 725 transaction_.Read(io_buffer.get(), kBufferSize, &callback_)); |
| 726 ASSERT_EQ(static_cast<int>(mock_data.length()), | 726 ASSERT_EQ(static_cast<int>(mock_data.length()), |
| 727 callback_.WaitForResult()); | 727 callback_.WaitForResult()); |
| 728 EXPECT_EQ(mock_data, std::string(io_buffer->data(), mock_data.length())); | 728 EXPECT_EQ(mock_data, std::string(io_buffer->data(), mock_data.length())); |
| (...skipping 25 matching lines...) Expand all Loading... |
| 754 MockClientSocketFactory mock_socket_factory_; | 754 MockClientSocketFactory mock_socket_factory_; |
| 755 FtpNetworkTransaction transaction_; | 755 FtpNetworkTransaction transaction_; |
| 756 TestCompletionCallback callback_; | 756 TestCompletionCallback callback_; |
| 757 }; | 757 }; |
| 758 | 758 |
| 759 TEST_F(FtpNetworkTransactionTest, FailedLookup) { | 759 TEST_F(FtpNetworkTransactionTest, FailedLookup) { |
| 760 FtpRequestInfo request_info = GetRequestInfo("ftp://badhost"); | 760 FtpRequestInfo request_info = GetRequestInfo("ftp://badhost"); |
| 761 host_resolver_->rules()->AddSimulatedFailure("badhost"); | 761 host_resolver_->rules()->AddSimulatedFailure("badhost"); |
| 762 EXPECT_EQ(LOAD_STATE_IDLE, transaction_.GetLoadState()); | 762 EXPECT_EQ(LOAD_STATE_IDLE, transaction_.GetLoadState()); |
| 763 ASSERT_EQ(ERR_IO_PENDING, | 763 ASSERT_EQ(ERR_IO_PENDING, |
| 764 transaction_.Start(&request_info, &callback_, NULL)); | 764 transaction_.Start(&request_info, &callback_, BoundNetLog())); |
| 765 ASSERT_EQ(ERR_NAME_NOT_RESOLVED, callback_.WaitForResult()); | 765 ASSERT_EQ(ERR_NAME_NOT_RESOLVED, callback_.WaitForResult()); |
| 766 EXPECT_EQ(LOAD_STATE_IDLE, transaction_.GetLoadState()); | 766 EXPECT_EQ(LOAD_STATE_IDLE, transaction_.GetLoadState()); |
| 767 } | 767 } |
| 768 | 768 |
| 769 // Check that when determining the host, the square brackets decorating IPv6 | 769 // Check that when determining the host, the square brackets decorating IPv6 |
| 770 // literals in URLs are stripped. | 770 // literals in URLs are stripped. |
| 771 TEST_F(FtpNetworkTransactionTest, StripBracketsFromIPv6Literals) { | 771 TEST_F(FtpNetworkTransactionTest, StripBracketsFromIPv6Literals) { |
| 772 host_resolver_->rules()->AddSimulatedFailure("[::1]"); | 772 host_resolver_->rules()->AddSimulatedFailure("[::1]"); |
| 773 | 773 |
| 774 // We start a transaction that is expected to fail with ERR_INVALID_RESPONSE. | 774 // We start a transaction that is expected to fail with ERR_INVALID_RESPONSE. |
| (...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 955 MockRead(mock_data.c_str()), | 955 MockRead(mock_data.c_str()), |
| 956 }; | 956 }; |
| 957 StaticSocketDataProvider data_socket1(data_reads, arraysize(data_reads), | 957 StaticSocketDataProvider data_socket1(data_reads, arraysize(data_reads), |
| 958 NULL, 0); | 958 NULL, 0); |
| 959 mock_socket_factory_.AddSocketDataProvider(&ctrl_socket); | 959 mock_socket_factory_.AddSocketDataProvider(&ctrl_socket); |
| 960 mock_socket_factory_.AddSocketDataProvider(&data_socket1); | 960 mock_socket_factory_.AddSocketDataProvider(&data_socket1); |
| 961 FtpRequestInfo request_info = GetRequestInfo("ftp://host/file"); | 961 FtpRequestInfo request_info = GetRequestInfo("ftp://host/file"); |
| 962 | 962 |
| 963 // Start the transaction. | 963 // Start the transaction. |
| 964 ASSERT_EQ(ERR_IO_PENDING, | 964 ASSERT_EQ(ERR_IO_PENDING, |
| 965 transaction_.Start(&request_info, &callback_, NULL)); | 965 transaction_.Start(&request_info, &callback_, BoundNetLog())); |
| 966 ASSERT_EQ(OK, callback_.WaitForResult()); | 966 ASSERT_EQ(OK, callback_.WaitForResult()); |
| 967 | 967 |
| 968 // The transaction fires the callback when we can start reading data. That | 968 // The transaction fires the callback when we can start reading data. That |
| 969 // means that the data socket should be open. | 969 // means that the data socket should be open. |
| 970 MockTCPClientSocket* data_socket = | 970 MockTCPClientSocket* data_socket = |
| 971 mock_socket_factory_.GetMockTCPClientSocket(1); | 971 mock_socket_factory_.GetMockTCPClientSocket(1); |
| 972 ASSERT_TRUE(data_socket); | 972 ASSERT_TRUE(data_socket); |
| 973 ASSERT_TRUE(data_socket->IsConnected()); | 973 ASSERT_TRUE(data_socket->IsConnected()); |
| 974 | 974 |
| 975 // Even if the PASV response specified some other address, we connect | 975 // Even if the PASV response specified some other address, we connect |
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1078 TEST_F(FtpNetworkTransactionTest, EvilRestartUser) { | 1078 TEST_F(FtpNetworkTransactionTest, EvilRestartUser) { |
| 1079 FtpSocketDataProvider ctrl_socket1; | 1079 FtpSocketDataProvider ctrl_socket1; |
| 1080 ctrl_socket1.InjectFailure(FtpSocketDataProvider::PRE_PASSWD, | 1080 ctrl_socket1.InjectFailure(FtpSocketDataProvider::PRE_PASSWD, |
| 1081 FtpSocketDataProvider::PRE_QUIT, | 1081 FtpSocketDataProvider::PRE_QUIT, |
| 1082 "530 Login authentication failed\r\n"); | 1082 "530 Login authentication failed\r\n"); |
| 1083 mock_socket_factory_.AddSocketDataProvider(&ctrl_socket1); | 1083 mock_socket_factory_.AddSocketDataProvider(&ctrl_socket1); |
| 1084 | 1084 |
| 1085 FtpRequestInfo request_info = GetRequestInfo("ftp://host/file"); | 1085 FtpRequestInfo request_info = GetRequestInfo("ftp://host/file"); |
| 1086 | 1086 |
| 1087 ASSERT_EQ(ERR_IO_PENDING, | 1087 ASSERT_EQ(ERR_IO_PENDING, |
| 1088 transaction_.Start(&request_info, &callback_, NULL)); | 1088 transaction_.Start(&request_info, &callback_, BoundNetLog())); |
| 1089 ASSERT_EQ(ERR_FAILED, callback_.WaitForResult()); | 1089 ASSERT_EQ(ERR_FAILED, callback_.WaitForResult()); |
| 1090 | 1090 |
| 1091 MockRead ctrl_reads[] = { | 1091 MockRead ctrl_reads[] = { |
| 1092 MockRead("220 host TestFTPd\r\n"), | 1092 MockRead("220 host TestFTPd\r\n"), |
| 1093 MockRead("221 Goodbye!\r\n"), | 1093 MockRead("221 Goodbye!\r\n"), |
| 1094 MockRead(false, OK), | 1094 MockRead(false, OK), |
| 1095 }; | 1095 }; |
| 1096 MockWrite ctrl_writes[] = { | 1096 MockWrite ctrl_writes[] = { |
| 1097 MockWrite("QUIT\r\n"), | 1097 MockWrite("QUIT\r\n"), |
| 1098 }; | 1098 }; |
| 1099 StaticSocketDataProvider ctrl_socket2(ctrl_reads, arraysize(ctrl_reads), | 1099 StaticSocketDataProvider ctrl_socket2(ctrl_reads, arraysize(ctrl_reads), |
| 1100 ctrl_writes, arraysize(ctrl_writes)); | 1100 ctrl_writes, arraysize(ctrl_writes)); |
| 1101 mock_socket_factory_.AddSocketDataProvider(&ctrl_socket2); | 1101 mock_socket_factory_.AddSocketDataProvider(&ctrl_socket2); |
| 1102 ASSERT_EQ(ERR_IO_PENDING, transaction_.RestartWithAuth(L"foo\nownz0red", | 1102 ASSERT_EQ(ERR_IO_PENDING, transaction_.RestartWithAuth(L"foo\nownz0red", |
| 1103 L"innocent", | 1103 L"innocent", |
| 1104 &callback_)); | 1104 &callback_)); |
| 1105 EXPECT_EQ(ERR_MALFORMED_IDENTITY, callback_.WaitForResult()); | 1105 EXPECT_EQ(ERR_MALFORMED_IDENTITY, callback_.WaitForResult()); |
| 1106 } | 1106 } |
| 1107 | 1107 |
| 1108 TEST_F(FtpNetworkTransactionTest, EvilRestartPassword) { | 1108 TEST_F(FtpNetworkTransactionTest, EvilRestartPassword) { |
| 1109 FtpSocketDataProvider ctrl_socket1; | 1109 FtpSocketDataProvider ctrl_socket1; |
| 1110 ctrl_socket1.InjectFailure(FtpSocketDataProvider::PRE_PASSWD, | 1110 ctrl_socket1.InjectFailure(FtpSocketDataProvider::PRE_PASSWD, |
| 1111 FtpSocketDataProvider::PRE_QUIT, | 1111 FtpSocketDataProvider::PRE_QUIT, |
| 1112 "530 Login authentication failed\r\n"); | 1112 "530 Login authentication failed\r\n"); |
| 1113 mock_socket_factory_.AddSocketDataProvider(&ctrl_socket1); | 1113 mock_socket_factory_.AddSocketDataProvider(&ctrl_socket1); |
| 1114 | 1114 |
| 1115 FtpRequestInfo request_info = GetRequestInfo("ftp://host/file"); | 1115 FtpRequestInfo request_info = GetRequestInfo("ftp://host/file"); |
| 1116 | 1116 |
| 1117 ASSERT_EQ(ERR_IO_PENDING, | 1117 ASSERT_EQ(ERR_IO_PENDING, |
| 1118 transaction_.Start(&request_info, &callback_, NULL)); | 1118 transaction_.Start(&request_info, &callback_, BoundNetLog())); |
| 1119 ASSERT_EQ(ERR_FAILED, callback_.WaitForResult()); | 1119 ASSERT_EQ(ERR_FAILED, callback_.WaitForResult()); |
| 1120 | 1120 |
| 1121 MockRead ctrl_reads[] = { | 1121 MockRead ctrl_reads[] = { |
| 1122 MockRead("220 host TestFTPd\r\n"), | 1122 MockRead("220 host TestFTPd\r\n"), |
| 1123 MockRead("331 User okay, send password\r\n"), | 1123 MockRead("331 User okay, send password\r\n"), |
| 1124 MockRead("221 Goodbye!\r\n"), | 1124 MockRead("221 Goodbye!\r\n"), |
| 1125 MockRead(false, OK), | 1125 MockRead(false, OK), |
| 1126 }; | 1126 }; |
| 1127 MockWrite ctrl_writes[] = { | 1127 MockWrite ctrl_writes[] = { |
| 1128 MockWrite("USER innocent\r\n"), | 1128 MockWrite("USER innocent\r\n"), |
| (...skipping 265 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1394 FtpSocketDataProviderFileDownload ctrl_socket; | 1394 FtpSocketDataProviderFileDownload ctrl_socket; |
| 1395 TransactionFailHelper(&ctrl_socket, | 1395 TransactionFailHelper(&ctrl_socket, |
| 1396 "ftp://host/file", | 1396 "ftp://host/file", |
| 1397 FtpSocketDataProvider::PRE_PWD, | 1397 FtpSocketDataProvider::PRE_PWD, |
| 1398 FtpSocketDataProvider::PRE_TYPE, | 1398 FtpSocketDataProvider::PRE_TYPE, |
| 1399 "257 \"\"\r\n", | 1399 "257 \"\"\r\n", |
| 1400 OK); | 1400 OK); |
| 1401 } | 1401 } |
| 1402 | 1402 |
| 1403 } // namespace net | 1403 } // namespace net |
| OLD | NEW |