1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #include "components/policy/core/common/cloud/mock_device_management_service.h" 6 7 #include "base/strings/string_util.h" 8 #include "net/base/net_errors.h" 9 #include "net/url_request/url_request_context_getter.h" 10 11 using testing::Action; 12 13 namespace em = enterprise_management; 14 15 namespace policy { 16 namespace { 17 18 const char kServerUrl[] = "https://example.com/management_service"; 19 const char kUserAgent[] = "Chrome 1.2.3(456)"; 20 const char kPlatform[] = "Test|Unit|1.2.3"; 21 22 // Common mock request job functionality. 23 class MockRequestJobBase : public DeviceManagementRequestJob { 24 public: 25 MockRequestJobBase(JobType type, 26 MockDeviceManagementService* service) 27 : DeviceManagementRequestJob(type, std::string(), std::string()), 28 service_(service) {} 29 virtual ~MockRequestJobBase() {} 30 31 protected: 32 virtual void Run() OVERRIDE { 33 service_->StartJob(ExtractParameter(dm_protocol::kParamRequest), 34 gaia_token_, 35 ExtractParameter(dm_protocol::kParamOAuthToken), 36 dm_token_, 37 ExtractParameter(dm_protocol::kParamUserAffiliation), 38 ExtractParameter(dm_protocol::kParamDeviceID), 39 request_); 40 } 41 42 private: 43 // Searches for a query parameter and returns the associated value. 44 const std::string& ExtractParameter(const std::string& name) const { 45 for (ParameterMap::const_iterator entry(query_params_.begin()); 46 entry != query_params_.end(); 47 ++entry) { 48 if (name == entry->first) 49 return entry->second; 50 } 51 52 return base::EmptyString(); 53 } 54 55 MockDeviceManagementService* service_; 56 57 DISALLOW_COPY_AND_ASSIGN(MockRequestJobBase); 58 }; 59 60 // Synchronous mock request job that immediately completes on calling Run(). 61 class SyncRequestJob : public MockRequestJobBase { 62 public: 63 SyncRequestJob(JobType type, 64 MockDeviceManagementService* service, 65 DeviceManagementStatus status, 66 const em::DeviceManagementResponse& response) 67 : MockRequestJobBase(type, service), 68 status_(status), 69 response_(response) {} 70 virtual ~SyncRequestJob() {} 71 72 protected: 73 virtual void Run() OVERRIDE { 74 MockRequestJobBase::Run(); 75 callback_.Run(status_, net::OK, response_); 76 } 77 78 private: 79 DeviceManagementStatus status_; 80 em::DeviceManagementResponse response_; 81 82 DISALLOW_COPY_AND_ASSIGN(SyncRequestJob); 83 }; 84 85 // Asynchronous job that allows the test to delay job completion. 86 class AsyncRequestJob : public MockRequestJobBase, 87 public MockDeviceManagementJob { 88 public: 89 AsyncRequestJob(JobType type, MockDeviceManagementService* service) 90 : MockRequestJobBase(type, service) {} 91 virtual ~AsyncRequestJob() {} 92 93 protected: 94 virtual void RetryJob() OVERRIDE { 95 if (!retry_callback_.is_null()) 96 retry_callback_.Run(this); 97 Run(); 98 } 99 100 virtual void SendResponse( 101 DeviceManagementStatus status, 102 const em::DeviceManagementResponse& response) OVERRIDE { 103 callback_.Run(status, net::OK, response); 104 } 105 106 private: 107 DISALLOW_COPY_AND_ASSIGN(AsyncRequestJob); 108 }; 109 110 } // namespace 111 112 ACTION_P3(CreateSyncMockDeviceManagementJob, service, status, response) { 113 return new SyncRequestJob(arg0, service, status, response); 114 } 115 116 ACTION_P2(CreateAsyncMockDeviceManagementJob, service, mock_job) { 117 AsyncRequestJob* job = new AsyncRequestJob(arg0, service); 118 *mock_job = job; 119 return job; 120 } 121 122 MockDeviceManagementJob::~MockDeviceManagementJob() {} 123 124 MockDeviceManagementServiceConfiguration:: 125 MockDeviceManagementServiceConfiguration() 126 : server_url_(kServerUrl) {} 127 128 MockDeviceManagementServiceConfiguration:: 129 MockDeviceManagementServiceConfiguration(const std::string& server_url) 130 : server_url_(server_url) {} 131 132 MockDeviceManagementServiceConfiguration:: 133 ~MockDeviceManagementServiceConfiguration() {} 134 135 std::string MockDeviceManagementServiceConfiguration::GetServerUrl() { 136 return server_url_; 137 } 138 139 std::string MockDeviceManagementServiceConfiguration::GetAgentParameter() { 140 return kUserAgent; 141 } 142 143 std::string MockDeviceManagementServiceConfiguration::GetPlatformParameter() { 144 return kPlatform; 145 } 146 147 MockDeviceManagementService::MockDeviceManagementService() 148 : DeviceManagementService(scoped_ptr<Configuration>( 149 new MockDeviceManagementServiceConfiguration)) {} 150 151 MockDeviceManagementService::~MockDeviceManagementService() {} 152 153 Action<MockDeviceManagementService::CreateJobFunction> 154 MockDeviceManagementService::SucceedJob( 155 const em::DeviceManagementResponse& response) { 156 return CreateSyncMockDeviceManagementJob(this, DM_STATUS_SUCCESS, response); 157 } 158 159 Action<MockDeviceManagementService::CreateJobFunction> 160 MockDeviceManagementService::FailJob(DeviceManagementStatus status) { 161 const em::DeviceManagementResponse dummy_response; 162 return CreateSyncMockDeviceManagementJob(this, status, dummy_response); 163 } 164 165 Action<MockDeviceManagementService::CreateJobFunction> 166 MockDeviceManagementService::CreateAsyncJob(MockDeviceManagementJob** job) { 167 return CreateAsyncMockDeviceManagementJob(this, job); 168 } 169 170 } // namespace policy 171