| 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 |