OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "components/proximity_auth/cryptauth/cryptauth_device_manager.h" | 5 #include "components/cryptauth/cryptauth_device_manager.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 | 8 |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
11 #include "base/base64url.h" | 11 #include "base/base64url.h" |
12 #include "base/macros.h" | 12 #include "base/macros.h" |
13 #include "base/memory/ptr_util.h" | 13 #include "base/memory/ptr_util.h" |
14 #include "base/memory/weak_ptr.h" | 14 #include "base/memory/weak_ptr.h" |
15 #include "base/strings/stringprintf.h" | 15 #include "base/strings/stringprintf.h" |
16 #include "base/test/simple_test_clock.h" | 16 #include "base/test/simple_test_clock.h" |
| 17 #include "components/cryptauth/fake_cryptauth_gcm_manager.h" |
| 18 #include "components/cryptauth/mock_cryptauth_client.h" |
| 19 #include "components/cryptauth/mock_sync_scheduler.h" |
| 20 #include "components/cryptauth/pref_names.h" |
17 #include "components/prefs/scoped_user_pref_update.h" | 21 #include "components/prefs/scoped_user_pref_update.h" |
18 #include "components/prefs/testing_pref_service.h" | 22 #include "components/prefs/testing_pref_service.h" |
19 #include "components/proximity_auth/cryptauth/fake_cryptauth_gcm_manager.h" | |
20 #include "components/proximity_auth/cryptauth/mock_cryptauth_client.h" | |
21 #include "components/proximity_auth/cryptauth/mock_sync_scheduler.h" | |
22 #include "components/proximity_auth/cryptauth/pref_names.h" | |
23 #include "testing/gmock/include/gmock/gmock.h" | 23 #include "testing/gmock/include/gmock/gmock.h" |
24 #include "testing/gtest/include/gtest/gtest.h" | 24 #include "testing/gtest/include/gtest/gtest.h" |
25 | 25 |
26 using ::testing::_; | 26 using ::testing::_; |
27 using ::testing::DoAll; | 27 using ::testing::DoAll; |
28 using ::testing::NiceMock; | 28 using ::testing::NiceMock; |
29 using ::testing::Return; | 29 using ::testing::Return; |
30 using ::testing::SaveArg; | 30 using ::testing::SaveArg; |
31 | 31 |
32 namespace proximity_auth { | 32 namespace cryptauth { |
33 namespace { | 33 namespace { |
34 | 34 |
35 // The initial "Now" time for testing. | 35 // The initial "Now" time for testing. |
36 const double kInitialTimeNowSeconds = 20000000; | 36 const double kInitialTimeNowSeconds = 20000000; |
37 | 37 |
38 // A later "Now" time for testing. | 38 // A later "Now" time for testing. |
39 const double kLaterTimeNowSeconds = kInitialTimeNowSeconds + 30; | 39 const double kLaterTimeNowSeconds = kInitialTimeNowSeconds + 30; |
40 | 40 |
41 // The timestamp of a last successful sync in seconds. | 41 // The timestamp of a last successful sync in seconds. |
42 const double kLastSyncTimeSeconds = kInitialTimeNowSeconds - (60 * 60 * 5); | 42 const double kLastSyncTimeSeconds = kInitialTimeNowSeconds - (60 * 60 * 5); |
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
147 // the super class. | 147 // the super class. |
148 // This should be safe because the life-time this SyncScheduler will always be | 148 // This should be safe because the life-time this SyncScheduler will always be |
149 // within the life of the TestCryptAuthDeviceManager object. | 149 // within the life of the TestCryptAuthDeviceManager object. |
150 base::WeakPtrFactory<MockSyncScheduler> weak_sync_scheduler_factory_; | 150 base::WeakPtrFactory<MockSyncScheduler> weak_sync_scheduler_factory_; |
151 | 151 |
152 DISALLOW_COPY_AND_ASSIGN(TestCryptAuthDeviceManager); | 152 DISALLOW_COPY_AND_ASSIGN(TestCryptAuthDeviceManager); |
153 }; | 153 }; |
154 | 154 |
155 } // namespace | 155 } // namespace |
156 | 156 |
157 class ProximityAuthCryptAuthDeviceManagerTest | 157 class CryptAuthDeviceManagerTest |
158 : public testing::Test, | 158 : public testing::Test, |
159 public CryptAuthDeviceManager::Observer, | 159 public CryptAuthDeviceManager::Observer, |
160 public MockCryptAuthClientFactory::Observer { | 160 public MockCryptAuthClientFactory::Observer { |
161 protected: | 161 protected: |
162 ProximityAuthCryptAuthDeviceManagerTest() | 162 CryptAuthDeviceManagerTest() |
163 : clock_(new base::SimpleTestClock()), | 163 : clock_(new base::SimpleTestClock()), |
164 client_factory_(new MockCryptAuthClientFactory( | 164 client_factory_(new MockCryptAuthClientFactory( |
165 MockCryptAuthClientFactory::MockType::MAKE_STRICT_MOCKS)), | 165 MockCryptAuthClientFactory::MockType::MAKE_STRICT_MOCKS)), |
166 gcm_manager_("existing gcm registration id") { | 166 gcm_manager_("existing gcm registration id") { |
167 client_factory_->AddObserver(this); | 167 client_factory_->AddObserver(this); |
168 } | 168 } |
169 | 169 |
170 ~ProximityAuthCryptAuthDeviceManagerTest() { | 170 ~CryptAuthDeviceManagerTest() { |
171 client_factory_->RemoveObserver(this); | 171 client_factory_->RemoveObserver(this); |
172 } | 172 } |
173 | 173 |
174 // testing::Test: | 174 // testing::Test: |
175 void SetUp() override { | 175 void SetUp() override { |
176 clock_->SetNow(base::Time::FromDoubleT(kInitialTimeNowSeconds)); | 176 clock_->SetNow(base::Time::FromDoubleT(kInitialTimeNowSeconds)); |
177 | 177 |
178 CryptAuthDeviceManager::RegisterPrefs(pref_service_.registry()); | 178 CryptAuthDeviceManager::RegisterPrefs(pref_service_.registry()); |
179 pref_service_.SetUserPref( | 179 pref_service_.SetUserPref( |
180 prefs::kCryptAuthDeviceSyncIsRecoveringFromFailure, | 180 prefs::kCryptAuthDeviceSyncIsRecoveringFromFailure, |
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
297 std::unique_ptr<TestCryptAuthDeviceManager> device_manager_; | 297 std::unique_ptr<TestCryptAuthDeviceManager> device_manager_; |
298 | 298 |
299 cryptauth::GetMyDevicesResponse get_my_devices_response_; | 299 cryptauth::GetMyDevicesResponse get_my_devices_response_; |
300 | 300 |
301 cryptauth::GetMyDevicesRequest get_my_devices_request_; | 301 cryptauth::GetMyDevicesRequest get_my_devices_request_; |
302 | 302 |
303 CryptAuthClient::GetMyDevicesCallback success_callback_; | 303 CryptAuthClient::GetMyDevicesCallback success_callback_; |
304 | 304 |
305 CryptAuthClient::ErrorCallback error_callback_; | 305 CryptAuthClient::ErrorCallback error_callback_; |
306 | 306 |
307 DISALLOW_COPY_AND_ASSIGN(ProximityAuthCryptAuthDeviceManagerTest); | 307 DISALLOW_COPY_AND_ASSIGN(CryptAuthDeviceManagerTest); |
308 }; | 308 }; |
309 | 309 |
310 TEST_F(ProximityAuthCryptAuthDeviceManagerTest, RegisterPrefs) { | 310 TEST_F(CryptAuthDeviceManagerTest, RegisterPrefs) { |
311 TestingPrefServiceSimple pref_service; | 311 TestingPrefServiceSimple pref_service; |
312 CryptAuthDeviceManager::RegisterPrefs(pref_service.registry()); | 312 CryptAuthDeviceManager::RegisterPrefs(pref_service.registry()); |
313 EXPECT_TRUE(pref_service.FindPreference( | 313 EXPECT_TRUE(pref_service.FindPreference( |
314 prefs::kCryptAuthDeviceSyncLastSyncTimeSeconds)); | 314 prefs::kCryptAuthDeviceSyncLastSyncTimeSeconds)); |
315 EXPECT_TRUE(pref_service.FindPreference( | 315 EXPECT_TRUE(pref_service.FindPreference( |
316 prefs::kCryptAuthDeviceSyncIsRecoveringFromFailure)); | 316 prefs::kCryptAuthDeviceSyncIsRecoveringFromFailure)); |
317 EXPECT_TRUE(pref_service.FindPreference(prefs::kCryptAuthDeviceSyncReason)); | 317 EXPECT_TRUE(pref_service.FindPreference(prefs::kCryptAuthDeviceSyncReason)); |
318 EXPECT_TRUE( | 318 EXPECT_TRUE( |
319 pref_service.FindPreference(prefs::kCryptAuthDeviceSyncUnlockKeys)); | 319 pref_service.FindPreference(prefs::kCryptAuthDeviceSyncUnlockKeys)); |
320 } | 320 } |
321 | 321 |
322 TEST_F(ProximityAuthCryptAuthDeviceManagerTest, GetSyncState) { | 322 TEST_F(CryptAuthDeviceManagerTest, GetSyncState) { |
323 device_manager_->Start(); | 323 device_manager_->Start(); |
324 | 324 |
325 ON_CALL(*sync_scheduler(), GetStrategy()) | 325 ON_CALL(*sync_scheduler(), GetStrategy()) |
326 .WillByDefault(Return(SyncScheduler::Strategy::PERIODIC_REFRESH)); | 326 .WillByDefault(Return(SyncScheduler::Strategy::PERIODIC_REFRESH)); |
327 EXPECT_FALSE(device_manager_->IsRecoveringFromFailure()); | 327 EXPECT_FALSE(device_manager_->IsRecoveringFromFailure()); |
328 | 328 |
329 ON_CALL(*sync_scheduler(), GetStrategy()) | 329 ON_CALL(*sync_scheduler(), GetStrategy()) |
330 .WillByDefault(Return(SyncScheduler::Strategy::AGGRESSIVE_RECOVERY)); | 330 .WillByDefault(Return(SyncScheduler::Strategy::AGGRESSIVE_RECOVERY)); |
331 EXPECT_TRUE(device_manager_->IsRecoveringFromFailure()); | 331 EXPECT_TRUE(device_manager_->IsRecoveringFromFailure()); |
332 | 332 |
333 base::TimeDelta time_to_next_sync = base::TimeDelta::FromMinutes(60); | 333 base::TimeDelta time_to_next_sync = base::TimeDelta::FromMinutes(60); |
334 ON_CALL(*sync_scheduler(), GetTimeToNextSync()) | 334 ON_CALL(*sync_scheduler(), GetTimeToNextSync()) |
335 .WillByDefault(Return(time_to_next_sync)); | 335 .WillByDefault(Return(time_to_next_sync)); |
336 EXPECT_EQ(time_to_next_sync, device_manager_->GetTimeToNextAttempt()); | 336 EXPECT_EQ(time_to_next_sync, device_manager_->GetTimeToNextAttempt()); |
337 | 337 |
338 ON_CALL(*sync_scheduler(), GetSyncState()) | 338 ON_CALL(*sync_scheduler(), GetSyncState()) |
339 .WillByDefault(Return(SyncScheduler::SyncState::SYNC_IN_PROGRESS)); | 339 .WillByDefault(Return(SyncScheduler::SyncState::SYNC_IN_PROGRESS)); |
340 EXPECT_TRUE(device_manager_->IsSyncInProgress()); | 340 EXPECT_TRUE(device_manager_->IsSyncInProgress()); |
341 | 341 |
342 ON_CALL(*sync_scheduler(), GetSyncState()) | 342 ON_CALL(*sync_scheduler(), GetSyncState()) |
343 .WillByDefault(Return(SyncScheduler::SyncState::WAITING_FOR_REFRESH)); | 343 .WillByDefault(Return(SyncScheduler::SyncState::WAITING_FOR_REFRESH)); |
344 EXPECT_FALSE(device_manager_->IsSyncInProgress()); | 344 EXPECT_FALSE(device_manager_->IsSyncInProgress()); |
345 } | 345 } |
346 | 346 |
347 TEST_F(ProximityAuthCryptAuthDeviceManagerTest, InitWithDefaultPrefs) { | 347 TEST_F(CryptAuthDeviceManagerTest, InitWithDefaultPrefs) { |
348 std::unique_ptr<base::SimpleTestClock> clock(new base::SimpleTestClock); | 348 std::unique_ptr<base::SimpleTestClock> clock(new base::SimpleTestClock); |
349 clock->SetNow(base::Time::FromDoubleT(kInitialTimeNowSeconds)); | 349 clock->SetNow(base::Time::FromDoubleT(kInitialTimeNowSeconds)); |
350 base::TimeDelta elapsed_time = clock->Now() - base::Time::FromDoubleT(0); | 350 base::TimeDelta elapsed_time = clock->Now() - base::Time::FromDoubleT(0); |
351 | 351 |
352 TestingPrefServiceSimple pref_service; | 352 TestingPrefServiceSimple pref_service; |
353 CryptAuthDeviceManager::RegisterPrefs(pref_service.registry()); | 353 CryptAuthDeviceManager::RegisterPrefs(pref_service.registry()); |
354 | 354 |
355 TestCryptAuthDeviceManager device_manager( | 355 TestCryptAuthDeviceManager device_manager( |
356 std::move(clock), | 356 std::move(clock), |
357 base::MakeUnique<MockCryptAuthClientFactory>( | 357 base::MakeUnique<MockCryptAuthClientFactory>( |
358 MockCryptAuthClientFactory::MockType::MAKE_STRICT_MOCKS), | 358 MockCryptAuthClientFactory::MockType::MAKE_STRICT_MOCKS), |
359 &gcm_manager_, &pref_service); | 359 &gcm_manager_, &pref_service); |
360 | 360 |
361 EXPECT_CALL( | 361 EXPECT_CALL( |
362 *(device_manager.GetSyncScheduler()), | 362 *(device_manager.GetSyncScheduler()), |
363 Start(elapsed_time, SyncScheduler::Strategy::AGGRESSIVE_RECOVERY)); | 363 Start(elapsed_time, SyncScheduler::Strategy::AGGRESSIVE_RECOVERY)); |
364 device_manager.Start(); | 364 device_manager.Start(); |
365 EXPECT_TRUE(device_manager.GetLastSyncTime().is_null()); | 365 EXPECT_TRUE(device_manager.GetLastSyncTime().is_null()); |
366 EXPECT_EQ(0u, device_manager.unlock_keys().size()); | 366 EXPECT_EQ(0u, device_manager.unlock_keys().size()); |
367 } | 367 } |
368 | 368 |
369 TEST_F(ProximityAuthCryptAuthDeviceManagerTest, InitWithExistingPrefs) { | 369 TEST_F(CryptAuthDeviceManagerTest, InitWithExistingPrefs) { |
370 EXPECT_CALL( | 370 EXPECT_CALL( |
371 *sync_scheduler(), | 371 *sync_scheduler(), |
372 Start(clock_->Now() - base::Time::FromDoubleT(kLastSyncTimeSeconds), | 372 Start(clock_->Now() - base::Time::FromDoubleT(kLastSyncTimeSeconds), |
373 SyncScheduler::Strategy::PERIODIC_REFRESH)); | 373 SyncScheduler::Strategy::PERIODIC_REFRESH)); |
374 | 374 |
375 device_manager_->Start(); | 375 device_manager_->Start(); |
376 EXPECT_EQ(base::Time::FromDoubleT(kLastSyncTimeSeconds), | 376 EXPECT_EQ(base::Time::FromDoubleT(kLastSyncTimeSeconds), |
377 device_manager_->GetLastSyncTime()); | 377 device_manager_->GetLastSyncTime()); |
378 | 378 |
379 auto unlock_keys = device_manager_->unlock_keys(); | 379 auto unlock_keys = device_manager_->unlock_keys(); |
380 ASSERT_EQ(1u, unlock_keys.size()); | 380 ASSERT_EQ(1u, unlock_keys.size()); |
381 EXPECT_EQ(kStoredPublicKey, unlock_keys[0].public_key()); | 381 EXPECT_EQ(kStoredPublicKey, unlock_keys[0].public_key()); |
382 EXPECT_EQ(kStoredDeviceName, unlock_keys[0].friendly_device_name()); | 382 EXPECT_EQ(kStoredDeviceName, unlock_keys[0].friendly_device_name()); |
383 EXPECT_EQ(kStoredBluetoothAddress, unlock_keys[0].bluetooth_address()); | 383 EXPECT_EQ(kStoredBluetoothAddress, unlock_keys[0].bluetooth_address()); |
384 EXPECT_TRUE(unlock_keys[0].unlock_key()); | 384 EXPECT_TRUE(unlock_keys[0].unlock_key()); |
385 } | 385 } |
386 | 386 |
387 TEST_F(ProximityAuthCryptAuthDeviceManagerTest, SyncSucceedsForFirstTime) { | 387 TEST_F(CryptAuthDeviceManagerTest, SyncSucceedsForFirstTime) { |
388 pref_service_.ClearPref(prefs::kCryptAuthDeviceSyncLastSyncTimeSeconds); | 388 pref_service_.ClearPref(prefs::kCryptAuthDeviceSyncLastSyncTimeSeconds); |
389 device_manager_->Start(); | 389 device_manager_->Start(); |
390 | 390 |
391 FireSchedulerForSync(cryptauth::INVOCATION_REASON_INITIALIZATION); | 391 FireSchedulerForSync(cryptauth::INVOCATION_REASON_INITIALIZATION); |
392 ASSERT_FALSE(success_callback_.is_null()); | 392 ASSERT_FALSE(success_callback_.is_null()); |
393 | 393 |
394 clock_->SetNow(base::Time::FromDoubleT(kLaterTimeNowSeconds)); | 394 clock_->SetNow(base::Time::FromDoubleT(kLaterTimeNowSeconds)); |
395 EXPECT_CALL(*this, OnSyncFinishedProxy( | 395 EXPECT_CALL(*this, OnSyncFinishedProxy( |
396 CryptAuthDeviceManager::SyncResult::SUCCESS, | 396 CryptAuthDeviceManager::SyncResult::SUCCESS, |
397 CryptAuthDeviceManager::DeviceChangeResult::CHANGED)); | 397 CryptAuthDeviceManager::DeviceChangeResult::CHANGED)); |
398 | 398 |
399 success_callback_.Run(get_my_devices_response_); | 399 success_callback_.Run(get_my_devices_response_); |
400 EXPECT_EQ(clock_->Now(), device_manager_->GetLastSyncTime()); | 400 EXPECT_EQ(clock_->Now(), device_manager_->GetLastSyncTime()); |
401 | 401 |
402 ExpectUnlockKeysAndPrefAreEqual(std::vector<cryptauth::ExternalDeviceInfo>( | 402 ExpectUnlockKeysAndPrefAreEqual(std::vector<cryptauth::ExternalDeviceInfo>( |
403 1, get_my_devices_response_.devices(0)), | 403 1, get_my_devices_response_.devices(0)), |
404 device_manager_->unlock_keys(), | 404 device_manager_->unlock_keys(), |
405 pref_service_); | 405 pref_service_); |
406 } | 406 } |
407 | 407 |
408 TEST_F(ProximityAuthCryptAuthDeviceManagerTest, ForceSync) { | 408 TEST_F(CryptAuthDeviceManagerTest, ForceSync) { |
409 device_manager_->Start(); | 409 device_manager_->Start(); |
410 | 410 |
411 EXPECT_CALL(*sync_scheduler(), ForceSync()); | 411 EXPECT_CALL(*sync_scheduler(), ForceSync()); |
412 device_manager_->ForceSyncNow(cryptauth::INVOCATION_REASON_MANUAL); | 412 device_manager_->ForceSyncNow(cryptauth::INVOCATION_REASON_MANUAL); |
413 | 413 |
414 FireSchedulerForSync(cryptauth::INVOCATION_REASON_MANUAL); | 414 FireSchedulerForSync(cryptauth::INVOCATION_REASON_MANUAL); |
415 | 415 |
416 clock_->SetNow(base::Time::FromDoubleT(kLaterTimeNowSeconds)); | 416 clock_->SetNow(base::Time::FromDoubleT(kLaterTimeNowSeconds)); |
417 EXPECT_CALL(*this, OnSyncFinishedProxy( | 417 EXPECT_CALL(*this, OnSyncFinishedProxy( |
418 CryptAuthDeviceManager::SyncResult::SUCCESS, | 418 CryptAuthDeviceManager::SyncResult::SUCCESS, |
419 CryptAuthDeviceManager::DeviceChangeResult::CHANGED)); | 419 CryptAuthDeviceManager::DeviceChangeResult::CHANGED)); |
420 success_callback_.Run(get_my_devices_response_); | 420 success_callback_.Run(get_my_devices_response_); |
421 EXPECT_EQ(clock_->Now(), device_manager_->GetLastSyncTime()); | 421 EXPECT_EQ(clock_->Now(), device_manager_->GetLastSyncTime()); |
422 | 422 |
423 ExpectUnlockKeysAndPrefAreEqual(std::vector<cryptauth::ExternalDeviceInfo>( | 423 ExpectUnlockKeysAndPrefAreEqual(std::vector<cryptauth::ExternalDeviceInfo>( |
424 1, get_my_devices_response_.devices(0)), | 424 1, get_my_devices_response_.devices(0)), |
425 device_manager_->unlock_keys(), | 425 device_manager_->unlock_keys(), |
426 pref_service_); | 426 pref_service_); |
427 } | 427 } |
428 | 428 |
429 TEST_F(ProximityAuthCryptAuthDeviceManagerTest, ForceSyncFailsThenSucceeds) { | 429 TEST_F(CryptAuthDeviceManagerTest, ForceSyncFailsThenSucceeds) { |
430 device_manager_->Start(); | 430 device_manager_->Start(); |
431 EXPECT_FALSE(pref_service_.GetBoolean( | 431 EXPECT_FALSE(pref_service_.GetBoolean( |
432 prefs::kCryptAuthDeviceSyncIsRecoveringFromFailure)); | 432 prefs::kCryptAuthDeviceSyncIsRecoveringFromFailure)); |
433 base::Time old_sync_time = device_manager_->GetLastSyncTime(); | 433 base::Time old_sync_time = device_manager_->GetLastSyncTime(); |
434 | 434 |
435 // The first force sync fails. | 435 // The first force sync fails. |
436 EXPECT_CALL(*sync_scheduler(), ForceSync()); | 436 EXPECT_CALL(*sync_scheduler(), ForceSync()); |
437 device_manager_->ForceSyncNow(cryptauth::INVOCATION_REASON_MANUAL); | 437 device_manager_->ForceSyncNow(cryptauth::INVOCATION_REASON_MANUAL); |
438 FireSchedulerForSync(cryptauth::INVOCATION_REASON_MANUAL); | 438 FireSchedulerForSync(cryptauth::INVOCATION_REASON_MANUAL); |
439 clock_->SetNow(base::Time::FromDoubleT(kLaterTimeNowSeconds)); | 439 clock_->SetNow(base::Time::FromDoubleT(kLaterTimeNowSeconds)); |
(...skipping 26 matching lines...) Expand all Loading... |
466 | 466 |
467 EXPECT_FLOAT_EQ( | 467 EXPECT_FLOAT_EQ( |
468 clock_->Now().ToDoubleT(), | 468 clock_->Now().ToDoubleT(), |
469 pref_service_.GetDouble(prefs::kCryptAuthDeviceSyncLastSyncTimeSeconds)); | 469 pref_service_.GetDouble(prefs::kCryptAuthDeviceSyncLastSyncTimeSeconds)); |
470 EXPECT_EQ(static_cast<int>(cryptauth::INVOCATION_REASON_UNKNOWN), | 470 EXPECT_EQ(static_cast<int>(cryptauth::INVOCATION_REASON_UNKNOWN), |
471 pref_service_.GetInteger(prefs::kCryptAuthDeviceSyncReason)); | 471 pref_service_.GetInteger(prefs::kCryptAuthDeviceSyncReason)); |
472 EXPECT_FALSE(pref_service_.GetBoolean( | 472 EXPECT_FALSE(pref_service_.GetBoolean( |
473 prefs::kCryptAuthDeviceSyncIsRecoveringFromFailure)); | 473 prefs::kCryptAuthDeviceSyncIsRecoveringFromFailure)); |
474 } | 474 } |
475 | 475 |
476 TEST_F(ProximityAuthCryptAuthDeviceManagerTest, PeriodicSyncFailsThenSucceeds) { | 476 TEST_F(CryptAuthDeviceManagerTest, PeriodicSyncFailsThenSucceeds) { |
477 device_manager_->Start(); | 477 device_manager_->Start(); |
478 base::Time old_sync_time = device_manager_->GetLastSyncTime(); | 478 base::Time old_sync_time = device_manager_->GetLastSyncTime(); |
479 | 479 |
480 // The first periodic sync fails. | 480 // The first periodic sync fails. |
481 FireSchedulerForSync(cryptauth::INVOCATION_REASON_PERIODIC); | 481 FireSchedulerForSync(cryptauth::INVOCATION_REASON_PERIODIC); |
482 clock_->SetNow(base::Time::FromDoubleT(kLaterTimeNowSeconds)); | 482 clock_->SetNow(base::Time::FromDoubleT(kLaterTimeNowSeconds)); |
483 EXPECT_CALL(*this, | 483 EXPECT_CALL(*this, |
484 OnSyncFinishedProxy( | 484 OnSyncFinishedProxy( |
485 CryptAuthDeviceManager::SyncResult::FAILURE, | 485 CryptAuthDeviceManager::SyncResult::FAILURE, |
486 CryptAuthDeviceManager::DeviceChangeResult::UNCHANGED)); | 486 CryptAuthDeviceManager::DeviceChangeResult::UNCHANGED)); |
(...skipping 18 matching lines...) Expand all Loading... |
505 device_manager_->unlock_keys(), | 505 device_manager_->unlock_keys(), |
506 pref_service_); | 506 pref_service_); |
507 | 507 |
508 EXPECT_FLOAT_EQ( | 508 EXPECT_FLOAT_EQ( |
509 clock_->Now().ToDoubleT(), | 509 clock_->Now().ToDoubleT(), |
510 pref_service_.GetDouble(prefs::kCryptAuthDeviceSyncLastSyncTimeSeconds)); | 510 pref_service_.GetDouble(prefs::kCryptAuthDeviceSyncLastSyncTimeSeconds)); |
511 EXPECT_FALSE(pref_service_.GetBoolean( | 511 EXPECT_FALSE(pref_service_.GetBoolean( |
512 prefs::kCryptAuthDeviceSyncIsRecoveringFromFailure)); | 512 prefs::kCryptAuthDeviceSyncIsRecoveringFromFailure)); |
513 } | 513 } |
514 | 514 |
515 TEST_F(ProximityAuthCryptAuthDeviceManagerTest, SyncSameDevice) { | 515 TEST_F(CryptAuthDeviceManagerTest, SyncSameDevice) { |
516 device_manager_->Start(); | 516 device_manager_->Start(); |
517 auto original_unlock_keys = device_manager_->unlock_keys(); | 517 auto original_unlock_keys = device_manager_->unlock_keys(); |
518 | 518 |
519 // Sync new devices. | 519 // Sync new devices. |
520 FireSchedulerForSync(cryptauth::INVOCATION_REASON_PERIODIC); | 520 FireSchedulerForSync(cryptauth::INVOCATION_REASON_PERIODIC); |
521 ASSERT_FALSE(success_callback_.is_null()); | 521 ASSERT_FALSE(success_callback_.is_null()); |
522 EXPECT_CALL(*this, | 522 EXPECT_CALL(*this, |
523 OnSyncFinishedProxy( | 523 OnSyncFinishedProxy( |
524 CryptAuthDeviceManager::SyncResult::SUCCESS, | 524 CryptAuthDeviceManager::SyncResult::SUCCESS, |
525 CryptAuthDeviceManager::DeviceChangeResult::UNCHANGED)); | 525 CryptAuthDeviceManager::DeviceChangeResult::UNCHANGED)); |
526 | 526 |
527 // Sync the same device. | 527 // Sync the same device. |
528 cryptauth::ExternalDeviceInfo synced_unlock_key; | 528 cryptauth::ExternalDeviceInfo synced_unlock_key; |
529 synced_unlock_key.set_public_key(kStoredPublicKey); | 529 synced_unlock_key.set_public_key(kStoredPublicKey); |
530 synced_unlock_key.set_friendly_device_name(kStoredDeviceName); | 530 synced_unlock_key.set_friendly_device_name(kStoredDeviceName); |
531 synced_unlock_key.set_bluetooth_address(kStoredBluetoothAddress); | 531 synced_unlock_key.set_bluetooth_address(kStoredBluetoothAddress); |
532 synced_unlock_key.set_unlock_key(true); | 532 synced_unlock_key.set_unlock_key(true); |
533 synced_unlock_key.set_unlockable(false); | 533 synced_unlock_key.set_unlockable(false); |
534 cryptauth::GetMyDevicesResponse get_my_devices_response; | 534 cryptauth::GetMyDevicesResponse get_my_devices_response; |
535 get_my_devices_response.add_devices()->CopyFrom(synced_unlock_key); | 535 get_my_devices_response.add_devices()->CopyFrom(synced_unlock_key); |
536 success_callback_.Run(get_my_devices_response); | 536 success_callback_.Run(get_my_devices_response); |
537 | 537 |
538 // Check that unlock keys are still the same after sync. | 538 // Check that unlock keys are still the same after sync. |
539 ExpectUnlockKeysAndPrefAreEqual( | 539 ExpectUnlockKeysAndPrefAreEqual( |
540 original_unlock_keys, device_manager_->unlock_keys(), pref_service_); | 540 original_unlock_keys, device_manager_->unlock_keys(), pref_service_); |
541 } | 541 } |
542 | 542 |
543 TEST_F(ProximityAuthCryptAuthDeviceManagerTest, SyncEmptyDeviceList) { | 543 TEST_F(CryptAuthDeviceManagerTest, SyncEmptyDeviceList) { |
544 cryptauth::GetMyDevicesResponse empty_response; | 544 cryptauth::GetMyDevicesResponse empty_response; |
545 | 545 |
546 device_manager_->Start(); | 546 device_manager_->Start(); |
547 EXPECT_EQ(1u, device_manager_->unlock_keys().size()); | 547 EXPECT_EQ(1u, device_manager_->unlock_keys().size()); |
548 | 548 |
549 FireSchedulerForSync(cryptauth::INVOCATION_REASON_PERIODIC); | 549 FireSchedulerForSync(cryptauth::INVOCATION_REASON_PERIODIC); |
550 ASSERT_FALSE(success_callback_.is_null()); | 550 ASSERT_FALSE(success_callback_.is_null()); |
551 EXPECT_CALL(*this, OnSyncFinishedProxy( | 551 EXPECT_CALL(*this, OnSyncFinishedProxy( |
552 CryptAuthDeviceManager::SyncResult::SUCCESS, | 552 CryptAuthDeviceManager::SyncResult::SUCCESS, |
553 CryptAuthDeviceManager::DeviceChangeResult::CHANGED)); | 553 CryptAuthDeviceManager::DeviceChangeResult::CHANGED)); |
554 success_callback_.Run(empty_response); | 554 success_callback_.Run(empty_response); |
555 | 555 |
556 ExpectUnlockKeysAndPrefAreEqual(std::vector<cryptauth::ExternalDeviceInfo>(), | 556 ExpectUnlockKeysAndPrefAreEqual(std::vector<cryptauth::ExternalDeviceInfo>(), |
557 device_manager_->unlock_keys(), | 557 device_manager_->unlock_keys(), |
558 pref_service_); | 558 pref_service_); |
559 } | 559 } |
560 | 560 |
561 TEST_F(ProximityAuthCryptAuthDeviceManagerTest, SyncTwoUnlockKeys) { | 561 TEST_F(CryptAuthDeviceManagerTest, SyncTwoUnlockKeys) { |
562 cryptauth::GetMyDevicesResponse response(get_my_devices_response_); | 562 cryptauth::GetMyDevicesResponse response(get_my_devices_response_); |
563 cryptauth::ExternalDeviceInfo unlock_key2; | 563 cryptauth::ExternalDeviceInfo unlock_key2; |
564 unlock_key2.set_public_key("new public key"); | 564 unlock_key2.set_public_key("new public key"); |
565 unlock_key2.set_friendly_device_name("new device name"); | 565 unlock_key2.set_friendly_device_name("new device name"); |
566 unlock_key2.set_bluetooth_address("aa:bb:cc:dd:ee:ff"); | 566 unlock_key2.set_bluetooth_address("aa:bb:cc:dd:ee:ff"); |
567 unlock_key2.set_unlock_key(true); | 567 unlock_key2.set_unlock_key(true); |
568 response.add_devices()->CopyFrom(unlock_key2); | 568 response.add_devices()->CopyFrom(unlock_key2); |
569 | 569 |
570 std::vector<cryptauth::ExternalDeviceInfo> expected_unlock_keys; | 570 std::vector<cryptauth::ExternalDeviceInfo> expected_unlock_keys; |
571 expected_unlock_keys.push_back(get_my_devices_response_.devices(0)); | 571 expected_unlock_keys.push_back(get_my_devices_response_.devices(0)); |
572 expected_unlock_keys.push_back(unlock_key2); | 572 expected_unlock_keys.push_back(unlock_key2); |
573 | 573 |
574 device_manager_->Start(); | 574 device_manager_->Start(); |
575 EXPECT_EQ(1u, device_manager_->unlock_keys().size()); | 575 EXPECT_EQ(1u, device_manager_->unlock_keys().size()); |
576 EXPECT_EQ(1u, pref_service_.GetList(prefs::kCryptAuthDeviceSyncUnlockKeys) | 576 EXPECT_EQ(1u, pref_service_.GetList(prefs::kCryptAuthDeviceSyncUnlockKeys) |
577 ->GetSize()); | 577 ->GetSize()); |
578 | 578 |
579 FireSchedulerForSync(cryptauth::INVOCATION_REASON_PERIODIC); | 579 FireSchedulerForSync(cryptauth::INVOCATION_REASON_PERIODIC); |
580 ASSERT_FALSE(success_callback_.is_null()); | 580 ASSERT_FALSE(success_callback_.is_null()); |
581 EXPECT_CALL(*this, OnSyncFinishedProxy( | 581 EXPECT_CALL(*this, OnSyncFinishedProxy( |
582 CryptAuthDeviceManager::SyncResult::SUCCESS, | 582 CryptAuthDeviceManager::SyncResult::SUCCESS, |
583 CryptAuthDeviceManager::DeviceChangeResult::CHANGED)); | 583 CryptAuthDeviceManager::DeviceChangeResult::CHANGED)); |
584 success_callback_.Run(response); | 584 success_callback_.Run(response); |
585 | 585 |
586 ExpectUnlockKeysAndPrefAreEqual( | 586 ExpectUnlockKeysAndPrefAreEqual( |
587 expected_unlock_keys, device_manager_->unlock_keys(), pref_service_); | 587 expected_unlock_keys, device_manager_->unlock_keys(), pref_service_); |
588 } | 588 } |
589 | 589 |
590 TEST_F(ProximityAuthCryptAuthDeviceManagerTest, SyncOnGCMPushMessage) { | 590 TEST_F(CryptAuthDeviceManagerTest, SyncOnGCMPushMessage) { |
591 device_manager_->Start(); | 591 device_manager_->Start(); |
592 | 592 |
593 EXPECT_CALL(*sync_scheduler(), ForceSync()); | 593 EXPECT_CALL(*sync_scheduler(), ForceSync()); |
594 gcm_manager_.PushResyncMessage(); | 594 gcm_manager_.PushResyncMessage(); |
595 | 595 |
596 FireSchedulerForSync(cryptauth::INVOCATION_REASON_SERVER_INITIATED); | 596 FireSchedulerForSync(cryptauth::INVOCATION_REASON_SERVER_INITIATED); |
597 | 597 |
598 EXPECT_CALL(*this, OnSyncFinishedProxy( | 598 EXPECT_CALL(*this, OnSyncFinishedProxy( |
599 CryptAuthDeviceManager::SyncResult::SUCCESS, | 599 CryptAuthDeviceManager::SyncResult::SUCCESS, |
600 CryptAuthDeviceManager::DeviceChangeResult::CHANGED)); | 600 CryptAuthDeviceManager::DeviceChangeResult::CHANGED)); |
601 success_callback_.Run(get_my_devices_response_); | 601 success_callback_.Run(get_my_devices_response_); |
602 | 602 |
603 ExpectUnlockKeysAndPrefAreEqual(std::vector<cryptauth::ExternalDeviceInfo>( | 603 ExpectUnlockKeysAndPrefAreEqual(std::vector<cryptauth::ExternalDeviceInfo>( |
604 1, get_my_devices_response_.devices(0)), | 604 1, get_my_devices_response_.devices(0)), |
605 device_manager_->unlock_keys(), | 605 device_manager_->unlock_keys(), |
606 pref_service_); | 606 pref_service_); |
607 } | 607 } |
608 | 608 |
609 } // namespace proximity_auth | 609 } // namespace cryptauth |
OLD | NEW |