Index: net/url_request/url_request_http_job_unittest.cc |
diff --git a/net/url_request/url_request_http_job_unittest.cc b/net/url_request/url_request_http_job_unittest.cc |
deleted file mode 100644 |
index 84fd7c061ae679842bec72f3ae0dbff80d34aaef..0000000000000000000000000000000000000000 |
--- a/net/url_request/url_request_http_job_unittest.cc |
+++ /dev/null |
@@ -1,353 +0,0 @@ |
-// Copyright (c) 2013 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/url_request/url_request_http_job.h" |
- |
-#include <cstddef> |
- |
-#include "base/compiler_specific.h" |
-#include "base/memory/ref_counted.h" |
-#include "base/memory/scoped_ptr.h" |
-#include "base/run_loop.h" |
-#include "net/base/auth.h" |
-#include "net/base/request_priority.h" |
-#include "net/http/http_transaction_factory.h" |
-#include "net/http/http_transaction_test_util.h" |
-#include "net/socket/socket_test_util.h" |
-#include "net/url_request/url_request.h" |
-#include "net/url_request/url_request_status.h" |
-#include "net/url_request/url_request_test_util.h" |
-#include "net/websockets/websocket_handshake_stream_base.h" |
-#include "testing/gmock/include/gmock/gmock.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
-#include "url/gurl.h" |
- |
-namespace net { |
- |
-namespace { |
- |
-using ::testing::Return; |
- |
-// Inherit from URLRequestHttpJob to expose the priority and some |
-// other hidden functions. |
-class TestURLRequestHttpJob : public URLRequestHttpJob { |
- public: |
- explicit TestURLRequestHttpJob(URLRequest* request) |
- : URLRequestHttpJob(request, request->context()->network_delegate(), |
- request->context()->http_user_agent_settings()) {} |
- |
- using URLRequestHttpJob::SetPriority; |
- using URLRequestHttpJob::Start; |
- using URLRequestHttpJob::Kill; |
- using URLRequestHttpJob::priority; |
- |
- protected: |
- ~TestURLRequestHttpJob() override {} |
-}; |
- |
-class URLRequestHttpJobTest : public ::testing::Test { |
- protected: |
- URLRequestHttpJobTest() |
- : req_(context_.CreateRequest(GURL("http://www.example.com"), |
- DEFAULT_PRIORITY, |
- &delegate_, |
- nullptr)) { |
- context_.set_http_transaction_factory(&network_layer_); |
- } |
- |
- bool TransactionAcceptsSdchEncoding() { |
- base::WeakPtr<MockNetworkTransaction> transaction( |
- network_layer_.last_transaction()); |
- EXPECT_TRUE(transaction); |
- if (!transaction) return false; |
- |
- const HttpRequestInfo* request_info = transaction->request(); |
- EXPECT_TRUE(request_info); |
- if (!request_info) return false; |
- |
- std::string encoding_headers; |
- bool get_success = request_info->extra_headers.GetHeader( |
- "Accept-Encoding", &encoding_headers); |
- EXPECT_TRUE(get_success); |
- if (!get_success) return false; |
- |
- // This check isn't wrapped with EXPECT* macros because different |
- // results from this function may be expected in different tests. |
- std::vector<std::string> tokens; |
- size_t num_tokens = Tokenize(encoding_headers, ", ", &tokens); |
- for (size_t i = 0; i < num_tokens; i++) { |
- if (!base::strncasecmp(tokens[i].data(), "sdch", tokens[i].length())) |
- return true; |
- } |
- return false; |
- } |
- |
- void EnableSdch() { |
- context_.SetSdchManager(scoped_ptr<SdchManager>(new SdchManager).Pass()); |
- } |
- |
- MockNetworkLayer network_layer_; |
- TestURLRequestContext context_; |
- TestDelegate delegate_; |
- scoped_ptr<URLRequest> req_; |
-}; |
- |
-// Make sure that SetPriority actually sets the URLRequestHttpJob's |
-// priority, both before and after start. |
-TEST_F(URLRequestHttpJobTest, SetPriorityBasic) { |
- scoped_refptr<TestURLRequestHttpJob> job( |
- new TestURLRequestHttpJob(req_.get())); |
- EXPECT_EQ(DEFAULT_PRIORITY, job->priority()); |
- |
- job->SetPriority(LOWEST); |
- EXPECT_EQ(LOWEST, job->priority()); |
- |
- job->SetPriority(LOW); |
- EXPECT_EQ(LOW, job->priority()); |
- |
- job->Start(); |
- EXPECT_EQ(LOW, job->priority()); |
- |
- job->SetPriority(MEDIUM); |
- EXPECT_EQ(MEDIUM, job->priority()); |
-} |
- |
-// Make sure that URLRequestHttpJob passes on its priority to its |
-// transaction on start. |
-TEST_F(URLRequestHttpJobTest, SetTransactionPriorityOnStart) { |
- scoped_refptr<TestURLRequestHttpJob> job( |
- new TestURLRequestHttpJob(req_.get())); |
- job->SetPriority(LOW); |
- |
- EXPECT_FALSE(network_layer_.last_transaction()); |
- |
- job->Start(); |
- |
- ASSERT_TRUE(network_layer_.last_transaction()); |
- EXPECT_EQ(LOW, network_layer_.last_transaction()->priority()); |
-} |
- |
-// Make sure that URLRequestHttpJob passes on its priority updates to |
-// its transaction. |
-TEST_F(URLRequestHttpJobTest, SetTransactionPriority) { |
- scoped_refptr<TestURLRequestHttpJob> job( |
- new TestURLRequestHttpJob(req_.get())); |
- job->SetPriority(LOW); |
- job->Start(); |
- ASSERT_TRUE(network_layer_.last_transaction()); |
- EXPECT_EQ(LOW, network_layer_.last_transaction()->priority()); |
- |
- job->SetPriority(HIGHEST); |
- EXPECT_EQ(HIGHEST, network_layer_.last_transaction()->priority()); |
-} |
- |
-// Make sure that URLRequestHttpJob passes on its priority updates to |
-// newly-created transactions after the first one. |
-TEST_F(URLRequestHttpJobTest, SetSubsequentTransactionPriority) { |
- scoped_refptr<TestURLRequestHttpJob> job( |
- new TestURLRequestHttpJob(req_.get())); |
- job->Start(); |
- |
- job->SetPriority(LOW); |
- ASSERT_TRUE(network_layer_.last_transaction()); |
- EXPECT_EQ(LOW, network_layer_.last_transaction()->priority()); |
- |
- job->Kill(); |
- network_layer_.ClearLastTransaction(); |
- |
- // Creates a second transaction. |
- job->Start(); |
- ASSERT_TRUE(network_layer_.last_transaction()); |
- EXPECT_EQ(LOW, network_layer_.last_transaction()->priority()); |
-} |
- |
-// Confirm we do advertise SDCH encoding in the case of a GET. |
-TEST_F(URLRequestHttpJobTest, SdchAdvertisementGet) { |
- EnableSdch(); |
- req_->set_method("GET"); // Redundant with default. |
- scoped_refptr<TestURLRequestHttpJob> job( |
- new TestURLRequestHttpJob(req_.get())); |
- job->Start(); |
- EXPECT_TRUE(TransactionAcceptsSdchEncoding()); |
-} |
- |
-// Confirm we don't advertise SDCH encoding in the case of a POST. |
-TEST_F(URLRequestHttpJobTest, SdchAdvertisementPost) { |
- EnableSdch(); |
- req_->set_method("POST"); |
- scoped_refptr<TestURLRequestHttpJob> job( |
- new TestURLRequestHttpJob(req_.get())); |
- job->Start(); |
- EXPECT_FALSE(TransactionAcceptsSdchEncoding()); |
-} |
- |
-// This base class just serves to set up some things before the TestURLRequest |
-// constructor is called. |
-class URLRequestHttpJobWebSocketTestBase : public ::testing::Test { |
- protected: |
- URLRequestHttpJobWebSocketTestBase() : socket_data_(nullptr, 0, nullptr, 0), |
- context_(true) { |
- // A Network Delegate is required for the WebSocketHandshakeStreamBase |
- // object to be passed on to the HttpNetworkTransaction. |
- context_.set_network_delegate(&network_delegate_); |
- |
- // Attempting to create real ClientSocketHandles is not going to work out so |
- // well. Set up a fake socket factory. |
- socket_factory_.AddSocketDataProvider(&socket_data_); |
- context_.set_client_socket_factory(&socket_factory_); |
- context_.Init(); |
- } |
- |
- StaticSocketDataProvider socket_data_; |
- TestNetworkDelegate network_delegate_; |
- MockClientSocketFactory socket_factory_; |
- TestURLRequestContext context_; |
-}; |
- |
-class URLRequestHttpJobWebSocketTest |
- : public URLRequestHttpJobWebSocketTestBase { |
- protected: |
- URLRequestHttpJobWebSocketTest() |
- : req_(context_.CreateRequest(GURL("ws://www.example.com"), |
- DEFAULT_PRIORITY, |
- &delegate_, |
- nullptr)) { |
- // The TestNetworkDelegate expects a call to NotifyBeforeURLRequest before |
- // anything else happens. |
- GURL url("ws://localhost/"); |
- TestCompletionCallback dummy; |
- network_delegate_.NotifyBeforeURLRequest( |
- req_.get(), dummy.callback(), &url); |
- } |
- |
- TestDelegate delegate_; |
- scoped_ptr<URLRequest> req_; |
-}; |
- |
-class MockCreateHelper : public WebSocketHandshakeStreamBase::CreateHelper { |
- public: |
- // GoogleMock does not appear to play nicely with move-only types like |
- // scoped_ptr, so this forwarding method acts as a workaround. |
- virtual WebSocketHandshakeStreamBase* CreateBasicStream( |
- scoped_ptr<ClientSocketHandle> connection, |
- bool using_proxy) override { |
- // Discard the arguments since we don't need them anyway. |
- return CreateBasicStreamMock(); |
- } |
- |
- MOCK_METHOD0(CreateBasicStreamMock, |
- WebSocketHandshakeStreamBase*()); |
- |
- MOCK_METHOD2(CreateSpdyStream, |
- WebSocketHandshakeStreamBase*(const base::WeakPtr<SpdySession>&, |
- bool)); |
-}; |
- |
-class FakeWebSocketHandshakeStream : public WebSocketHandshakeStreamBase { |
- public: |
- FakeWebSocketHandshakeStream() : initialize_stream_was_called_(false) {} |
- |
- bool initialize_stream_was_called() const { |
- return initialize_stream_was_called_; |
- } |
- |
- // Fake implementation of HttpStreamBase methods. |
- int InitializeStream(const HttpRequestInfo* request_info, |
- RequestPriority priority, |
- const BoundNetLog& net_log, |
- const CompletionCallback& callback) override { |
- initialize_stream_was_called_ = true; |
- return ERR_IO_PENDING; |
- } |
- |
- int SendRequest(const HttpRequestHeaders& request_headers, |
- HttpResponseInfo* response, |
- const CompletionCallback& callback) override { |
- return ERR_IO_PENDING; |
- } |
- |
- int ReadResponseHeaders(const CompletionCallback& callback) override { |
- return ERR_IO_PENDING; |
- } |
- |
- int ReadResponseBody(IOBuffer* buf, |
- int buf_len, |
- const CompletionCallback& callback) override { |
- return ERR_IO_PENDING; |
- } |
- |
- void Close(bool not_reusable) override {} |
- |
- bool IsResponseBodyComplete() const override { return false; } |
- |
- bool CanFindEndOfResponse() const override { return false; } |
- |
- bool IsConnectionReused() const override { return false; } |
- void SetConnectionReused() override {} |
- |
- bool IsConnectionReusable() const override { return false; } |
- |
- int64 GetTotalReceivedBytes() const override { return 0; } |
- |
- bool GetLoadTimingInfo(LoadTimingInfo* load_timing_info) const override { |
- return false; |
- } |
- |
- void GetSSLInfo(SSLInfo* ssl_info) override {} |
- |
- void GetSSLCertRequestInfo(SSLCertRequestInfo* cert_request_info) override {} |
- |
- bool IsSpdyHttpStream() const override { return false; } |
- |
- void Drain(HttpNetworkSession* session) override {} |
- |
- void SetPriority(RequestPriority priority) override {} |
- |
- UploadProgress GetUploadProgress() const override { |
- return UploadProgress(); |
- } |
- |
- HttpStream* RenewStreamForAuth() override { return nullptr; } |
- |
- // Fake implementation of WebSocketHandshakeStreamBase method(s) |
- scoped_ptr<WebSocketStream> Upgrade() override { |
- return scoped_ptr<WebSocketStream>(); |
- } |
- |
- private: |
- bool initialize_stream_was_called_; |
-}; |
- |
-TEST_F(URLRequestHttpJobWebSocketTest, RejectedWithoutCreateHelper) { |
- scoped_refptr<TestURLRequestHttpJob> job( |
- new TestURLRequestHttpJob(req_.get())); |
- job->Start(); |
- base::RunLoop().RunUntilIdle(); |
- EXPECT_EQ(URLRequestStatus::FAILED, req_->status().status()); |
- EXPECT_EQ(ERR_DISALLOWED_URL_SCHEME, req_->status().error()); |
-} |
- |
-TEST_F(URLRequestHttpJobWebSocketTest, CreateHelperPassedThrough) { |
- scoped_refptr<TestURLRequestHttpJob> job( |
- new TestURLRequestHttpJob(req_.get())); |
- scoped_ptr<MockCreateHelper> create_helper( |
- new ::testing::StrictMock<MockCreateHelper>()); |
- FakeWebSocketHandshakeStream* fake_handshake_stream( |
- new FakeWebSocketHandshakeStream); |
- // Ownership of fake_handshake_stream is transferred when CreateBasicStream() |
- // is called. |
- EXPECT_CALL(*create_helper, CreateBasicStreamMock()) |
- .WillOnce(Return(fake_handshake_stream)); |
- req_->SetUserData(WebSocketHandshakeStreamBase::CreateHelper::DataKey(), |
- create_helper.release()); |
- req_->SetLoadFlags(LOAD_DISABLE_CACHE); |
- job->Start(); |
- base::RunLoop().RunUntilIdle(); |
- EXPECT_EQ(URLRequestStatus::IO_PENDING, req_->status().status()); |
- EXPECT_TRUE(fake_handshake_stream->initialize_stream_was_called()); |
-} |
- |
-} // namespace |
- |
-} // namespace net |