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

Side by Side Diff: chrome/browser/policy/device_cloud_policy_manager_chromeos_unittest.cc

Issue 10928036: Implement Chrome OS device enrollment on the new cloud policy stack. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Addressed comments, rebased. Created 8 years, 2 months 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
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"
11 #include "base/message_loop.h" 11 #include "base/message_loop.h"
12 #include "base/run_loop.h"
12 #include "chrome/browser/chromeos/cros/cryptohome_library.h" 13 #include "chrome/browser/chromeos/cros/cryptohome_library.h"
13 #include "chrome/browser/chromeos/settings/device_settings_service.h" 14 #include "chrome/browser/chromeos/settings/device_settings_service.h"
14 #include "chrome/browser/chromeos/settings/device_settings_test_helper.h" 15 #include "chrome/browser/chromeos/settings/device_settings_test_helper.h"
15 #include "chrome/browser/chromeos/settings/mock_owner_key_util.h" 16 #include "chrome/browser/chromeos/settings/mock_owner_key_util.h"
17 #include "chrome/browser/policy/cloud_policy_client.h"
16 #include "chrome/browser/policy/device_cloud_policy_store_chromeos.h" 18 #include "chrome/browser/policy/device_cloud_policy_store_chromeos.h"
17 #include "chrome/browser/policy/enterprise_install_attributes.h" 19 #include "chrome/browser/policy/enterprise_install_attributes.h"
18 #include "chrome/browser/policy/mock_device_management_service.h" 20 #include "chrome/browser/policy/mock_device_management_service.h"
19 #include "chrome/browser/policy/policy_builder.h" 21 #include "chrome/browser/policy/policy_builder.h"
20 #include "chrome/browser/policy/proto/chrome_device_policy.pb.h" 22 #include "chrome/browser/policy/proto/chrome_device_policy.pb.h"
23 #include "chrome/browser/policy/proto/device_management_backend.pb.h"
21 #include "chrome/browser/prefs/browser_prefs.h" 24 #include "chrome/browser/prefs/browser_prefs.h"
22 #include "chrome/test/base/testing_pref_service.h" 25 #include "chrome/test/base/testing_pref_service.h"
23 #include "content/public/test/test_browser_thread.h" 26 #include "content/public/test/test_browser_thread.h"
24 #include "policy/policy_constants.h" 27 #include "policy/policy_constants.h"
28 #include "testing/gmock/include/gmock/gmock.h"
25 #include "testing/gtest/include/gtest/gtest.h" 29 #include "testing/gtest/include/gtest/gtest.h"
26 30
31 using testing::AtMost;
32 using testing::Mock;
33 using testing::_;
34
35 namespace em = enterprise_management;
36
27 namespace policy { 37 namespace policy {
28 namespace { 38 namespace {
29 39
30 class DeviceCloudPolicyManagerChromeOSTest : public testing::Test { 40 class DeviceCloudPolicyManagerChromeOSTest : public testing::Test {
31 protected: 41 protected:
32 DeviceCloudPolicyManagerChromeOSTest() 42 DeviceCloudPolicyManagerChromeOSTest()
33 : loop_(MessageLoop::TYPE_UI), 43 : loop_(MessageLoop::TYPE_UI),
34 ui_thread_(content::BrowserThread::UI, &loop_), 44 ui_thread_(content::BrowserThread::UI, &loop_),
35 file_thread_(content::BrowserThread::FILE, &loop_), 45 file_thread_(content::BrowserThread::FILE, &loop_),
36 owner_key_util_(new chromeos::MockOwnerKeyUtil()), 46 owner_key_util_(new chromeos::MockOwnerKeyUtil()),
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after
127 PolicyBundle bundle; 137 PolicyBundle bundle;
128 EXPECT_TRUE(manager_.policies().Equals(bundle)); 138 EXPECT_TRUE(manager_.policies().Equals(bundle));
129 139
130 manager_.Connect(&local_state_, &device_management_service_); 140 manager_.Connect(&local_state_, &device_management_service_);
131 EXPECT_TRUE(manager_.policies().Equals(bundle)); 141 EXPECT_TRUE(manager_.policies().Equals(bundle));
132 142
133 manager_.Shutdown(); 143 manager_.Shutdown();
134 EXPECT_TRUE(manager_.policies().Equals(bundle)); 144 EXPECT_TRUE(manager_.policies().Equals(bundle));
135 } 145 }
136 146
147 class DeviceCloudPolicyManagerChromeOSEnrollmentTest
148 : public DeviceCloudPolicyManagerChromeOSTest {
149 public:
150 void Done(EnrollmentStatus status) {
151 EXPECT_EQ(expected_enrollment_status_, status.status());
152 EXPECT_EQ(expected_dm_status_, status.client_status());
153 EXPECT_EQ(expected_validation_status_, status.validation_status());
154 EXPECT_EQ(expected_store_status_, status.store_status());
155 done_ = true;
156 }
157
158 protected:
159 DeviceCloudPolicyManagerChromeOSEnrollmentTest()
160 : register_status_(DM_STATUS_SUCCESS),
161 fetch_status_(DM_STATUS_SUCCESS),
162 store_result_(true),
163 expected_enrollment_status_(EnrollmentStatus::STATUS_SUCCESS),
164 expected_dm_status_(DM_STATUS_SUCCESS),
165 expected_validation_status_(CloudPolicyValidatorBase::VALIDATION_OK),
166 expected_store_status_(CloudPolicyStore::STATUS_OK),
167 done_(false) {}
168
169 virtual void SetUp() OVERRIDE {
170 DeviceCloudPolicyManagerChromeOSTest::SetUp();
171
172 // Set up test data.
173 policy_.set_new_signing_key(PolicyBuilder::CreateTestNewSigningKey());
174 policy_.policy_data().set_timestamp(
175 (base::Time::NowFromSystemTime() -
176 base::Time::UnixEpoch()).InMilliseconds());
177 policy_.Build();
178
179 register_response_.mutable_register_response()->set_device_management_token(
180 PolicyBuilder::kFakeToken);
181 fetch_response_.mutable_policy_response()->add_response()->CopyFrom(
182 policy_.policy());
183 loaded_blob_ = policy_.GetBlob();
184
185 // Initialize the manager.
186 device_settings_test_helper_.Flush();
187 EXPECT_EQ(CloudPolicyStore::STATUS_BAD_STATE, store_->status());
188 EXPECT_TRUE(manager_.IsInitializationComplete());
189
190 PolicyBundle bundle;
191 EXPECT_TRUE(manager_.policies().Equals(bundle));
192
193 manager_.Connect(&local_state_, &device_management_service_);
194 }
195
196 virtual void TearDown() OVERRIDE {
197 RunTest();
198
199 // Enrollment should have completed.
200 EXPECT_TRUE(done_);
201 PolicyBundle bundle;
202 if (expected_enrollment_status_ != EnrollmentStatus::STATUS_SUCCESS) {
203 EXPECT_FALSE(store_->has_policy());
204 EXPECT_FALSE(store_->is_managed());
205 EXPECT_TRUE(manager_.policies().Equals(bundle));
206 } else {
207 EXPECT_EQ(DEVICE_MODE_ENTERPRISE, install_attributes_.GetMode());
208 EXPECT_TRUE(store_->has_policy());
209 EXPECT_TRUE(store_->is_managed());
210 ASSERT_TRUE(manager_.cloud_policy_client());
211 EXPECT_TRUE(manager_.cloud_policy_client()->is_registered());
212
213 bundle.Get(POLICY_DOMAIN_CHROME, std::string()).Set(
214 key::kDeviceMetricsReportingEnabled, POLICY_LEVEL_MANDATORY,
215 POLICY_SCOPE_MACHINE, Value::CreateBooleanValue(true));
216 EXPECT_TRUE(manager_.policies().Equals(bundle));
217 }
218
219 DeviceCloudPolicyManagerChromeOSTest::TearDown();
220 }
221
222 void RunTest() {
223 // Trigger enrollment.
224 MockDeviceManagementJob* register_job = NULL;
225 EXPECT_CALL(device_management_service_,
226 CreateJob(DeviceManagementRequestJob::TYPE_REGISTRATION))
227 .Times(AtMost(1))
228 .WillOnce(device_management_service_.CreateAsyncJob(&register_job));
229 EXPECT_CALL(device_management_service_, StartJob(_, _, _, _, _, _, _))
230 .Times(AtMost(1));
231 DeviceCloudPolicyManagerChromeOS::AllowedDeviceModes modes;
232 modes[DEVICE_MODE_ENTERPRISE] = true;
233 manager_.StartEnrollment(
234 "auth token", modes,
235 base::Bind(&DeviceCloudPolicyManagerChromeOSEnrollmentTest::Done,
236 base::Unretained(this)));
237 Mock::VerifyAndClearExpectations(&device_management_service_);
238
239 if (done_)
240 return;
241
242 // Process registration.
243 ASSERT_TRUE(register_job);
244 MockDeviceManagementJob* fetch_job = NULL;
245 EXPECT_CALL(device_management_service_,
246 CreateJob(DeviceManagementRequestJob::TYPE_POLICY_FETCH))
247 .Times(AtMost(1))
248 .WillOnce(device_management_service_.CreateAsyncJob(&fetch_job));
249 EXPECT_CALL(device_management_service_, StartJob(_, _, _, _, _, _, _))
250 .Times(AtMost(1));
251 register_job->SendResponse(register_status_, register_response_);
252 Mock::VerifyAndClearExpectations(&device_management_service_);
253
254 if (done_)
255 return;
256
257 // Process policy fetch.
258 ASSERT_TRUE(fetch_job);
259 fetch_job->SendResponse(fetch_status_, fetch_response_);
260
261 if (done_)
262 return;
263
264 // Process verification.
265 base::RunLoop().RunUntilIdle();
266
267 if (done_)
268 return;
269
270 // Process policy store.
271 device_settings_test_helper_.set_store_result(store_result_);
272 device_settings_test_helper_.FlushStore();
273 EXPECT_EQ(policy_.GetBlob(), device_settings_test_helper_.policy_blob());
274
275 if (done_)
276 return;
277
278 // Key installation and policy load.
279 device_settings_test_helper_.set_policy_blob(loaded_blob_);
280 owner_key_util_->SetPublicKeyFromPrivateKey(policy_.new_signing_key());
281 device_settings_service_.OwnerKeySet(true);
282 device_settings_test_helper_.Flush();
283 }
284
285 DeviceManagementStatus register_status_;
286 em::DeviceManagementResponse register_response_;
287
288 DeviceManagementStatus fetch_status_;
289 em::DeviceManagementResponse fetch_response_;
290
291 bool store_result_;
292 std::string loaded_blob_;
293
294 EnrollmentStatus::Status expected_enrollment_status_;
295 DeviceManagementStatus expected_dm_status_;
296 CloudPolicyValidatorBase::Status expected_validation_status_;
297 CloudPolicyStore::Status expected_store_status_;
298 bool done_;
299
300 private:
301 DISALLOW_COPY_AND_ASSIGN(DeviceCloudPolicyManagerChromeOSEnrollmentTest);
302 };
303
304 TEST_F(DeviceCloudPolicyManagerChromeOSEnrollmentTest, Success) {
305 // The defaults should result in successful enrollment.
306 }
307
308 TEST_F(DeviceCloudPolicyManagerChromeOSEnrollmentTest, Reenrollment) {
309 ASSERT_EQ(EnterpriseInstallAttributes::LOCK_SUCCESS,
310 install_attributes_.LockDevice(PolicyBuilder::kFakeUsername,
311 DEVICE_MODE_ENTERPRISE,
312 PolicyBuilder::kFakeDeviceId));
313 }
314
315 TEST_F(DeviceCloudPolicyManagerChromeOSEnrollmentTest, RegistrationFailed) {
316 register_status_ = DM_STATUS_REQUEST_FAILED;
317 expected_enrollment_status_ = EnrollmentStatus::STATUS_REGISTRATION_FAILED;
318 expected_dm_status_ = DM_STATUS_REQUEST_FAILED;
319 }
320
321 TEST_F(DeviceCloudPolicyManagerChromeOSEnrollmentTest, PolicyFetchFailed) {
322 fetch_status_ = DM_STATUS_REQUEST_FAILED;
323 expected_enrollment_status_ = EnrollmentStatus::STATUS_POLICY_FETCH_FAILED;
324 expected_dm_status_ = DM_STATUS_REQUEST_FAILED;
325 }
326
327 TEST_F(DeviceCloudPolicyManagerChromeOSEnrollmentTest, ValidationFailed) {
328 policy_.policy().set_policy_data_signature("bad");
329 fetch_response_.clear_policy_response();
330 fetch_response_.mutable_policy_response()->add_response()->CopyFrom(
331 policy_.policy());
332 expected_enrollment_status_ = EnrollmentStatus::STATUS_VALIDATION_FAILED;
333 expected_validation_status_ =
334 CloudPolicyValidatorBase::VALIDATION_BAD_SIGNATURE;
335 }
336
337 TEST_F(DeviceCloudPolicyManagerChromeOSEnrollmentTest, StoreError) {
338 store_result_ = false;
339 expected_enrollment_status_ = EnrollmentStatus::STATUS_STORE_ERROR;
340 expected_store_status_ = CloudPolicyStore::STATUS_STORE_ERROR;
341 }
342
343 TEST_F(DeviceCloudPolicyManagerChromeOSEnrollmentTest, LoadError) {
344 loaded_blob_.clear();
345 expected_enrollment_status_ = EnrollmentStatus::STATUS_STORE_ERROR;
346 expected_store_status_ = CloudPolicyStore::STATUS_LOAD_ERROR;
347 }
348
137 } // namespace 349 } // namespace
138 } // namespace policy 350 } // namespace policy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698