| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "chrome/browser/policy/device_cloud_policy_manager_chromeos.h" | 5 #include "chrome/browser/policy/device_cloud_policy_manager_chromeos.h" |
| 6 | 6 |
| 7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
| 8 #include "base/compiler_specific.h" | 8 #include "base/compiler_specific.h" |
| 9 #include "base/memory/ref_counted.h" | 9 #include "base/memory/ref_counted.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 133 PolicyBundle bundle; | 133 PolicyBundle bundle; |
| 134 EXPECT_TRUE(manager_.policies().Equals(bundle)); | 134 EXPECT_TRUE(manager_.policies().Equals(bundle)); |
| 135 | 135 |
| 136 manager_.Initialize(&local_state_, &device_management_service_); | 136 manager_.Initialize(&local_state_, &device_management_service_); |
| 137 EXPECT_TRUE(manager_.policies().Equals(bundle)); | 137 EXPECT_TRUE(manager_.policies().Equals(bundle)); |
| 138 | 138 |
| 139 manager_.Shutdown(); | 139 manager_.Shutdown(); |
| 140 EXPECT_TRUE(manager_.policies().Equals(bundle)); | 140 EXPECT_TRUE(manager_.policies().Equals(bundle)); |
| 141 } | 141 } |
| 142 | 142 |
| 143 class DeviceCloudPolicyManagerChromeOSEnrollmentTest |
| 144 : public DeviceCloudPolicyManagerChromeOSTest { |
| 145 public: |
| 146 void Done(EnrollmentStatus enrollment_status, |
| 147 DeviceManagementStatus dm_status, |
| 148 CloudPolicyValidatorBase::Status validator_status, |
| 149 CloudPolicyStore::Status store_status) { |
| 150 EXPECT_EQ(expected_enrollment_status_, enrollment_status); |
| 151 EXPECT_EQ(expected_dm_status_, dm_status); |
| 152 EXPECT_EQ(expected_validator_status_, validator_status); |
| 153 EXPECT_EQ(expected_store_status_, store_status); |
| 154 done_ = true; |
| 155 } |
| 156 |
| 157 protected: |
| 158 DeviceCloudPolicyManagerChromeOSEnrollmentTest() |
| 159 : register_status_(DM_STATUS_SUCCESS), |
| 160 fetch_status_(DM_STATUS_SUCCESS), |
| 161 store_result_(true), |
| 162 expected_enrollment_status_(ENROLLMENT_STATUS_SUCCESS), |
| 163 expected_dm_status_(DM_STATUS_SUCCESS), |
| 164 expected_validator_status_(CloudPolicyValidatorBase::VALIDATION_OK), |
| 165 expected_store_status_(CloudPolicyStore::STATUS_OK), |
| 166 done_(false) {} |
| 167 |
| 168 virtual void SetUp() OVERRIDE { |
| 169 DeviceCloudPolicyManagerChromeOSTest::SetUp(); |
| 170 |
| 171 // Set up test data. |
| 172 policy_.set_new_signing_key(PolicyBuilder::CreateTestNewSigningKey()); |
| 173 policy_.policy_data().set_timestamp( |
| 174 (base::Time::NowFromSystemTime() - |
| 175 base::Time::UnixEpoch()).InMilliseconds()); |
| 176 policy_.Build(); |
| 177 |
| 178 register_response_.mutable_register_response()->set_device_management_token( |
| 179 PolicyBuilder::kFakeToken); |
| 180 fetch_response_.mutable_policy_response()->add_response()->CopyFrom( |
| 181 policy_.policy()); |
| 182 loaded_blob_ = policy_.GetBlob(); |
| 183 |
| 184 // Initialize the manager. |
| 185 device_settings_test_helper_.Flush(); |
| 186 EXPECT_EQ(CloudPolicyStore::STATUS_BAD_STATE, store_->status()); |
| 187 EXPECT_TRUE(manager_.IsInitializationComplete()); |
| 188 |
| 189 PolicyBundle bundle; |
| 190 EXPECT_TRUE(manager_.policies().Equals(bundle)); |
| 191 |
| 192 manager_.Initialize(&local_state_, &device_management_service_); |
| 193 } |
| 194 |
| 195 virtual void TearDown() OVERRIDE { |
| 196 RunTest(); |
| 197 |
| 198 // Enrollment should have completed. |
| 199 EXPECT_TRUE(done_); |
| 200 PolicyBundle bundle; |
| 201 if (expected_enrollment_status_ != ENROLLMENT_STATUS_SUCCESS) { |
| 202 EXPECT_FALSE(store_->has_policy()); |
| 203 EXPECT_FALSE(store_->is_managed()); |
| 204 EXPECT_TRUE(manager_.policies().Equals(bundle)); |
| 205 } else { |
| 206 EXPECT_EQ(DEVICE_MODE_ENTERPRISE, install_attributes_.GetMode()); |
| 207 EXPECT_TRUE(store_->has_policy()); |
| 208 EXPECT_TRUE(store_->is_managed()); |
| 209 ASSERT_TRUE(manager_.cloud_policy_client()); |
| 210 EXPECT_TRUE(manager_.cloud_policy_client()->is_registered()); |
| 211 |
| 212 bundle.Get(POLICY_DOMAIN_CHROME, std::string()).Set( |
| 213 key::kDeviceMetricsReportingEnabled, POLICY_LEVEL_MANDATORY, |
| 214 POLICY_SCOPE_MACHINE, Value::CreateBooleanValue(true)); |
| 215 EXPECT_TRUE(manager_.policies().Equals(bundle)); |
| 216 } |
| 217 |
| 218 DeviceCloudPolicyManagerChromeOSTest::TearDown(); |
| 219 } |
| 220 |
| 221 void RunTest() { |
| 222 // Trigger enrollment. |
| 223 MockDeviceManagementJob* register_job = NULL; |
| 224 EXPECT_CALL(device_management_service_, |
| 225 CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION)) |
| 226 .Times(AtMost(1)) |
| 227 .WillOnce(device_management_service_.CreateAsyncJob(®ister_job)); |
| 228 EXPECT_CALL(device_management_service_, StartJob(_, _, _, _, _, _, _)) |
| 229 .Times(AtMost(1)); |
| 230 manager_.StartEnrollment( |
| 231 "auth token", |
| 232 base::Bind(&DeviceCloudPolicyManagerChromeOSEnrollmentTest::Done, |
| 233 base::Unretained(this))); |
| 234 Mock::VerifyAndClearExpectations(&device_management_service_); |
| 235 |
| 236 if (done_) |
| 237 return; |
| 238 |
| 239 // Process registration. |
| 240 ASSERT_TRUE(register_job); |
| 241 MockDeviceManagementJob* fetch_job = NULL; |
| 242 EXPECT_CALL(device_management_service_, |
| 243 CreateJob(DeviceManagementRequestJob::TYPE_POLICY_FETCH)) |
| 244 .Times(AtMost(1)) |
| 245 .WillOnce(device_management_service_.CreateAsyncJob(&fetch_job)); |
| 246 EXPECT_CALL(device_management_service_, StartJob(_, _, _, _, _, _, _)) |
| 247 .Times(AtMost(1)); |
| 248 register_job->SendResponse(register_status_, register_response_); |
| 249 Mock::VerifyAndClearExpectations(&device_management_service_); |
| 250 |
| 251 if (done_) |
| 252 return; |
| 253 |
| 254 // Process policy fetch. |
| 255 ASSERT_TRUE(fetch_job); |
| 256 fetch_job->SendResponse(fetch_status_, fetch_response_); |
| 257 |
| 258 if (done_) |
| 259 return; |
| 260 |
| 261 // Process verification. |
| 262 base::RunLoop().RunUntilIdle(); |
| 263 |
| 264 if (done_) |
| 265 return; |
| 266 |
| 267 // Process policy store. |
| 268 device_settings_test_helper_.set_store_result(store_result_); |
| 269 device_settings_test_helper_.FlushStore(); |
| 270 EXPECT_EQ(policy_.GetBlob(), device_settings_test_helper_.policy_blob()); |
| 271 |
| 272 if (done_) |
| 273 return; |
| 274 |
| 275 // Key installation and policy load. |
| 276 device_settings_test_helper_.set_policy_blob(loaded_blob_); |
| 277 owner_key_util_->SetPublicKeyFromPrivateKey(policy_.new_signing_key()); |
| 278 device_settings_service_.OwnerKeySet(true); |
| 279 device_settings_test_helper_.Flush(); |
| 280 } |
| 281 |
| 282 DeviceManagementStatus register_status_; |
| 283 em::DeviceManagementResponse register_response_; |
| 284 |
| 285 DeviceManagementStatus fetch_status_; |
| 286 em::DeviceManagementResponse fetch_response_; |
| 287 |
| 288 bool store_result_; |
| 289 std::string loaded_blob_; |
| 290 |
| 291 EnrollmentStatus expected_enrollment_status_; |
| 292 DeviceManagementStatus expected_dm_status_; |
| 293 CloudPolicyValidatorBase::Status expected_validator_status_; |
| 294 CloudPolicyStore::Status expected_store_status_; |
| 295 bool done_; |
| 296 |
| 297 private: |
| 298 DISALLOW_COPY_AND_ASSIGN(DeviceCloudPolicyManagerChromeOSEnrollmentTest); |
| 299 }; |
| 300 |
| 301 TEST_F(DeviceCloudPolicyManagerChromeOSEnrollmentTest, Success) { |
| 302 // The defaults should result in successful enrollment. |
| 303 } |
| 304 |
| 305 TEST_F(DeviceCloudPolicyManagerChromeOSEnrollmentTest, Reenrollment) { |
| 306 ASSERT_EQ(EnterpriseInstallAttributes::LOCK_SUCCESS, |
| 307 install_attributes_.LockDevice(PolicyBuilder::kFakeUsername, |
| 308 DEVICE_MODE_ENTERPRISE, |
| 309 PolicyBuilder::kFakeDeviceId)); |
| 310 } |
| 311 |
| 312 TEST_F(DeviceCloudPolicyManagerChromeOSEnrollmentTest, RegistrationFailed) { |
| 313 register_status_ = DM_STATUS_REQUEST_FAILED; |
| 314 expected_enrollment_status_ = ENROLLMENT_STATUS_REGISTRATION_FAILED; |
| 315 expected_dm_status_ = DM_STATUS_REQUEST_FAILED; |
| 316 } |
| 317 |
| 318 TEST_F(DeviceCloudPolicyManagerChromeOSEnrollmentTest, PolicyFetchFailed) { |
| 319 fetch_status_ = DM_STATUS_REQUEST_FAILED; |
| 320 expected_enrollment_status_ = ENROLLMENT_STATUS_POLICY_FETCH_FAILED; |
| 321 expected_dm_status_ = DM_STATUS_REQUEST_FAILED; |
| 322 } |
| 323 |
| 324 TEST_F(DeviceCloudPolicyManagerChromeOSEnrollmentTest, ValidationFailed) { |
| 325 policy_.policy().set_policy_data_signature("bad"); |
| 326 fetch_response_.clear_policy_response(); |
| 327 fetch_response_.mutable_policy_response()->add_response()->CopyFrom( |
| 328 policy_.policy()); |
| 329 expected_enrollment_status_ = ENROLLMENT_STATUS_VALIDATION_FAILED; |
| 330 expected_validator_status_ = |
| 331 CloudPolicyValidatorBase::VALIDATION_BAD_SIGNATURE; |
| 332 } |
| 333 |
| 334 TEST_F(DeviceCloudPolicyManagerChromeOSEnrollmentTest, StoreError) { |
| 335 store_result_ = false; |
| 336 expected_enrollment_status_ = ENROLLMENT_STATUS_STORE_ERROR; |
| 337 expected_store_status_ = CloudPolicyStore::STATUS_STORE_ERROR; |
| 338 } |
| 339 |
| 340 TEST_F(DeviceCloudPolicyManagerChromeOSEnrollmentTest, LoadError) { |
| 341 loaded_blob_.clear(); |
| 342 expected_enrollment_status_ = ENROLLMENT_STATUS_STORE_ERROR; |
| 343 expected_store_status_ = CloudPolicyStore::STATUS_LOAD_ERROR; |
| 344 } |
| 345 |
| 143 } // namespace | 346 } // namespace |
| 144 } // namespace policy | 347 } // namespace policy |
| OLD | NEW |