summaryrefslogtreecommitdiffstats
path: root/net/ftp/ftp_network_transaction_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'net/ftp/ftp_network_transaction_unittest.cc')
-rw-r--r--net/ftp/ftp_network_transaction_unittest.cc101
1 files changed, 55 insertions, 46 deletions
diff --git a/net/ftp/ftp_network_transaction_unittest.cc b/net/ftp/ftp_network_transaction_unittest.cc
index d381b0b..51cf77b 100644
--- a/net/ftp/ftp_network_transaction_unittest.cc
+++ b/net/ftp/ftp_network_transaction_unittest.cc
@@ -235,15 +235,16 @@ class FtpNetworkTransactionTest : public PlatformTest {
return info;
}
- void TransactionFailHelper(FtpMockControlSocket* ctrl_socket,
- const char* request,
- FtpMockControlSocket::State state,
- FtpMockControlSocket::State next_state,
- const char* response,
- int expected_result) {
- ctrl_socket->InjectFailure(state, next_state, response);
- StaticMockSocket data_socket1;
- StaticMockSocket data_socket2;
+ void ExecuteTransaction(FtpMockControlSocket* ctrl_socket,
+ const char* request,
+ int expected_result) {
+ std::string mock_data("mock-data");
+ MockRead data_reads[] = {
+ MockRead(mock_data.c_str()),
+ };
+ // TODO(phajdan.jr): FTP transaction should not open two data sockets.
+ StaticMockSocket data_socket1(data_reads, NULL);
+ StaticMockSocket data_socket2(data_reads, NULL);
mock_socket_factory_.AddMockSocket(ctrl_socket);
mock_socket_factory_.AddMockSocket(&data_socket1);
mock_socket_factory_.AddMockSocket(&data_socket2);
@@ -251,6 +252,25 @@ class FtpNetworkTransactionTest : public PlatformTest {
ASSERT_EQ(ERR_IO_PENDING, transaction_.Start(&request_info, &callback_));
EXPECT_EQ(expected_result, callback_.WaitForResult());
EXPECT_EQ(FtpMockControlSocket::QUIT, ctrl_socket->state());
+ if (expected_result == OK) {
+ scoped_refptr<IOBuffer> io_buffer(new IOBuffer(kBufferSize));
+ memset(io_buffer->data(), 0, kBufferSize);
+ ASSERT_EQ(ERR_IO_PENDING,
+ transaction_.Read(io_buffer.get(), kBufferSize, &callback_));
+ EXPECT_EQ(static_cast<int>(mock_data.length()),
+ callback_.WaitForResult());
+ EXPECT_EQ(mock_data, std::string(io_buffer->data(), mock_data.length()));
+ }
+ }
+
+ void TransactionFailHelper(FtpMockControlSocket* ctrl_socket,
+ const char* request,
+ FtpMockControlSocket::State state,
+ FtpMockControlSocket::State next_state,
+ const char* response,
+ int expected_result) {
+ ctrl_socket->InjectFailure(state, next_state, response);
+ ExecuteTransaction(ctrl_socket, request, expected_result);
}
scoped_refptr<FtpNetworkSession> session_;
@@ -270,47 +290,36 @@ TEST_F(FtpNetworkTransactionTest, FailedLookup) {
TEST_F(FtpNetworkTransactionTest, DirectoryTransaction) {
FtpMockControlSocketDirectoryListing ctrl_socket;
- std::string test_string("mock-directory-listing");
- MockRead data_reads[] = {
- MockRead(test_string.c_str()),
- };
- // TODO(phajdan.jr): FTP transaction should not open two data sockets.
- StaticMockSocket data_socket1;
- StaticMockSocket data_socket2(data_reads, NULL);
- mock_socket_factory_.AddMockSocket(&ctrl_socket);
- mock_socket_factory_.AddMockSocket(&data_socket1);
- mock_socket_factory_.AddMockSocket(&data_socket2);
- FtpRequestInfo request_info = GetRequestInfo("ftp://host");
- ASSERT_EQ(ERR_IO_PENDING, transaction_.Start(&request_info, &callback_));
- EXPECT_EQ(OK, callback_.WaitForResult());
- EXPECT_EQ(FtpMockControlSocket::QUIT, ctrl_socket.state());
- scoped_refptr<IOBuffer> io_buffer(new IOBuffer(kBufferSize));
- memset(io_buffer->data(), 0, kBufferSize);
- EXPECT_EQ(ERR_IO_PENDING,
- transaction_.Read(io_buffer.get(), kBufferSize, &callback_));
- EXPECT_EQ(static_cast<int>(test_string.length()), callback_.WaitForResult());
- EXPECT_EQ(test_string, std::string(io_buffer->data(), test_string.length()));
+ ExecuteTransaction(&ctrl_socket, "ftp://host", OK);
+}
+
+TEST_F(FtpNetworkTransactionTest, DirectoryTransactionShortReads2) {
+ FtpMockControlSocketDirectoryListing ctrl_socket;
+ ctrl_socket.set_short_read_limit(2);
+ ExecuteTransaction(&ctrl_socket, "ftp://host", OK);
+}
+
+TEST_F(FtpNetworkTransactionTest, DirectoryTransactionShortReads5) {
+ FtpMockControlSocketDirectoryListing ctrl_socket;
+ ctrl_socket.set_short_read_limit(5);
+ ExecuteTransaction(&ctrl_socket, "ftp://host", OK);
}
TEST_F(FtpNetworkTransactionTest, DownloadTransaction) {
FtpMockControlSocketFileDownload ctrl_socket;
- std::string test_string("mock-file-contents");
- MockRead data_reads[] = {
- MockRead(test_string.c_str()),
- };
- StaticMockSocket data_socket(data_reads, NULL);
- mock_socket_factory_.AddMockSocket(&ctrl_socket);
- mock_socket_factory_.AddMockSocket(&data_socket);
- FtpRequestInfo request_info = GetRequestInfo("ftp://host/file");
- ASSERT_EQ(ERR_IO_PENDING, transaction_.Start(&request_info, &callback_));
- EXPECT_EQ(OK, callback_.WaitForResult());
- EXPECT_EQ(FtpMockControlSocket::QUIT, ctrl_socket.state());
- scoped_refptr<IOBuffer> io_buffer(new IOBuffer(kBufferSize));
- memset(io_buffer->data(), 0, kBufferSize);
- EXPECT_EQ(ERR_IO_PENDING,
- transaction_.Read(io_buffer.get(), kBufferSize, &callback_));
- EXPECT_EQ(static_cast<int>(test_string.length()), callback_.WaitForResult());
- EXPECT_EQ(test_string, std::string(io_buffer->data(), test_string.length()));
+ ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK);
+}
+
+TEST_F(FtpNetworkTransactionTest, DownloadTransactionShortReads2) {
+ FtpMockControlSocketFileDownload ctrl_socket;
+ ctrl_socket.set_short_read_limit(2);
+ ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK);
+}
+
+TEST_F(FtpNetworkTransactionTest, DownloadTransactionShortReads5) {
+ FtpMockControlSocketFileDownload ctrl_socket;
+ ctrl_socket.set_short_read_limit(5);
+ ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK);
}
TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailUser) {