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/chromeos/policy/auto_enrollment_client.h" | 5 #include "chrome/browser/chromeos/policy/auto_enrollment_client.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/bind_helpers.h" | 8 #include "base/bind_helpers.h" |
9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
10 #include "base/prefs/pref_service.h" | 10 #include "base/prefs/pref_service.h" |
(...skipping 17 matching lines...) Expand all Loading... |
28 namespace em = enterprise_management; | 28 namespace em = enterprise_management; |
29 | 29 |
30 namespace policy { | 30 namespace policy { |
31 | 31 |
32 namespace { | 32 namespace { |
33 | 33 |
34 const char kStateKey[] = "state_key"; | 34 const char kStateKey[] = "state_key"; |
35 const char kStateKeyHash[] = | 35 const char kStateKeyHash[] = |
36 "\xde\x74\xcd\xf0\x03\x36\x8c\x21\x79\xba\xb1\x5a\xc4\x32\xee\xd6" | 36 "\xde\x74\xcd\xf0\x03\x36\x8c\x21\x79\xba\xb1\x5a\xc4\x32\xee\xd6" |
37 "\xb3\x4a\x5e\xff\x73\x7e\x92\xd9\xf8\x6e\x72\x44\xd0\x97\xc3\xe6"; | 37 "\xb3\x4a\x5e\xff\x73\x7e\x92\xd9\xf8\x6e\x72\x44\xd0\x97\xc3\xe6"; |
| 38 const char kDisabledMessage[] = "This device has been disabled."; |
38 | 39 |
39 using ::testing::InSequence; | 40 using ::testing::InSequence; |
40 using ::testing::Mock; | 41 using ::testing::Mock; |
41 using ::testing::SaveArg; | 42 using ::testing::SaveArg; |
42 using ::testing::_; | 43 using ::testing::_; |
43 | 44 |
44 class AutoEnrollmentClientTest : public testing::Test { | 45 class AutoEnrollmentClientTest : public testing::Test { |
45 protected: | 46 protected: |
46 AutoEnrollmentClientTest() | 47 AutoEnrollmentClientTest() |
47 : scoped_testing_local_state_( | 48 : scoped_testing_local_state_( |
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
109 enrollment_response->mutable_hash()->Add()->assign(kStateKeyHash, | 110 enrollment_response->mutable_hash()->Add()->assign(kStateKeyHash, |
110 crypto::kSHA256Length); | 111 crypto::kSHA256Length); |
111 } | 112 } |
112 EXPECT_CALL(*service_, | 113 EXPECT_CALL(*service_, |
113 CreateJob(DeviceManagementRequestJob::TYPE_AUTO_ENROLLMENT, _)) | 114 CreateJob(DeviceManagementRequestJob::TYPE_AUTO_ENROLLMENT, _)) |
114 .WillOnce(service_->SucceedJob(response)); | 115 .WillOnce(service_->SucceedJob(response)); |
115 } | 116 } |
116 | 117 |
117 void ServerWillSendState( | 118 void ServerWillSendState( |
118 const std::string& management_domain, | 119 const std::string& management_domain, |
119 em::DeviceStateRetrievalResponse::RestoreMode restore_mode) { | 120 em::DeviceStateRetrievalResponse::RestoreMode restore_mode, |
| 121 scoped_ptr<std::string> device_disabled_message) { |
120 em::DeviceManagementResponse response; | 122 em::DeviceManagementResponse response; |
121 em::DeviceStateRetrievalResponse* state_response = | 123 em::DeviceStateRetrievalResponse* state_response = |
122 response.mutable_device_state_retrieval_response(); | 124 response.mutable_device_state_retrieval_response(); |
123 state_response->set_restore_mode(restore_mode); | 125 state_response->set_restore_mode(restore_mode); |
124 state_response->set_management_domain(management_domain); | 126 state_response->set_management_domain(management_domain); |
| 127 if (device_disabled_message) { |
| 128 em::DisabledState* disabled_state = |
| 129 state_response->mutable_disabled_state(); |
| 130 disabled_state->set_message(*device_disabled_message); |
| 131 } |
125 EXPECT_CALL( | 132 EXPECT_CALL( |
126 *service_, | 133 *service_, |
127 CreateJob(DeviceManagementRequestJob::TYPE_DEVICE_STATE_RETRIEVAL, _)) | 134 CreateJob(DeviceManagementRequestJob::TYPE_DEVICE_STATE_RETRIEVAL, _)) |
128 .WillOnce(service_->SucceedJob(response)); | 135 .WillOnce(service_->SucceedJob(response)); |
129 } | 136 } |
130 | 137 |
131 void ServerWillReplyAsync(MockDeviceManagementJob** job) { | 138 void ServerWillReplyAsync(MockDeviceManagementJob** job) { |
132 EXPECT_CALL(*service_, | 139 EXPECT_CALL(*service_, |
133 CreateJob(DeviceManagementRequestJob::TYPE_AUTO_ENROLLMENT, _)) | 140 CreateJob(DeviceManagementRequestJob::TYPE_AUTO_ENROLLMENT, _)) |
134 .WillOnce(service_->CreateAsyncJob(job)); | 141 .WillOnce(service_->CreateAsyncJob(job)); |
(...skipping 11 matching lines...) Expand all Loading... |
146 local_state_->GetUserPref(prefs::kShouldAutoEnroll))); | 153 local_state_->GetUserPref(prefs::kShouldAutoEnroll))); |
147 EXPECT_TRUE(base::Value::Equals( | 154 EXPECT_TRUE(base::Value::Equals( |
148 &value_power_limit, | 155 &value_power_limit, |
149 local_state_->GetUserPref(prefs::kAutoEnrollmentPowerLimit))); | 156 local_state_->GetUserPref(prefs::kAutoEnrollmentPowerLimit))); |
150 } | 157 } |
151 | 158 |
152 bool HasServerBackedState() { | 159 bool HasServerBackedState() { |
153 return local_state_->GetUserPref(prefs::kServerBackedDeviceState); | 160 return local_state_->GetUserPref(prefs::kServerBackedDeviceState); |
154 } | 161 } |
155 | 162 |
156 void VerifyServerBackedState(const std::string& expected_management_domain, | 163 void VerifyServerBackedState( |
157 const std::string& expected_restore_mode) { | 164 const std::string& expected_management_domain, |
| 165 const std::string& expected_restore_mode, |
| 166 scoped_ptr<std::string> expected_disabled_message) { |
158 const base::Value* state = | 167 const base::Value* state = |
159 local_state_->GetUserPref(prefs::kServerBackedDeviceState); | 168 local_state_->GetUserPref(prefs::kServerBackedDeviceState); |
160 ASSERT_TRUE(state); | 169 ASSERT_TRUE(state); |
161 const base::DictionaryValue* state_dict = nullptr; | 170 const base::DictionaryValue* state_dict = nullptr; |
162 ASSERT_TRUE(state->GetAsDictionary(&state_dict)); | 171 ASSERT_TRUE(state->GetAsDictionary(&state_dict)); |
163 | 172 |
164 std::string actual_management_domain; | 173 std::string actual_management_domain; |
165 EXPECT_TRUE(state_dict->GetString(kDeviceStateManagementDomain, | 174 EXPECT_TRUE(state_dict->GetString(kDeviceStateManagementDomain, |
166 &actual_management_domain)); | 175 &actual_management_domain)); |
167 EXPECT_EQ(expected_management_domain, actual_management_domain); | 176 EXPECT_EQ(expected_management_domain, actual_management_domain); |
168 | 177 |
169 std::string actual_restore_mode; | 178 if (!expected_restore_mode.empty()) { |
170 EXPECT_TRUE(state_dict->GetString(kDeviceStateRestoreMode, | 179 std::string actual_restore_mode; |
171 &actual_restore_mode)); | 180 EXPECT_TRUE(state_dict->GetString(kDeviceStateRestoreMode, |
172 EXPECT_EQ(expected_restore_mode, actual_restore_mode); | 181 &actual_restore_mode)); |
| 182 EXPECT_EQ(expected_restore_mode, actual_restore_mode); |
| 183 } else { |
| 184 EXPECT_FALSE(state_dict->HasKey(kDeviceStateRestoreMode)); |
| 185 } |
| 186 |
| 187 const bool expected_disabled_state = expected_disabled_message; |
| 188 bool actual_disabled_state = false; |
| 189 EXPECT_TRUE(state_dict->GetBoolean(kDeviceStateDisabled, |
| 190 &actual_disabled_state)); |
| 191 EXPECT_EQ(expected_disabled_state, actual_disabled_state); |
| 192 |
| 193 if (expected_disabled_message) { |
| 194 std::string actual_disabled_message; |
| 195 EXPECT_TRUE(state_dict->GetString(kDeviceStateDisabledMessage, |
| 196 &actual_disabled_message)); |
| 197 EXPECT_EQ(*expected_disabled_message, actual_disabled_message); |
| 198 } else { |
| 199 EXPECT_FALSE(state_dict->HasKey(kDeviceStateDisabledMessage)); |
| 200 } |
173 } | 201 } |
174 | 202 |
175 const em::DeviceAutoEnrollmentRequest& auto_enrollment_request() { | 203 const em::DeviceAutoEnrollmentRequest& auto_enrollment_request() { |
176 return last_request_.auto_enrollment_request(); | 204 return last_request_.auto_enrollment_request(); |
177 } | 205 } |
178 | 206 |
179 content::TestBrowserThreadBundle browser_threads_; | 207 content::TestBrowserThreadBundle browser_threads_; |
180 ScopedTestingLocalState scoped_testing_local_state_; | 208 ScopedTestingLocalState scoped_testing_local_state_; |
181 TestingPrefServiceSimple* local_state_; | 209 TestingPrefServiceSimple* local_state_; |
182 scoped_ptr<MockDeviceManagementService> service_; | 210 scoped_ptr<MockDeviceManagementService> service_; |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
236 EXPECT_FALSE(HasCachedDecision()); | 264 EXPECT_FALSE(HasCachedDecision()); |
237 EXPECT_FALSE(HasServerBackedState()); | 265 EXPECT_FALSE(HasServerBackedState()); |
238 } | 266 } |
239 | 267 |
240 TEST_F(AutoEnrollmentClientTest, AskForLess) { | 268 TEST_F(AutoEnrollmentClientTest, AskForLess) { |
241 InSequence sequence; | 269 InSequence sequence; |
242 ServerWillReply(8, false, false); | 270 ServerWillReply(8, false, false); |
243 ServerWillReply(-1, true, true); | 271 ServerWillReply(-1, true, true); |
244 ServerWillSendState( | 272 ServerWillSendState( |
245 "example.com", | 273 "example.com", |
246 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED); | 274 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED, |
| 275 make_scoped_ptr(new std::string(kDisabledMessage))); |
247 client_->Start(); | 276 client_->Start(); |
248 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); | 277 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); |
249 VerifyCachedResult(true, 8); | 278 VerifyCachedResult(true, 8); |
250 VerifyServerBackedState("example.com", | 279 VerifyServerBackedState("example.com", |
251 kDeviceStateRestoreModeReEnrollmentEnforced); | 280 kDeviceStateRestoreModeReEnrollmentEnforced, |
| 281 make_scoped_ptr(new std::string(kDisabledMessage))); |
252 } | 282 } |
253 | 283 |
254 TEST_F(AutoEnrollmentClientTest, AskForSame) { | 284 TEST_F(AutoEnrollmentClientTest, AskForSame) { |
255 InSequence sequence; | 285 InSequence sequence; |
256 ServerWillReply(16, false, false); | 286 ServerWillReply(16, false, false); |
257 ServerWillReply(-1, true, true); | 287 ServerWillReply(-1, true, true); |
258 ServerWillSendState( | 288 ServerWillSendState( |
259 "example.com", | 289 "example.com", |
260 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED); | 290 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED, |
| 291 make_scoped_ptr(new std::string(kDisabledMessage))); |
261 client_->Start(); | 292 client_->Start(); |
262 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); | 293 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); |
263 VerifyCachedResult(true, 8); | 294 VerifyCachedResult(true, 8); |
264 VerifyServerBackedState("example.com", | 295 VerifyServerBackedState("example.com", |
265 kDeviceStateRestoreModeReEnrollmentEnforced); | 296 kDeviceStateRestoreModeReEnrollmentEnforced, |
| 297 make_scoped_ptr(new std::string(kDisabledMessage))); |
266 } | 298 } |
267 | 299 |
268 TEST_F(AutoEnrollmentClientTest, AskForSameTwice) { | 300 TEST_F(AutoEnrollmentClientTest, AskForSameTwice) { |
269 InSequence sequence; | 301 InSequence sequence; |
270 ServerWillReply(16, false, false); | 302 ServerWillReply(16, false, false); |
271 ServerWillReply(16, false, false); | 303 ServerWillReply(16, false, false); |
272 client_->Start(); | 304 client_->Start(); |
273 EXPECT_EQ(AUTO_ENROLLMENT_STATE_SERVER_ERROR, state_); | 305 EXPECT_EQ(AUTO_ENROLLMENT_STATE_SERVER_ERROR, state_); |
274 EXPECT_FALSE(HasCachedDecision()); | 306 EXPECT_FALSE(HasCachedDecision()); |
275 EXPECT_FALSE(HasServerBackedState()); | 307 EXPECT_FALSE(HasServerBackedState()); |
(...skipping 27 matching lines...) Expand all Loading... |
303 EXPECT_EQ(AUTO_ENROLLMENT_STATE_NO_ENROLLMENT, state_); | 335 EXPECT_EQ(AUTO_ENROLLMENT_STATE_NO_ENROLLMENT, state_); |
304 VerifyCachedResult(false, 8); | 336 VerifyCachedResult(false, 8); |
305 EXPECT_FALSE(HasServerBackedState()); | 337 EXPECT_FALSE(HasServerBackedState()); |
306 | 338 |
307 // Network changes don't trigger retries after obtaining a response from | 339 // Network changes don't trigger retries after obtaining a response from |
308 // the server. | 340 // the server. |
309 client_->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_ETHERNET); | 341 client_->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_ETHERNET); |
310 EXPECT_EQ(AUTO_ENROLLMENT_STATE_NO_ENROLLMENT, state_); | 342 EXPECT_EQ(AUTO_ENROLLMENT_STATE_NO_ENROLLMENT, state_); |
311 } | 343 } |
312 | 344 |
313 TEST_F(AutoEnrollmentClientTest, EnterpriseDevice) { | 345 TEST_F(AutoEnrollmentClientTest, ForcedReEnrollment) { |
314 ServerWillReply(-1, true, true); | 346 ServerWillReply(-1, true, true); |
315 ServerWillSendState( | 347 ServerWillSendState( |
316 "example.com", | 348 "example.com", |
317 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED); | 349 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED, |
| 350 nullptr); |
318 client_->Start(); | 351 client_->Start(); |
319 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); | 352 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); |
320 VerifyCachedResult(true, 8); | 353 VerifyCachedResult(true, 8); |
321 VerifyServerBackedState("example.com", | 354 VerifyServerBackedState("example.com", |
322 kDeviceStateRestoreModeReEnrollmentEnforced); | 355 kDeviceStateRestoreModeReEnrollmentEnforced, |
| 356 nullptr); |
323 | 357 |
324 // Network changes don't trigger retries after obtaining a response from | 358 // Network changes don't trigger retries after obtaining a response from |
325 // the server. | 359 // the server. |
326 client_->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_ETHERNET); | 360 client_->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_ETHERNET); |
327 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); | 361 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); |
328 } | 362 } |
329 | 363 |
| 364 TEST_F(AutoEnrollmentClientTest, RequestedReEnrollment) { |
| 365 ServerWillReply(-1, true, true); |
| 366 ServerWillSendState( |
| 367 "example.com", |
| 368 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_REQUESTED, |
| 369 nullptr); |
| 370 client_->Start(); |
| 371 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); |
| 372 VerifyCachedResult(true, 8); |
| 373 VerifyServerBackedState("example.com", |
| 374 kDeviceStateRestoreModeReEnrollmentRequested, |
| 375 nullptr); |
| 376 } |
| 377 |
| 378 TEST_F(AutoEnrollmentClientTest, DeviceDisabled) { |
| 379 ServerWillReply(-1, true, true); |
| 380 ServerWillSendState( |
| 381 "example.com", |
| 382 em::DeviceStateRetrievalResponse::RESTORE_MODE_NONE, |
| 383 make_scoped_ptr(new std::string(kDisabledMessage))); |
| 384 client_->Start(); |
| 385 EXPECT_EQ(AUTO_ENROLLMENT_STATE_NO_ENROLLMENT, state_); |
| 386 VerifyCachedResult(true, 8); |
| 387 VerifyServerBackedState("example.com", |
| 388 "", |
| 389 make_scoped_ptr(new std::string(kDisabledMessage))); |
| 390 } |
| 391 |
330 TEST_F(AutoEnrollmentClientTest, NoSerial) { | 392 TEST_F(AutoEnrollmentClientTest, NoSerial) { |
331 CreateClient("", true, 4, 8); | 393 CreateClient("", true, 4, 8); |
332 client_->Start(); | 394 client_->Start(); |
333 EXPECT_EQ(AUTO_ENROLLMENT_STATE_NO_ENROLLMENT, state_); | 395 EXPECT_EQ(AUTO_ENROLLMENT_STATE_NO_ENROLLMENT, state_); |
334 EXPECT_FALSE(HasCachedDecision()); | 396 EXPECT_FALSE(HasCachedDecision()); |
335 EXPECT_FALSE(HasServerBackedState()); | 397 EXPECT_FALSE(HasServerBackedState()); |
336 } | 398 } |
337 | 399 |
338 TEST_F(AutoEnrollmentClientTest, NoBitsUploaded) { | 400 TEST_F(AutoEnrollmentClientTest, NoBitsUploaded) { |
339 CreateClient(kStateKey, true, 0, 0); | 401 CreateClient(kStateKey, true, 0, 0); |
(...skipping 25 matching lines...) Expand all Loading... |
365 } | 427 } |
366 } | 428 } |
367 | 429 |
368 TEST_F(AutoEnrollmentClientTest, MoreThan32BitsUploaded) { | 430 TEST_F(AutoEnrollmentClientTest, MoreThan32BitsUploaded) { |
369 CreateClient(kStateKey, true, 10, 37); | 431 CreateClient(kStateKey, true, 10, 37); |
370 InSequence sequence; | 432 InSequence sequence; |
371 ServerWillReply(GG_INT64_C(1) << 37, false, false); | 433 ServerWillReply(GG_INT64_C(1) << 37, false, false); |
372 ServerWillReply(-1, true, true); | 434 ServerWillReply(-1, true, true); |
373 ServerWillSendState( | 435 ServerWillSendState( |
374 "example.com", | 436 "example.com", |
375 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED); | 437 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED, |
| 438 make_scoped_ptr(new std::string(kDisabledMessage))); |
376 client_->Start(); | 439 client_->Start(); |
377 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); | 440 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); |
378 VerifyCachedResult(true, 37); | 441 VerifyCachedResult(true, 37); |
379 VerifyServerBackedState("example.com", | 442 VerifyServerBackedState("example.com", |
380 kDeviceStateRestoreModeReEnrollmentEnforced); | 443 kDeviceStateRestoreModeReEnrollmentEnforced, |
| 444 make_scoped_ptr(new std::string(kDisabledMessage))); |
381 } | 445 } |
382 | 446 |
383 TEST_F(AutoEnrollmentClientTest, ReuseCachedDecision) { | 447 TEST_F(AutoEnrollmentClientTest, ReuseCachedDecision) { |
384 EXPECT_CALL(*service_, CreateJob(_, _)).Times(0); | 448 EXPECT_CALL(*service_, CreateJob(_, _)).Times(0); |
385 local_state_->SetUserPref(prefs::kShouldAutoEnroll, | 449 local_state_->SetUserPref(prefs::kShouldAutoEnroll, |
386 new base::FundamentalValue(true)); | 450 new base::FundamentalValue(true)); |
387 local_state_->SetUserPref(prefs::kAutoEnrollmentPowerLimit, | 451 local_state_->SetUserPref(prefs::kAutoEnrollmentPowerLimit, |
388 new base::FundamentalValue(8)); | 452 new base::FundamentalValue(8)); |
389 ServerWillSendState( | 453 ServerWillSendState( |
390 "example.com", | 454 "example.com", |
391 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED); | 455 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED, |
| 456 make_scoped_ptr(new std::string(kDisabledMessage))); |
392 client_->Start(); | 457 client_->Start(); |
393 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); | 458 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); |
394 VerifyServerBackedState("example.com", | 459 VerifyServerBackedState("example.com", |
395 kDeviceStateRestoreModeReEnrollmentEnforced); | 460 kDeviceStateRestoreModeReEnrollmentEnforced, |
| 461 make_scoped_ptr(new std::string(kDisabledMessage))); |
396 AutoEnrollmentClient::CancelAutoEnrollment(); | 462 AutoEnrollmentClient::CancelAutoEnrollment(); |
397 client_->Start(); | 463 client_->Start(); |
398 EXPECT_EQ(AUTO_ENROLLMENT_STATE_NO_ENROLLMENT, state_); | 464 EXPECT_EQ(AUTO_ENROLLMENT_STATE_NO_ENROLLMENT, state_); |
399 EXPECT_FALSE(HasServerBackedState()); | 465 EXPECT_FALSE(HasServerBackedState()); |
400 } | 466 } |
401 | 467 |
402 TEST_F(AutoEnrollmentClientTest, RetryIfPowerLargerThanCached) { | 468 TEST_F(AutoEnrollmentClientTest, RetryIfPowerLargerThanCached) { |
403 local_state_->SetUserPref(prefs::kShouldAutoEnroll, | 469 local_state_->SetUserPref(prefs::kShouldAutoEnroll, |
404 new base::FundamentalValue(false)); | 470 new base::FundamentalValue(false)); |
405 local_state_->SetUserPref(prefs::kAutoEnrollmentPowerLimit, | 471 local_state_->SetUserPref(prefs::kAutoEnrollmentPowerLimit, |
406 new base::FundamentalValue(8)); | 472 new base::FundamentalValue(8)); |
407 CreateClient(kStateKey, true, 5, 10); | 473 CreateClient(kStateKey, true, 5, 10); |
408 ServerWillReply(-1, true, true); | 474 ServerWillReply(-1, true, true); |
409 ServerWillSendState( | 475 ServerWillSendState( |
410 "example.com", | 476 "example.com", |
411 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED); | 477 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED, |
| 478 make_scoped_ptr(new std::string(kDisabledMessage))); |
412 client_->Start(); | 479 client_->Start(); |
413 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); | 480 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); |
414 VerifyServerBackedState("example.com", | 481 VerifyServerBackedState("example.com", |
415 kDeviceStateRestoreModeReEnrollmentEnforced); | 482 kDeviceStateRestoreModeReEnrollmentEnforced, |
| 483 make_scoped_ptr(new std::string(kDisabledMessage))); |
416 } | 484 } |
417 | 485 |
418 TEST_F(AutoEnrollmentClientTest, NetworkChangeRetryAfterErrors) { | 486 TEST_F(AutoEnrollmentClientTest, NetworkChangeRetryAfterErrors) { |
419 ServerWillFail(DM_STATUS_TEMPORARY_UNAVAILABLE); | 487 ServerWillFail(DM_STATUS_TEMPORARY_UNAVAILABLE); |
420 client_->Start(); | 488 client_->Start(); |
421 // Don't invoke the callback if there was a network failure. | 489 // Don't invoke the callback if there was a network failure. |
422 EXPECT_EQ(AUTO_ENROLLMENT_STATE_SERVER_ERROR, state_); | 490 EXPECT_EQ(AUTO_ENROLLMENT_STATE_SERVER_ERROR, state_); |
423 EXPECT_FALSE(HasCachedDecision()); | 491 EXPECT_FALSE(HasCachedDecision()); |
424 EXPECT_FALSE(HasServerBackedState()); | 492 EXPECT_FALSE(HasServerBackedState()); |
425 | 493 |
426 // The client doesn't retry if no new connection became available. | 494 // The client doesn't retry if no new connection became available. |
427 client_->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_NONE); | 495 client_->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_NONE); |
428 EXPECT_EQ(AUTO_ENROLLMENT_STATE_SERVER_ERROR, state_); | 496 EXPECT_EQ(AUTO_ENROLLMENT_STATE_SERVER_ERROR, state_); |
429 EXPECT_FALSE(HasCachedDecision()); | 497 EXPECT_FALSE(HasCachedDecision()); |
430 EXPECT_FALSE(HasServerBackedState()); | 498 EXPECT_FALSE(HasServerBackedState()); |
431 | 499 |
432 // Retry once the network is back. | 500 // Retry once the network is back. |
433 ServerWillReply(-1, true, true); | 501 ServerWillReply(-1, true, true); |
434 ServerWillSendState( | 502 ServerWillSendState( |
435 "example.com", | 503 "example.com", |
436 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED); | 504 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED, |
| 505 make_scoped_ptr(new std::string(kDisabledMessage))); |
437 client_->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_ETHERNET); | 506 client_->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_ETHERNET); |
438 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); | 507 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); |
439 EXPECT_TRUE(HasCachedDecision()); | 508 EXPECT_TRUE(HasCachedDecision()); |
440 VerifyServerBackedState("example.com", | 509 VerifyServerBackedState("example.com", |
441 kDeviceStateRestoreModeReEnrollmentEnforced); | 510 kDeviceStateRestoreModeReEnrollmentEnforced, |
| 511 make_scoped_ptr(new std::string(kDisabledMessage))); |
442 | 512 |
443 // Subsequent network changes don't trigger retries. | 513 // Subsequent network changes don't trigger retries. |
444 client_->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_NONE); | 514 client_->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_NONE); |
445 client_->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_ETHERNET); | 515 client_->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_ETHERNET); |
446 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); | 516 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); |
447 EXPECT_TRUE(HasCachedDecision()); | 517 EXPECT_TRUE(HasCachedDecision()); |
448 VerifyServerBackedState("example.com", | 518 VerifyServerBackedState("example.com", |
449 kDeviceStateRestoreModeReEnrollmentEnforced); | 519 kDeviceStateRestoreModeReEnrollmentEnforced, |
| 520 make_scoped_ptr(new std::string(kDisabledMessage))); |
450 } | 521 } |
451 | 522 |
452 TEST_F(AutoEnrollmentClientTest, CancelAndDeleteSoonWithPendingRequest) { | 523 TEST_F(AutoEnrollmentClientTest, CancelAndDeleteSoonWithPendingRequest) { |
453 MockDeviceManagementJob* job = NULL; | 524 MockDeviceManagementJob* job = NULL; |
454 ServerWillReplyAsync(&job); | 525 ServerWillReplyAsync(&job); |
455 EXPECT_FALSE(job); | 526 EXPECT_FALSE(job); |
456 client_->Start(); | 527 client_->Start(); |
457 ASSERT_TRUE(job); | 528 ASSERT_TRUE(job); |
458 EXPECT_EQ(AUTO_ENROLLMENT_STATE_PENDING, state_); | 529 EXPECT_EQ(AUTO_ENROLLMENT_STATE_PENDING, state_); |
459 | 530 |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
497 | 568 |
498 // Network changes that have been posted before are also ignored: | 569 // Network changes that have been posted before are also ignored: |
499 client->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_ETHERNET); | 570 client->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_ETHERNET); |
500 EXPECT_EQ(AUTO_ENROLLMENT_STATE_PENDING, state_); | 571 EXPECT_EQ(AUTO_ENROLLMENT_STATE_PENDING, state_); |
501 } | 572 } |
502 | 573 |
503 TEST_F(AutoEnrollmentClientTest, CancelAndDeleteSoonAfterCompletion) { | 574 TEST_F(AutoEnrollmentClientTest, CancelAndDeleteSoonAfterCompletion) { |
504 ServerWillReply(-1, true, true); | 575 ServerWillReply(-1, true, true); |
505 ServerWillSendState( | 576 ServerWillSendState( |
506 "example.com", | 577 "example.com", |
507 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED); | 578 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED, |
| 579 make_scoped_ptr(new std::string(kDisabledMessage))); |
508 client_->Start(); | 580 client_->Start(); |
509 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); | 581 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); |
510 VerifyServerBackedState("example.com", | 582 VerifyServerBackedState("example.com", |
511 kDeviceStateRestoreModeReEnrollmentEnforced); | 583 kDeviceStateRestoreModeReEnrollmentEnforced, |
| 584 make_scoped_ptr(new std::string(kDisabledMessage))); |
512 | 585 |
513 // The client will delete itself immediately if there are no pending | 586 // The client will delete itself immediately if there are no pending |
514 // requests. | 587 // requests. |
515 EXPECT_TRUE(base::MessageLoop::current()->IsIdleForTesting()); | 588 EXPECT_TRUE(base::MessageLoop::current()->IsIdleForTesting()); |
516 client_.release()->CancelAndDeleteSoon(); | 589 client_.release()->CancelAndDeleteSoon(); |
517 EXPECT_TRUE(base::MessageLoop::current()->IsIdleForTesting()); | 590 EXPECT_TRUE(base::MessageLoop::current()->IsIdleForTesting()); |
518 } | 591 } |
519 | 592 |
520 TEST_F(AutoEnrollmentClientTest, CancelAndDeleteSoonAfterNetworkFailure) { | 593 TEST_F(AutoEnrollmentClientTest, CancelAndDeleteSoonAfterNetworkFailure) { |
521 ServerWillFail(DM_STATUS_TEMPORARY_UNAVAILABLE); | 594 ServerWillFail(DM_STATUS_TEMPORARY_UNAVAILABLE); |
(...skipping 23 matching lines...) Expand all Loading... |
545 InSequence sequence; | 618 InSequence sequence; |
546 // The default client uploads 4 bits. Make the server ask for 5. | 619 // The default client uploads 4 bits. Make the server ask for 5. |
547 ServerWillReply(1 << 5, false, false); | 620 ServerWillReply(1 << 5, false, false); |
548 EXPECT_CALL(*service_, StartJob(_, _, _, _, _, _, _)); | 621 EXPECT_CALL(*service_, StartJob(_, _, _, _, _, _, _)); |
549 // Then reply with a valid response and include the hash. | 622 // Then reply with a valid response and include the hash. |
550 ServerWillReply(-1, true, true); | 623 ServerWillReply(-1, true, true); |
551 EXPECT_CALL(*service_, StartJob(_, _, _, _, _, _, _)); | 624 EXPECT_CALL(*service_, StartJob(_, _, _, _, _, _, _)); |
552 // State download triggers. | 625 // State download triggers. |
553 ServerWillSendState( | 626 ServerWillSendState( |
554 "example.com", | 627 "example.com", |
555 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED); | 628 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED, |
| 629 make_scoped_ptr(new std::string(kDisabledMessage))); |
556 EXPECT_CALL(*service_, StartJob(_, _, _, _, _, _, _)); | 630 EXPECT_CALL(*service_, StartJob(_, _, _, _, _, _, _)); |
557 | 631 |
558 // Trigger a network change event. | 632 // Trigger a network change event. |
559 client_->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_ETHERNET); | 633 client_->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_ETHERNET); |
560 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); | 634 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); |
561 EXPECT_TRUE(HasCachedDecision()); | 635 EXPECT_TRUE(HasCachedDecision()); |
562 VerifyServerBackedState("example.com", | 636 VerifyServerBackedState("example.com", |
563 kDeviceStateRestoreModeReEnrollmentEnforced); | 637 kDeviceStateRestoreModeReEnrollmentEnforced, |
| 638 make_scoped_ptr(new std::string(kDisabledMessage))); |
564 Mock::VerifyAndClearExpectations(service_.get()); | 639 Mock::VerifyAndClearExpectations(service_.get()); |
565 } | 640 } |
566 | 641 |
567 TEST_F(AutoEnrollmentClientTest, NoDeviceStateRetrieval) { | 642 TEST_F(AutoEnrollmentClientTest, NoDeviceStateRetrieval) { |
568 CreateClient(kStateKey, false, 4, 8); | 643 CreateClient(kStateKey, false, 4, 8); |
569 ServerWillReply(-1, true, true); | 644 ServerWillReply(-1, true, true); |
570 EXPECT_CALL(*service_, | 645 EXPECT_CALL(*service_, |
571 CreateJob(DeviceManagementRequestJob::TYPE_DEVICE_STATE_RETRIEVAL, | 646 CreateJob(DeviceManagementRequestJob::TYPE_DEVICE_STATE_RETRIEVAL, |
572 _)).Times(0); | 647 _)).Times(0); |
573 client_->Start(); | 648 client_->Start(); |
574 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); | 649 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); |
575 VerifyCachedResult(true, 8); | 650 VerifyCachedResult(true, 8); |
576 EXPECT_FALSE(HasServerBackedState()); | 651 EXPECT_FALSE(HasServerBackedState()); |
577 } | 652 } |
578 | 653 |
579 } // namespace | 654 } // namespace |
580 } // namespace policy | 655 } // namespace policy |
OLD | NEW |