Chromium Code Reviews| 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" |
| 11 #include "base/prefs/testing_pref_service.h" | 11 #include "base/prefs/testing_pref_service.h" |
| 12 #include "base/run_loop.h" | 12 #include "base/run_loop.h" |
| 13 #include "base/strings/stringprintf.h" | 13 #include "base/strings/stringprintf.h" |
| 14 #include "base/values.h" | 14 #include "base/values.h" |
| 15 #include "chrome/browser/browser_process.h" | 15 #include "chrome/browser/browser_process.h" |
| 16 #include "chrome/browser/chromeos/policy/server_backed_device_state.h" | |
| 16 #include "chrome/common/pref_names.h" | 17 #include "chrome/common/pref_names.h" |
| 17 #include "chrome/test/base/scoped_testing_local_state.h" | 18 #include "chrome/test/base/scoped_testing_local_state.h" |
| 18 #include "chrome/test/base/testing_browser_process.h" | 19 #include "chrome/test/base/testing_browser_process.h" |
| 19 #include "components/policy/core/common/cloud/mock_device_management_service.h" | 20 #include "components/policy/core/common/cloud/mock_device_management_service.h" |
| 20 #include "content/public/test/test_browser_thread_bundle.h" | 21 #include "content/public/test/test_browser_thread_bundle.h" |
| 21 #include "crypto/sha2.h" | 22 #include "crypto/sha2.h" |
| 22 #include "net/url_request/url_request_context_getter.h" | 23 #include "net/url_request/url_request_context_getter.h" |
| 23 #include "net/url_request/url_request_test_util.h" | 24 #include "net/url_request/url_request_test_util.h" |
| 24 #include "testing/gmock/include/gmock/gmock.h" | 25 #include "testing/gmock/include/gmock/gmock.h" |
| 25 #include "testing/gtest/include/gtest/gtest.h" | 26 #include "testing/gtest/include/gtest/gtest.h" |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 141 base::FundamentalValue value_should_enroll(should_enroll); | 142 base::FundamentalValue value_should_enroll(should_enroll); |
| 142 base::FundamentalValue value_power_limit(power_limit); | 143 base::FundamentalValue value_power_limit(power_limit); |
| 143 EXPECT_TRUE(base::Value::Equals( | 144 EXPECT_TRUE(base::Value::Equals( |
| 144 &value_should_enroll, | 145 &value_should_enroll, |
| 145 local_state_->GetUserPref(prefs::kShouldAutoEnroll))); | 146 local_state_->GetUserPref(prefs::kShouldAutoEnroll))); |
| 146 EXPECT_TRUE(base::Value::Equals( | 147 EXPECT_TRUE(base::Value::Equals( |
| 147 &value_power_limit, | 148 &value_power_limit, |
| 148 local_state_->GetUserPref(prefs::kAutoEnrollmentPowerLimit))); | 149 local_state_->GetUserPref(prefs::kAutoEnrollmentPowerLimit))); |
| 149 } | 150 } |
| 150 | 151 |
| 152 bool HasServerBackedState() { | |
| 153 return local_state_->GetUserPref(prefs::kServerBackedDeviceState); | |
| 154 } | |
| 155 | |
| 156 void VerifyServerBackedState(const std::string& expected_management_domain, | |
| 157 const std::string& expected_restore_mode) { | |
| 158 const base::Value* state = | |
| 159 local_state_->GetUserPref(prefs::kServerBackedDeviceState); | |
| 160 ASSERT_TRUE(state); | |
| 161 const base::DictionaryValue* state_dict = nullptr; | |
| 162 ASSERT_TRUE(state->GetAsDictionary(&state_dict)); | |
| 163 | |
| 164 std::string actual_management_domain; | |
| 165 EXPECT_TRUE(state_dict->GetString(kDeviceStateManagementDomain, | |
| 166 &actual_management_domain)); | |
| 167 EXPECT_EQ(expected_management_domain, actual_management_domain); | |
| 168 | |
| 169 std::string actual_restore_mode; | |
| 170 EXPECT_TRUE(state_dict->GetString(kDeviceStateRestoreMode, | |
| 171 &actual_restore_mode)); | |
| 172 EXPECT_EQ(expected_restore_mode, actual_restore_mode); | |
| 173 } | |
| 174 | |
| 151 const em::DeviceAutoEnrollmentRequest& auto_enrollment_request() { | 175 const em::DeviceAutoEnrollmentRequest& auto_enrollment_request() { |
| 152 return last_request_.auto_enrollment_request(); | 176 return last_request_.auto_enrollment_request(); |
| 153 } | 177 } |
| 154 | 178 |
| 155 content::TestBrowserThreadBundle browser_threads_; | 179 content::TestBrowserThreadBundle browser_threads_; |
| 156 ScopedTestingLocalState scoped_testing_local_state_; | 180 ScopedTestingLocalState scoped_testing_local_state_; |
| 157 TestingPrefServiceSimple* local_state_; | 181 TestingPrefServiceSimple* local_state_; |
| 158 scoped_ptr<MockDeviceManagementService> service_; | 182 scoped_ptr<MockDeviceManagementService> service_; |
| 159 scoped_ptr<AutoEnrollmentClient> client_; | 183 scoped_ptr<AutoEnrollmentClient> client_; |
| 160 em::DeviceManagementRequest last_request_; | 184 em::DeviceManagementRequest last_request_; |
| 161 AutoEnrollmentState state_; | 185 AutoEnrollmentState state_; |
| 162 | 186 |
| 163 private: | 187 private: |
| 164 DISALLOW_COPY_AND_ASSIGN(AutoEnrollmentClientTest); | 188 DISALLOW_COPY_AND_ASSIGN(AutoEnrollmentClientTest); |
| 165 }; | 189 }; |
| 166 | 190 |
| 167 TEST_F(AutoEnrollmentClientTest, NetworkFailure) { | 191 TEST_F(AutoEnrollmentClientTest, NetworkFailure) { |
| 168 ServerWillFail(DM_STATUS_TEMPORARY_UNAVAILABLE); | 192 ServerWillFail(DM_STATUS_TEMPORARY_UNAVAILABLE); |
| 169 client_->Start(); | 193 client_->Start(); |
| 170 EXPECT_EQ(AUTO_ENROLLMENT_STATE_SERVER_ERROR, state_); | 194 EXPECT_EQ(AUTO_ENROLLMENT_STATE_SERVER_ERROR, state_); |
| 171 EXPECT_FALSE(HasCachedDecision()); | 195 EXPECT_FALSE(HasCachedDecision()); |
| 196 EXPECT_FALSE(HasServerBackedState()); | |
| 172 } | 197 } |
| 173 | 198 |
| 174 TEST_F(AutoEnrollmentClientTest, EmptyReply) { | 199 TEST_F(AutoEnrollmentClientTest, EmptyReply) { |
| 175 ServerWillReply(-1, false, false); | 200 ServerWillReply(-1, false, false); |
| 176 client_->Start(); | 201 client_->Start(); |
| 177 EXPECT_EQ(AUTO_ENROLLMENT_STATE_NO_ENROLLMENT, state_); | 202 EXPECT_EQ(AUTO_ENROLLMENT_STATE_NO_ENROLLMENT, state_); |
| 178 VerifyCachedResult(false, 8); | 203 VerifyCachedResult(false, 8); |
| 204 EXPECT_FALSE(HasServerBackedState()); | |
| 179 } | 205 } |
| 180 | 206 |
| 181 TEST_F(AutoEnrollmentClientTest, ClientUploadsRightBits) { | 207 TEST_F(AutoEnrollmentClientTest, ClientUploadsRightBits) { |
| 182 ServerWillReply(-1, false, false); | 208 ServerWillReply(-1, false, false); |
| 183 client_->Start(); | 209 client_->Start(); |
| 184 EXPECT_EQ(AUTO_ENROLLMENT_STATE_NO_ENROLLMENT, state_); | 210 EXPECT_EQ(AUTO_ENROLLMENT_STATE_NO_ENROLLMENT, state_); |
| 185 | 211 |
| 186 EXPECT_TRUE(auto_enrollment_request().has_remainder()); | 212 EXPECT_TRUE(auto_enrollment_request().has_remainder()); |
| 187 EXPECT_TRUE(auto_enrollment_request().has_modulus()); | 213 EXPECT_TRUE(auto_enrollment_request().has_modulus()); |
| 188 EXPECT_EQ(16, auto_enrollment_request().modulus()); | 214 EXPECT_EQ(16, auto_enrollment_request().modulus()); |
| 189 EXPECT_EQ(kStateKeyHash[31] & 0xf, auto_enrollment_request().remainder()); | 215 EXPECT_EQ(kStateKeyHash[31] & 0xf, auto_enrollment_request().remainder()); |
| 190 VerifyCachedResult(false, 8); | 216 VerifyCachedResult(false, 8); |
| 217 EXPECT_FALSE(HasServerBackedState()); | |
| 191 } | 218 } |
| 192 | 219 |
| 193 TEST_F(AutoEnrollmentClientTest, AskForMoreThenFail) { | 220 TEST_F(AutoEnrollmentClientTest, AskForMoreThenFail) { |
| 194 InSequence sequence; | 221 InSequence sequence; |
| 195 ServerWillReply(32, false, false); | 222 ServerWillReply(32, false, false); |
| 196 ServerWillFail(DM_STATUS_TEMPORARY_UNAVAILABLE); | 223 ServerWillFail(DM_STATUS_TEMPORARY_UNAVAILABLE); |
| 197 client_->Start(); | 224 client_->Start(); |
| 198 EXPECT_EQ(AUTO_ENROLLMENT_STATE_SERVER_ERROR, state_); | 225 EXPECT_EQ(AUTO_ENROLLMENT_STATE_SERVER_ERROR, state_); |
| 199 EXPECT_FALSE(HasCachedDecision()); | 226 EXPECT_FALSE(HasCachedDecision()); |
| 227 EXPECT_FALSE(HasServerBackedState()); | |
| 200 } | 228 } |
| 201 | 229 |
| 202 TEST_F(AutoEnrollmentClientTest, AskForMoreThenEvenMore) { | 230 TEST_F(AutoEnrollmentClientTest, AskForMoreThenEvenMore) { |
| 203 InSequence sequence; | 231 InSequence sequence; |
| 204 ServerWillReply(32, false, false); | 232 ServerWillReply(32, false, false); |
| 205 ServerWillReply(64, false, false); | 233 ServerWillReply(64, false, false); |
| 206 client_->Start(); | 234 client_->Start(); |
| 207 EXPECT_EQ(AUTO_ENROLLMENT_STATE_SERVER_ERROR, state_); | 235 EXPECT_EQ(AUTO_ENROLLMENT_STATE_SERVER_ERROR, state_); |
| 208 EXPECT_FALSE(HasCachedDecision()); | 236 EXPECT_FALSE(HasCachedDecision()); |
| 237 EXPECT_FALSE(HasServerBackedState()); | |
| 209 } | 238 } |
| 210 | 239 |
| 211 TEST_F(AutoEnrollmentClientTest, AskForLess) { | 240 TEST_F(AutoEnrollmentClientTest, AskForLess) { |
| 212 InSequence sequence; | 241 InSequence sequence; |
| 213 ServerWillReply(8, false, false); | 242 ServerWillReply(8, false, false); |
| 214 ServerWillReply(-1, true, true); | 243 ServerWillReply(-1, true, true); |
| 215 ServerWillSendState( | 244 ServerWillSendState( |
| 216 "example.com", | 245 "example.com", |
| 217 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED); | 246 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED); |
| 218 client_->Start(); | 247 client_->Start(); |
| 219 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); | 248 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); |
| 220 VerifyCachedResult(true, 8); | 249 VerifyCachedResult(true, 8); |
| 250 VerifyServerBackedState("example.com", | |
| 251 kDeviceStateRestoreModeReEnrollmentEnforced); | |
| 221 } | 252 } |
| 222 | 253 |
| 223 TEST_F(AutoEnrollmentClientTest, AskForSame) { | 254 TEST_F(AutoEnrollmentClientTest, AskForSame) { |
| 224 InSequence sequence; | 255 InSequence sequence; |
| 225 ServerWillReply(16, false, false); | 256 ServerWillReply(16, false, false); |
| 226 ServerWillReply(-1, true, true); | 257 ServerWillReply(-1, true, true); |
| 227 ServerWillSendState( | 258 ServerWillSendState( |
| 228 "example.com", | 259 "example.com", |
| 229 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED); | 260 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED); |
| 230 client_->Start(); | 261 client_->Start(); |
| 231 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); | 262 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); |
| 232 VerifyCachedResult(true, 8); | 263 VerifyCachedResult(true, 8); |
| 264 VerifyServerBackedState("example.com", | |
| 265 kDeviceStateRestoreModeReEnrollmentEnforced); | |
| 233 } | 266 } |
| 234 | 267 |
| 235 TEST_F(AutoEnrollmentClientTest, AskForSameTwice) { | 268 TEST_F(AutoEnrollmentClientTest, AskForSameTwice) { |
| 236 InSequence sequence; | 269 InSequence sequence; |
| 237 ServerWillReply(16, false, false); | 270 ServerWillReply(16, false, false); |
| 238 ServerWillReply(16, false, false); | 271 ServerWillReply(16, false, false); |
| 239 client_->Start(); | 272 client_->Start(); |
| 240 EXPECT_EQ(AUTO_ENROLLMENT_STATE_SERVER_ERROR, state_); | 273 EXPECT_EQ(AUTO_ENROLLMENT_STATE_SERVER_ERROR, state_); |
| 241 EXPECT_FALSE(HasCachedDecision()); | 274 EXPECT_FALSE(HasCachedDecision()); |
| 275 EXPECT_FALSE(HasServerBackedState()); | |
| 242 } | 276 } |
| 243 | 277 |
| 244 TEST_F(AutoEnrollmentClientTest, AskForTooMuch) { | 278 TEST_F(AutoEnrollmentClientTest, AskForTooMuch) { |
| 245 ServerWillReply(512, false, false); | 279 ServerWillReply(512, false, false); |
| 246 client_->Start(); | 280 client_->Start(); |
| 247 EXPECT_EQ(AUTO_ENROLLMENT_STATE_SERVER_ERROR, state_); | 281 EXPECT_EQ(AUTO_ENROLLMENT_STATE_SERVER_ERROR, state_); |
| 248 EXPECT_FALSE(HasCachedDecision()); | 282 EXPECT_FALSE(HasCachedDecision()); |
| 283 EXPECT_FALSE(HasServerBackedState()); | |
| 249 } | 284 } |
| 250 | 285 |
| 251 TEST_F(AutoEnrollmentClientTest, AskNonPowerOf2) { | 286 TEST_F(AutoEnrollmentClientTest, AskNonPowerOf2) { |
| 252 InSequence sequence; | 287 InSequence sequence; |
| 253 ServerWillReply(100, false, false); | 288 ServerWillReply(100, false, false); |
| 254 ServerWillReply(-1, false, false); | 289 ServerWillReply(-1, false, false); |
| 255 client_->Start(); | 290 client_->Start(); |
| 256 EXPECT_EQ(AUTO_ENROLLMENT_STATE_NO_ENROLLMENT, state_); | 291 EXPECT_EQ(AUTO_ENROLLMENT_STATE_NO_ENROLLMENT, state_); |
| 257 EXPECT_TRUE(auto_enrollment_request().has_remainder()); | 292 EXPECT_TRUE(auto_enrollment_request().has_remainder()); |
| 258 EXPECT_TRUE(auto_enrollment_request().has_modulus()); | 293 EXPECT_TRUE(auto_enrollment_request().has_modulus()); |
| 259 EXPECT_EQ(128, auto_enrollment_request().modulus()); | 294 EXPECT_EQ(128, auto_enrollment_request().modulus()); |
| 260 EXPECT_EQ(kStateKeyHash[31] & 0x7f, auto_enrollment_request().remainder()); | 295 EXPECT_EQ(kStateKeyHash[31] & 0x7f, auto_enrollment_request().remainder()); |
| 261 VerifyCachedResult(false, 8); | 296 VerifyCachedResult(false, 8); |
| 297 EXPECT_FALSE(HasServerBackedState()); | |
| 262 } | 298 } |
| 263 | 299 |
| 264 TEST_F(AutoEnrollmentClientTest, ConsumerDevice) { | 300 TEST_F(AutoEnrollmentClientTest, ConsumerDevice) { |
| 265 ServerWillReply(-1, true, false); | 301 ServerWillReply(-1, true, false); |
| 266 client_->Start(); | 302 client_->Start(); |
| 267 EXPECT_EQ(AUTO_ENROLLMENT_STATE_NO_ENROLLMENT, state_); | 303 EXPECT_EQ(AUTO_ENROLLMENT_STATE_NO_ENROLLMENT, state_); |
| 268 VerifyCachedResult(false, 8); | 304 VerifyCachedResult(false, 8); |
| 305 EXPECT_FALSE(HasServerBackedState()); | |
| 269 | 306 |
| 270 // Network changes don't trigger retries after obtaining a response from | 307 // Network changes don't trigger retries after obtaining a response from |
| 271 // the server. | 308 // the server. |
| 272 client_->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_ETHERNET); | 309 client_->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_ETHERNET); |
| 273 EXPECT_EQ(AUTO_ENROLLMENT_STATE_NO_ENROLLMENT, state_); | 310 EXPECT_EQ(AUTO_ENROLLMENT_STATE_NO_ENROLLMENT, state_); |
| 274 } | 311 } |
| 275 | 312 |
| 276 TEST_F(AutoEnrollmentClientTest, EnterpriseDevice) { | 313 TEST_F(AutoEnrollmentClientTest, EnterpriseDevice) { |
| 277 ServerWillReply(-1, true, true); | 314 ServerWillReply(-1, true, true); |
| 278 ServerWillSendState( | 315 ServerWillSendState( |
| 279 "example.com", | 316 "example.com", |
| 280 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED); | 317 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED); |
| 281 client_->Start(); | 318 client_->Start(); |
| 282 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); | 319 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); |
| 283 VerifyCachedResult(true, 8); | 320 VerifyCachedResult(true, 8); |
| 321 VerifyServerBackedState("example.com", | |
| 322 kDeviceStateRestoreModeReEnrollmentEnforced); | |
| 284 | 323 |
| 285 // Network changes don't trigger retries after obtaining a response from | 324 // Network changes don't trigger retries after obtaining a response from |
| 286 // the server. | 325 // the server. |
| 287 client_->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_ETHERNET); | 326 client_->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_ETHERNET); |
| 288 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); | 327 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); |
| 289 } | 328 } |
| 290 | 329 |
| 291 TEST_F(AutoEnrollmentClientTest, NoSerial) { | 330 TEST_F(AutoEnrollmentClientTest, NoSerial) { |
| 292 CreateClient("", true, 4, 8); | 331 CreateClient("", true, 4, 8); |
| 293 client_->Start(); | 332 client_->Start(); |
| 294 EXPECT_EQ(AUTO_ENROLLMENT_STATE_NO_ENROLLMENT, state_); | 333 EXPECT_EQ(AUTO_ENROLLMENT_STATE_NO_ENROLLMENT, state_); |
| 295 EXPECT_FALSE(HasCachedDecision()); | 334 EXPECT_FALSE(HasCachedDecision()); |
| 335 EXPECT_FALSE(HasServerBackedState()); | |
| 296 } | 336 } |
| 297 | 337 |
| 298 TEST_F(AutoEnrollmentClientTest, NoBitsUploaded) { | 338 TEST_F(AutoEnrollmentClientTest, NoBitsUploaded) { |
| 299 CreateClient(kStateKey, true, 0, 0); | 339 CreateClient(kStateKey, true, 0, 0); |
| 300 ServerWillReply(-1, false, false); | 340 ServerWillReply(-1, false, false); |
| 301 client_->Start(); | 341 client_->Start(); |
| 302 EXPECT_EQ(AUTO_ENROLLMENT_STATE_NO_ENROLLMENT, state_); | 342 EXPECT_EQ(AUTO_ENROLLMENT_STATE_NO_ENROLLMENT, state_); |
| 303 EXPECT_TRUE(auto_enrollment_request().has_remainder()); | 343 EXPECT_TRUE(auto_enrollment_request().has_remainder()); |
| 304 EXPECT_TRUE(auto_enrollment_request().has_modulus()); | 344 EXPECT_TRUE(auto_enrollment_request().has_modulus()); |
| 305 EXPECT_EQ(1, auto_enrollment_request().modulus()); | 345 EXPECT_EQ(1, auto_enrollment_request().modulus()); |
| 306 EXPECT_EQ(0, auto_enrollment_request().remainder()); | 346 EXPECT_EQ(0, auto_enrollment_request().remainder()); |
| 307 VerifyCachedResult(false, 0); | 347 VerifyCachedResult(false, 0); |
| 348 EXPECT_FALSE(HasServerBackedState()); | |
| 308 } | 349 } |
| 309 | 350 |
| 310 TEST_F(AutoEnrollmentClientTest, ManyBitsUploaded) { | 351 TEST_F(AutoEnrollmentClientTest, ManyBitsUploaded) { |
| 311 int64 bottom62 = GG_INT64_C(0x386e7244d097c3e6); | 352 int64 bottom62 = GG_INT64_C(0x386e7244d097c3e6); |
| 312 for (int i = 0; i <= 62; ++i) { | 353 for (int i = 0; i <= 62; ++i) { |
| 313 CreateClient(kStateKey, true, i, i); | 354 CreateClient(kStateKey, true, i, i); |
| 314 ServerWillReply(-1, false, false); | 355 ServerWillReply(-1, false, false); |
| 315 client_->Start(); | 356 client_->Start(); |
| 316 EXPECT_EQ(AUTO_ENROLLMENT_STATE_NO_ENROLLMENT, state_); | 357 EXPECT_EQ(AUTO_ENROLLMENT_STATE_NO_ENROLLMENT, state_); |
| 317 EXPECT_TRUE(auto_enrollment_request().has_remainder()); | 358 EXPECT_TRUE(auto_enrollment_request().has_remainder()); |
| 318 EXPECT_TRUE(auto_enrollment_request().has_modulus()); | 359 EXPECT_TRUE(auto_enrollment_request().has_modulus()); |
| 319 EXPECT_EQ(GG_INT64_C(1) << i, auto_enrollment_request().modulus()); | 360 EXPECT_EQ(GG_INT64_C(1) << i, auto_enrollment_request().modulus()); |
| 320 EXPECT_EQ(bottom62 % (GG_INT64_C(1) << i), | 361 EXPECT_EQ(bottom62 % (GG_INT64_C(1) << i), |
| 321 auto_enrollment_request().remainder()); | 362 auto_enrollment_request().remainder()); |
| 322 VerifyCachedResult(false, i); | 363 VerifyCachedResult(false, i); |
| 364 EXPECT_FALSE(HasServerBackedState()); | |
| 323 } | 365 } |
| 324 } | 366 } |
| 325 | 367 |
| 326 TEST_F(AutoEnrollmentClientTest, MoreThan32BitsUploaded) { | 368 TEST_F(AutoEnrollmentClientTest, MoreThan32BitsUploaded) { |
| 327 CreateClient(kStateKey, true, 10, 37); | 369 CreateClient(kStateKey, true, 10, 37); |
| 328 InSequence sequence; | 370 InSequence sequence; |
| 329 ServerWillReply(GG_INT64_C(1) << 37, false, false); | 371 ServerWillReply(GG_INT64_C(1) << 37, false, false); |
| 330 ServerWillReply(-1, true, true); | 372 ServerWillReply(-1, true, true); |
| 331 ServerWillSendState( | 373 ServerWillSendState( |
| 332 "example.com", | 374 "example.com", |
| 333 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED); | 375 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED); |
| 334 client_->Start(); | 376 client_->Start(); |
| 335 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); | 377 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); |
| 336 VerifyCachedResult(true, 37); | 378 VerifyCachedResult(true, 37); |
| 379 VerifyServerBackedState("example.com", | |
| 380 kDeviceStateRestoreModeReEnrollmentEnforced); | |
| 337 } | 381 } |
| 338 | 382 |
| 339 TEST_F(AutoEnrollmentClientTest, ReuseCachedDecision) { | 383 TEST_F(AutoEnrollmentClientTest, ReuseCachedDecision) { |
| 340 EXPECT_CALL(*service_, CreateJob(_, _)).Times(0); | 384 EXPECT_CALL(*service_, CreateJob(_, _)).Times(0); |
| 341 local_state_->SetUserPref(prefs::kShouldAutoEnroll, | 385 local_state_->SetUserPref(prefs::kShouldAutoEnroll, |
| 342 new base::FundamentalValue(true)); | 386 new base::FundamentalValue(true)); |
| 343 local_state_->SetUserPref(prefs::kAutoEnrollmentPowerLimit, | 387 local_state_->SetUserPref(prefs::kAutoEnrollmentPowerLimit, |
| 344 new base::FundamentalValue(8)); | 388 new base::FundamentalValue(8)); |
| 345 ServerWillSendState( | 389 ServerWillSendState( |
| 346 "example.com", | 390 "example.com", |
| 347 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED); | 391 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED); |
| 348 client_->Start(); | 392 client_->Start(); |
| 349 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); | 393 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); |
| 394 VerifyServerBackedState("example.com", | |
| 395 kDeviceStateRestoreModeReEnrollmentEnforced); | |
| 350 AutoEnrollmentClient::CancelAutoEnrollment(); | 396 AutoEnrollmentClient::CancelAutoEnrollment(); |
| 351 client_->Start(); | 397 client_->Start(); |
| 352 EXPECT_EQ(AUTO_ENROLLMENT_STATE_NO_ENROLLMENT, state_); | 398 EXPECT_EQ(AUTO_ENROLLMENT_STATE_NO_ENROLLMENT, state_); |
| 399 EXPECT_FALSE(HasServerBackedState()); | |
| 353 } | 400 } |
| 354 | 401 |
| 355 TEST_F(AutoEnrollmentClientTest, RetryIfPowerLargerThanCached) { | 402 TEST_F(AutoEnrollmentClientTest, RetryIfPowerLargerThanCached) { |
| 356 local_state_->SetUserPref(prefs::kShouldAutoEnroll, | 403 local_state_->SetUserPref(prefs::kShouldAutoEnroll, |
| 357 new base::FundamentalValue(false)); | 404 new base::FundamentalValue(false)); |
| 358 local_state_->SetUserPref(prefs::kAutoEnrollmentPowerLimit, | 405 local_state_->SetUserPref(prefs::kAutoEnrollmentPowerLimit, |
| 359 new base::FundamentalValue(8)); | 406 new base::FundamentalValue(8)); |
| 360 CreateClient(kStateKey, true, 5, 10); | 407 CreateClient(kStateKey, true, 5, 10); |
| 361 ServerWillReply(-1, true, true); | 408 ServerWillReply(-1, true, true); |
| 362 ServerWillSendState( | 409 ServerWillSendState( |
| 363 "example.com", | 410 "example.com", |
| 364 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED); | 411 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED); |
| 365 client_->Start(); | 412 client_->Start(); |
| 366 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); | 413 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); |
| 414 VerifyServerBackedState("example.com", | |
| 415 kDeviceStateRestoreModeReEnrollmentEnforced); | |
| 367 } | 416 } |
| 368 | 417 |
| 369 TEST_F(AutoEnrollmentClientTest, NetworkChangeRetryAfterErrors) { | 418 TEST_F(AutoEnrollmentClientTest, NetworkChangeRetryAfterErrors) { |
| 370 ServerWillFail(DM_STATUS_TEMPORARY_UNAVAILABLE); | 419 ServerWillFail(DM_STATUS_TEMPORARY_UNAVAILABLE); |
| 371 client_->Start(); | 420 client_->Start(); |
| 372 // Don't invoke the callback if there was a network failure. | 421 // Don't invoke the callback if there was a network failure. |
| 373 EXPECT_EQ(AUTO_ENROLLMENT_STATE_SERVER_ERROR, state_); | 422 EXPECT_EQ(AUTO_ENROLLMENT_STATE_SERVER_ERROR, state_); |
| 374 EXPECT_FALSE(HasCachedDecision()); | 423 EXPECT_FALSE(HasCachedDecision()); |
| 424 EXPECT_FALSE(HasServerBackedState()); | |
| 375 | 425 |
| 376 // The client doesn't retry if no new connection became available. | 426 // The client doesn't retry if no new connection became available. |
| 377 client_->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_NONE); | 427 client_->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_NONE); |
| 378 EXPECT_EQ(AUTO_ENROLLMENT_STATE_SERVER_ERROR, state_); | 428 EXPECT_EQ(AUTO_ENROLLMENT_STATE_SERVER_ERROR, state_); |
| 379 EXPECT_FALSE(HasCachedDecision()); | 429 EXPECT_FALSE(HasCachedDecision()); |
| 430 EXPECT_FALSE(HasServerBackedState()); | |
| 380 | 431 |
| 381 // Retry once the network is back. | 432 // Retry once the network is back. |
| 382 ServerWillReply(-1, true, true); | 433 ServerWillReply(-1, true, true); |
| 383 ServerWillSendState( | 434 ServerWillSendState( |
| 384 "example.com", | 435 "example.com", |
| 385 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED); | 436 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED); |
| 386 client_->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_ETHERNET); | 437 client_->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_ETHERNET); |
| 387 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); | 438 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); |
| 388 EXPECT_TRUE(HasCachedDecision()); | 439 EXPECT_TRUE(HasCachedDecision()); |
| 440 VerifyServerBackedState("example.com", | |
| 441 kDeviceStateRestoreModeReEnrollmentEnforced); | |
| 389 | 442 |
| 390 // Subsequent network changes don't trigger retries. | 443 // Subsequent network changes don't trigger retries. |
| 391 client_->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_NONE); | 444 client_->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_NONE); |
| 392 client_->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_ETHERNET); | 445 client_->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_ETHERNET); |
| 393 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); | 446 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); |
| 394 EXPECT_TRUE(HasCachedDecision()); | 447 EXPECT_TRUE(HasCachedDecision()); |
| 448 VerifyServerBackedState("example.com", | |
| 449 kDeviceStateRestoreModeReEnrollmentEnforced); | |
| 395 } | 450 } |
| 396 | 451 |
| 397 TEST_F(AutoEnrollmentClientTest, CancelAndDeleteSoonWithPendingRequest) { | 452 TEST_F(AutoEnrollmentClientTest, CancelAndDeleteSoonWithPendingRequest) { |
| 398 MockDeviceManagementJob* job = NULL; | 453 MockDeviceManagementJob* job = NULL; |
| 399 ServerWillReplyAsync(&job); | 454 ServerWillReplyAsync(&job); |
| 400 EXPECT_FALSE(job); | 455 EXPECT_FALSE(job); |
| 401 client_->Start(); | 456 client_->Start(); |
| 402 ASSERT_TRUE(job); | 457 ASSERT_TRUE(job); |
| 403 EXPECT_EQ(AUTO_ENROLLMENT_STATE_PENDING, state_); | 458 EXPECT_EQ(AUTO_ENROLLMENT_STATE_PENDING, state_); |
| 404 | 459 |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 445 EXPECT_EQ(AUTO_ENROLLMENT_STATE_PENDING, state_); | 500 EXPECT_EQ(AUTO_ENROLLMENT_STATE_PENDING, state_); |
| 446 } | 501 } |
| 447 | 502 |
| 448 TEST_F(AutoEnrollmentClientTest, CancelAndDeleteSoonAfterCompletion) { | 503 TEST_F(AutoEnrollmentClientTest, CancelAndDeleteSoonAfterCompletion) { |
| 449 ServerWillReply(-1, true, true); | 504 ServerWillReply(-1, true, true); |
| 450 ServerWillSendState( | 505 ServerWillSendState( |
| 451 "example.com", | 506 "example.com", |
| 452 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED); | 507 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED); |
| 453 client_->Start(); | 508 client_->Start(); |
| 454 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); | 509 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); |
| 510 EXPECT_TRUE(HasCachedDecision()); | |
|
Joao da Silva
2014/10/22 18:22:38
Isn't this redundant given the VerifyServerBackedS
bartfab (slow)
2014/10/23 08:57:38
Eh, copypasta. Removed.
| |
| 511 VerifyServerBackedState("example.com", | |
| 512 kDeviceStateRestoreModeReEnrollmentEnforced); | |
| 455 | 513 |
| 456 // The client will delete itself immediately if there are no pending | 514 // The client will delete itself immediately if there are no pending |
| 457 // requests. | 515 // requests. |
| 458 EXPECT_TRUE(base::MessageLoop::current()->IsIdleForTesting()); | 516 EXPECT_TRUE(base::MessageLoop::current()->IsIdleForTesting()); |
| 459 client_.release()->CancelAndDeleteSoon(); | 517 client_.release()->CancelAndDeleteSoon(); |
| 460 EXPECT_TRUE(base::MessageLoop::current()->IsIdleForTesting()); | 518 EXPECT_TRUE(base::MessageLoop::current()->IsIdleForTesting()); |
| 461 } | 519 } |
| 462 | 520 |
| 463 TEST_F(AutoEnrollmentClientTest, CancelAndDeleteSoonAfterNetworkFailure) { | 521 TEST_F(AutoEnrollmentClientTest, CancelAndDeleteSoonAfterNetworkFailure) { |
| 464 ServerWillFail(DM_STATUS_TEMPORARY_UNAVAILABLE); | 522 ServerWillFail(DM_STATUS_TEMPORARY_UNAVAILABLE); |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 475 TEST_F(AutoEnrollmentClientTest, NetworkFailureThenRequireUpdatedModulus) { | 533 TEST_F(AutoEnrollmentClientTest, NetworkFailureThenRequireUpdatedModulus) { |
| 476 // This test verifies that if the first request fails due to a network | 534 // This test verifies that if the first request fails due to a network |
| 477 // problem then the second request will correctly handle an updated | 535 // problem then the second request will correctly handle an updated |
| 478 // modulus request from the server. | 536 // modulus request from the server. |
| 479 | 537 |
| 480 ServerWillFail(DM_STATUS_REQUEST_FAILED); | 538 ServerWillFail(DM_STATUS_REQUEST_FAILED); |
| 481 client_->Start(); | 539 client_->Start(); |
| 482 // Callback should signal the connection error. | 540 // Callback should signal the connection error. |
| 483 EXPECT_EQ(AUTO_ENROLLMENT_STATE_CONNECTION_ERROR, state_); | 541 EXPECT_EQ(AUTO_ENROLLMENT_STATE_CONNECTION_ERROR, state_); |
| 484 EXPECT_FALSE(HasCachedDecision()); | 542 EXPECT_FALSE(HasCachedDecision()); |
| 543 EXPECT_FALSE(HasServerBackedState()); | |
| 485 Mock::VerifyAndClearExpectations(service_.get()); | 544 Mock::VerifyAndClearExpectations(service_.get()); |
| 486 | 545 |
| 487 InSequence sequence; | 546 InSequence sequence; |
| 488 // The default client uploads 4 bits. Make the server ask for 5. | 547 // The default client uploads 4 bits. Make the server ask for 5. |
| 489 ServerWillReply(1 << 5, false, false); | 548 ServerWillReply(1 << 5, false, false); |
| 490 EXPECT_CALL(*service_, StartJob(_, _, _, _, _, _, _)); | 549 EXPECT_CALL(*service_, StartJob(_, _, _, _, _, _, _)); |
| 491 // Then reply with a valid response and include the hash. | 550 // Then reply with a valid response and include the hash. |
| 492 ServerWillReply(-1, true, true); | 551 ServerWillReply(-1, true, true); |
| 493 EXPECT_CALL(*service_, StartJob(_, _, _, _, _, _, _)); | 552 EXPECT_CALL(*service_, StartJob(_, _, _, _, _, _, _)); |
| 494 // State download triggers. | 553 // State download triggers. |
| 495 ServerWillSendState( | 554 ServerWillSendState( |
| 496 "example.com", | 555 "example.com", |
| 497 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED); | 556 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED); |
| 498 EXPECT_CALL(*service_, StartJob(_, _, _, _, _, _, _)); | 557 EXPECT_CALL(*service_, StartJob(_, _, _, _, _, _, _)); |
| 499 | 558 |
| 500 // Trigger a network change event. | 559 // Trigger a network change event. |
| 501 client_->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_ETHERNET); | 560 client_->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_ETHERNET); |
| 502 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); | 561 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); |
| 503 EXPECT_TRUE(HasCachedDecision()); | 562 EXPECT_TRUE(HasCachedDecision()); |
| 563 VerifyServerBackedState("example.com", | |
| 564 kDeviceStateRestoreModeReEnrollmentEnforced); | |
| 504 Mock::VerifyAndClearExpectations(service_.get()); | 565 Mock::VerifyAndClearExpectations(service_.get()); |
| 505 } | 566 } |
| 506 | 567 |
| 507 TEST_F(AutoEnrollmentClientTest, NoDeviceStateRetrieval) { | 568 TEST_F(AutoEnrollmentClientTest, NoDeviceStateRetrieval) { |
| 508 CreateClient(kStateKey, false, 4, 8); | 569 CreateClient(kStateKey, false, 4, 8); |
| 509 ServerWillReply(-1, true, true); | 570 ServerWillReply(-1, true, true); |
| 510 EXPECT_CALL(*service_, | 571 EXPECT_CALL(*service_, |
| 511 CreateJob(DeviceManagementRequestJob::TYPE_DEVICE_STATE_RETRIEVAL, | 572 CreateJob(DeviceManagementRequestJob::TYPE_DEVICE_STATE_RETRIEVAL, |
| 512 _)).Times(0); | 573 _)).Times(0); |
| 513 client_->Start(); | 574 client_->Start(); |
| 514 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); | 575 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); |
| 515 VerifyCachedResult(true, 8); | 576 VerifyCachedResult(true, 8); |
| 577 EXPECT_FALSE(HasServerBackedState()); | |
| 516 } | 578 } |
| 517 | 579 |
| 518 } // namespace | 580 } // namespace |
| 519 } // namespace policy | 581 } // namespace policy |
| OLD | NEW |