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

Unified Diff: chrome/browser/url_fetcher_unittest.cc

Issue 18305: Move url_* to net subdir (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 11 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/url_fetcher_protect.cc ('k') | chrome/browser/url_fixer_upper.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/url_fetcher_unittest.cc
===================================================================
--- chrome/browser/url_fetcher_unittest.cc (revision 8164)
+++ chrome/browser/url_fetcher_unittest.cc (working copy)
@@ -1,479 +0,0 @@
-// Copyright (c) 2006-2008 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 "base/thread.h"
-#include "base/time.h"
-#include "chrome/browser/url_fetcher.h"
-#include "chrome/browser/url_fetcher_protect.h"
-#if defined(OS_LINUX)
-// TODO(port): ugly hack for linux
-namespace ChromePluginLib {
- void UnloadAllPlugins() {}
-}
-#else
-#include "chrome/common/chrome_plugin_lib.h"
-#endif
-#include "net/base/ssl_test_util.h"
-#include "net/url_request/url_request_unittest.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-using base::Time;
-using base::TimeDelta;
-
-namespace {
-
-const wchar_t kDocRoot[] = L"chrome/test/data";
-
-class URLFetcherTest : public testing::Test, public URLFetcher::Delegate {
- public:
- URLFetcherTest() : fetcher_(NULL) { }
-
- // Creates a URLFetcher, using the program's main thread to do IO.
- virtual void CreateFetcher(const GURL& url);
-
- // URLFetcher::Delegate
- virtual void OnURLFetchComplete(const URLFetcher* source,
- const GURL& url,
- const URLRequestStatus& status,
- int response_code,
- const ResponseCookies& cookies,
- const std::string& data);
-
- protected:
- virtual void SetUp() {
- testing::Test::SetUp();
-
- // Ensure that any plugin operations done by other tests are cleaned up.
- ChromePluginLib::UnloadAllPlugins();
- }
-
- // URLFetcher is designed to run on the main UI thread, but in our tests
- // we assume that the current thread is the IO thread where the URLFetcher
- // dispatches its requests to. When we wish to simulate being used from
- // a UI thread, we dispatch a worker thread to do so.
- MessageLoopForIO io_loop_;
-
- URLFetcher* fetcher_;
-};
-
-// Version of URLFetcherTest that does a POST instead
-class URLFetcherPostTest : public URLFetcherTest {
- public:
- virtual void CreateFetcher(const GURL& url);
-
- // URLFetcher::Delegate
- virtual void OnURLFetchComplete(const URLFetcher* source,
- const GURL& url,
- const URLRequestStatus& status,
- int response_code,
- const ResponseCookies& cookies,
- const std::string& data);
-};
-
-// Version of URLFetcherTest that tests headers.
-class URLFetcherHeadersTest : public URLFetcherTest {
- public:
- // URLFetcher::Delegate
- virtual void OnURLFetchComplete(const URLFetcher* source,
- const GURL& url,
- const URLRequestStatus& status,
- int response_code,
- const ResponseCookies& cookies,
- const std::string& data);
-};
-
-// Version of URLFetcherTest that tests overload proctection.
-class URLFetcherProtectTest : public URLFetcherTest {
- public:
- virtual void CreateFetcher(const GURL& url);
- // URLFetcher::Delegate
- virtual void OnURLFetchComplete(const URLFetcher* source,
- const GURL& url,
- const URLRequestStatus& status,
- int response_code,
- const ResponseCookies& cookies,
- const std::string& data);
- private:
- Time start_time_;
-};
-
-// Version of URLFetcherTest that tests bad HTTPS requests.
-class URLFetcherBadHTTPSTest : public URLFetcherTest {
- public:
- URLFetcherBadHTTPSTest();
-
- // URLFetcher::Delegate
- virtual void OnURLFetchComplete(const URLFetcher* source,
- const GURL& url,
- const URLRequestStatus& status,
- int response_code,
- const ResponseCookies& cookies,
- const std::string& data);
-
- protected:
- FilePath GetExpiredCertPath();
- SSLTestUtil util_;
-
- private:
- FilePath cert_dir_;
-};
-
-// Version of URLFetcherTest that tests request cancellation on shutdown.
-class URLFetcherCancelTest : public URLFetcherTest {
- public:
- virtual void CreateFetcher(const GURL& url);
- // URLFetcher::Delegate
- virtual void OnURLFetchComplete(const URLFetcher* source,
- const GURL& url,
- const URLRequestStatus& status,
- int response_code,
- const ResponseCookies& cookies,
- const std::string& data);
-
- void CancelRequest();
- void TestContextReleased();
-
- private:
- base::OneShotTimer<URLFetcherCancelTest> timer_;
- bool context_released_;
-};
-
-// Version of TestURLRequestContext that let us know if the request context
-// is properly released.
-class CancelTestURLRequestContext : public TestURLRequestContext {
- public:
- explicit CancelTestURLRequestContext(bool* destructor_called)
- : destructor_called_(destructor_called) {
- *destructor_called_ = false;
- }
-
- virtual ~CancelTestURLRequestContext() {
- *destructor_called_ = true;
- }
-
- private:
- bool* destructor_called_;
-};
-
-// Wrapper that lets us call CreateFetcher() on a thread of our choice. We
-// could make URLFetcherTest refcounted and use PostTask(FROM_HERE.. ) to call
-// CreateFetcher() directly, but the ownership of the URLFetcherTest is a bit
-// confusing in that case because GTest doesn't know about the refcounting.
-// It's less confusing to just do it this way.
-class FetcherWrapperTask : public Task {
- public:
- FetcherWrapperTask(URLFetcherTest* test, const GURL& url)
- : test_(test), url_(url) { }
- virtual void Run() {
- test_->CreateFetcher(url_);
- };
-
- private:
- URLFetcherTest* test_;
- GURL url_;
-};
-
-void URLFetcherTest::CreateFetcher(const GURL& url) {
- fetcher_ = new URLFetcher(url, URLFetcher::GET, this);
- fetcher_->set_request_context(new TestURLRequestContext());
- fetcher_->set_io_loop(&io_loop_);
- fetcher_->Start();
-}
-
-void URLFetcherTest::OnURLFetchComplete(const URLFetcher* source,
- const GURL& url,
- const URLRequestStatus& status,
- int response_code,
- const ResponseCookies& cookies,
- const std::string& data) {
- EXPECT_TRUE(status.is_success());
- EXPECT_EQ(200, response_code); // HTTP OK
- EXPECT_FALSE(data.empty());
-
- delete fetcher_; // Have to delete this here and not in the destructor,
- // because the destructor won't necessarily run on the
- // same thread that CreateFetcher() did.
-
- io_loop_.PostTask(FROM_HERE, new MessageLoop::QuitTask());
- // If MessageLoop::current() != io_loop_, it will be shut down when the
- // main loop returns and this thread subsequently goes out of scope.
-}
-
-void URLFetcherPostTest::CreateFetcher(const GURL& url) {
- fetcher_ = new URLFetcher(url, URLFetcher::POST, this);
- fetcher_->set_request_context(new TestURLRequestContext());
- fetcher_->set_io_loop(&io_loop_);
- fetcher_->set_upload_data("application/x-www-form-urlencoded",
- "bobsyeruncle");
- fetcher_->Start();
-}
-
-void URLFetcherPostTest::OnURLFetchComplete(const URLFetcher* source,
- const GURL& url,
- const URLRequestStatus& status,
- int response_code,
- const ResponseCookies& cookies,
- const std::string& data) {
- EXPECT_EQ(std::string("bobsyeruncle"), data);
- URLFetcherTest::OnURLFetchComplete(source, url, status, response_code,
- cookies, data);
-}
-
-void URLFetcherHeadersTest::OnURLFetchComplete(
- const URLFetcher* source,
- const GURL& url,
- const URLRequestStatus& status,
- int response_code,
- const ResponseCookies& cookies,
- const std::string& data) {
- std::string header;
- EXPECT_TRUE(source->response_headers()->GetNormalizedHeader("cache-control",
- &header));
- EXPECT_EQ("private", header);
- URLFetcherTest::OnURLFetchComplete(source, url, status, response_code,
- cookies, data);
-}
-
-void URLFetcherProtectTest::CreateFetcher(const GURL& url) {
- fetcher_ = new URLFetcher(url, URLFetcher::GET, this);
- fetcher_->set_request_context(new TestURLRequestContext());
- fetcher_->set_io_loop(&io_loop_);
- start_time_ = Time::Now();
- fetcher_->Start();
-}
-
-void URLFetcherProtectTest::OnURLFetchComplete(const URLFetcher* source,
- const GURL& url,
- const URLRequestStatus& status,
- int response_code,
- const ResponseCookies& cookies,
- const std::string& data) {
- const TimeDelta one_second = TimeDelta::FromMilliseconds(1000);
- if (response_code >= 500) {
- // Now running ServerUnavailable test.
- // It takes more than 1 second to finish all 11 requests.
- EXPECT_TRUE(Time::Now() - start_time_ >= one_second);
- EXPECT_TRUE(status.is_success());
- EXPECT_FALSE(data.empty());
- delete fetcher_;
- io_loop_.Quit();
- } else {
- // Now running Overload test.
- static int count = 0;
- count++;
- if (count < 20) {
- fetcher_->Start();
- } else {
- // We have already sent 20 requests continuously. And we expect that
- // it takes more than 1 second due to the overload pretection settings.
- EXPECT_TRUE(Time::Now() - start_time_ >= one_second);
- URLFetcherTest::OnURLFetchComplete(source, url, status, response_code,
- cookies, data);
- }
- }
-}
-
-URLFetcherBadHTTPSTest::URLFetcherBadHTTPSTest() {
- PathService::Get(base::DIR_SOURCE_ROOT, &cert_dir_);
- cert_dir_ = cert_dir_.Append(FILE_PATH_LITERAL("chrome"));
- cert_dir_ = cert_dir_.Append(FILE_PATH_LITERAL("test"));
- cert_dir_ = cert_dir_.Append(FILE_PATH_LITERAL("data"));
- cert_dir_ = cert_dir_.Append(FILE_PATH_LITERAL("ssl"));
- cert_dir_ = cert_dir_.Append(FILE_PATH_LITERAL("certificates"));
-}
-
-// The "server certificate expired" error should result in automatic
-// cancellation of the request by
-// URLRequest::Delegate::OnSSLCertificateError.
-void URLFetcherBadHTTPSTest::OnURLFetchComplete(
- const URLFetcher* source,
- const GURL& url,
- const URLRequestStatus& status,
- int response_code,
- const ResponseCookies& cookies,
- const std::string& data) {
- // This part is different from URLFetcherTest::OnURLFetchComplete
- // because this test expects the request to be cancelled.
- EXPECT_EQ(URLRequestStatus::CANCELED, status.status());
- EXPECT_EQ(net::ERR_ABORTED, status.os_error());
- EXPECT_EQ(-1, response_code);
- EXPECT_TRUE(cookies.empty());
- EXPECT_TRUE(data.empty());
-
- // The rest is the same as URLFetcherTest::OnURLFetchComplete.
- delete fetcher_;
- io_loop_.Quit();
-}
-
-FilePath URLFetcherBadHTTPSTest::GetExpiredCertPath() {
- return cert_dir_.Append(FILE_PATH_LITERAL("expired_cert.pem"));
-}
-
-void URLFetcherCancelTest::CreateFetcher(const GURL& url) {
- fetcher_ = new URLFetcher(url, URLFetcher::GET, this);
- fetcher_->set_request_context(
- new CancelTestURLRequestContext(&context_released_));
- fetcher_->set_io_loop(&io_loop_);
- fetcher_->Start();
- // Make sure we give the IO thread a chance to run.
- timer_.Start(TimeDelta::FromMilliseconds(100), this,
- &URLFetcherCancelTest::CancelRequest);
-}
-
-void URLFetcherCancelTest::OnURLFetchComplete(const URLFetcher* source,
- const GURL& url,
- const URLRequestStatus& status,
- int response_code,
- const ResponseCookies& cookies,
- const std::string& data) {
- // We should have cancelled the request before completion.
- ADD_FAILURE();
- delete fetcher_;
- io_loop_.PostTask(FROM_HERE, new MessageLoop::QuitTask());
-}
-
-void URLFetcherCancelTest::CancelRequest() {
- delete fetcher_;
- timer_.Stop();
- // Make sure we give the IO thread a chance to run.
- timer_.Start(TimeDelta::FromMilliseconds(100), this,
- &URLFetcherCancelTest::TestContextReleased);
-}
-
-void URLFetcherCancelTest::TestContextReleased() {
- EXPECT_TRUE(context_released_);
- timer_.Stop();
- io_loop_.PostTask(FROM_HERE, new MessageLoop::QuitTask());
-}
-
-} // namespace.
-
-TEST_F(URLFetcherTest, SameThreadsTest) {
- // Create the fetcher on the main thread. Since IO will happen on the main
- // thread, this will test URLFetcher's ability to do everything on one
- // thread.
- scoped_refptr<HTTPTestServer> server =
- HTTPTestServer::CreateServer(kDocRoot);
- ASSERT_TRUE(NULL != server.get());
-
- CreateFetcher(GURL(server->TestServerPage("defaultresponse")));
-
- MessageLoop::current()->Run();
-}
-
-TEST_F(URLFetcherTest, DifferentThreadsTest) {
- scoped_refptr<HTTPTestServer> server =
- HTTPTestServer::CreateServer(kDocRoot);
- ASSERT_TRUE(NULL != server.get());
- // Create a separate thread that will create the URLFetcher. The current
- // (main) thread will do the IO, and when the fetch is complete it will
- // terminate the main thread's message loop; then the other thread's
- // message loop will be shut down automatically as the thread goes out of
- // scope.
- base::Thread t("URLFetcher test thread");
- t.Start();
- t.message_loop()->PostTask(FROM_HERE, new FetcherWrapperTask(this,
- GURL(server->TestServerPage("defaultresponse"))));
-
- MessageLoop::current()->Run();
-}
-
-TEST_F(URLFetcherPostTest, Basic) {
- scoped_refptr<HTTPTestServer> server =
- HTTPTestServer::CreateServer(kDocRoot);
- ASSERT_TRUE(NULL != server.get());
- CreateFetcher(GURL(server->TestServerPage("echo")));
- MessageLoop::current()->Run();
-}
-
-TEST_F(URLFetcherHeadersTest, Headers) {
- scoped_refptr<HTTPTestServer> server =
- HTTPTestServer::CreateServer(L"net/data/url_request_unittest");
- ASSERT_TRUE(NULL != server.get());
- CreateFetcher(GURL(server->TestServerPage("files/with-headers.html")));
- MessageLoop::current()->Run();
- // The actual tests are in the URLFetcherHeadersTest fixture.
-}
-
-TEST_F(URLFetcherProtectTest, Overload) {
- scoped_refptr<HTTPTestServer> server =
- HTTPTestServer::CreateServer(kDocRoot);
- ASSERT_TRUE(NULL != server.get());
- GURL url = GURL(server->TestServerPage("defaultresponse"));
-
- // Registers an entry for test url. It only allows 3 requests to be sent
- // in 200 milliseconds.
- URLFetcherProtectManager* manager = URLFetcherProtectManager::GetInstance();
- URLFetcherProtectEntry* entry =
- new URLFetcherProtectEntry(200, 3, 11, 1, 2.0, 0, 256);
- manager->Register(url.host(), entry);
-
- CreateFetcher(url);
-
- MessageLoop::current()->Run();
-}
-
-TEST_F(URLFetcherProtectTest, ServerUnavailable) {
- scoped_refptr<HTTPTestServer> server =
- HTTPTestServer::CreateServer(L"chrome/test/data");
- ASSERT_TRUE(NULL != server.get());
- GURL url = GURL(server->TestServerPage("files/server-unavailable.html"));
-
- // Registers an entry for test url. The backoff time is calculated by:
- // new_backoff = 2.0 * old_backoff + 0
- // and maximum backoff time is 256 milliseconds.
- // Maximum retries allowed is set to 11.
- URLFetcherProtectManager* manager = URLFetcherProtectManager::GetInstance();
- URLFetcherProtectEntry* entry =
- new URLFetcherProtectEntry(200, 3, 11, 1, 2.0, 0, 256);
- manager->Register(url.host(), entry);
-
- CreateFetcher(url);
-
- MessageLoop::current()->Run();
-}
-
-#if defined(OS_WIN)
-TEST_F(URLFetcherBadHTTPSTest, BadHTTPSTest) {
-#else
-// TODO(port): Enable BadHTTPSTest. Currently asserts in
-// URLFetcherBadHTTPSTest::OnURLFetchComplete don't pass.
-TEST_F(URLFetcherBadHTTPSTest, DISABLED_BadHTTPSTest) {
-#endif
- scoped_refptr<HTTPSTestServer> server =
- HTTPSTestServer::CreateServer(util_.kHostName, util_.kBadHTTPSPort,
- kDocRoot, util_.GetExpiredCertPath().ToWStringHack());
- ASSERT_TRUE(NULL != server.get());
-
- CreateFetcher(GURL(server->TestServerPage("defaultresponse")));
-
- MessageLoop::current()->Run();
-}
-
-TEST_F(URLFetcherCancelTest, ReleasesContext) {
- scoped_refptr<HTTPTestServer> server =
- HTTPTestServer::CreateServer(L"chrome/test/data");
- ASSERT_TRUE(NULL != server.get());
- GURL url = GURL(server->TestServerPage("files/server-unavailable.html"));
-
- // Registers an entry for test url. The backoff time is calculated by:
- // new_backoff = 2.0 * old_backoff + 0
- // The initial backoff is 2 seconds and maximum backoff is 4 seconds.
- // Maximum retries allowed is set to 2.
- URLFetcherProtectManager* manager = URLFetcherProtectManager::GetInstance();
- URLFetcherProtectEntry* entry =
- new URLFetcherProtectEntry(200, 3, 2, 2000, 2.0, 0, 4000);
- manager->Register(url.host(), entry);
-
- // Create a separate thread that will create the URLFetcher. The current
- // (main) thread will do the IO, and when the fetch is complete it will
- // terminate the main thread's message loop; then the other thread's
- // message loop will be shut down automatically as the thread goes out of
- // scope.
- base::Thread t("URLFetcher test thread");
- t.Start();
- t.message_loop()->PostTask(FROM_HERE, new FetcherWrapperTask(this, url));
-
- MessageLoop::current()->Run();
-}
« no previous file with comments | « chrome/browser/url_fetcher_protect.cc ('k') | chrome/browser/url_fixer_upper.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698