Index: components/proximity_auth/cryptauth/cryptauth_device_manager_unittest.cc |
diff --git a/components/proximity_auth/cryptauth/cryptauth_device_manager_unittest.cc b/components/proximity_auth/cryptauth/cryptauth_device_manager_unittest.cc |
index d5240013e7cf3c09a3d6003ddde1011f338dbfe8..907e81160c28bdf03a7fd9b7f8e99800dd61077c 100644 |
--- a/components/proximity_auth/cryptauth/cryptauth_device_manager_unittest.cc |
+++ b/components/proximity_auth/cryptauth/cryptauth_device_manager_unittest.cc |
@@ -150,7 +150,11 @@ |
: clock_(new base::SimpleTestClock()), |
client_factory_(new MockCryptAuthClientFactory( |
MockCryptAuthClientFactory::MockType::MAKE_STRICT_MOCKS)), |
- gcm_manager_("existing gcm registration id") { |
+ gcm_manager_("existing gcm registration id"), |
+ device_manager_(make_scoped_ptr(clock_), |
+ make_scoped_ptr(client_factory_), |
+ &gcm_manager_, |
+ &pref_service_) { |
client_factory_->AddObserver(this); |
} |
@@ -161,6 +165,7 @@ |
// testing::Test: |
void SetUp() override { |
clock_->SetNow(base::Time::FromDoubleT(kInitialTimeNowSeconds)); |
+ device_manager_.AddObserver(this); |
CryptAuthDeviceManager::RegisterPrefs(pref_service_.registry()); |
pref_service_.SetUserPref( |
@@ -190,11 +195,6 @@ |
update.Get()->Append(unlock_key_dictionary.Pass()); |
} |
- device_manager_.reset(new TestCryptAuthDeviceManager( |
- make_scoped_ptr(clock_), make_scoped_ptr(client_factory_), |
- &gcm_manager_, &pref_service_)); |
- device_manager_->AddObserver(this); |
- |
cryptauth::ExternalDeviceInfo unlock_key; |
unlock_key.set_public_key(kPublicKey1); |
unlock_key.set_friendly_device_name(kDeviceName1); |
@@ -215,7 +215,7 @@ |
.WillByDefault(Return(SyncScheduler::Strategy::PERIODIC_REFRESH)); |
} |
- void TearDown() override { device_manager_->RemoveObserver(this); } |
+ void TearDown() override { device_manager_.RemoveObserver(this); } |
// CryptAuthDeviceManager::Observer: |
void OnSyncStarted() override { OnSyncStartedProxy(); } |
@@ -235,10 +235,10 @@ |
void FireSchedulerForSync( |
cryptauth::InvocationReason expected_invocation_reason) { |
SyncScheduler::Delegate* delegate = |
- static_cast<SyncScheduler::Delegate*>(device_manager_.get()); |
+ static_cast<SyncScheduler::Delegate*>(&device_manager_); |
scoped_ptr<SyncScheduler::SyncRequest> sync_request = make_scoped_ptr( |
- new SyncScheduler::SyncRequest(device_manager_->GetSyncScheduler())); |
+ new SyncScheduler::SyncRequest(device_manager_.GetSyncScheduler())); |
EXPECT_CALL(*this, OnSyncStartedProxy()); |
delegate->OnSyncRequested(sync_request.Pass()); |
@@ -261,7 +261,7 @@ |
} |
MockSyncScheduler* sync_scheduler() { |
- return device_manager_->GetSyncScheduler().get(); |
+ return device_manager_.GetSyncScheduler().get(); |
} |
// Owned by |device_manager_|. |
@@ -274,7 +274,7 @@ |
FakeCryptAuthGCMManager gcm_manager_; |
- scoped_ptr<TestCryptAuthDeviceManager> device_manager_; |
+ TestCryptAuthDeviceManager device_manager_; |
cryptauth::GetMyDevicesResponse get_my_devices_response_; |
@@ -300,28 +300,28 @@ |
} |
TEST_F(ProximityAuthCryptAuthDeviceManagerTest, GetSyncState) { |
- device_manager_->Start(); |
+ device_manager_.Start(); |
ON_CALL(*sync_scheduler(), GetStrategy()) |
.WillByDefault(Return(SyncScheduler::Strategy::PERIODIC_REFRESH)); |
- EXPECT_FALSE(device_manager_->IsRecoveringFromFailure()); |
+ EXPECT_FALSE(device_manager_.IsRecoveringFromFailure()); |
ON_CALL(*sync_scheduler(), GetStrategy()) |
.WillByDefault(Return(SyncScheduler::Strategy::AGGRESSIVE_RECOVERY)); |
- EXPECT_TRUE(device_manager_->IsRecoveringFromFailure()); |
+ EXPECT_TRUE(device_manager_.IsRecoveringFromFailure()); |
base::TimeDelta time_to_next_sync = base::TimeDelta::FromMinutes(60); |
ON_CALL(*sync_scheduler(), GetTimeToNextSync()) |
.WillByDefault(Return(time_to_next_sync)); |
- EXPECT_EQ(time_to_next_sync, device_manager_->GetTimeToNextAttempt()); |
+ EXPECT_EQ(time_to_next_sync, device_manager_.GetTimeToNextAttempt()); |
ON_CALL(*sync_scheduler(), GetSyncState()) |
.WillByDefault(Return(SyncScheduler::SyncState::SYNC_IN_PROGRESS)); |
- EXPECT_TRUE(device_manager_->IsSyncInProgress()); |
+ EXPECT_TRUE(device_manager_.IsSyncInProgress()); |
ON_CALL(*sync_scheduler(), GetSyncState()) |
.WillByDefault(Return(SyncScheduler::SyncState::WAITING_FOR_REFRESH)); |
- EXPECT_FALSE(device_manager_->IsSyncInProgress()); |
+ EXPECT_FALSE(device_manager_.IsSyncInProgress()); |
} |
TEST_F(ProximityAuthCryptAuthDeviceManagerTest, InitWithDefaultPrefs) { |
@@ -352,11 +352,11 @@ |
Start(clock_->Now() - base::Time::FromDoubleT(kLastSyncTimeSeconds), |
SyncScheduler::Strategy::PERIODIC_REFRESH)); |
- device_manager_->Start(); |
+ device_manager_.Start(); |
EXPECT_EQ(base::Time::FromDoubleT(kLastSyncTimeSeconds), |
- device_manager_->GetLastSyncTime()); |
- |
- auto unlock_keys = device_manager_->unlock_keys(); |
+ device_manager_.GetLastSyncTime()); |
+ |
+ auto unlock_keys = device_manager_.unlock_keys(); |
ASSERT_EQ(1u, unlock_keys.size()); |
EXPECT_EQ(kStoredPublicKey, unlock_keys[0].public_key()); |
EXPECT_EQ(kStoredDeviceName, unlock_keys[0].friendly_device_name()); |
@@ -366,7 +366,7 @@ |
TEST_F(ProximityAuthCryptAuthDeviceManagerTest, SyncSucceedsForFirstTime) { |
pref_service_.ClearPref(prefs::kCryptAuthDeviceSyncLastSyncTimeSeconds); |
- device_manager_->Start(); |
+ device_manager_.Start(); |
FireSchedulerForSync(cryptauth::INVOCATION_REASON_INITIALIZATION); |
ASSERT_FALSE(success_callback_.is_null()); |
@@ -377,19 +377,18 @@ |
CryptAuthDeviceManager::DeviceChangeResult::CHANGED)); |
success_callback_.Run(get_my_devices_response_); |
- EXPECT_EQ(clock_->Now(), device_manager_->GetLastSyncTime()); |
+ EXPECT_EQ(clock_->Now(), device_manager_.GetLastSyncTime()); |
ExpectUnlockKeysAndPrefAreEqual(std::vector<cryptauth::ExternalDeviceInfo>( |
1, get_my_devices_response_.devices(0)), |
- device_manager_->unlock_keys(), |
- pref_service_); |
+ device_manager_.unlock_keys(), pref_service_); |
} |
TEST_F(ProximityAuthCryptAuthDeviceManagerTest, ForceSync) { |
- device_manager_->Start(); |
+ device_manager_.Start(); |
EXPECT_CALL(*sync_scheduler(), ForceSync()); |
- device_manager_->ForceSyncNow(cryptauth::INVOCATION_REASON_MANUAL); |
+ device_manager_.ForceSyncNow(cryptauth::INVOCATION_REASON_MANUAL); |
FireSchedulerForSync(cryptauth::INVOCATION_REASON_MANUAL); |
@@ -398,23 +397,22 @@ |
CryptAuthDeviceManager::SyncResult::SUCCESS, |
CryptAuthDeviceManager::DeviceChangeResult::CHANGED)); |
success_callback_.Run(get_my_devices_response_); |
- EXPECT_EQ(clock_->Now(), device_manager_->GetLastSyncTime()); |
+ EXPECT_EQ(clock_->Now(), device_manager_.GetLastSyncTime()); |
ExpectUnlockKeysAndPrefAreEqual(std::vector<cryptauth::ExternalDeviceInfo>( |
1, get_my_devices_response_.devices(0)), |
- device_manager_->unlock_keys(), |
- pref_service_); |
+ device_manager_.unlock_keys(), pref_service_); |
} |
TEST_F(ProximityAuthCryptAuthDeviceManagerTest, ForceSyncFailsThenSucceeds) { |
- device_manager_->Start(); |
+ device_manager_.Start(); |
EXPECT_FALSE(pref_service_.GetBoolean( |
prefs::kCryptAuthDeviceSyncIsRecoveringFromFailure)); |
- base::Time old_sync_time = device_manager_->GetLastSyncTime(); |
+ base::Time old_sync_time = device_manager_.GetLastSyncTime(); |
// The first force sync fails. |
EXPECT_CALL(*sync_scheduler(), ForceSync()); |
- device_manager_->ForceSyncNow(cryptauth::INVOCATION_REASON_MANUAL); |
+ device_manager_.ForceSyncNow(cryptauth::INVOCATION_REASON_MANUAL); |
FireSchedulerForSync(cryptauth::INVOCATION_REASON_MANUAL); |
clock_->SetNow(base::Time::FromDoubleT(kLaterTimeNowSeconds)); |
EXPECT_CALL(*this, |
@@ -422,7 +420,7 @@ |
CryptAuthDeviceManager::SyncResult::FAILURE, |
CryptAuthDeviceManager::DeviceChangeResult::UNCHANGED)); |
error_callback_.Run("404"); |
- EXPECT_EQ(old_sync_time, device_manager_->GetLastSyncTime()); |
+ EXPECT_EQ(old_sync_time, device_manager_.GetLastSyncTime()); |
EXPECT_TRUE(pref_service_.GetBoolean( |
prefs::kCryptAuthDeviceSyncIsRecoveringFromFailure)); |
EXPECT_EQ(static_cast<int>(cryptauth::INVOCATION_REASON_MANUAL), |
@@ -437,12 +435,11 @@ |
CryptAuthDeviceManager::SyncResult::SUCCESS, |
CryptAuthDeviceManager::DeviceChangeResult::CHANGED)); |
success_callback_.Run(get_my_devices_response_); |
- EXPECT_EQ(clock_->Now(), device_manager_->GetLastSyncTime()); |
+ EXPECT_EQ(clock_->Now(), device_manager_.GetLastSyncTime()); |
ExpectUnlockKeysAndPrefAreEqual(std::vector<cryptauth::ExternalDeviceInfo>( |
1, get_my_devices_response_.devices(0)), |
- device_manager_->unlock_keys(), |
- pref_service_); |
+ device_manager_.unlock_keys(), pref_service_); |
EXPECT_FLOAT_EQ( |
clock_->Now().ToDoubleT(), |
@@ -454,8 +451,8 @@ |
} |
TEST_F(ProximityAuthCryptAuthDeviceManagerTest, PeriodicSyncFailsThenSucceeds) { |
- device_manager_->Start(); |
- base::Time old_sync_time = device_manager_->GetLastSyncTime(); |
+ device_manager_.Start(); |
+ base::Time old_sync_time = device_manager_.GetLastSyncTime(); |
// The first periodic sync fails. |
FireSchedulerForSync(cryptauth::INVOCATION_REASON_PERIODIC); |
@@ -465,7 +462,7 @@ |
CryptAuthDeviceManager::SyncResult::FAILURE, |
CryptAuthDeviceManager::DeviceChangeResult::UNCHANGED)); |
error_callback_.Run("401"); |
- EXPECT_EQ(old_sync_time, device_manager_->GetLastSyncTime()); |
+ EXPECT_EQ(old_sync_time, device_manager_.GetLastSyncTime()); |
EXPECT_TRUE(pref_service_.GetBoolean( |
prefs::kCryptAuthDeviceSyncIsRecoveringFromFailure)); |
@@ -478,12 +475,11 @@ |
CryptAuthDeviceManager::SyncResult::SUCCESS, |
CryptAuthDeviceManager::DeviceChangeResult::CHANGED)); |
success_callback_.Run(get_my_devices_response_); |
- EXPECT_EQ(clock_->Now(), device_manager_->GetLastSyncTime()); |
+ EXPECT_EQ(clock_->Now(), device_manager_.GetLastSyncTime()); |
ExpectUnlockKeysAndPrefAreEqual(std::vector<cryptauth::ExternalDeviceInfo>( |
1, get_my_devices_response_.devices(0)), |
- device_manager_->unlock_keys(), |
- pref_service_); |
+ device_manager_.unlock_keys(), pref_service_); |
EXPECT_FLOAT_EQ( |
clock_->Now().ToDoubleT(), |
@@ -493,8 +489,32 @@ |
} |
TEST_F(ProximityAuthCryptAuthDeviceManagerTest, SyncSameDevice) { |
- device_manager_->Start(); |
- auto original_unlock_keys = device_manager_->unlock_keys(); |
+ // Set the same unlock key in the user prefs as the one that would be synced. |
+ { |
+ scoped_ptr<base::DictionaryValue> unlock_key_dictionary( |
+ new base::DictionaryValue()); |
+ std::string public_key_b64, device_name_b64, bluetooth_address_b64; |
+ Base64UrlEncode(kPublicKey1, &public_key_b64); |
+ Base64UrlEncode(kDeviceName1, &device_name_b64); |
+ Base64UrlEncode(kBluetoothAddress1, &bluetooth_address_b64); |
+ unlock_key_dictionary->SetString("public_key", public_key_b64); |
+ unlock_key_dictionary->SetString("device_name", device_name_b64); |
+ unlock_key_dictionary->SetString("bluetooth_address", |
+ bluetooth_address_b64); |
+ |
+ ListPrefUpdate update(&pref_service_, |
+ prefs::kCryptAuthDeviceSyncUnlockKeys); |
+ update.Get()->Clear(); |
+ update.Get()->Append(unlock_key_dictionary.Pass()); |
+ } |
+ |
+ // Check unlock keys before sync. |
+ device_manager_.Start(); |
+ auto original_unlock_keys = device_manager_.unlock_keys(); |
+ ASSERT_EQ(1u, original_unlock_keys.size()); |
+ EXPECT_EQ(kPublicKey1, original_unlock_keys[0].public_key()); |
+ EXPECT_EQ(kDeviceName1, original_unlock_keys[0].friendly_device_name()); |
+ EXPECT_EQ(kBluetoothAddress1, original_unlock_keys[0].bluetooth_address()); |
// Sync new devices. |
FireSchedulerForSync(cryptauth::INVOCATION_REASON_PERIODIC); |
@@ -503,28 +523,18 @@ |
OnSyncFinishedProxy( |
CryptAuthDeviceManager::SyncResult::SUCCESS, |
CryptAuthDeviceManager::DeviceChangeResult::UNCHANGED)); |
- |
- // Sync the same device. |
- cryptauth::ExternalDeviceInfo synced_unlock_key; |
- synced_unlock_key.set_public_key(kStoredPublicKey); |
- synced_unlock_key.set_friendly_device_name(kStoredDeviceName); |
- synced_unlock_key.set_bluetooth_address(kStoredBluetoothAddress); |
- synced_unlock_key.set_unlock_key(true); |
- synced_unlock_key.set_unlockable(false); |
- cryptauth::GetMyDevicesResponse get_my_devices_response; |
- get_my_devices_response.add_devices()->CopyFrom(synced_unlock_key); |
- success_callback_.Run(get_my_devices_response); |
+ success_callback_.Run(get_my_devices_response_); |
// Check that unlock keys are still the same after sync. |
- ExpectUnlockKeysAndPrefAreEqual( |
- original_unlock_keys, device_manager_->unlock_keys(), pref_service_); |
+ ExpectUnlockKeysAndPrefAreEqual(original_unlock_keys, |
+ device_manager_.unlock_keys(), pref_service_); |
} |
TEST_F(ProximityAuthCryptAuthDeviceManagerTest, SyncEmptyDeviceList) { |
cryptauth::GetMyDevicesResponse empty_response; |
- device_manager_->Start(); |
- EXPECT_EQ(1u, device_manager_->unlock_keys().size()); |
+ device_manager_.Start(); |
+ EXPECT_EQ(1u, device_manager_.unlock_keys().size()); |
FireSchedulerForSync(cryptauth::INVOCATION_REASON_PERIODIC); |
ASSERT_FALSE(success_callback_.is_null()); |
@@ -534,8 +544,7 @@ |
success_callback_.Run(empty_response); |
ExpectUnlockKeysAndPrefAreEqual(std::vector<cryptauth::ExternalDeviceInfo>(), |
- device_manager_->unlock_keys(), |
- pref_service_); |
+ device_manager_.unlock_keys(), pref_service_); |
} |
TEST_F(ProximityAuthCryptAuthDeviceManagerTest, SyncTwoUnlockKeys) { |
@@ -551,8 +560,8 @@ |
expected_unlock_keys.push_back(get_my_devices_response_.devices(0)); |
expected_unlock_keys.push_back(unlock_key2); |
- device_manager_->Start(); |
- EXPECT_EQ(1u, device_manager_->unlock_keys().size()); |
+ device_manager_.Start(); |
+ EXPECT_EQ(1u, device_manager_.unlock_keys().size()); |
EXPECT_EQ(1u, pref_service_.GetList(prefs::kCryptAuthDeviceSyncUnlockKeys) |
->GetSize()); |
@@ -563,12 +572,12 @@ |
CryptAuthDeviceManager::DeviceChangeResult::CHANGED)); |
success_callback_.Run(response); |
- ExpectUnlockKeysAndPrefAreEqual( |
- expected_unlock_keys, device_manager_->unlock_keys(), pref_service_); |
+ ExpectUnlockKeysAndPrefAreEqual(expected_unlock_keys, |
+ device_manager_.unlock_keys(), pref_service_); |
} |
TEST_F(ProximityAuthCryptAuthDeviceManagerTest, SyncOnGCMPushMessage) { |
- device_manager_->Start(); |
+ device_manager_.Start(); |
EXPECT_CALL(*sync_scheduler(), ForceSync()); |
gcm_manager_.PushResyncMessage(); |
@@ -582,8 +591,7 @@ |
ExpectUnlockKeysAndPrefAreEqual(std::vector<cryptauth::ExternalDeviceInfo>( |
1, get_my_devices_response_.devices(0)), |
- device_manager_->unlock_keys(), |
- pref_service_); |
+ device_manager_.unlock_keys(), pref_service_); |
} |
} // namespace proximity_auth |