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 |