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

Unified Diff: chrome/browser/policy/cloud/external_policy_data_updater_unittest.cc

Issue 109743002: Move policy code into components/policy. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: moar fixes Created 7 years 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
Index: chrome/browser/policy/cloud/external_policy_data_updater_unittest.cc
diff --git a/chrome/browser/policy/cloud/external_policy_data_updater_unittest.cc b/chrome/browser/policy/cloud/external_policy_data_updater_unittest.cc
deleted file mode 100644
index 7ce8e17d75171e7b6b0b8d8a4a8c1f7e131f12c5..0000000000000000000000000000000000000000
--- a/chrome/browser/policy/cloud/external_policy_data_updater_unittest.cc
+++ /dev/null
@@ -1,962 +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 "chrome/browser/policy/cloud/external_policy_data_updater.h"
-
-#include "base/bind.h"
-#include "base/bind_helpers.h"
-#include "base/callback.h"
-#include "base/compiler_specific.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/sha1.h"
-#include "base/test/test_pending_task.h"
-#include "base/test/test_simple_task_runner.h"
-#include "base/time/time.h"
-#include "chrome/browser/policy/cloud/external_policy_data_fetcher.h"
-#include "net/base/net_errors.h"
-#include "net/url_request/test_url_fetcher_factory.h"
-#include "net/url_request/url_fetcher_delegate.h"
-#include "net/url_request/url_request_context_getter.h"
-#include "net/url_request/url_request_status.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-#include "url/gurl.h"
-
-using testing::Mock;
-using testing::Return;
-
-namespace policy {
-
-namespace {
-
-const char* kExternalPolicyDataKeys[] = {"external_policy_data_1",
- "external_policy_data_2",
- "external_policy_data_3"};
-const char* kExternalPolicyDataURLs[] = {"http://example.com/data_1",
- "http://example.com/data_2",
- "http://example.com/data_3"};
-const char* kExternalPolicyDataPayload = "External policy data";
-
-const int64 kExternalPolicyDataMaxSize = 5 * 1024 * 1024; // 5 MB.
-
-class MockFetchSuccessCallbackListener {
- public:
- MOCK_METHOD2(OnFetchSuccess, bool(const std::string&, const std::string&));
-
- ExternalPolicyDataUpdater::FetchSuccessCallback CreateCallback(
- const std::string& key);
-};
-
-ExternalPolicyDataUpdater::FetchSuccessCallback
- MockFetchSuccessCallbackListener::CreateCallback(const std::string& key) {
- return base::Bind(&MockFetchSuccessCallbackListener::OnFetchSuccess,
- base::Unretained(this),
- key);
-}
-
-} // namespace
-
-class ExternalPolicyDataUpdaterTest : public testing::Test {
- protected:
- virtual void SetUp() OVERRIDE;
-
- void CreateUpdater(size_t max_parallel_fetches);
- ExternalPolicyDataUpdater::Request CreateRequest(
- const std::string& url) const;
- void RequestExternalDataFetch(int key_index, int url_index);
- void RequestExternalDataFetch(int index);
-
- net::TestURLFetcherFactory fetcher_factory_;
- MockFetchSuccessCallbackListener callback_listener_;
- scoped_refptr<base::TestSimpleTaskRunner> backend_task_runner_;
- scoped_refptr<base::TestSimpleTaskRunner> io_task_runner_;
- scoped_ptr<ExternalPolicyDataFetcherBackend> fetcher_backend_;
- scoped_ptr<ExternalPolicyDataUpdater> updater_;
-};
-
-void ExternalPolicyDataUpdaterTest::SetUp() {
- fetcher_factory_.set_remove_fetcher_on_delete(true);
- backend_task_runner_ = new base::TestSimpleTaskRunner();
- io_task_runner_ = new base::TestSimpleTaskRunner();
-}
-
-void ExternalPolicyDataUpdaterTest::CreateUpdater(size_t max_parallel_fetches) {
- fetcher_backend_.reset(new ExternalPolicyDataFetcherBackend(
- io_task_runner_,
- scoped_refptr<net::URLRequestContextGetter>()));
- updater_.reset(new ExternalPolicyDataUpdater(
- backend_task_runner_,
- fetcher_backend_->CreateFrontend(backend_task_runner_),
- max_parallel_fetches));
-}
-
-void ExternalPolicyDataUpdaterTest::RequestExternalDataFetch(int key_index,
- int url_index) {
- updater_->FetchExternalData(
- kExternalPolicyDataKeys[key_index],
- CreateRequest(kExternalPolicyDataURLs[url_index]),
- callback_listener_.CreateCallback(kExternalPolicyDataKeys[key_index]));
- io_task_runner_->RunUntilIdle();
- backend_task_runner_->RunPendingTasks();
-}
-
-void ExternalPolicyDataUpdaterTest::RequestExternalDataFetch(int index) {
- RequestExternalDataFetch(index, index);
-}
-
-ExternalPolicyDataUpdater::Request
- ExternalPolicyDataUpdaterTest::CreateRequest(const std::string& url) const {
- return ExternalPolicyDataUpdater::Request(
- url,
- base::SHA1HashString(kExternalPolicyDataPayload),
- kExternalPolicyDataMaxSize);
-}
-
-TEST_F(ExternalPolicyDataUpdaterTest, FetchSuccess) {
- // Create an updater that runs one fetch at a time.
- CreateUpdater(1);
-
- // Make two fetch requests.
- RequestExternalDataFetch(0);
- RequestExternalDataFetch(1);
-
- // Verify that the second fetch has not been started yet.
- EXPECT_FALSE(fetcher_factory_.GetFetcherByID(1));
-
- // Verify that the first fetch has been started.
- net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[0]), fetcher->GetOriginalURL());
-
- // Complete the first fetch.
- fetcher->set_response_code(200);
- fetcher->SetResponseString(kExternalPolicyDataPayload);
- fetcher->delegate()->OnURLFetchComplete(fetcher);
-
- // Accept the data when the callback is invoked.
- EXPECT_CALL(callback_listener_,
- OnFetchSuccess(kExternalPolicyDataKeys[0],
- kExternalPolicyDataPayload))
- .Times(1)
- .WillOnce(Return(true));
- backend_task_runner_->RunPendingTasks();
- Mock::VerifyAndClearExpectations(&callback_listener_);
- io_task_runner_->RunUntilIdle();
-
- // Verify that the first fetch is no longer running.
- EXPECT_FALSE(fetcher_factory_.GetFetcherByID(0));
-
- // Verify that the second fetch has been started.
- fetcher = fetcher_factory_.GetFetcherByID(1);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[1]), fetcher->GetOriginalURL());
-
- // Verify that no retries have been scheduled.
- EXPECT_TRUE(backend_task_runner_->GetPendingTasks().empty());
-}
-
-TEST_F(ExternalPolicyDataUpdaterTest, PayloadSizeExceedsLimit) {
- // Create an updater that runs one fetch at a time.
- CreateUpdater(1);
-
- // Make two fetch requests.
- RequestExternalDataFetch(0);
- RequestExternalDataFetch(1);
-
- // Verify that the second fetch has not been started yet.
- EXPECT_FALSE(fetcher_factory_.GetFetcherByID(1));
-
- // Verify that the first fetch has been started.
- net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[0]), fetcher->GetOriginalURL());
-
- // Indicate that the payload size will exceed allowed maximum.
- fetcher->delegate()->OnURLFetchDownloadProgress(
- fetcher,
- kExternalPolicyDataMaxSize + 1,
- -1);
- backend_task_runner_->RunPendingTasks();
- io_task_runner_->RunUntilIdle();
-
- // Verify that the first fetch is no longer running.
- EXPECT_FALSE(fetcher_factory_.GetFetcherByID(0));
-
- // Verify that the second fetch has been started.
- fetcher = fetcher_factory_.GetFetcherByID(1);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[1]), fetcher->GetOriginalURL());
-
- // Verify that a retry has been scheduled for the first fetch.
- EXPECT_EQ(1u, backend_task_runner_->GetPendingTasks().size());
-}
-
-TEST_F(ExternalPolicyDataUpdaterTest, FetchFailure) {
- // Create an updater that runs one fetch at a time.
- CreateUpdater(1);
-
- // Make two fetch requests.
- RequestExternalDataFetch(0);
- RequestExternalDataFetch(1);
-
- // Verify that the second fetch has not been started yet.
- EXPECT_FALSE(fetcher_factory_.GetFetcherByID(1));
-
- // Verify that the first fetch has been started.
- net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[0]), fetcher->GetOriginalURL());
-
- // Make the first fetch fail due to an interrupted connection.
- fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::FAILED,
- net::ERR_NETWORK_CHANGED));
- fetcher->delegate()->OnURLFetchComplete(fetcher);
- backend_task_runner_->RunPendingTasks();
- io_task_runner_->RunUntilIdle();
-
- // Verify that the first fetch is no longer running.
- EXPECT_FALSE(fetcher_factory_.GetFetcherByID(0));
-
- // Verify that the second fetch has been started.
- fetcher = fetcher_factory_.GetFetcherByID(1);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[1]), fetcher->GetOriginalURL());
-
- // Verify that a retry has been scheduled for the first fetch.
- EXPECT_EQ(1u, backend_task_runner_->GetPendingTasks().size());
-}
-
-TEST_F(ExternalPolicyDataUpdaterTest, ServerFailure) {
- // Create an updater that runs one fetch at a time.
- CreateUpdater(1);
-
- // Make two fetch requests.
- RequestExternalDataFetch(0);
- RequestExternalDataFetch(1);
-
- // Verify that the second fetch has not been started yet.
- EXPECT_FALSE(fetcher_factory_.GetFetcherByID(1));
-
- // Verify that the first fetch has been started.
- net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[0]), fetcher->GetOriginalURL());
-
- // Make the first fetch fail with a server error.
- fetcher->set_response_code(500);
- fetcher->delegate()->OnURLFetchComplete(fetcher);
- backend_task_runner_->RunPendingTasks();
- io_task_runner_->RunUntilIdle();
-
- // Verify that the first fetch is no longer running.
- EXPECT_FALSE(fetcher_factory_.GetFetcherByID(0));
-
- // Verify that the second fetch has been started.
- fetcher = fetcher_factory_.GetFetcherByID(1);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[1]), fetcher->GetOriginalURL());
-
- // Verify that a retry has been scheduled for the first fetch.
- EXPECT_EQ(1u, backend_task_runner_->GetPendingTasks().size());
-}
-
-TEST_F(ExternalPolicyDataUpdaterTest, RetryLimit) {
- // Create an updater that runs one fetch at a time.
- CreateUpdater(1);
-
- // Make a fetch request.
- RequestExternalDataFetch(0);
-
- int fetcher_id = 0;
-
- // Verify that client failures cause the fetch to be retried three times.
- for (int i = 0; i < 3; ++i) {
- // Verify that the fetch has been (re)started.
- net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(fetcher_id);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[0]), fetcher->GetOriginalURL());
-
- // Make the fetch fail with a client error.
- fetcher->set_response_code(400);
- fetcher->delegate()->OnURLFetchComplete(fetcher);
- backend_task_runner_->RunPendingTasks();
- io_task_runner_->RunUntilIdle();
-
- // Verify that the fetch is no longer running.
- EXPECT_FALSE(fetcher_factory_.GetFetcherByID(fetcher_id));
-
- // Verify that a retry has been scheduled.
- EXPECT_EQ(1u, backend_task_runner_->GetPendingTasks().size());
-
- // Fast-forward time to the scheduled retry.
- backend_task_runner_->RunPendingTasks();
- io_task_runner_->RunUntilIdle();
- EXPECT_TRUE(backend_task_runner_->GetPendingTasks().empty());
- ++fetcher_id;
- }
-
- // Verify that the fetch has been restarted.
- net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(fetcher_id);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[0]), fetcher->GetOriginalURL());
-
- // Make the fetch fail once more.
- fetcher->set_response_code(400);
- fetcher->delegate()->OnURLFetchComplete(fetcher);
- backend_task_runner_->RunPendingTasks();
- io_task_runner_->RunUntilIdle();
- ++fetcher_id;
-
- // Verify that the fetch is no longer running.
- EXPECT_FALSE(fetcher_factory_.GetFetcherByID(fetcher_id));
-
- // Verify that no further retries have been scheduled.
- EXPECT_TRUE(backend_task_runner_->GetPendingTasks().empty());
-}
-
-TEST_F(ExternalPolicyDataUpdaterTest, RetryWithBackoff) {
- // Create an updater that runs one fetch at a time.
- CreateUpdater(1);
-
- // Make a fetch request.
- RequestExternalDataFetch(0);
-
- base::TimeDelta expected_delay = base::TimeDelta::FromSeconds(60);
- const base::TimeDelta delay_cap = base::TimeDelta::FromHours(12);
-
- int fetcher_id = 0;
-
- // The backoff delay is capped at 12 hours, which is reached after 10 retries:
- // 60 * 2^10 == 61440 > 43200 == 12 * 60 * 60
- for (int i = 0; i < 20; ++i) {
- // Verify that the fetch has been (re)started.
- net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(fetcher_id);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[0]), fetcher->GetOriginalURL());
-
- // Make the fetch fail with a server error.
- fetcher->set_response_code(500);
- fetcher->delegate()->OnURLFetchComplete(fetcher);
- backend_task_runner_->RunPendingTasks();
- io_task_runner_->RunUntilIdle();
-
- // Verify that the fetch is no longer running.
- EXPECT_FALSE(fetcher_factory_.GetFetcherByID(fetcher_id));
-
- // Verify that a retry has been scheduled.
- EXPECT_EQ(1u, backend_task_runner_->GetPendingTasks().size());
-
- // Verify that the retry delay has been doubled, with random jitter from 80%
- // to 100%.
- const base::TestPendingTask& task =
- backend_task_runner_->GetPendingTasks().front();
- EXPECT_GT(task.delay,
- base::TimeDelta::FromMilliseconds(
- 0.799 * expected_delay.InMilliseconds()));
- EXPECT_LE(task.delay, expected_delay);
-
- if (i < 10) {
- // The delay cap has not been reached yet.
- EXPECT_LT(expected_delay, delay_cap);
- expected_delay *= 2;
-
- if (i == 9) {
- // The last doubling reached the cap.
- EXPECT_GT(expected_delay, delay_cap);
- expected_delay = delay_cap;
- }
- }
-
- // Fast-forward time to the scheduled retry.
- backend_task_runner_->RunPendingTasks();
- io_task_runner_->RunUntilIdle();
- EXPECT_TRUE(backend_task_runner_->GetPendingTasks().empty());
- ++fetcher_id;
- }
-}
-
-TEST_F(ExternalPolicyDataUpdaterTest, HashInvalid) {
- // Create an updater that runs one fetch at a time.
- CreateUpdater(1);
-
- // Make two fetch requests.
- RequestExternalDataFetch(0);
- RequestExternalDataFetch(1);
-
- // Verify that the second fetch has not been started yet.
- EXPECT_FALSE(fetcher_factory_.GetFetcherByID(1));
-
- // Verify that the first fetch has been started.
- net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[0]), fetcher->GetOriginalURL());
-
- // Make the first fetch retrieve data whose hash does not match the expected
- // value.
- fetcher->set_response_code(200);
- fetcher->SetResponseString("Invalid external policy data");
- fetcher->delegate()->OnURLFetchComplete(fetcher);
- backend_task_runner_->RunPendingTasks();
- io_task_runner_->RunUntilIdle();
-
- // Verify that the first fetch is no longer running.
- EXPECT_FALSE(fetcher_factory_.GetFetcherByID(0));
-
- // Verify that the second fetch has been started.
- fetcher = fetcher_factory_.GetFetcherByID(1);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[1]), fetcher->GetOriginalURL());
-
- // Verify that a retry has been scheduled for the first fetch.
- EXPECT_EQ(1u, backend_task_runner_->GetPendingTasks().size());
-}
-
-TEST_F(ExternalPolicyDataUpdaterTest, DataRejectedByCallback) {
- // Create an updater that runs one fetch at a time.
- CreateUpdater(1);
-
- // Make a fetch request.
- RequestExternalDataFetch(0);
-
- // Verify that the fetch has been started.
- net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[0]), fetcher->GetOriginalURL());
-
- // Complete the fetch.
- fetcher->set_response_code(200);
- fetcher->SetResponseString(kExternalPolicyDataPayload);
- fetcher->delegate()->OnURLFetchComplete(fetcher);
-
- // Reject the data when the callback is invoked.
- EXPECT_CALL(callback_listener_,
- OnFetchSuccess(kExternalPolicyDataKeys[0],
- kExternalPolicyDataPayload))
- .Times(1)
- .WillOnce(Return(false));
- backend_task_runner_->RunPendingTasks();
- Mock::VerifyAndClearExpectations(&callback_listener_);
- io_task_runner_->RunUntilIdle();
-
- // Verify that the fetch is no longer running.
- EXPECT_FALSE(fetcher_factory_.GetFetcherByID(0));
-
- // Verify that a retry has been scheduled.
- EXPECT_EQ(1u, backend_task_runner_->GetPendingTasks().size());
-
- // Fast-forward time to the scheduled retry.
- backend_task_runner_->RunPendingTasks();
- io_task_runner_->RunUntilIdle();
- EXPECT_TRUE(backend_task_runner_->GetPendingTasks().empty());
-
- // Verify that the fetch has been restarted.
- fetcher = fetcher_factory_.GetFetcherByID(1);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[0]), fetcher->GetOriginalURL());
-
- // Complete the fetch.
- fetcher->set_response_code(200);
- fetcher->SetResponseString(kExternalPolicyDataPayload);
- fetcher->delegate()->OnURLFetchComplete(fetcher);
-
- // Accept the data when the callback is invoked this time.
- EXPECT_CALL(callback_listener_,
- OnFetchSuccess(kExternalPolicyDataKeys[0],
- kExternalPolicyDataPayload))
- .Times(1)
- .WillOnce(Return(true));
- backend_task_runner_->RunPendingTasks();
- Mock::VerifyAndClearExpectations(&callback_listener_);
- io_task_runner_->RunUntilIdle();
-
- // Verify that no retries have been scheduled.
- EXPECT_TRUE(backend_task_runner_->GetPendingTasks().empty());
-}
-
-TEST_F(ExternalPolicyDataUpdaterTest, URLChanged) {
- // Create an updater that runs one fetch at a time.
- CreateUpdater(1);
-
- // Make a fetch request.
- RequestExternalDataFetch(0);
-
- // Verify that the fetch has been started.
- net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[0]), fetcher->GetOriginalURL());
-
- // Make another fetch request with the same key but an updated URL.
- RequestExternalDataFetch(0, 1);
-
- // Verify that the original fetch is no longer running.
- EXPECT_FALSE(fetcher_factory_.GetFetcherByID(0));
-
- // Verify that a new fetch has been started with the updated URL.
- fetcher = fetcher_factory_.GetFetcherByID(1);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[1]), fetcher->GetOriginalURL());
-
- // Verify that no retries have been scheduled.
- EXPECT_TRUE(backend_task_runner_->GetPendingTasks().empty());
-}
-
-TEST_F(ExternalPolicyDataUpdaterTest, JobInvalidated) {
- // Create an updater that runs one fetch at a time.
- CreateUpdater(1);
-
- // Make two fetch requests.
- RequestExternalDataFetch(0);
- RequestExternalDataFetch(1);
-
- // Verify that the second fetch has not been started yet.
- EXPECT_FALSE(fetcher_factory_.GetFetcherByID(1));
-
- // Verify that the first fetch has been started.
- net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[0]), fetcher->GetOriginalURL());
-
- // Make another fetch request with the same key as the second request but an
- // updated URL.
- RequestExternalDataFetch(1, 2);
-
- // Verify that the first fetch is still running.
- fetcher = fetcher_factory_.GetFetcherByID(0);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[0]), fetcher->GetOriginalURL());
-
- // Verify that the second fetch has still not been started.
- EXPECT_FALSE(fetcher_factory_.GetFetcherByID(1));
-
- // Make the first fetch fail with a server error.
- fetcher->set_response_code(500);
- fetcher->delegate()->OnURLFetchComplete(fetcher);
- backend_task_runner_->RunPendingTasks();
- io_task_runner_->RunUntilIdle();
-
- // Verify that the first fetch is no longer running.
- EXPECT_FALSE(fetcher_factory_.GetFetcherByID(0));
-
- // Verify that the second fetch was invalidated and the third fetch has been
- // started instead.
- fetcher = fetcher_factory_.GetFetcherByID(1);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[2]), fetcher->GetOriginalURL());
-}
-
-TEST_F(ExternalPolicyDataUpdaterTest, FetchCanceled) {
- // Create an updater that runs one fetch at a time.
- CreateUpdater(1);
-
- // Make a fetch request.
- RequestExternalDataFetch(0);
-
- // Verify that the fetch has been started.
- net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[0]), fetcher->GetOriginalURL());
-
- // Cancel the fetch request.
- updater_->CancelExternalDataFetch(kExternalPolicyDataKeys[0]);
- io_task_runner_->RunUntilIdle();
- backend_task_runner_->RunPendingTasks();
-
- // Verify that the fetch is no longer running.
- EXPECT_FALSE(fetcher_factory_.GetFetcherByID(0));
-
- // Verify that no retries have been scheduled.
- EXPECT_TRUE(backend_task_runner_->GetPendingTasks().empty());
-}
-
-TEST_F(ExternalPolicyDataUpdaterTest, ParallelJobs) {
- // Create an updater that runs up to two fetches in parallel.
- CreateUpdater(2);
-
- // Make three fetch requests.
- RequestExternalDataFetch(0);
- RequestExternalDataFetch(1);
- RequestExternalDataFetch(2);
-
- // Verify that the third fetch has not been started yet.
- EXPECT_FALSE(fetcher_factory_.GetFetcherByID(2));
-
- // Verify that the second fetch has been started.
- net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(1);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[1]), fetcher->GetOriginalURL());
-
- // Verify that the first fetch has been started.
- fetcher = fetcher_factory_.GetFetcherByID(0);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[0]), fetcher->GetOriginalURL());
-
- // Complete the first fetch.
- fetcher->set_response_code(200);
- fetcher->SetResponseString(kExternalPolicyDataPayload);
- fetcher->delegate()->OnURLFetchComplete(fetcher);
-
- // Accept the data when the callback is invoked.
- EXPECT_CALL(callback_listener_,
- OnFetchSuccess(kExternalPolicyDataKeys[0],
- kExternalPolicyDataPayload))
- .Times(1)
- .WillOnce(Return(true));
- backend_task_runner_->RunPendingTasks();
- Mock::VerifyAndClearExpectations(&callback_listener_);
- io_task_runner_->RunUntilIdle();
-
- // Verify that the first fetch is no longer running.
- EXPECT_FALSE(fetcher_factory_.GetFetcherByID(0));
-
- // Verify that the third fetch has been started.
- fetcher = fetcher_factory_.GetFetcherByID(2);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[2]), fetcher->GetOriginalURL());
-
- // Verify that the second fetch is still running.
- fetcher = fetcher_factory_.GetFetcherByID(1);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[1]), fetcher->GetOriginalURL());
-
- // Complete the second fetch.
- fetcher->set_response_code(200);
- fetcher->SetResponseString(kExternalPolicyDataPayload);
- fetcher->delegate()->OnURLFetchComplete(fetcher);
-
- // Accept the data when the callback is invoked.
- EXPECT_CALL(callback_listener_,
- OnFetchSuccess(kExternalPolicyDataKeys[1],
- kExternalPolicyDataPayload))
- .Times(1)
- .WillOnce(Return(true));
- backend_task_runner_->RunPendingTasks();
- Mock::VerifyAndClearExpectations(&callback_listener_);
- io_task_runner_->RunUntilIdle();
-
- // Verify that the second fetch is no longer running.
- EXPECT_FALSE(fetcher_factory_.GetFetcherByID(1));
-
- // Verify that the third fetch is still running.
- fetcher = fetcher_factory_.GetFetcherByID(2);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[2]), fetcher->GetOriginalURL());
-
- // Complete the third fetch.
- fetcher->set_response_code(200);
- fetcher->SetResponseString(kExternalPolicyDataPayload);
- fetcher->delegate()->OnURLFetchComplete(fetcher);
-
- // Accept the data when the callback is invoked.
- EXPECT_CALL(callback_listener_,
- OnFetchSuccess(kExternalPolicyDataKeys[2],
- kExternalPolicyDataPayload))
- .Times(1)
- .WillOnce(Return(true));
- backend_task_runner_->RunPendingTasks();
- Mock::VerifyAndClearExpectations(&callback_listener_);
- io_task_runner_->RunUntilIdle();
-
- // Verify that the third fetch is no longer running.
- EXPECT_FALSE(fetcher_factory_.GetFetcherByID(2));
-
- // Verify that no retries have been scheduled.
- EXPECT_TRUE(backend_task_runner_->GetPendingTasks().empty());
-}
-
-TEST_F(ExternalPolicyDataUpdaterTest, ParallelJobsFinishingOutOfOrder) {
- // Create an updater that runs up to two fetches in parallel.
- CreateUpdater(2);
-
- // Make three fetch requests.
- RequestExternalDataFetch(0);
- RequestExternalDataFetch(1);
- RequestExternalDataFetch(2);
-
- // Verify that the third fetch has not been started yet.
- EXPECT_FALSE(fetcher_factory_.GetFetcherByID(2));
-
- // Verify that the first fetch has been started.
- net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[0]), fetcher->GetOriginalURL());
-
- // Verify that the second fetch has been started.
- fetcher = fetcher_factory_.GetFetcherByID(1);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[1]), fetcher->GetOriginalURL());
-
- // Complete the second fetch.
- fetcher->set_response_code(200);
- fetcher->SetResponseString(kExternalPolicyDataPayload);
- fetcher->delegate()->OnURLFetchComplete(fetcher);
-
- // Accept the data when the callback is invoked.
- EXPECT_CALL(callback_listener_,
- OnFetchSuccess(kExternalPolicyDataKeys[1],
- kExternalPolicyDataPayload))
- .Times(1)
- .WillOnce(Return(true));
- backend_task_runner_->RunPendingTasks();
- Mock::VerifyAndClearExpectations(&callback_listener_);
- io_task_runner_->RunUntilIdle();
-
- // Verify that the second fetch is no longer running.
- EXPECT_FALSE(fetcher_factory_.GetFetcherByID(1));
-
- // Verify that the third fetch has been started.
- fetcher = fetcher_factory_.GetFetcherByID(2);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[2]), fetcher->GetOriginalURL());
-
- // Verify that the first fetch is still running.
- fetcher = fetcher_factory_.GetFetcherByID(0);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[0]), fetcher->GetOriginalURL());
-
- // Complete the first fetch.
- fetcher->set_response_code(200);
- fetcher->SetResponseString(kExternalPolicyDataPayload);
- fetcher->delegate()->OnURLFetchComplete(fetcher);
-
- // Accept the data when the callback is invoked.
- EXPECT_CALL(callback_listener_,
- OnFetchSuccess(kExternalPolicyDataKeys[0],
- kExternalPolicyDataPayload))
- .Times(1)
- .WillOnce(Return(true));
- backend_task_runner_->RunPendingTasks();
- Mock::VerifyAndClearExpectations(&callback_listener_);
- io_task_runner_->RunUntilIdle();
-
- // Verify that the first fetch is no longer running.
- EXPECT_FALSE(fetcher_factory_.GetFetcherByID(0));
-
- // Verify that the third fetch is still running.
- fetcher = fetcher_factory_.GetFetcherByID(2);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[2]), fetcher->GetOriginalURL());
-
- // Complete the third fetch.
- fetcher->set_response_code(200);
- fetcher->SetResponseString(kExternalPolicyDataPayload);
- fetcher->delegate()->OnURLFetchComplete(fetcher);
-
- // Accept the data when the callback is invoked.
- EXPECT_CALL(callback_listener_,
- OnFetchSuccess(kExternalPolicyDataKeys[2],
- kExternalPolicyDataPayload))
- .Times(1)
- .WillOnce(Return(true));
- backend_task_runner_->RunPendingTasks();
- Mock::VerifyAndClearExpectations(&callback_listener_);
- io_task_runner_->RunUntilIdle();
-
- // Verify that the third fetch is no longer running.
- EXPECT_FALSE(fetcher_factory_.GetFetcherByID(2));
-
- // Verify that no retries have been scheduled.
- EXPECT_TRUE(backend_task_runner_->GetPendingTasks().empty());
-}
-
-TEST_F(ExternalPolicyDataUpdaterTest, ParallelJobsWithRetry) {
- // Create an updater that runs up to two fetches in parallel.
- CreateUpdater(2);
-
- // Make three fetch requests.
- RequestExternalDataFetch(0);
- RequestExternalDataFetch(1);
- RequestExternalDataFetch(2);
-
- // Verify that the third fetch has not been started yet.
- EXPECT_FALSE(fetcher_factory_.GetFetcherByID(2));
-
- // Verify that the second fetch has been started.
- net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(1);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[1]), fetcher->GetOriginalURL());
-
- // Verify that the first fetch has been started.
- fetcher = fetcher_factory_.GetFetcherByID(0);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[0]), fetcher->GetOriginalURL());
-
- // Make the first fetch fail with a client error.
- fetcher->set_response_code(400);
- fetcher->delegate()->OnURLFetchComplete(fetcher);
- backend_task_runner_->RunPendingTasks();
- io_task_runner_->RunUntilIdle();
-
- // Verify that the first fetch is no longer running.
- EXPECT_FALSE(fetcher_factory_.GetFetcherByID(0));
-
- // Verify that the third fetch has been started.
- fetcher = fetcher_factory_.GetFetcherByID(2);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[2]), fetcher->GetOriginalURL());
-
- // Verify that a retry has been scheduled for the first fetch.
- EXPECT_EQ(1u, backend_task_runner_->GetPendingTasks().size());
-
- // Fast-forward time to the scheduled retry.
- backend_task_runner_->RunPendingTasks();
- io_task_runner_->RunUntilIdle();
- EXPECT_TRUE(backend_task_runner_->GetPendingTasks().empty());
-
- // Verify that the first fetch has not been restarted yet.
- EXPECT_FALSE(fetcher_factory_.GetFetcherByID(3));
-
- // Complete the third fetch.
- fetcher->set_response_code(200);
- fetcher->SetResponseString(kExternalPolicyDataPayload);
- fetcher->delegate()->OnURLFetchComplete(fetcher);
-
- // Accept the data when the callback is invoked.
- EXPECT_CALL(callback_listener_,
- OnFetchSuccess(kExternalPolicyDataKeys[2],
- kExternalPolicyDataPayload))
- .Times(1)
- .WillOnce(Return(true));
- backend_task_runner_->RunPendingTasks();
- Mock::VerifyAndClearExpectations(&callback_listener_);
- io_task_runner_->RunUntilIdle();
-
- // Verify that the third fetch is no longer running.
- EXPECT_FALSE(fetcher_factory_.GetFetcherByID(2));
-
- // Verify that the second fetch is still running
- fetcher = fetcher_factory_.GetFetcherByID(1);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[1]), fetcher->GetOriginalURL());
-
- // Verify that the first fetch has been restarted.
- fetcher = fetcher_factory_.GetFetcherByID(3);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[0]), fetcher->GetOriginalURL());
-
- // Verify that no further retries have been scheduled.
- EXPECT_TRUE(backend_task_runner_->GetPendingTasks().empty());
-}
-
-TEST_F(ExternalPolicyDataUpdaterTest, ParallelJobsWithCancel) {
- // Create an updater that runs up to two fetches in parallel.
- CreateUpdater(2);
-
- // Make three fetch requests.
- RequestExternalDataFetch(0);
- RequestExternalDataFetch(1);
- RequestExternalDataFetch(2);
-
- // Verify that the third fetch has not been started yet.
- EXPECT_FALSE(fetcher_factory_.GetFetcherByID(2));
-
- // Verify that the second fetch has been started.
- net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(1);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[1]), fetcher->GetOriginalURL());
-
- // Verify that the first fetch has been started.
- fetcher = fetcher_factory_.GetFetcherByID(0);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[0]), fetcher->GetOriginalURL());
-
- // Cancel the fetch request.
- updater_->CancelExternalDataFetch(kExternalPolicyDataKeys[0]);
- io_task_runner_->RunUntilIdle();
- backend_task_runner_->RunPendingTasks();
-
- // Verify that the fetch is no longer running.
- EXPECT_FALSE(fetcher_factory_.GetFetcherByID(0));
-
- // Verify that the third fetch has been started.
- fetcher = fetcher_factory_.GetFetcherByID(2);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[2]), fetcher->GetOriginalURL());
-
- // Verify that the second fetch is still running.
- fetcher = fetcher_factory_.GetFetcherByID(1);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[1]), fetcher->GetOriginalURL());
-
- // Complete the second fetch.
- fetcher->set_response_code(200);
- fetcher->SetResponseString(kExternalPolicyDataPayload);
- fetcher->delegate()->OnURLFetchComplete(fetcher);
-
- // Accept the data when the callback is invoked.
- EXPECT_CALL(callback_listener_,
- OnFetchSuccess(kExternalPolicyDataKeys[1],
- kExternalPolicyDataPayload))
- .Times(1)
- .WillOnce(Return(true));
- backend_task_runner_->RunPendingTasks();
- Mock::VerifyAndClearExpectations(&callback_listener_);
- io_task_runner_->RunUntilIdle();
-
- // Verify that the second fetch is no longer running.
- EXPECT_FALSE(fetcher_factory_.GetFetcherByID(1));
-
- // Verify that the third fetch is still running.
- fetcher = fetcher_factory_.GetFetcherByID(2);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[2]), fetcher->GetOriginalURL());
-
- // Complete the third fetch.
- fetcher->set_response_code(200);
- fetcher->SetResponseString(kExternalPolicyDataPayload);
- fetcher->delegate()->OnURLFetchComplete(fetcher);
-
- // Accept the data when the callback is invoked.
- EXPECT_CALL(callback_listener_,
- OnFetchSuccess(kExternalPolicyDataKeys[2],
- kExternalPolicyDataPayload))
- .Times(1)
- .WillOnce(Return(true));
- backend_task_runner_->RunPendingTasks();
- Mock::VerifyAndClearExpectations(&callback_listener_);
- io_task_runner_->RunUntilIdle();
-
- // Verify that the third fetch is no longer running.
- EXPECT_FALSE(fetcher_factory_.GetFetcherByID(2));
-
- // Verify that no retries have been scheduled.
- EXPECT_TRUE(backend_task_runner_->GetPendingTasks().empty());
-}
-
-TEST_F(ExternalPolicyDataUpdaterTest, ParallelJobsWithInvalidatedJob) {
- // Create an updater that runs up to two fetches in parallel.
- CreateUpdater(2);
-
- // Make two fetch requests.
- RequestExternalDataFetch(0);
- RequestExternalDataFetch(1);
-
- // Verify that the first fetch has been started.
- net::TestURLFetcher* fetcher = fetcher_factory_.GetFetcherByID(0);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[0]), fetcher->GetOriginalURL());
-
- // Verify that the second fetch has been started.
- fetcher = fetcher_factory_.GetFetcherByID(1);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[1]), fetcher->GetOriginalURL());
-
- // Make another fetch request with the same key as the second request but an
- // updated URL.
- RequestExternalDataFetch(1, 2);
-
- // Verify that the first fetch is still running.
- fetcher = fetcher_factory_.GetFetcherByID(0);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[0]), fetcher->GetOriginalURL());
-
- // Verify that the second fetch is no longer running.
- EXPECT_FALSE(fetcher_factory_.GetFetcherByID(1));
-
- // Verify that the third fetch has been started.
- fetcher = fetcher_factory_.GetFetcherByID(2);
- ASSERT_TRUE(fetcher);
- EXPECT_EQ(GURL(kExternalPolicyDataURLs[2]), fetcher->GetOriginalURL());
-}
-
-} // namespace policy
« no previous file with comments | « chrome/browser/policy/cloud/external_policy_data_updater.cc ('k') | chrome/browser/policy/cloud/message_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698