| Index: chrome/browser/policy/cloud/device_management_service_unittest.cc
|
| diff --git a/chrome/browser/policy/cloud/device_management_service_unittest.cc b/chrome/browser/policy/cloud/device_management_service_unittest.cc
|
| deleted file mode 100644
|
| index e9a749056a7f091cf18839e5290c375581dfd46b..0000000000000000000000000000000000000000
|
| --- a/chrome/browser/policy/cloud/device_management_service_unittest.cc
|
| +++ /dev/null
|
| @@ -1,704 +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 <ostream>
|
| -#include <vector>
|
| -
|
| -#include "base/bind.h"
|
| -#include "base/message_loop/message_loop.h"
|
| -#include "base/message_loop/message_loop_proxy.h"
|
| -#include "base/run_loop.h"
|
| -#include "base/strings/string_split.h"
|
| -#include "chrome/browser/policy/cloud/cloud_policy_constants.h"
|
| -#include "chrome/browser/policy/cloud/device_management_service.h"
|
| -#include "chrome/browser/policy/cloud/mock_device_management_service.h"
|
| -#include "net/base/escape.h"
|
| -#include "net/base/load_flags.h"
|
| -#include "net/base/net_errors.h"
|
| -#include "net/http/http_response_headers.h"
|
| -#include "net/url_request/test_url_fetcher_factory.h"
|
| -#include "net/url_request/url_request_status.h"
|
| -#include "net/url_request/url_request_test_util.h"
|
| -#include "testing/gmock/include/gmock/gmock.h"
|
| -#include "testing/gtest/include/gtest/gtest.h"
|
| -
|
| -using testing::Mock;
|
| -using testing::_;
|
| -
|
| -namespace em = enterprise_management;
|
| -
|
| -namespace policy {
|
| -
|
| -const char kServiceUrl[] = "https://example.com/management_service";
|
| -
|
| -// Encoded empty response messages for testing the error code paths.
|
| -const char kResponseEmpty[] = "\x08\x00";
|
| -
|
| -#define PROTO_STRING(name) (std::string(name, arraysize(name) - 1))
|
| -
|
| -// Some helper constants.
|
| -const char kGaiaAuthToken[] = "gaia-auth-token";
|
| -const char kOAuthToken[] = "oauth-token";
|
| -const char kDMToken[] = "device-management-token";
|
| -const char kClientID[] = "device-id";
|
| -const char kRobotAuthCode[] = "robot-oauth-auth-code";
|
| -
|
| -// Unit tests for the device management policy service. The tests are run
|
| -// against a TestURLFetcherFactory that is used to short-circuit the request
|
| -// without calling into the actual network stack.
|
| -class DeviceManagementServiceTestBase : public testing::Test {
|
| - protected:
|
| - DeviceManagementServiceTestBase() {
|
| - request_context_ =
|
| - new net::TestURLRequestContextGetter(loop_.message_loop_proxy());
|
| - ResetService();
|
| - InitializeService();
|
| - }
|
| -
|
| - ~DeviceManagementServiceTestBase() {
|
| - service_.reset();
|
| - base::RunLoop().RunUntilIdle();
|
| - }
|
| -
|
| - void ResetService() {
|
| - scoped_ptr<DeviceManagementService::Configuration> configuration(
|
| - new MockDeviceManagementServiceConfiguration(kServiceUrl));
|
| - service_.reset(new DeviceManagementService(configuration.Pass()));
|
| - }
|
| -
|
| - void InitializeService() {
|
| - service_->ScheduleInitialization(0);
|
| - base::RunLoop().RunUntilIdle();
|
| - }
|
| -
|
| - net::TestURLFetcher* GetFetcher() {
|
| - return factory_.GetFetcherByID(DeviceManagementService::kURLFetcherID);
|
| - }
|
| -
|
| - DeviceManagementRequestJob* StartRegistrationJob() {
|
| - DeviceManagementRequestJob* job =
|
| - service_->CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION,
|
| - request_context_);
|
| - job->SetGaiaToken(kGaiaAuthToken);
|
| - job->SetOAuthToken(kOAuthToken);
|
| - job->SetClientID(kClientID);
|
| - job->GetRequest()->mutable_register_request();
|
| - job->SetRetryCallback(base::Bind(
|
| - &DeviceManagementServiceTestBase::OnJobRetry, base::Unretained(this)));
|
| - job->Start(base::Bind(&DeviceManagementServiceTestBase::OnJobDone,
|
| - base::Unretained(this)));
|
| - return job;
|
| - }
|
| -
|
| - DeviceManagementRequestJob* StartApiAuthCodeFetchJob() {
|
| - DeviceManagementRequestJob* job = service_->CreateJob(
|
| - DeviceManagementRequestJob::TYPE_API_AUTH_CODE_FETCH,
|
| - request_context_);
|
| - job->SetGaiaToken(kGaiaAuthToken);
|
| - job->SetOAuthToken(kOAuthToken);
|
| - job->SetClientID(kClientID);
|
| - job->GetRequest()->mutable_service_api_access_request();
|
| - job->SetRetryCallback(base::Bind(
|
| - &DeviceManagementServiceTestBase::OnJobRetry, base::Unretained(this)));
|
| - job->Start(base::Bind(&DeviceManagementServiceTestBase::OnJobDone,
|
| - base::Unretained(this)));
|
| - return job;
|
| - }
|
| -
|
| - DeviceManagementRequestJob* StartUnregistrationJob() {
|
| - DeviceManagementRequestJob* job =
|
| - service_->CreateJob(DeviceManagementRequestJob::TYPE_UNREGISTRATION,
|
| - request_context_);
|
| - job->SetDMToken(kDMToken);
|
| - job->SetClientID(kClientID);
|
| - job->GetRequest()->mutable_unregister_request();
|
| - job->SetRetryCallback(base::Bind(
|
| - &DeviceManagementServiceTestBase::OnJobRetry, base::Unretained(this)));
|
| - job->Start(base::Bind(&DeviceManagementServiceTestBase::OnJobDone,
|
| - base::Unretained(this)));
|
| - return job;
|
| - }
|
| -
|
| - DeviceManagementRequestJob* StartPolicyFetchJob() {
|
| - DeviceManagementRequestJob* job =
|
| - service_->CreateJob(DeviceManagementRequestJob::TYPE_POLICY_FETCH,
|
| - request_context_);
|
| - job->SetGaiaToken(kGaiaAuthToken);
|
| - job->SetOAuthToken(kOAuthToken);
|
| - job->SetClientID(kClientID);
|
| - em::PolicyFetchRequest* fetch_request =
|
| - job->GetRequest()->mutable_policy_request()->add_request();
|
| - fetch_request->set_policy_type(dm_protocol::kChromeUserPolicyType);
|
| - job->SetRetryCallback(base::Bind(
|
| - &DeviceManagementServiceTestBase::OnJobRetry, base::Unretained(this)));
|
| - job->Start(base::Bind(&DeviceManagementServiceTestBase::OnJobDone,
|
| - base::Unretained(this)));
|
| - return job;
|
| - }
|
| -
|
| - DeviceManagementRequestJob* StartAutoEnrollmentJob() {
|
| - DeviceManagementRequestJob* job =
|
| - service_->CreateJob(DeviceManagementRequestJob::TYPE_AUTO_ENROLLMENT,
|
| - request_context_);
|
| - job->SetClientID(kClientID);
|
| - em::DeviceAutoEnrollmentRequest* request =
|
| - job->GetRequest()->mutable_auto_enrollment_request();
|
| - request->set_modulus(1);
|
| - request->set_remainder(0);
|
| - job->SetRetryCallback(base::Bind(
|
| - &DeviceManagementServiceTestBase::OnJobRetry, base::Unretained(this)));
|
| - job->Start(base::Bind(&DeviceManagementServiceTestBase::OnJobDone,
|
| - base::Unretained(this)));
|
| - return job;
|
| - }
|
| -
|
| - void SendResponse(net::TestURLFetcher* fetcher,
|
| - const net::URLRequestStatus request_status,
|
| - int http_status,
|
| - const std::string& response) {
|
| - fetcher->set_url(GURL(kServiceUrl));
|
| - fetcher->set_status(request_status);
|
| - fetcher->set_response_code(http_status);
|
| - fetcher->SetResponseString(response);
|
| - fetcher->delegate()->OnURLFetchComplete(fetcher);
|
| - }
|
| -
|
| - MOCK_METHOD3(OnJobDone, void(DeviceManagementStatus, int,
|
| - const em::DeviceManagementResponse&));
|
| -
|
| - MOCK_METHOD1(OnJobRetry, void(DeviceManagementRequestJob*));
|
| -
|
| - base::MessageLoop loop_;
|
| - scoped_refptr<net::TestURLRequestContextGetter> request_context_;
|
| - net::TestURLFetcherFactory factory_;
|
| - scoped_ptr<DeviceManagementService> service_;
|
| -};
|
| -
|
| -struct FailedRequestParams {
|
| - FailedRequestParams(DeviceManagementStatus expected_status,
|
| - net::URLRequestStatus::Status request_status,
|
| - int http_status,
|
| - const std::string& response)
|
| - : expected_status_(expected_status),
|
| - request_status_(request_status, 0),
|
| - http_status_(http_status),
|
| - response_(response) {}
|
| -
|
| - DeviceManagementStatus expected_status_;
|
| - net::URLRequestStatus request_status_;
|
| - int http_status_;
|
| - std::string response_;
|
| -};
|
| -
|
| -void PrintTo(const FailedRequestParams& params, std::ostream* os) {
|
| - *os << "FailedRequestParams " << params.expected_status_
|
| - << " " << params.request_status_.status()
|
| - << " " << params.http_status_;
|
| -}
|
| -
|
| -// A parameterized test case for erroneous response situations, they're mostly
|
| -// the same for all kinds of requests.
|
| -class DeviceManagementServiceFailedRequestTest
|
| - : public DeviceManagementServiceTestBase,
|
| - public testing::WithParamInterface<FailedRequestParams> {
|
| -};
|
| -
|
| -TEST_P(DeviceManagementServiceFailedRequestTest, RegisterRequest) {
|
| - EXPECT_CALL(*this, OnJobDone(GetParam().expected_status_, _, _));
|
| - EXPECT_CALL(*this, OnJobRetry(_)).Times(0);
|
| - scoped_ptr<DeviceManagementRequestJob> request_job(StartRegistrationJob());
|
| - net::TestURLFetcher* fetcher = GetFetcher();
|
| - ASSERT_TRUE(fetcher);
|
| -
|
| - SendResponse(fetcher, GetParam().request_status_, GetParam().http_status_,
|
| - GetParam().response_);
|
| -}
|
| -
|
| -TEST_P(DeviceManagementServiceFailedRequestTest, ApiAuthCodeFetchRequest) {
|
| - EXPECT_CALL(*this, OnJobDone(GetParam().expected_status_, _, _));
|
| - EXPECT_CALL(*this, OnJobRetry(_)).Times(0);
|
| - scoped_ptr<DeviceManagementRequestJob> request_job(
|
| - StartApiAuthCodeFetchJob());
|
| - net::TestURLFetcher* fetcher = GetFetcher();
|
| - ASSERT_TRUE(fetcher);
|
| -
|
| - SendResponse(fetcher, GetParam().request_status_, GetParam().http_status_,
|
| - GetParam().response_);
|
| -}
|
| -
|
| -TEST_P(DeviceManagementServiceFailedRequestTest, UnregisterRequest) {
|
| - EXPECT_CALL(*this, OnJobDone(GetParam().expected_status_, _, _));
|
| - EXPECT_CALL(*this, OnJobRetry(_)).Times(0);
|
| - scoped_ptr<DeviceManagementRequestJob> request_job(StartUnregistrationJob());
|
| - net::TestURLFetcher* fetcher = GetFetcher();
|
| - ASSERT_TRUE(fetcher);
|
| -
|
| - SendResponse(fetcher, GetParam().request_status_, GetParam().http_status_,
|
| - GetParam().response_);
|
| -}
|
| -
|
| -TEST_P(DeviceManagementServiceFailedRequestTest, PolicyRequest) {
|
| - EXPECT_CALL(*this, OnJobDone(GetParam().expected_status_, _, _));
|
| - EXPECT_CALL(*this, OnJobRetry(_)).Times(0);
|
| - scoped_ptr<DeviceManagementRequestJob> request_job(StartPolicyFetchJob());
|
| - net::TestURLFetcher* fetcher = GetFetcher();
|
| - ASSERT_TRUE(fetcher);
|
| -
|
| - SendResponse(fetcher, GetParam().request_status_, GetParam().http_status_,
|
| - GetParam().response_);
|
| -}
|
| -
|
| -TEST_P(DeviceManagementServiceFailedRequestTest, AutoEnrollmentRequest) {
|
| - EXPECT_CALL(*this, OnJobDone(GetParam().expected_status_, _, _));
|
| - EXPECT_CALL(*this, OnJobRetry(_)).Times(0);
|
| - scoped_ptr<DeviceManagementRequestJob> request_job(StartAutoEnrollmentJob());
|
| - net::TestURLFetcher* fetcher = GetFetcher();
|
| - ASSERT_TRUE(fetcher);
|
| -
|
| - SendResponse(fetcher, GetParam().request_status_, GetParam().http_status_,
|
| - GetParam().response_);
|
| -}
|
| -
|
| -INSTANTIATE_TEST_CASE_P(
|
| - DeviceManagementServiceFailedRequestTestInstance,
|
| - DeviceManagementServiceFailedRequestTest,
|
| - testing::Values(
|
| - FailedRequestParams(
|
| - DM_STATUS_REQUEST_FAILED,
|
| - net::URLRequestStatus::FAILED,
|
| - 200,
|
| - PROTO_STRING(kResponseEmpty)),
|
| - FailedRequestParams(
|
| - DM_STATUS_HTTP_STATUS_ERROR,
|
| - net::URLRequestStatus::SUCCESS,
|
| - 666,
|
| - PROTO_STRING(kResponseEmpty)),
|
| - FailedRequestParams(
|
| - DM_STATUS_RESPONSE_DECODING_ERROR,
|
| - net::URLRequestStatus::SUCCESS,
|
| - 200,
|
| - PROTO_STRING("Not a protobuf.")),
|
| - FailedRequestParams(
|
| - DM_STATUS_SERVICE_MANAGEMENT_NOT_SUPPORTED,
|
| - net::URLRequestStatus::SUCCESS,
|
| - 403,
|
| - PROTO_STRING(kResponseEmpty)),
|
| - FailedRequestParams(
|
| - DM_STATUS_SERVICE_INVALID_SERIAL_NUMBER,
|
| - net::URLRequestStatus::SUCCESS,
|
| - 405,
|
| - PROTO_STRING(kResponseEmpty)),
|
| - FailedRequestParams(
|
| - DM_STATUS_SERVICE_DEVICE_ID_CONFLICT,
|
| - net::URLRequestStatus::SUCCESS,
|
| - 409,
|
| - PROTO_STRING(kResponseEmpty)),
|
| - FailedRequestParams(
|
| - DM_STATUS_SERVICE_DEVICE_NOT_FOUND,
|
| - net::URLRequestStatus::SUCCESS,
|
| - 410,
|
| - PROTO_STRING(kResponseEmpty)),
|
| - FailedRequestParams(
|
| - DM_STATUS_SERVICE_MANAGEMENT_TOKEN_INVALID,
|
| - net::URLRequestStatus::SUCCESS,
|
| - 401,
|
| - PROTO_STRING(kResponseEmpty)),
|
| - FailedRequestParams(
|
| - DM_STATUS_REQUEST_INVALID,
|
| - net::URLRequestStatus::SUCCESS,
|
| - 400,
|
| - PROTO_STRING(kResponseEmpty)),
|
| - FailedRequestParams(
|
| - DM_STATUS_TEMPORARY_UNAVAILABLE,
|
| - net::URLRequestStatus::SUCCESS,
|
| - 404,
|
| - PROTO_STRING(kResponseEmpty)),
|
| - FailedRequestParams(
|
| - DM_STATUS_SERVICE_ACTIVATION_PENDING,
|
| - net::URLRequestStatus::SUCCESS,
|
| - 412,
|
| - PROTO_STRING(kResponseEmpty)),
|
| - FailedRequestParams(
|
| - DM_STATUS_SERVICE_MISSING_LICENSES,
|
| - net::URLRequestStatus::SUCCESS,
|
| - 402,
|
| - PROTO_STRING(kResponseEmpty))));
|
| -
|
| -// Simple query parameter parser for testing.
|
| -class QueryParams {
|
| - public:
|
| - explicit QueryParams(const std::string& query) {
|
| - base::SplitStringIntoKeyValuePairs(query, '=', '&', ¶ms_);
|
| - }
|
| -
|
| - bool Check(const std::string& name, const std::string& expected_value) {
|
| - bool found = false;
|
| - for (ParamMap::const_iterator i(params_.begin()); i != params_.end(); ++i) {
|
| - std::string unescaped_name(net::UnescapeURLComponent(
|
| - i->first,
|
| - net::UnescapeRule::NORMAL |
|
| - net::UnescapeRule::SPACES |
|
| - net::UnescapeRule::URL_SPECIAL_CHARS |
|
| - net::UnescapeRule::CONTROL_CHARS |
|
| - net::UnescapeRule::REPLACE_PLUS_WITH_SPACE));
|
| - if (unescaped_name == name) {
|
| - if (found)
|
| - return false;
|
| - found = true;
|
| - std::string unescaped_value(net::UnescapeURLComponent(
|
| - i->second,
|
| - net::UnescapeRule::NORMAL |
|
| - net::UnescapeRule::SPACES |
|
| - net::UnescapeRule::URL_SPECIAL_CHARS |
|
| - net::UnescapeRule::CONTROL_CHARS |
|
| - net::UnescapeRule::REPLACE_PLUS_WITH_SPACE));
|
| - if (unescaped_value != expected_value)
|
| - return false;
|
| - }
|
| - }
|
| - return found;
|
| - }
|
| -
|
| - private:
|
| - typedef std::vector<std::pair<std::string, std::string> > ParamMap;
|
| - ParamMap params_;
|
| -};
|
| -
|
| -class DeviceManagementServiceTest
|
| - : public DeviceManagementServiceTestBase {
|
| - protected:
|
| - void CheckURLAndQueryParams(const GURL& request_url,
|
| - const std::string& request_type,
|
| - const std::string& device_id) {
|
| - const GURL service_url(kServiceUrl);
|
| - EXPECT_EQ(service_url.scheme(), request_url.scheme());
|
| - EXPECT_EQ(service_url.host(), request_url.host());
|
| - EXPECT_EQ(service_url.port(), request_url.port());
|
| - EXPECT_EQ(service_url.path(), request_url.path());
|
| -
|
| - QueryParams query_params(request_url.query());
|
| - EXPECT_TRUE(query_params.Check(dm_protocol::kParamRequest, request_type));
|
| - EXPECT_TRUE(query_params.Check(dm_protocol::kParamDeviceID, device_id));
|
| - EXPECT_TRUE(query_params.Check(dm_protocol::kParamDeviceType,
|
| - dm_protocol::kValueDeviceType));
|
| - EXPECT_TRUE(query_params.Check(dm_protocol::kParamAppType,
|
| - dm_protocol::kValueAppType));
|
| - }
|
| -};
|
| -
|
| -MATCHER_P(MessageEquals, reference, "") {
|
| - std::string reference_data;
|
| - std::string arg_data;
|
| - return arg.SerializeToString(&arg_data) &&
|
| - reference.SerializeToString(&reference_data) &&
|
| - arg_data == reference_data;
|
| -}
|
| -
|
| -TEST_F(DeviceManagementServiceTest, RegisterRequest) {
|
| - em::DeviceManagementResponse expected_response;
|
| - expected_response.mutable_register_response()->
|
| - set_device_management_token(kDMToken);
|
| - EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, _,
|
| - MessageEquals(expected_response)));
|
| - EXPECT_CALL(*this, OnJobRetry(_)).Times(0);
|
| - scoped_ptr<DeviceManagementRequestJob> request_job(StartRegistrationJob());
|
| - net::TestURLFetcher* fetcher = GetFetcher();
|
| - ASSERT_TRUE(fetcher);
|
| -
|
| - CheckURLAndQueryParams(fetcher->GetOriginalURL(),
|
| - dm_protocol::kValueRequestRegister,
|
| - kClientID);
|
| -
|
| - std::string expected_data;
|
| - ASSERT_TRUE(request_job->GetRequest()->SerializeToString(&expected_data));
|
| - EXPECT_EQ(expected_data, fetcher->upload_data());
|
| -
|
| - // Generate the response.
|
| - std::string response_data;
|
| - ASSERT_TRUE(expected_response.SerializeToString(&response_data));
|
| - net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0);
|
| - SendResponse(fetcher, status, 200, response_data);
|
| -}
|
| -
|
| -TEST_F(DeviceManagementServiceTest, ApiAuthCodeFetchRequest) {
|
| - em::DeviceManagementResponse expected_response;
|
| - expected_response.mutable_service_api_access_response()->set_auth_code(
|
| - kRobotAuthCode);
|
| - EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, _,
|
| - MessageEquals(expected_response)));
|
| - EXPECT_CALL(*this, OnJobRetry(_)).Times(0);
|
| - scoped_ptr<DeviceManagementRequestJob> request_job(
|
| - StartApiAuthCodeFetchJob());
|
| - net::TestURLFetcher* fetcher = GetFetcher();
|
| - ASSERT_TRUE(fetcher);
|
| -
|
| - CheckURLAndQueryParams(fetcher->GetOriginalURL(),
|
| - dm_protocol::kValueRequestApiAuthorization,
|
| - kClientID);
|
| -
|
| - std::string expected_data;
|
| - ASSERT_TRUE(request_job->GetRequest()->SerializeToString(&expected_data));
|
| - EXPECT_EQ(expected_data, fetcher->upload_data());
|
| -
|
| - // Generate the response.
|
| - std::string response_data;
|
| - ASSERT_TRUE(expected_response.SerializeToString(&response_data));
|
| - net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0);
|
| - SendResponse(fetcher, status, 200, response_data);
|
| -}
|
| -
|
| -TEST_F(DeviceManagementServiceTest, UnregisterRequest) {
|
| - em::DeviceManagementResponse expected_response;
|
| - expected_response.mutable_unregister_response();
|
| - EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, _,
|
| - MessageEquals(expected_response)));
|
| - EXPECT_CALL(*this, OnJobRetry(_)).Times(0);
|
| - scoped_ptr<DeviceManagementRequestJob> request_job(StartUnregistrationJob());
|
| - net::TestURLFetcher* fetcher = GetFetcher();
|
| - ASSERT_TRUE(fetcher);
|
| -
|
| - // Check the data the fetcher received.
|
| - const GURL& request_url(fetcher->GetOriginalURL());
|
| - const GURL service_url(kServiceUrl);
|
| - EXPECT_EQ(service_url.scheme(), request_url.scheme());
|
| - EXPECT_EQ(service_url.host(), request_url.host());
|
| - EXPECT_EQ(service_url.port(), request_url.port());
|
| - EXPECT_EQ(service_url.path(), request_url.path());
|
| -
|
| - CheckURLAndQueryParams(fetcher->GetOriginalURL(),
|
| - dm_protocol::kValueRequestUnregister,
|
| - kClientID);
|
| -
|
| - std::string expected_data;
|
| - ASSERT_TRUE(request_job->GetRequest()->SerializeToString(&expected_data));
|
| - EXPECT_EQ(expected_data, fetcher->upload_data());
|
| -
|
| - // Generate the response.
|
| - std::string response_data;
|
| - ASSERT_TRUE(expected_response.SerializeToString(&response_data));
|
| - net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0);
|
| - SendResponse(fetcher, status, 200, response_data);
|
| -}
|
| -
|
| -TEST_F(DeviceManagementServiceTest, CancelRegisterRequest) {
|
| - EXPECT_CALL(*this, OnJobDone(_, _, _)).Times(0);
|
| - EXPECT_CALL(*this, OnJobRetry(_)).Times(0);
|
| - scoped_ptr<DeviceManagementRequestJob> request_job(StartRegistrationJob());
|
| - net::TestURLFetcher* fetcher = GetFetcher();
|
| - ASSERT_TRUE(fetcher);
|
| -
|
| - // There shouldn't be any callbacks.
|
| - request_job.reset();
|
| -}
|
| -
|
| -TEST_F(DeviceManagementServiceTest, CancelApiAuthCodeFetch) {
|
| - EXPECT_CALL(*this, OnJobDone(_, _, _)).Times(0);
|
| - EXPECT_CALL(*this, OnJobRetry(_)).Times(0);
|
| - scoped_ptr<DeviceManagementRequestJob> request_job(
|
| - StartApiAuthCodeFetchJob());
|
| - net::TestURLFetcher* fetcher = GetFetcher();
|
| - ASSERT_TRUE(fetcher);
|
| -
|
| - // There shouldn't be any callbacks.
|
| - request_job.reset();
|
| -}
|
| -
|
| -TEST_F(DeviceManagementServiceTest, CancelUnregisterRequest) {
|
| - EXPECT_CALL(*this, OnJobDone(_, _, _)).Times(0);
|
| - EXPECT_CALL(*this, OnJobRetry(_)).Times(0);
|
| - scoped_ptr<DeviceManagementRequestJob> request_job(StartUnregistrationJob());
|
| - net::TestURLFetcher* fetcher = GetFetcher();
|
| - ASSERT_TRUE(fetcher);
|
| -
|
| - // There shouldn't be any callbacks.
|
| - request_job.reset();
|
| -}
|
| -
|
| -TEST_F(DeviceManagementServiceTest, CancelPolicyRequest) {
|
| - EXPECT_CALL(*this, OnJobDone(_, _, _)).Times(0);
|
| - EXPECT_CALL(*this, OnJobRetry(_)).Times(0);
|
| - scoped_ptr<DeviceManagementRequestJob> request_job(StartPolicyFetchJob());
|
| - net::TestURLFetcher* fetcher = GetFetcher();
|
| - ASSERT_TRUE(fetcher);
|
| -
|
| - // There shouldn't be any callbacks.
|
| - request_job.reset();
|
| -}
|
| -
|
| -TEST_F(DeviceManagementServiceTest, JobQueueing) {
|
| - // Start with a non-initialized service.
|
| - ResetService();
|
| -
|
| - em::DeviceManagementResponse expected_response;
|
| - expected_response.mutable_register_response()->
|
| - set_device_management_token(kDMToken);
|
| - EXPECT_CALL(*this, OnJobDone(DM_STATUS_SUCCESS, _,
|
| - MessageEquals(expected_response)));
|
| - EXPECT_CALL(*this, OnJobRetry(_)).Times(0);
|
| -
|
| - // Make a request. We should not see any fetchers being created.
|
| - scoped_ptr<DeviceManagementRequestJob> request_job(StartRegistrationJob());
|
| - net::TestURLFetcher* fetcher = GetFetcher();
|
| - ASSERT_FALSE(fetcher);
|
| -
|
| - // Now initialize the service. That should start the job.
|
| - InitializeService();
|
| - fetcher = GetFetcher();
|
| - ASSERT_TRUE(fetcher);
|
| - factory_.RemoveFetcherFromMap(DeviceManagementService::kURLFetcherID);
|
| -
|
| - // Check that the request is processed as expected.
|
| - std::string response_data;
|
| - ASSERT_TRUE(expected_response.SerializeToString(&response_data));
|
| - net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0);
|
| - SendResponse(fetcher, status, 200, response_data);
|
| -}
|
| -
|
| -TEST_F(DeviceManagementServiceTest, CancelRequestAfterShutdown) {
|
| - EXPECT_CALL(*this, OnJobDone(_, _, _)).Times(0);
|
| - EXPECT_CALL(*this, OnJobRetry(_)).Times(0);
|
| - scoped_ptr<DeviceManagementRequestJob> request_job(StartPolicyFetchJob());
|
| - net::TestURLFetcher* fetcher = GetFetcher();
|
| - ASSERT_TRUE(fetcher);
|
| -
|
| - // Shutdown the service and cancel the job afterwards.
|
| - service_->Shutdown();
|
| - request_job.reset();
|
| -}
|
| -
|
| -ACTION_P(ResetPointer, pointer) {
|
| - pointer->reset();
|
| -}
|
| -
|
| -TEST_F(DeviceManagementServiceTest, CancelDuringCallback) {
|
| - // Make a request.
|
| - scoped_ptr<DeviceManagementRequestJob> request_job(StartRegistrationJob());
|
| - net::TestURLFetcher* fetcher = GetFetcher();
|
| - ASSERT_TRUE(fetcher);
|
| -
|
| - EXPECT_CALL(*this, OnJobDone(_, _, _))
|
| - .WillOnce(ResetPointer(&request_job));
|
| - EXPECT_CALL(*this, OnJobRetry(_)).Times(0);
|
| -
|
| - // Generate a callback.
|
| - net::URLRequestStatus status(net::URLRequestStatus::SUCCESS, 0);
|
| - SendResponse(fetcher, status, 500, std::string());
|
| -
|
| - // Job should have been reset.
|
| - EXPECT_FALSE(request_job.get());
|
| -}
|
| -
|
| -TEST_F(DeviceManagementServiceTest, RetryOnProxyError) {
|
| - // Make a request.
|
| - EXPECT_CALL(*this, OnJobDone(_, _, _)).Times(0);
|
| - EXPECT_CALL(*this, OnJobRetry(_));
|
| -
|
| - scoped_ptr<DeviceManagementRequestJob> request_job(StartRegistrationJob());
|
| - net::TestURLFetcher* fetcher = GetFetcher();
|
| - ASSERT_TRUE(fetcher);
|
| - EXPECT_TRUE((fetcher->GetLoadFlags() & net::LOAD_BYPASS_PROXY) == 0);
|
| - const GURL original_url(fetcher->GetOriginalURL());
|
| - const std::string upload_data(fetcher->upload_data());
|
| -
|
| - // Generate a callback with a proxy failure.
|
| - net::URLRequestStatus status(net::URLRequestStatus::FAILED,
|
| - net::ERR_PROXY_CONNECTION_FAILED);
|
| - SendResponse(fetcher, status, 200, std::string());
|
| -
|
| - // Verify that a new URLFetcher was started that bypasses the proxy.
|
| - fetcher = GetFetcher();
|
| - ASSERT_TRUE(fetcher);
|
| - EXPECT_TRUE(fetcher->GetLoadFlags() & net::LOAD_BYPASS_PROXY);
|
| - EXPECT_EQ(original_url, fetcher->GetOriginalURL());
|
| - EXPECT_EQ(upload_data, fetcher->upload_data());
|
| -}
|
| -
|
| -TEST_F(DeviceManagementServiceTest, RetryOnBadResponseFromProxy) {
|
| - // Make a request.
|
| - EXPECT_CALL(*this, OnJobDone(_, _, _)).Times(0);
|
| - EXPECT_CALL(*this, OnJobRetry(_));
|
| -
|
| - scoped_ptr<DeviceManagementRequestJob> request_job(StartRegistrationJob());
|
| - net::TestURLFetcher* fetcher = GetFetcher();
|
| - ASSERT_TRUE(fetcher);
|
| - EXPECT_TRUE((fetcher->GetLoadFlags() & net::LOAD_BYPASS_PROXY) == 0);
|
| - const GURL original_url(fetcher->GetOriginalURL());
|
| - const std::string upload_data(fetcher->upload_data());
|
| - fetcher->set_was_fetched_via_proxy(true);
|
| - scoped_refptr<net::HttpResponseHeaders> headers;
|
| - headers = new net::HttpResponseHeaders(
|
| - "HTTP/1.1 200 OK\0Content-type: bad/type\0\0");
|
| - fetcher->set_response_headers(headers);
|
| -
|
| - // Generate a callback with a valid http response, that was generated by
|
| - // a bad/wrong proxy.
|
| - net::URLRequestStatus status;
|
| - SendResponse(fetcher, status, 200, std::string());
|
| -
|
| - // Verify that a new URLFetcher was started that bypasses the proxy.
|
| - fetcher = GetFetcher();
|
| - ASSERT_TRUE(fetcher);
|
| - EXPECT_TRUE((fetcher->GetLoadFlags() & net::LOAD_BYPASS_PROXY) != 0);
|
| - EXPECT_EQ(original_url, fetcher->GetOriginalURL());
|
| - EXPECT_EQ(upload_data, fetcher->upload_data());
|
| -}
|
| -
|
| -TEST_F(DeviceManagementServiceTest, RetryOnNetworkChanges) {
|
| - // Make a request.
|
| - EXPECT_CALL(*this, OnJobDone(_, _, _)).Times(0);
|
| - EXPECT_CALL(*this, OnJobRetry(_));
|
| -
|
| - scoped_ptr<DeviceManagementRequestJob> request_job(StartRegistrationJob());
|
| - net::TestURLFetcher* fetcher = GetFetcher();
|
| - ASSERT_TRUE(fetcher);
|
| - const GURL original_url(fetcher->GetOriginalURL());
|
| - const std::string original_upload_data(fetcher->upload_data());
|
| -
|
| - // Make it fail with ERR_NETWORK_CHANGED.
|
| - fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::FAILED,
|
| - net::ERR_NETWORK_CHANGED));
|
| - fetcher->set_url(GURL(kServiceUrl));
|
| - fetcher->delegate()->OnURLFetchComplete(fetcher);
|
| -
|
| - // Verify that a new URLFetcher was started that retries this job, after
|
| - // having called OnJobRetry.
|
| - Mock::VerifyAndClearExpectations(this);
|
| - fetcher = GetFetcher();
|
| - ASSERT_TRUE(fetcher);
|
| - EXPECT_EQ(original_url, fetcher->GetOriginalURL());
|
| - EXPECT_EQ(original_upload_data, fetcher->upload_data());
|
| - EXPECT_EQ(net::URLRequestStatus::SUCCESS, fetcher->GetStatus().status());
|
| -}
|
| -
|
| -TEST_F(DeviceManagementServiceTest, RetryLimit) {
|
| - scoped_ptr<DeviceManagementRequestJob> request_job(StartRegistrationJob());
|
| -
|
| - // Simulate 3 failed network requests.
|
| - for (int i = 0; i < 3; ++i) {
|
| - // Make the current fetcher fail with ERR_NETWORK_CHANGED.
|
| - net::TestURLFetcher* fetcher = GetFetcher();
|
| - ASSERT_TRUE(fetcher);
|
| - EXPECT_CALL(*this, OnJobDone(_, _, _)).Times(0);
|
| - EXPECT_CALL(*this, OnJobRetry(_));
|
| - fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::FAILED,
|
| - net::ERR_NETWORK_CHANGED));
|
| - fetcher->set_url(GURL(kServiceUrl));
|
| - fetcher->delegate()->OnURLFetchComplete(fetcher);
|
| - Mock::VerifyAndClearExpectations(this);
|
| - }
|
| -
|
| - // At the next failure the DeviceManagementService should give up retrying and
|
| - // pass the error code to the job's owner.
|
| - net::TestURLFetcher* fetcher = GetFetcher();
|
| - ASSERT_TRUE(fetcher);
|
| - EXPECT_CALL(*this, OnJobDone(DM_STATUS_REQUEST_FAILED, _, _));
|
| - EXPECT_CALL(*this, OnJobRetry(_)).Times(0);
|
| - fetcher->set_status(net::URLRequestStatus(net::URLRequestStatus::FAILED,
|
| - net::ERR_NETWORK_CHANGED));
|
| - fetcher->set_url(GURL(kServiceUrl));
|
| - fetcher->delegate()->OnURLFetchComplete(fetcher);
|
| - Mock::VerifyAndClearExpectations(this);
|
| -}
|
| -
|
| -} // namespace policy
|
|
|