Index: net/proxy/dhcp_proxy_script_adapter_fetcher_win_unittest.cc |
diff --git a/net/proxy/dhcp_proxy_script_adapter_fetcher_win_unittest.cc b/net/proxy/dhcp_proxy_script_adapter_fetcher_win_unittest.cc |
deleted file mode 100644 |
index af858d6348a3bd9092d8b9b173cb15fdf8df3117..0000000000000000000000000000000000000000 |
--- a/net/proxy/dhcp_proxy_script_adapter_fetcher_win_unittest.cc |
+++ /dev/null |
@@ -1,338 +0,0 @@ |
-// 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/proxy/dhcp_proxy_script_adapter_fetcher_win.h" |
- |
-#include "base/synchronization/waitable_event.h" |
-#include "base/test/test_timeouts.h" |
-#include "base/threading/sequenced_worker_pool.h" |
-#include "base/timer/elapsed_timer.h" |
-#include "base/timer/timer.h" |
-#include "net/base/net_errors.h" |
-#include "net/base/test_completion_callback.h" |
-#include "net/proxy/mock_proxy_script_fetcher.h" |
-#include "net/proxy/proxy_script_fetcher_impl.h" |
-#include "net/test/spawned_test_server/spawned_test_server.h" |
-#include "net/url_request/url_request_test_util.h" |
-#include "testing/gtest/include/gtest/gtest.h" |
- |
-namespace net { |
- |
-namespace { |
- |
-const char kPacUrl[] = "http://pacserver/script.pac"; |
- |
-// In net/proxy/dhcp_proxy_script_fetcher_win_unittest.cc there are a few |
-// tests that exercise DhcpProxyScriptAdapterFetcher end-to-end along with |
-// DhcpProxyScriptFetcherWin, i.e. it tests the end-to-end usage of Win32 |
-// APIs and the network. In this file we test only by stubbing out |
-// functionality. |
- |
-// Version of DhcpProxyScriptAdapterFetcher that mocks out dependencies |
-// to allow unit testing. |
-class MockDhcpProxyScriptAdapterFetcher |
- : public DhcpProxyScriptAdapterFetcher { |
- public: |
- explicit MockDhcpProxyScriptAdapterFetcher( |
- URLRequestContext* context, |
- scoped_refptr<base::TaskRunner> task_runner) |
- : DhcpProxyScriptAdapterFetcher(context, task_runner), |
- dhcp_delay_(base::TimeDelta::FromMilliseconds(1)), |
- timeout_(TestTimeouts::action_timeout()), |
- configured_url_(kPacUrl), |
- fetcher_delay_ms_(1), |
- fetcher_result_(OK), |
- pac_script_("bingo") { |
- } |
- |
- void Cancel() { |
- DhcpProxyScriptAdapterFetcher::Cancel(); |
- fetcher_ = NULL; |
- } |
- |
- virtual ProxyScriptFetcher* ImplCreateScriptFetcher() override { |
- // We don't maintain ownership of the fetcher, it is transferred to |
- // the caller. |
- fetcher_ = new MockProxyScriptFetcher(); |
- if (fetcher_delay_ms_ != -1) { |
- fetcher_timer_.Start(FROM_HERE, |
- base::TimeDelta::FromMilliseconds(fetcher_delay_ms_), |
- this, &MockDhcpProxyScriptAdapterFetcher::OnFetcherTimer); |
- } |
- return fetcher_; |
- } |
- |
- class DelayingDhcpQuery : public DhcpQuery { |
- public: |
- explicit DelayingDhcpQuery() |
- : DhcpQuery(), |
- test_finished_event_(true, false) { |
- } |
- |
- std::string ImplGetPacURLFromDhcp( |
- const std::string& adapter_name) override { |
- base::ElapsedTimer timer; |
- test_finished_event_.TimedWait(dhcp_delay_); |
- return configured_url_; |
- } |
- |
- base::WaitableEvent test_finished_event_; |
- base::TimeDelta dhcp_delay_; |
- std::string configured_url_; |
- }; |
- |
- virtual DhcpQuery* ImplCreateDhcpQuery() override { |
- dhcp_query_ = new DelayingDhcpQuery(); |
- dhcp_query_->dhcp_delay_ = dhcp_delay_; |
- dhcp_query_->configured_url_ = configured_url_; |
- return dhcp_query_.get(); |
- } |
- |
- // Use a shorter timeout so tests can finish more quickly. |
- virtual base::TimeDelta ImplGetTimeout() const override { |
- return timeout_; |
- } |
- |
- void OnFetcherTimer() { |
- // Note that there is an assumption by this mock implementation that |
- // DhcpProxyScriptAdapterFetcher::Fetch will call ImplCreateScriptFetcher |
- // and call Fetch on the fetcher before the message loop is re-entered. |
- // This holds true today, but if you hit this DCHECK the problem can |
- // possibly be resolved by having a separate subclass of |
- // MockProxyScriptFetcher that adds the delay internally (instead of |
- // the simple approach currently used in ImplCreateScriptFetcher above). |
- DCHECK(fetcher_ && fetcher_->has_pending_request()); |
- fetcher_->NotifyFetchCompletion(fetcher_result_, pac_script_); |
- fetcher_ = NULL; |
- } |
- |
- bool IsWaitingForFetcher() const { |
- return state() == STATE_WAIT_URL; |
- } |
- |
- bool WasCancelled() const { |
- return state() == STATE_CANCEL; |
- } |
- |
- void FinishTest() { |
- DCHECK(dhcp_query_.get()); |
- dhcp_query_->test_finished_event_.Signal(); |
- } |
- |
- base::TimeDelta dhcp_delay_; |
- base::TimeDelta timeout_; |
- std::string configured_url_; |
- int fetcher_delay_ms_; |
- int fetcher_result_; |
- std::string pac_script_; |
- MockProxyScriptFetcher* fetcher_; |
- base::OneShotTimer<MockDhcpProxyScriptAdapterFetcher> fetcher_timer_; |
- scoped_refptr<DelayingDhcpQuery> dhcp_query_; |
-}; |
- |
-class FetcherClient { |
- public: |
- FetcherClient() |
- : url_request_context_(new TestURLRequestContext()), |
- worker_pool_( |
- new base::SequencedWorkerPool(4, "DhcpAdapterFetcherTest")), |
- fetcher_(new MockDhcpProxyScriptAdapterFetcher( |
- url_request_context_.get(), |
- worker_pool_->GetTaskRunnerWithShutdownBehavior( |
- base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN))) { |
- } |
- |
- ~FetcherClient() { |
- worker_pool_->Shutdown(); |
- } |
- |
- void WaitForResult(int expected_error) { |
- EXPECT_EQ(expected_error, callback_.WaitForResult()); |
- } |
- |
- void RunTest() { |
- fetcher_->Fetch("adapter name", callback_.callback()); |
- } |
- |
- void FinishTestAllowCleanup() { |
- fetcher_->FinishTest(); |
- base::MessageLoop::current()->RunUntilIdle(); |
- } |
- |
- TestCompletionCallback callback_; |
- scoped_ptr<URLRequestContext> url_request_context_; |
- scoped_refptr<base::SequencedWorkerPool> worker_pool_; |
- scoped_ptr<MockDhcpProxyScriptAdapterFetcher> fetcher_; |
- base::string16 pac_text_; |
-}; |
- |
-TEST(DhcpProxyScriptAdapterFetcher, NormalCaseURLNotInDhcp) { |
- FetcherClient client; |
- client.fetcher_->configured_url_ = ""; |
- client.RunTest(); |
- client.WaitForResult(ERR_PAC_NOT_IN_DHCP); |
- ASSERT_TRUE(client.fetcher_->DidFinish()); |
- EXPECT_EQ(ERR_PAC_NOT_IN_DHCP, client.fetcher_->GetResult()); |
- EXPECT_EQ(base::string16(L""), client.fetcher_->GetPacScript()); |
-} |
- |
-TEST(DhcpProxyScriptAdapterFetcher, NormalCaseURLInDhcp) { |
- FetcherClient client; |
- client.RunTest(); |
- client.WaitForResult(OK); |
- ASSERT_TRUE(client.fetcher_->DidFinish()); |
- EXPECT_EQ(OK, client.fetcher_->GetResult()); |
- EXPECT_EQ(base::string16(L"bingo"), client.fetcher_->GetPacScript()); |
- EXPECT_EQ(GURL(kPacUrl), client.fetcher_->GetPacURL()); |
-} |
- |
-TEST(DhcpProxyScriptAdapterFetcher, TimeoutDuringDhcp) { |
- // Does a Fetch() with a long enough delay on accessing DHCP that the |
- // fetcher should time out. This is to test a case manual testing found, |
- // where under certain circumstances (e.g. adapter enabled for DHCP and |
- // needs to retrieve its configuration from DHCP, but no DHCP server |
- // present on the network) accessing DHCP can take on the order of tens |
- // of seconds. |
- FetcherClient client; |
- client.fetcher_->dhcp_delay_ = TestTimeouts::action_max_timeout(); |
- client.fetcher_->timeout_ = base::TimeDelta::FromMilliseconds(25); |
- |
- base::ElapsedTimer timer; |
- client.RunTest(); |
- // An error different from this would be received if the timeout didn't |
- // kick in. |
- client.WaitForResult(ERR_TIMED_OUT); |
- |
- ASSERT_TRUE(client.fetcher_->DidFinish()); |
- EXPECT_EQ(ERR_TIMED_OUT, client.fetcher_->GetResult()); |
- EXPECT_EQ(base::string16(L""), client.fetcher_->GetPacScript()); |
- EXPECT_EQ(GURL(), client.fetcher_->GetPacURL()); |
- client.FinishTestAllowCleanup(); |
-} |
- |
-TEST(DhcpProxyScriptAdapterFetcher, CancelWhileDhcp) { |
- FetcherClient client; |
- client.RunTest(); |
- client.fetcher_->Cancel(); |
- base::MessageLoop::current()->RunUntilIdle(); |
- ASSERT_FALSE(client.fetcher_->DidFinish()); |
- ASSERT_TRUE(client.fetcher_->WasCancelled()); |
- EXPECT_EQ(ERR_ABORTED, client.fetcher_->GetResult()); |
- EXPECT_EQ(base::string16(L""), client.fetcher_->GetPacScript()); |
- EXPECT_EQ(GURL(), client.fetcher_->GetPacURL()); |
- client.FinishTestAllowCleanup(); |
-} |
- |
-TEST(DhcpProxyScriptAdapterFetcher, CancelWhileFetcher) { |
- FetcherClient client; |
- // This causes the mock fetcher not to pretend the |
- // fetcher finishes after a timeout. |
- client.fetcher_->fetcher_delay_ms_ = -1; |
- client.RunTest(); |
- int max_loops = 4; |
- while (!client.fetcher_->IsWaitingForFetcher() && max_loops--) { |
- base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(10)); |
- base::MessageLoop::current()->RunUntilIdle(); |
- } |
- client.fetcher_->Cancel(); |
- base::MessageLoop::current()->RunUntilIdle(); |
- ASSERT_FALSE(client.fetcher_->DidFinish()); |
- ASSERT_TRUE(client.fetcher_->WasCancelled()); |
- EXPECT_EQ(ERR_ABORTED, client.fetcher_->GetResult()); |
- EXPECT_EQ(base::string16(L""), client.fetcher_->GetPacScript()); |
- // GetPacURL() still returns the URL fetched in this case. |
- EXPECT_EQ(GURL(kPacUrl), client.fetcher_->GetPacURL()); |
- client.FinishTestAllowCleanup(); |
-} |
- |
-TEST(DhcpProxyScriptAdapterFetcher, CancelAtCompletion) { |
- FetcherClient client; |
- client.RunTest(); |
- client.WaitForResult(OK); |
- client.fetcher_->Cancel(); |
- // Canceling after you're done should have no effect, so these |
- // are identical expectations to the NormalCaseURLInDhcp test. |
- ASSERT_TRUE(client.fetcher_->DidFinish()); |
- EXPECT_EQ(OK, client.fetcher_->GetResult()); |
- EXPECT_EQ(base::string16(L"bingo"), client.fetcher_->GetPacScript()); |
- EXPECT_EQ(GURL(kPacUrl), client.fetcher_->GetPacURL()); |
- client.FinishTestAllowCleanup(); |
-} |
- |
-// Does a real fetch on a mock DHCP configuration. |
-class MockDhcpRealFetchProxyScriptAdapterFetcher |
- : public MockDhcpProxyScriptAdapterFetcher { |
- public: |
- explicit MockDhcpRealFetchProxyScriptAdapterFetcher( |
- URLRequestContext* context, |
- scoped_refptr<base::TaskRunner> task_runner) |
- : MockDhcpProxyScriptAdapterFetcher(context, task_runner), |
- url_request_context_(context) { |
- } |
- |
- // Returns a real proxy script fetcher. |
- ProxyScriptFetcher* ImplCreateScriptFetcher() override { |
- ProxyScriptFetcher* fetcher = |
- new ProxyScriptFetcherImpl(url_request_context_); |
- return fetcher; |
- } |
- |
- URLRequestContext* url_request_context_; |
-}; |
- |
-TEST(DhcpProxyScriptAdapterFetcher, MockDhcpRealFetch) { |
- SpawnedTestServer test_server( |
- SpawnedTestServer::TYPE_HTTP, |
- SpawnedTestServer::kLocalhost, |
- base::FilePath( |
- FILE_PATH_LITERAL("net/data/proxy_script_fetcher_unittest"))); |
- ASSERT_TRUE(test_server.Start()); |
- |
- GURL configured_url = test_server.GetURL("files/downloadable.pac"); |
- |
- FetcherClient client; |
- TestURLRequestContext url_request_context; |
- scoped_refptr<base::TaskRunner> runner = |
- client.worker_pool_->GetTaskRunnerWithShutdownBehavior( |
- base::SequencedWorkerPool::CONTINUE_ON_SHUTDOWN); |
- client.fetcher_.reset( |
- new MockDhcpRealFetchProxyScriptAdapterFetcher( |
- &url_request_context, runner)); |
- client.fetcher_->configured_url_ = configured_url.spec(); |
- client.RunTest(); |
- client.WaitForResult(OK); |
- ASSERT_TRUE(client.fetcher_->DidFinish()); |
- EXPECT_EQ(OK, client.fetcher_->GetResult()); |
- EXPECT_EQ(base::string16(L"-downloadable.pac-\n"), |
- client.fetcher_->GetPacScript()); |
- EXPECT_EQ(configured_url, |
- client.fetcher_->GetPacURL()); |
-} |
- |
-#define BASE_URL "http://corpserver/proxy.pac" |
- |
-TEST(DhcpProxyScriptAdapterFetcher, SanitizeDhcpApiString) { |
- const size_t kBaseUrlLen = strlen(BASE_URL); |
- |
- // Default case. |
- EXPECT_EQ(BASE_URL, |
- DhcpProxyScriptAdapterFetcher::SanitizeDhcpApiString( |
- BASE_URL, kBaseUrlLen)); |
- |
- // Trailing \n and no null-termination. |
- EXPECT_EQ(BASE_URL, |
- DhcpProxyScriptAdapterFetcher::SanitizeDhcpApiString( |
- BASE_URL "\nblablabla", kBaseUrlLen + 1)); |
- |
- // Embedded NULLs. |
- EXPECT_EQ(BASE_URL, |
- DhcpProxyScriptAdapterFetcher::SanitizeDhcpApiString( |
- BASE_URL "\0foo\0blat", kBaseUrlLen + 9)); |
-} |
- |
-#undef BASE_URL |
- |
-} // namespace |
- |
-} // namespace net |