| Index: components/component_updater/test/crx_downloader_unittest.cc
|
| diff --git a/components/component_updater/test/crx_downloader_unittest.cc b/components/component_updater/test/crx_downloader_unittest.cc
|
| deleted file mode 100644
|
| index ebc8d6011b66b3f26111fe2770a244139c5e7c14..0000000000000000000000000000000000000000
|
| --- a/components/component_updater/test/crx_downloader_unittest.cc
|
| +++ /dev/null
|
| @@ -1,378 +0,0 @@
|
| -// Copyright 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 "base/bind.h"
|
| -#include "base/bind_helpers.h"
|
| -#include "base/files/file_path.h"
|
| -#include "base/files/file_util.h"
|
| -#include "base/memory/ref_counted.h"
|
| -#include "base/memory/scoped_ptr.h"
|
| -#include "base/message_loop/message_loop.h"
|
| -#include "base/path_service.h"
|
| -#include "base/run_loop.h"
|
| -#include "components/component_updater/crx_downloader.h"
|
| -#include "net/base/net_errors.h"
|
| -#include "net/url_request/test_url_request_interceptor.h"
|
| -#include "net/url_request/url_request_test_util.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -using base::ContentsEqual;
|
| -
|
| -namespace component_updater {
|
| -
|
| -namespace {
|
| -
|
| -// Intercepts HTTP GET requests sent to "localhost".
|
| -typedef net::LocalHostTestURLRequestInterceptor GetInterceptor;
|
| -
|
| -const char kTestFileName[] = "jebgalgnebhfojomionfpkfelancnnkf.crx";
|
| -
|
| -base::FilePath MakeTestFilePath(const char* file) {
|
| - base::FilePath path;
|
| - PathService::Get(base::DIR_SOURCE_ROOT, &path);
|
| - return path.AppendASCII("components").AppendASCII("test").AppendASCII("data")
|
| - .AppendASCII("component_updater").AppendASCII(file);
|
| -}
|
| -
|
| -} // namespace
|
| -
|
| -class CrxDownloaderTest : public testing::Test {
|
| - public:
|
| - CrxDownloaderTest();
|
| - ~CrxDownloaderTest() override;
|
| -
|
| - // Overrides from testing::Test.
|
| - void SetUp() override;
|
| - void TearDown() override;
|
| -
|
| - void Quit();
|
| - void RunThreads();
|
| - void RunThreadsUntilIdle();
|
| -
|
| - void DownloadComplete(int crx_context, const CrxDownloader::Result& result);
|
| -
|
| - void DownloadProgress(int crx_context, const CrxDownloader::Result& result);
|
| -
|
| - protected:
|
| - scoped_ptr<CrxDownloader> crx_downloader_;
|
| -
|
| - scoped_ptr<GetInterceptor> get_interceptor_;
|
| -
|
| - CrxDownloader::DownloadCallback callback_;
|
| - CrxDownloader::ProgressCallback progress_callback_;
|
| -
|
| - int crx_context_;
|
| -
|
| - int num_download_complete_calls_;
|
| - CrxDownloader::Result download_complete_result_;
|
| -
|
| - // These members are updated by DownloadProgress.
|
| - int num_progress_calls_;
|
| - CrxDownloader::Result download_progress_result_;
|
| -
|
| - // A magic value for the context to be used in the tests.
|
| - static const int kExpectedContext = 0xaabb;
|
| -
|
| - private:
|
| - base::MessageLoopForIO loop_;
|
| - scoped_refptr<net::TestURLRequestContextGetter> context_;
|
| - base::Closure quit_closure_;
|
| -};
|
| -
|
| -const int CrxDownloaderTest::kExpectedContext;
|
| -
|
| -CrxDownloaderTest::CrxDownloaderTest()
|
| - : callback_(base::Bind(&CrxDownloaderTest::DownloadComplete,
|
| - base::Unretained(this),
|
| - kExpectedContext)),
|
| - progress_callback_(base::Bind(&CrxDownloaderTest::DownloadProgress,
|
| - base::Unretained(this),
|
| - kExpectedContext)),
|
| - crx_context_(0),
|
| - num_download_complete_calls_(0),
|
| - num_progress_calls_(0),
|
| - context_(new net::TestURLRequestContextGetter(
|
| - base::MessageLoopProxy::current())) {
|
| -}
|
| -
|
| -CrxDownloaderTest::~CrxDownloaderTest() {
|
| - context_ = NULL;
|
| -
|
| - // The GetInterceptor requires the message loop to run to destruct correctly.
|
| - get_interceptor_.reset();
|
| - RunThreadsUntilIdle();
|
| -}
|
| -
|
| -void CrxDownloaderTest::SetUp() {
|
| - num_download_complete_calls_ = 0;
|
| - download_complete_result_ = CrxDownloader::Result();
|
| - num_progress_calls_ = 0;
|
| - download_progress_result_ = CrxDownloader::Result();
|
| -
|
| - crx_downloader_.reset(CrxDownloader::Create(
|
| - false, // Do not use the background downloader in these tests.
|
| - context_.get(),
|
| - base::MessageLoopProxy::current(),
|
| - NULL)); // No |background_task_runner| because no background downloader.
|
| - crx_downloader_->set_progress_callback(progress_callback_);
|
| -
|
| - get_interceptor_.reset(new GetInterceptor(base::MessageLoopProxy::current(),
|
| - base::MessageLoopProxy::current()));
|
| -}
|
| -
|
| -void CrxDownloaderTest::TearDown() {
|
| - crx_downloader_.reset();
|
| -}
|
| -
|
| -void CrxDownloaderTest::Quit() {
|
| - if (!quit_closure_.is_null())
|
| - quit_closure_.Run();
|
| -}
|
| -
|
| -void CrxDownloaderTest::DownloadComplete(int crx_context,
|
| - const CrxDownloader::Result& result) {
|
| - ++num_download_complete_calls_;
|
| - crx_context_ = crx_context;
|
| - download_complete_result_ = result;
|
| - Quit();
|
| -}
|
| -
|
| -void CrxDownloaderTest::DownloadProgress(int crx_context,
|
| - const CrxDownloader::Result& result) {
|
| - ++num_progress_calls_;
|
| - download_progress_result_ = result;
|
| -}
|
| -
|
| -void CrxDownloaderTest::RunThreads() {
|
| - base::RunLoop runloop;
|
| - quit_closure_ = runloop.QuitClosure();
|
| - runloop.Run();
|
| -
|
| - // Since some tests need to drain currently enqueued tasks such as network
|
| - // intercepts on the IO thread, run the threads until they are
|
| - // idle. The component updater service won't loop again until the loop count
|
| - // is set and the service is started.
|
| - RunThreadsUntilIdle();
|
| -}
|
| -
|
| -void CrxDownloaderTest::RunThreadsUntilIdle() {
|
| - base::RunLoop().RunUntilIdle();
|
| -}
|
| -
|
| -// Tests that starting a download without a url results in an error.
|
| -TEST_F(CrxDownloaderTest, NoUrl) {
|
| - std::vector<GURL> urls;
|
| - crx_downloader_->StartDownload(urls, callback_);
|
| - RunThreadsUntilIdle();
|
| -
|
| - EXPECT_EQ(1, num_download_complete_calls_);
|
| - EXPECT_EQ(kExpectedContext, crx_context_);
|
| - EXPECT_EQ(-1, download_complete_result_.error);
|
| - EXPECT_TRUE(download_complete_result_.response.empty());
|
| - EXPECT_EQ(-1, download_complete_result_.downloaded_bytes);
|
| - EXPECT_EQ(-1, download_complete_result_.total_bytes);
|
| - EXPECT_EQ(0, num_progress_calls_);
|
| -}
|
| -
|
| -// Tests that downloading from one url is successful.
|
| -TEST_F(CrxDownloaderTest, OneUrl) {
|
| - const GURL expected_crx_url =
|
| - GURL("http://localhost/download/jebgalgnebhfojomionfpkfelancnnkf.crx");
|
| -
|
| - const base::FilePath test_file(MakeTestFilePath(kTestFileName));
|
| - get_interceptor_->SetResponse(expected_crx_url, test_file);
|
| -
|
| - crx_downloader_->StartDownloadFromUrl(expected_crx_url, callback_);
|
| - RunThreads();
|
| -
|
| - EXPECT_EQ(1, get_interceptor_->GetHitCount());
|
| -
|
| - EXPECT_EQ(1, num_download_complete_calls_);
|
| - EXPECT_EQ(kExpectedContext, crx_context_);
|
| - EXPECT_EQ(0, download_complete_result_.error);
|
| - EXPECT_EQ(1843, download_complete_result_.downloaded_bytes);
|
| - EXPECT_EQ(1843, download_complete_result_.total_bytes);
|
| - EXPECT_TRUE(ContentsEqual(download_complete_result_.response, test_file));
|
| -
|
| - EXPECT_TRUE(base::DeleteFile(download_complete_result_.response, false));
|
| -
|
| - EXPECT_LE(1, num_progress_calls_);
|
| - EXPECT_EQ(1843, download_progress_result_.downloaded_bytes);
|
| - EXPECT_EQ(1843, download_progress_result_.total_bytes);
|
| -}
|
| -
|
| -// Tests that specifying from two urls has no side effects. Expect a successful
|
| -// download, and only one download request be made.
|
| -// This test is flaky on Android. crbug.com/329883
|
| -#if defined(OS_ANDROID)
|
| -#define MAYBE_TwoUrls DISABLED_TwoUrls
|
| -#else
|
| -#define MAYBE_TwoUrls TwoUrls
|
| -#endif
|
| -TEST_F(CrxDownloaderTest, MAYBE_TwoUrls) {
|
| - const GURL expected_crx_url =
|
| - GURL("http://localhost/download/jebgalgnebhfojomionfpkfelancnnkf.crx");
|
| -
|
| - const base::FilePath test_file(MakeTestFilePath(kTestFileName));
|
| - get_interceptor_->SetResponse(expected_crx_url, test_file);
|
| -
|
| - std::vector<GURL> urls;
|
| - urls.push_back(expected_crx_url);
|
| - urls.push_back(expected_crx_url);
|
| -
|
| - crx_downloader_->StartDownload(urls, callback_);
|
| - RunThreads();
|
| -
|
| - EXPECT_EQ(1, get_interceptor_->GetHitCount());
|
| -
|
| - EXPECT_EQ(1, num_download_complete_calls_);
|
| - EXPECT_EQ(kExpectedContext, crx_context_);
|
| - EXPECT_EQ(0, download_complete_result_.error);
|
| - EXPECT_EQ(1843, download_complete_result_.downloaded_bytes);
|
| - EXPECT_EQ(1843, download_complete_result_.total_bytes);
|
| - EXPECT_TRUE(ContentsEqual(download_complete_result_.response, test_file));
|
| -
|
| - EXPECT_TRUE(base::DeleteFile(download_complete_result_.response, false));
|
| -
|
| - EXPECT_LE(1, num_progress_calls_);
|
| - EXPECT_EQ(1843, download_progress_result_.downloaded_bytes);
|
| - EXPECT_EQ(1843, download_progress_result_.total_bytes);
|
| -}
|
| -
|
| -// Tests that an invalid host results in a download error.
|
| -TEST_F(CrxDownloaderTest, OneUrl_InvalidHost) {
|
| - const GURL expected_crx_url =
|
| - GURL("http://localhost/download/jebgalgnebhfojomionfpkfelancnnkf.crx");
|
| -
|
| - const base::FilePath test_file(MakeTestFilePath(kTestFileName));
|
| - get_interceptor_->SetResponse(expected_crx_url, test_file);
|
| -
|
| - crx_downloader_->StartDownloadFromUrl(
|
| - GURL("http://no.such.host"
|
| - "/download/jebgalgnebhfojomionfpkfelancnnkf.crx"),
|
| - callback_);
|
| - RunThreads();
|
| -
|
| - EXPECT_EQ(0, get_interceptor_->GetHitCount());
|
| -
|
| - EXPECT_EQ(1, num_download_complete_calls_);
|
| - EXPECT_EQ(kExpectedContext, crx_context_);
|
| - EXPECT_NE(0, download_complete_result_.error);
|
| - EXPECT_TRUE(download_complete_result_.response.empty());
|
| -}
|
| -
|
| -// Tests that an invalid path results in a download error.
|
| -TEST_F(CrxDownloaderTest, OneUrl_InvalidPath) {
|
| - const GURL expected_crx_url =
|
| - GURL("http://localhost/download/jebgalgnebhfojomionfpkfelancnnkf.crx");
|
| -
|
| - const base::FilePath test_file(MakeTestFilePath(kTestFileName));
|
| - get_interceptor_->SetResponse(expected_crx_url, test_file);
|
| -
|
| - crx_downloader_->StartDownloadFromUrl(GURL("http://localhost/no/such/file"),
|
| - callback_);
|
| - RunThreads();
|
| -
|
| - EXPECT_EQ(0, get_interceptor_->GetHitCount());
|
| -
|
| - EXPECT_EQ(1, num_download_complete_calls_);
|
| - EXPECT_EQ(kExpectedContext, crx_context_);
|
| - EXPECT_NE(0, download_complete_result_.error);
|
| - EXPECT_TRUE(download_complete_result_.response.empty());
|
| -}
|
| -
|
| -// Tests that the fallback to a valid url is successful.
|
| -// This test is flaky on Android. crbug.com/329883
|
| -#if defined(OS_ANDROID)
|
| -#define MAYBE_TwoUrls_FirstInvalid DISABLED_TwoUrls_FirstInvalid
|
| -#else
|
| -#define MAYBE_TwoUrls_FirstInvalid TwoUrls_FirstInvalid
|
| -#endif
|
| -TEST_F(CrxDownloaderTest, MAYBE_TwoUrls_FirstInvalid) {
|
| - const GURL expected_crx_url =
|
| - GURL("http://localhost/download/jebgalgnebhfojomionfpkfelancnnkf.crx");
|
| -
|
| - const base::FilePath test_file(MakeTestFilePath(kTestFileName));
|
| - get_interceptor_->SetResponse(expected_crx_url, test_file);
|
| -
|
| - std::vector<GURL> urls;
|
| - urls.push_back(GURL("http://localhost/no/such/file"));
|
| - urls.push_back(expected_crx_url);
|
| -
|
| - crx_downloader_->StartDownload(urls, callback_);
|
| - RunThreads();
|
| -
|
| - EXPECT_EQ(1, get_interceptor_->GetHitCount());
|
| -
|
| - EXPECT_EQ(1, num_download_complete_calls_);
|
| - EXPECT_EQ(kExpectedContext, crx_context_);
|
| - EXPECT_EQ(0, download_complete_result_.error);
|
| - EXPECT_EQ(1843, download_complete_result_.downloaded_bytes);
|
| - EXPECT_EQ(1843, download_complete_result_.total_bytes);
|
| - EXPECT_TRUE(ContentsEqual(download_complete_result_.response, test_file));
|
| -
|
| - EXPECT_TRUE(base::DeleteFile(download_complete_result_.response, false));
|
| -
|
| - EXPECT_LE(1, num_progress_calls_);
|
| - EXPECT_EQ(1843, download_progress_result_.downloaded_bytes);
|
| - EXPECT_EQ(1843, download_progress_result_.total_bytes);
|
| -}
|
| -
|
| -// Tests that the download succeeds if the first url is correct and the
|
| -// second bad url does not have a side-effect.
|
| -TEST_F(CrxDownloaderTest, TwoUrls_SecondInvalid) {
|
| - const GURL expected_crx_url =
|
| - GURL("http://localhost/download/jebgalgnebhfojomionfpkfelancnnkf.crx");
|
| -
|
| - const base::FilePath test_file(MakeTestFilePath(kTestFileName));
|
| - get_interceptor_->SetResponse(expected_crx_url, test_file);
|
| -
|
| - std::vector<GURL> urls;
|
| - urls.push_back(expected_crx_url);
|
| - urls.push_back(GURL("http://localhost/no/such/file"));
|
| -
|
| - crx_downloader_->StartDownload(urls, callback_);
|
| - RunThreads();
|
| -
|
| - EXPECT_EQ(1, get_interceptor_->GetHitCount());
|
| -
|
| - EXPECT_EQ(1, num_download_complete_calls_);
|
| - EXPECT_EQ(kExpectedContext, crx_context_);
|
| - EXPECT_EQ(0, download_complete_result_.error);
|
| - EXPECT_EQ(1843, download_complete_result_.downloaded_bytes);
|
| - EXPECT_EQ(1843, download_complete_result_.total_bytes);
|
| - EXPECT_TRUE(ContentsEqual(download_complete_result_.response, test_file));
|
| -
|
| - EXPECT_TRUE(base::DeleteFile(download_complete_result_.response, false));
|
| -
|
| - EXPECT_LE(1, num_progress_calls_);
|
| - EXPECT_EQ(1843, download_progress_result_.downloaded_bytes);
|
| - EXPECT_EQ(1843, download_progress_result_.total_bytes);
|
| -}
|
| -
|
| -// Tests that the download fails if both urls are bad.
|
| -TEST_F(CrxDownloaderTest, TwoUrls_BothInvalid) {
|
| - const GURL expected_crx_url =
|
| - GURL("http://localhost/download/jebgalgnebhfojomionfpkfelancnnkf.crx");
|
| -
|
| - const base::FilePath test_file(MakeTestFilePath(kTestFileName));
|
| - get_interceptor_->SetResponse(expected_crx_url, test_file);
|
| -
|
| - std::vector<GURL> urls;
|
| - urls.push_back(GURL("http://localhost/no/such/file"));
|
| - urls.push_back(GURL("http://no.such.host/"
|
| - "/download/jebgalgnebhfojomionfpkfelancnnkf.crx"));
|
| -
|
| - crx_downloader_->StartDownload(urls, callback_);
|
| - RunThreads();
|
| -
|
| - EXPECT_EQ(0, get_interceptor_->GetHitCount());
|
| -
|
| - EXPECT_EQ(1, num_download_complete_calls_);
|
| - EXPECT_EQ(kExpectedContext, crx_context_);
|
| - EXPECT_NE(0, download_complete_result_.error);
|
| - EXPECT_TRUE(download_complete_result_.response.empty());
|
| -}
|
| -
|
| -} // namespace component_updater
|
|
|