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 VerifyServerBackedState("example.com", |
| 511 kDeviceStateRestoreModeReEnrollmentEnforced); |
455 | 512 |
456 // The client will delete itself immediately if there are no pending | 513 // The client will delete itself immediately if there are no pending |
457 // requests. | 514 // requests. |
458 EXPECT_TRUE(base::MessageLoop::current()->IsIdleForTesting()); | 515 EXPECT_TRUE(base::MessageLoop::current()->IsIdleForTesting()); |
459 client_.release()->CancelAndDeleteSoon(); | 516 client_.release()->CancelAndDeleteSoon(); |
460 EXPECT_TRUE(base::MessageLoop::current()->IsIdleForTesting()); | 517 EXPECT_TRUE(base::MessageLoop::current()->IsIdleForTesting()); |
461 } | 518 } |
462 | 519 |
463 TEST_F(AutoEnrollmentClientTest, CancelAndDeleteSoonAfterNetworkFailure) { | 520 TEST_F(AutoEnrollmentClientTest, CancelAndDeleteSoonAfterNetworkFailure) { |
464 ServerWillFail(DM_STATUS_TEMPORARY_UNAVAILABLE); | 521 ServerWillFail(DM_STATUS_TEMPORARY_UNAVAILABLE); |
(...skipping 10 matching lines...) Expand all Loading... |
475 TEST_F(AutoEnrollmentClientTest, NetworkFailureThenRequireUpdatedModulus) { | 532 TEST_F(AutoEnrollmentClientTest, NetworkFailureThenRequireUpdatedModulus) { |
476 // This test verifies that if the first request fails due to a network | 533 // This test verifies that if the first request fails due to a network |
477 // problem then the second request will correctly handle an updated | 534 // problem then the second request will correctly handle an updated |
478 // modulus request from the server. | 535 // modulus request from the server. |
479 | 536 |
480 ServerWillFail(DM_STATUS_REQUEST_FAILED); | 537 ServerWillFail(DM_STATUS_REQUEST_FAILED); |
481 client_->Start(); | 538 client_->Start(); |
482 // Callback should signal the connection error. | 539 // Callback should signal the connection error. |
483 EXPECT_EQ(AUTO_ENROLLMENT_STATE_CONNECTION_ERROR, state_); | 540 EXPECT_EQ(AUTO_ENROLLMENT_STATE_CONNECTION_ERROR, state_); |
484 EXPECT_FALSE(HasCachedDecision()); | 541 EXPECT_FALSE(HasCachedDecision()); |
| 542 EXPECT_FALSE(HasServerBackedState()); |
485 Mock::VerifyAndClearExpectations(service_.get()); | 543 Mock::VerifyAndClearExpectations(service_.get()); |
486 | 544 |
487 InSequence sequence; | 545 InSequence sequence; |
488 // The default client uploads 4 bits. Make the server ask for 5. | 546 // The default client uploads 4 bits. Make the server ask for 5. |
489 ServerWillReply(1 << 5, false, false); | 547 ServerWillReply(1 << 5, false, false); |
490 EXPECT_CALL(*service_, StartJob(_, _, _, _, _, _, _)); | 548 EXPECT_CALL(*service_, StartJob(_, _, _, _, _, _, _)); |
491 // Then reply with a valid response and include the hash. | 549 // Then reply with a valid response and include the hash. |
492 ServerWillReply(-1, true, true); | 550 ServerWillReply(-1, true, true); |
493 EXPECT_CALL(*service_, StartJob(_, _, _, _, _, _, _)); | 551 EXPECT_CALL(*service_, StartJob(_, _, _, _, _, _, _)); |
494 // State download triggers. | 552 // State download triggers. |
495 ServerWillSendState( | 553 ServerWillSendState( |
496 "example.com", | 554 "example.com", |
497 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED); | 555 em::DeviceStateRetrievalResponse::RESTORE_MODE_REENROLLMENT_ENFORCED); |
498 EXPECT_CALL(*service_, StartJob(_, _, _, _, _, _, _)); | 556 EXPECT_CALL(*service_, StartJob(_, _, _, _, _, _, _)); |
499 | 557 |
500 // Trigger a network change event. | 558 // Trigger a network change event. |
501 client_->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_ETHERNET); | 559 client_->OnNetworkChanged(net::NetworkChangeNotifier::CONNECTION_ETHERNET); |
502 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); | 560 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); |
503 EXPECT_TRUE(HasCachedDecision()); | 561 EXPECT_TRUE(HasCachedDecision()); |
| 562 VerifyServerBackedState("example.com", |
| 563 kDeviceStateRestoreModeReEnrollmentEnforced); |
504 Mock::VerifyAndClearExpectations(service_.get()); | 564 Mock::VerifyAndClearExpectations(service_.get()); |
505 } | 565 } |
506 | 566 |
507 TEST_F(AutoEnrollmentClientTest, NoDeviceStateRetrieval) { | 567 TEST_F(AutoEnrollmentClientTest, NoDeviceStateRetrieval) { |
508 CreateClient(kStateKey, false, 4, 8); | 568 CreateClient(kStateKey, false, 4, 8); |
509 ServerWillReply(-1, true, true); | 569 ServerWillReply(-1, true, true); |
510 EXPECT_CALL(*service_, | 570 EXPECT_CALL(*service_, |
511 CreateJob(DeviceManagementRequestJob::TYPE_DEVICE_STATE_RETRIEVAL, | 571 CreateJob(DeviceManagementRequestJob::TYPE_DEVICE_STATE_RETRIEVAL, |
512 _)).Times(0); | 572 _)).Times(0); |
513 client_->Start(); | 573 client_->Start(); |
514 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); | 574 EXPECT_EQ(AUTO_ENROLLMENT_STATE_TRIGGER_ENROLLMENT, state_); |
515 VerifyCachedResult(true, 8); | 575 VerifyCachedResult(true, 8); |
| 576 EXPECT_FALSE(HasServerBackedState()); |
516 } | 577 } |
517 | 578 |
518 } // namespace | 579 } // namespace |
519 } // namespace policy | 580 } // namespace policy |
OLD | NEW |