blob: e13a80d721745b7c857d1c41c6a3428e17708703 [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "net/ftp/ftp_auth_cache.h"
#include "net/ftp/ftp_transaction.h"
#include "net/ftp/ftp_transaction_factory.h"
#include "net/url_request/ftp_protocol_handler.h"
#include "net/url_request/url_request.h"
#include "net/url_request/url_request_context.h"
#include "net/url_request/url_request_ftp_job.h"
#include "net/url_request/url_request_status.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
using ::testing::Return;
using ::testing::_;
namespace net {
class MockFtpTransactionFactory : public FtpTransactionFactory {
public:
MOCK_METHOD0(CreateTransaction, FtpTransaction*());
MOCK_METHOD1(Suspend, void(bool suspend));
};
class MockURLRequestDelegate : public URLRequest::Delegate {
public:
MOCK_METHOD3(OnReceivedRedirect, void(URLRequest* request,
const GURL& new_url,
bool* defer_redirect));
MOCK_METHOD2(OnAuthRequired, void(URLRequest* request,
AuthChallengeInfo* auth_info));
MOCK_METHOD2(OnCertificateRequested,
void(URLRequest* request,
SSLCertRequestInfo* cert_request_info));
MOCK_METHOD3(OnSSLCertificateError, void(URLRequest* request,
const SSLInfo& ssl_info,
bool fatal));
MOCK_METHOD1(OnResponseStarted, void(URLRequest* request));
MOCK_METHOD2(OnReadCompleted, void(URLRequest* request, int bytes_read));
};
ACTION_P(HandleOnResponseStarted, expected_status) {
EXPECT_EQ(expected_status, arg0->status().status());
}
TEST(FtpProtocolHandlerTest, CreateTransactionFails) {
testing::InSequence in_sequence_;
::testing::StrictMock<MockFtpTransactionFactory> ftp_transaction_factory;
::testing::StrictMock<MockURLRequestDelegate> delegate;
FtpAuthCache ftp_auth_cache;
GURL url("ftp://example.com");
URLRequestContext context;
URLRequest url_request(url, &delegate, &context);
FtpProtocolHandler ftp_protocol_handler(
&ftp_transaction_factory, &ftp_auth_cache);
scoped_refptr<URLRequestJob> ftp_job(
ftp_protocol_handler.MaybeCreateJob(&url_request, NULL));
ASSERT_TRUE(ftp_job.get());
EXPECT_CALL(ftp_transaction_factory, CreateTransaction())
.WillOnce(Return(static_cast<FtpTransaction*>(NULL)));
ftp_job->Start();
EXPECT_CALL(delegate, OnResponseStarted(_))
.WillOnce(HandleOnResponseStarted(URLRequestStatus::FAILED));
MessageLoop::current()->RunUntilIdle();
EXPECT_FALSE(url_request.is_pending());
}
} // namespace net