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

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

Issue 149043: Make new FtpNetworkTransaction handle short reads correctly.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: updated Created 11 years, 5 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 | Annotate | Revision Log
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 "base/ref_counted.h" 7 #include "base/ref_counted.h"
8 #include "net/base/host_resolver.h" 8 #include "net/base/host_resolver.h"
9 #include "net/base/host_resolver_unittest.h" 9 #include "net/base/host_resolver_unittest.h"
10 #include "net/base/io_buffer.h" 10 #include "net/base/io_buffer.h"
(...skipping 217 matching lines...) Expand 10 before | Expand all | Expand 10 after
228 transaction_(session_.get(), &mock_socket_factory_) { 228 transaction_(session_.get(), &mock_socket_factory_) {
229 } 229 }
230 230
231 protected: 231 protected:
232 FtpRequestInfo GetRequestInfo(const std::string& url) { 232 FtpRequestInfo GetRequestInfo(const std::string& url) {
233 FtpRequestInfo info; 233 FtpRequestInfo info;
234 info.url = GURL(url); 234 info.url = GURL(url);
235 return info; 235 return info;
236 } 236 }
237 237
238 void TransactionFailHelper(FtpMockControlSocket* ctrl_socket, 238 void ExecuteTransaction(FtpMockControlSocket* ctrl_socket,
239 const char* request, 239 const char* request,
240 FtpMockControlSocket::State state, 240 int expected_result) {
241 FtpMockControlSocket::State next_state, 241 std::string mock_data("mock-data");
242 const char* response, 242 MockRead data_reads[] = {
243 int expected_result) { 243 MockRead(mock_data.c_str()),
244 ctrl_socket->InjectFailure(state, next_state, response); 244 };
245 StaticMockSocket data_socket1; 245 // TODO(phajdan.jr): FTP transaction should not open two data sockets.
246 StaticMockSocket data_socket2; 246 StaticMockSocket data_socket1(data_reads, NULL);
247 StaticMockSocket data_socket2(data_reads, NULL);
247 mock_socket_factory_.AddMockSocket(ctrl_socket); 248 mock_socket_factory_.AddMockSocket(ctrl_socket);
248 mock_socket_factory_.AddMockSocket(&data_socket1); 249 mock_socket_factory_.AddMockSocket(&data_socket1);
249 mock_socket_factory_.AddMockSocket(&data_socket2); 250 mock_socket_factory_.AddMockSocket(&data_socket2);
250 FtpRequestInfo request_info = GetRequestInfo(request); 251 FtpRequestInfo request_info = GetRequestInfo(request);
251 ASSERT_EQ(ERR_IO_PENDING, transaction_.Start(&request_info, &callback_)); 252 ASSERT_EQ(ERR_IO_PENDING, transaction_.Start(&request_info, &callback_));
252 EXPECT_EQ(expected_result, callback_.WaitForResult()); 253 EXPECT_EQ(expected_result, callback_.WaitForResult());
253 EXPECT_EQ(FtpMockControlSocket::QUIT, ctrl_socket->state()); 254 EXPECT_EQ(FtpMockControlSocket::QUIT, ctrl_socket->state());
255 if (expected_result == OK) {
256 scoped_refptr<IOBuffer> io_buffer(new IOBuffer(kBufferSize));
257 memset(io_buffer->data(), 0, kBufferSize);
258 ASSERT_EQ(ERR_IO_PENDING,
259 transaction_.Read(io_buffer.get(), kBufferSize, &callback_));
260 EXPECT_EQ(static_cast<int>(mock_data.length()),
261 callback_.WaitForResult());
262 EXPECT_EQ(mock_data, std::string(io_buffer->data(), mock_data.length()));
263 }
264 }
265
266 void TransactionFailHelper(FtpMockControlSocket* ctrl_socket,
267 const char* request,
268 FtpMockControlSocket::State state,
269 FtpMockControlSocket::State next_state,
270 const char* response,
271 int expected_result) {
272 ctrl_socket->InjectFailure(state, next_state, response);
273 ExecuteTransaction(ctrl_socket, request, expected_result);
254 } 274 }
255 275
256 scoped_refptr<FtpNetworkSession> session_; 276 scoped_refptr<FtpNetworkSession> session_;
257 MockClientSocketFactory mock_socket_factory_; 277 MockClientSocketFactory mock_socket_factory_;
258 FtpNetworkTransaction transaction_; 278 FtpNetworkTransaction transaction_;
259 TestCompletionCallback callback_; 279 TestCompletionCallback callback_;
260 }; 280 };
261 281
262 TEST_F(FtpNetworkTransactionTest, FailedLookup) { 282 TEST_F(FtpNetworkTransactionTest, FailedLookup) {
263 FtpRequestInfo request_info = GetRequestInfo("ftp://badhost"); 283 FtpRequestInfo request_info = GetRequestInfo("ftp://badhost");
264 scoped_refptr<RuleBasedHostMapper> mapper(new RuleBasedHostMapper()); 284 scoped_refptr<RuleBasedHostMapper> mapper(new RuleBasedHostMapper());
265 mapper->AddSimulatedFailure("badhost"); 285 mapper->AddSimulatedFailure("badhost");
266 ScopedHostMapper scoped_mapper(mapper.get()); 286 ScopedHostMapper scoped_mapper(mapper.get());
267 ASSERT_EQ(ERR_IO_PENDING, transaction_.Start(&request_info, &callback_)); 287 ASSERT_EQ(ERR_IO_PENDING, transaction_.Start(&request_info, &callback_));
268 EXPECT_EQ(ERR_FAILED, callback_.WaitForResult()); 288 EXPECT_EQ(ERR_FAILED, callback_.WaitForResult());
269 } 289 }
270 290
271 TEST_F(FtpNetworkTransactionTest, DirectoryTransaction) { 291 TEST_F(FtpNetworkTransactionTest, DirectoryTransaction) {
272 FtpMockControlSocketDirectoryListing ctrl_socket; 292 FtpMockControlSocketDirectoryListing ctrl_socket;
273 std::string test_string("mock-directory-listing"); 293 ExecuteTransaction(&ctrl_socket, "ftp://host", OK);
274 MockRead data_reads[] = { 294 }
275 MockRead(test_string.c_str()), 295
276 }; 296 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionShortReads2) {
277 // TODO(phajdan.jr): FTP transaction should not open two data sockets. 297 FtpMockControlSocketDirectoryListing ctrl_socket;
278 StaticMockSocket data_socket1; 298 ctrl_socket.set_short_read_limit(2);
279 StaticMockSocket data_socket2(data_reads, NULL); 299 ExecuteTransaction(&ctrl_socket, "ftp://host", OK);
280 mock_socket_factory_.AddMockSocket(&ctrl_socket); 300 }
281 mock_socket_factory_.AddMockSocket(&data_socket1); 301
282 mock_socket_factory_.AddMockSocket(&data_socket2); 302 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionShortReads5) {
283 FtpRequestInfo request_info = GetRequestInfo("ftp://host"); 303 FtpMockControlSocketDirectoryListing ctrl_socket;
284 ASSERT_EQ(ERR_IO_PENDING, transaction_.Start(&request_info, &callback_)); 304 ctrl_socket.set_short_read_limit(5);
285 EXPECT_EQ(OK, callback_.WaitForResult()); 305 ExecuteTransaction(&ctrl_socket, "ftp://host", OK);
286 EXPECT_EQ(FtpMockControlSocket::QUIT, ctrl_socket.state());
287 scoped_refptr<IOBuffer> io_buffer(new IOBuffer(kBufferSize));
288 memset(io_buffer->data(), 0, kBufferSize);
289 EXPECT_EQ(ERR_IO_PENDING,
290 transaction_.Read(io_buffer.get(), kBufferSize, &callback_));
291 EXPECT_EQ(static_cast<int>(test_string.length()), callback_.WaitForResult());
292 EXPECT_EQ(test_string, std::string(io_buffer->data(), test_string.length()));
293 } 306 }
294 307
295 TEST_F(FtpNetworkTransactionTest, DownloadTransaction) { 308 TEST_F(FtpNetworkTransactionTest, DownloadTransaction) {
296 FtpMockControlSocketFileDownload ctrl_socket; 309 FtpMockControlSocketFileDownload ctrl_socket;
297 std::string test_string("mock-file-contents"); 310 ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK);
298 MockRead data_reads[] = { 311 }
299 MockRead(test_string.c_str()), 312
300 }; 313 TEST_F(FtpNetworkTransactionTest, DownloadTransactionShortReads2) {
301 StaticMockSocket data_socket(data_reads, NULL); 314 FtpMockControlSocketFileDownload ctrl_socket;
302 mock_socket_factory_.AddMockSocket(&ctrl_socket); 315 ctrl_socket.set_short_read_limit(2);
303 mock_socket_factory_.AddMockSocket(&data_socket); 316 ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK);
304 FtpRequestInfo request_info = GetRequestInfo("ftp://host/file"); 317 }
305 ASSERT_EQ(ERR_IO_PENDING, transaction_.Start(&request_info, &callback_)); 318
306 EXPECT_EQ(OK, callback_.WaitForResult()); 319 TEST_F(FtpNetworkTransactionTest, DownloadTransactionShortReads5) {
307 EXPECT_EQ(FtpMockControlSocket::QUIT, ctrl_socket.state()); 320 FtpMockControlSocketFileDownload ctrl_socket;
308 scoped_refptr<IOBuffer> io_buffer(new IOBuffer(kBufferSize)); 321 ctrl_socket.set_short_read_limit(5);
309 memset(io_buffer->data(), 0, kBufferSize); 322 ExecuteTransaction(&ctrl_socket, "ftp://host/file", OK);
310 EXPECT_EQ(ERR_IO_PENDING,
311 transaction_.Read(io_buffer.get(), kBufferSize, &callback_));
312 EXPECT_EQ(static_cast<int>(test_string.length()), callback_.WaitForResult());
313 EXPECT_EQ(test_string, std::string(io_buffer->data(), test_string.length()));
314 } 323 }
315 324
316 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailUser) { 325 TEST_F(FtpNetworkTransactionTest, DirectoryTransactionFailUser) {
317 FtpMockControlSocketDirectoryListing ctrl_socket; 326 FtpMockControlSocketDirectoryListing ctrl_socket;
318 TransactionFailHelper(&ctrl_socket, 327 TransactionFailHelper(&ctrl_socket,
319 "ftp://host", 328 "ftp://host",
320 FtpMockControlSocket::PRE_USER, 329 FtpMockControlSocket::PRE_USER,
321 FtpMockControlSocket::PRE_QUIT, 330 FtpMockControlSocket::PRE_QUIT,
322 "500 no such user\r\n", 331 "500 no such user\r\n",
323 ERR_FAILED); 332 ERR_FAILED);
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after
497 FtpMockControlSocketFileDownloadRetrFail ctrl_socket; 506 FtpMockControlSocketFileDownloadRetrFail ctrl_socket;
498 TransactionFailHelper(&ctrl_socket, 507 TransactionFailHelper(&ctrl_socket,
499 "ftp://host/file", 508 "ftp://host/file",
500 FtpMockControlSocket::PRE_RETR, 509 FtpMockControlSocket::PRE_RETR,
501 FtpMockControlSocket::PRE_PASV2, 510 FtpMockControlSocket::PRE_PASV2,
502 "500 failed retr\r\n", 511 "500 failed retr\r\n",
503 ERR_FAILED); 512 ERR_FAILED);
504 } 513 }
505 514
506 } // namespace net 515 } // namespace net
OLDNEW
« net/ftp/ftp_network_transaction.cc ('K') | « net/ftp/ftp_network_transaction.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698