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