Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(113)

Side by Side Diff: components/proximity_auth/cryptauth/cryptauth_device_manager_unittest.cc

Issue 1377313002: Revert of Hook up ProximityAuthSystem in EasyUnlockService. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@bluetooth_connection
Patch Set: Created 5 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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/proximity_auth/cryptauth/cryptauth_device_manager.h"
6 6
7 #include "base/memory/weak_ptr.h" 7 #include "base/memory/weak_ptr.h"
8 #include "base/prefs/scoped_user_pref_update.h" 8 #include "base/prefs/scoped_user_pref_update.h"
9 #include "base/prefs/testing_pref_service.h" 9 #include "base/prefs/testing_pref_service.h"
10 #include "base/strings/stringprintf.h" 10 #include "base/strings/stringprintf.h"
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 143
144 class ProximityAuthCryptAuthDeviceManagerTest 144 class ProximityAuthCryptAuthDeviceManagerTest
145 : public testing::Test, 145 : public testing::Test,
146 public CryptAuthDeviceManager::Observer, 146 public CryptAuthDeviceManager::Observer,
147 public MockCryptAuthClientFactory::Observer { 147 public MockCryptAuthClientFactory::Observer {
148 protected: 148 protected:
149 ProximityAuthCryptAuthDeviceManagerTest() 149 ProximityAuthCryptAuthDeviceManagerTest()
150 : clock_(new base::SimpleTestClock()), 150 : clock_(new base::SimpleTestClock()),
151 client_factory_(new MockCryptAuthClientFactory( 151 client_factory_(new MockCryptAuthClientFactory(
152 MockCryptAuthClientFactory::MockType::MAKE_STRICT_MOCKS)), 152 MockCryptAuthClientFactory::MockType::MAKE_STRICT_MOCKS)),
153 gcm_manager_("existing gcm registration id") { 153 gcm_manager_("existing gcm registration id"),
154 device_manager_(make_scoped_ptr(clock_),
155 make_scoped_ptr(client_factory_),
156 &gcm_manager_,
157 &pref_service_) {
154 client_factory_->AddObserver(this); 158 client_factory_->AddObserver(this);
155 } 159 }
156 160
157 ~ProximityAuthCryptAuthDeviceManagerTest() { 161 ~ProximityAuthCryptAuthDeviceManagerTest() {
158 client_factory_->RemoveObserver(this); 162 client_factory_->RemoveObserver(this);
159 } 163 }
160 164
161 // testing::Test: 165 // testing::Test:
162 void SetUp() override { 166 void SetUp() override {
163 clock_->SetNow(base::Time::FromDoubleT(kInitialTimeNowSeconds)); 167 clock_->SetNow(base::Time::FromDoubleT(kInitialTimeNowSeconds));
168 device_manager_.AddObserver(this);
164 169
165 CryptAuthDeviceManager::RegisterPrefs(pref_service_.registry()); 170 CryptAuthDeviceManager::RegisterPrefs(pref_service_.registry());
166 pref_service_.SetUserPref( 171 pref_service_.SetUserPref(
167 prefs::kCryptAuthDeviceSyncIsRecoveringFromFailure, 172 prefs::kCryptAuthDeviceSyncIsRecoveringFromFailure,
168 new base::FundamentalValue(false)); 173 new base::FundamentalValue(false));
169 pref_service_.SetUserPref(prefs::kCryptAuthDeviceSyncLastSyncTimeSeconds, 174 pref_service_.SetUserPref(prefs::kCryptAuthDeviceSyncLastSyncTimeSeconds,
170 new base::FundamentalValue(kLastSyncTimeSeconds)); 175 new base::FundamentalValue(kLastSyncTimeSeconds));
171 pref_service_.SetUserPref( 176 pref_service_.SetUserPref(
172 prefs::kCryptAuthDeviceSyncReason, 177 prefs::kCryptAuthDeviceSyncReason,
173 new base::FundamentalValue(cryptauth::INVOCATION_REASON_UNKNOWN)); 178 new base::FundamentalValue(cryptauth::INVOCATION_REASON_UNKNOWN));
174 179
175 scoped_ptr<base::DictionaryValue> unlock_key_dictionary( 180 scoped_ptr<base::DictionaryValue> unlock_key_dictionary(
176 new base::DictionaryValue()); 181 new base::DictionaryValue());
177 182
178 std::string public_key_b64, device_name_b64, bluetooth_address_b64; 183 std::string public_key_b64, device_name_b64, bluetooth_address_b64;
179 Base64UrlEncode(kStoredPublicKey, &public_key_b64); 184 Base64UrlEncode(kStoredPublicKey, &public_key_b64);
180 Base64UrlEncode(kStoredDeviceName, &device_name_b64); 185 Base64UrlEncode(kStoredDeviceName, &device_name_b64);
181 Base64UrlEncode(kStoredBluetoothAddress, &bluetooth_address_b64); 186 Base64UrlEncode(kStoredBluetoothAddress, &bluetooth_address_b64);
182 187
183 unlock_key_dictionary->SetString("public_key", public_key_b64); 188 unlock_key_dictionary->SetString("public_key", public_key_b64);
184 unlock_key_dictionary->SetString("device_name", device_name_b64); 189 unlock_key_dictionary->SetString("device_name", device_name_b64);
185 unlock_key_dictionary->SetString("bluetooth_address", 190 unlock_key_dictionary->SetString("bluetooth_address",
186 bluetooth_address_b64); 191 bluetooth_address_b64);
187 { 192 {
188 ListPrefUpdate update(&pref_service_, 193 ListPrefUpdate update(&pref_service_,
189 prefs::kCryptAuthDeviceSyncUnlockKeys); 194 prefs::kCryptAuthDeviceSyncUnlockKeys);
190 update.Get()->Append(unlock_key_dictionary.Pass()); 195 update.Get()->Append(unlock_key_dictionary.Pass());
191 } 196 }
192 197
193 device_manager_.reset(new TestCryptAuthDeviceManager(
194 make_scoped_ptr(clock_), make_scoped_ptr(client_factory_),
195 &gcm_manager_, &pref_service_));
196 device_manager_->AddObserver(this);
197
198 cryptauth::ExternalDeviceInfo unlock_key; 198 cryptauth::ExternalDeviceInfo unlock_key;
199 unlock_key.set_public_key(kPublicKey1); 199 unlock_key.set_public_key(kPublicKey1);
200 unlock_key.set_friendly_device_name(kDeviceName1); 200 unlock_key.set_friendly_device_name(kDeviceName1);
201 unlock_key.set_bluetooth_address(kBluetoothAddress1); 201 unlock_key.set_bluetooth_address(kBluetoothAddress1);
202 unlock_key.set_unlock_key(true); 202 unlock_key.set_unlock_key(true);
203 unlock_key.set_unlockable(false); 203 unlock_key.set_unlockable(false);
204 204
205 cryptauth::ExternalDeviceInfo unlockable_device; 205 cryptauth::ExternalDeviceInfo unlockable_device;
206 unlockable_device.set_public_key(kPublicKey2); 206 unlockable_device.set_public_key(kPublicKey2);
207 unlockable_device.set_friendly_device_name(kDeviceName2); 207 unlockable_device.set_friendly_device_name(kDeviceName2);
208 unlockable_device.set_unlock_key(false); 208 unlockable_device.set_unlock_key(false);
209 unlockable_device.set_unlockable(true); 209 unlockable_device.set_unlockable(true);
210 210
211 get_my_devices_response_.add_devices()->CopyFrom(unlock_key); 211 get_my_devices_response_.add_devices()->CopyFrom(unlock_key);
212 get_my_devices_response_.add_devices()->CopyFrom(unlockable_device); 212 get_my_devices_response_.add_devices()->CopyFrom(unlockable_device);
213 213
214 ON_CALL(*sync_scheduler(), GetStrategy()) 214 ON_CALL(*sync_scheduler(), GetStrategy())
215 .WillByDefault(Return(SyncScheduler::Strategy::PERIODIC_REFRESH)); 215 .WillByDefault(Return(SyncScheduler::Strategy::PERIODIC_REFRESH));
216 } 216 }
217 217
218 void TearDown() override { device_manager_->RemoveObserver(this); } 218 void TearDown() override { device_manager_.RemoveObserver(this); }
219 219
220 // CryptAuthDeviceManager::Observer: 220 // CryptAuthDeviceManager::Observer:
221 void OnSyncStarted() override { OnSyncStartedProxy(); } 221 void OnSyncStarted() override { OnSyncStartedProxy(); }
222 222
223 void OnSyncFinished(CryptAuthDeviceManager::SyncResult sync_result, 223 void OnSyncFinished(CryptAuthDeviceManager::SyncResult sync_result,
224 CryptAuthDeviceManager::DeviceChangeResult 224 CryptAuthDeviceManager::DeviceChangeResult
225 device_change_result) override { 225 device_change_result) override {
226 OnSyncFinishedProxy(sync_result, device_change_result); 226 OnSyncFinishedProxy(sync_result, device_change_result);
227 } 227 }
228 228
229 MOCK_METHOD0(OnSyncStartedProxy, void()); 229 MOCK_METHOD0(OnSyncStartedProxy, void());
230 MOCK_METHOD2(OnSyncFinishedProxy, 230 MOCK_METHOD2(OnSyncFinishedProxy,
231 void(CryptAuthDeviceManager::SyncResult, 231 void(CryptAuthDeviceManager::SyncResult,
232 CryptAuthDeviceManager::DeviceChangeResult)); 232 CryptAuthDeviceManager::DeviceChangeResult));
233 233
234 // Simulates firing the SyncScheduler to trigger a device sync attempt. 234 // Simulates firing the SyncScheduler to trigger a device sync attempt.
235 void FireSchedulerForSync( 235 void FireSchedulerForSync(
236 cryptauth::InvocationReason expected_invocation_reason) { 236 cryptauth::InvocationReason expected_invocation_reason) {
237 SyncScheduler::Delegate* delegate = 237 SyncScheduler::Delegate* delegate =
238 static_cast<SyncScheduler::Delegate*>(device_manager_.get()); 238 static_cast<SyncScheduler::Delegate*>(&device_manager_);
239 239
240 scoped_ptr<SyncScheduler::SyncRequest> sync_request = make_scoped_ptr( 240 scoped_ptr<SyncScheduler::SyncRequest> sync_request = make_scoped_ptr(
241 new SyncScheduler::SyncRequest(device_manager_->GetSyncScheduler())); 241 new SyncScheduler::SyncRequest(device_manager_.GetSyncScheduler()));
242 EXPECT_CALL(*this, OnSyncStartedProxy()); 242 EXPECT_CALL(*this, OnSyncStartedProxy());
243 delegate->OnSyncRequested(sync_request.Pass()); 243 delegate->OnSyncRequested(sync_request.Pass());
244 244
245 EXPECT_EQ(expected_invocation_reason, 245 EXPECT_EQ(expected_invocation_reason,
246 get_my_devices_request_.invocation_reason()); 246 get_my_devices_request_.invocation_reason());
247 247
248 // The allow_stale_read flag is set if the sync was not forced. 248 // The allow_stale_read flag is set if the sync was not forced.
249 bool allow_stale_read = 249 bool allow_stale_read =
250 pref_service_.GetInteger(prefs::kCryptAuthDeviceSyncReason) != 250 pref_service_.GetInteger(prefs::kCryptAuthDeviceSyncReason) !=
251 cryptauth::INVOCATION_REASON_UNKNOWN; 251 cryptauth::INVOCATION_REASON_UNKNOWN;
252 EXPECT_EQ(allow_stale_read, get_my_devices_request_.allow_stale_read()); 252 EXPECT_EQ(allow_stale_read, get_my_devices_request_.allow_stale_read());
253 } 253 }
254 254
255 // MockCryptAuthClientFactory::Observer: 255 // MockCryptAuthClientFactory::Observer:
256 void OnCryptAuthClientCreated(MockCryptAuthClient* client) override { 256 void OnCryptAuthClientCreated(MockCryptAuthClient* client) override {
257 EXPECT_CALL(*client, GetMyDevices(_, _, _)) 257 EXPECT_CALL(*client, GetMyDevices(_, _, _))
258 .WillOnce(DoAll(SaveArg<0>(&get_my_devices_request_), 258 .WillOnce(DoAll(SaveArg<0>(&get_my_devices_request_),
259 SaveArg<1>(&success_callback_), 259 SaveArg<1>(&success_callback_),
260 SaveArg<2>(&error_callback_))); 260 SaveArg<2>(&error_callback_)));
261 } 261 }
262 262
263 MockSyncScheduler* sync_scheduler() { 263 MockSyncScheduler* sync_scheduler() {
264 return device_manager_->GetSyncScheduler().get(); 264 return device_manager_.GetSyncScheduler().get();
265 } 265 }
266 266
267 // Owned by |device_manager_|. 267 // Owned by |device_manager_|.
268 base::SimpleTestClock* clock_; 268 base::SimpleTestClock* clock_;
269 269
270 // Owned by |device_manager_|. 270 // Owned by |device_manager_|.
271 MockCryptAuthClientFactory* client_factory_; 271 MockCryptAuthClientFactory* client_factory_;
272 272
273 TestingPrefServiceSimple pref_service_; 273 TestingPrefServiceSimple pref_service_;
274 274
275 FakeCryptAuthGCMManager gcm_manager_; 275 FakeCryptAuthGCMManager gcm_manager_;
276 276
277 scoped_ptr<TestCryptAuthDeviceManager> device_manager_; 277 TestCryptAuthDeviceManager device_manager_;
278 278
279 cryptauth::GetMyDevicesResponse get_my_devices_response_; 279 cryptauth::GetMyDevicesResponse get_my_devices_response_;
280 280
281 cryptauth::GetMyDevicesRequest get_my_devices_request_; 281 cryptauth::GetMyDevicesRequest get_my_devices_request_;
282 282
283 CryptAuthClient::GetMyDevicesCallback success_callback_; 283 CryptAuthClient::GetMyDevicesCallback success_callback_;
284 284
285 CryptAuthClient::ErrorCallback error_callback_; 285 CryptAuthClient::ErrorCallback error_callback_;
286 286
287 DISALLOW_COPY_AND_ASSIGN(ProximityAuthCryptAuthDeviceManagerTest); 287 DISALLOW_COPY_AND_ASSIGN(ProximityAuthCryptAuthDeviceManagerTest);
288 }; 288 };
289 289
290 TEST_F(ProximityAuthCryptAuthDeviceManagerTest, RegisterPrefs) { 290 TEST_F(ProximityAuthCryptAuthDeviceManagerTest, RegisterPrefs) {
291 TestingPrefServiceSimple pref_service; 291 TestingPrefServiceSimple pref_service;
292 CryptAuthDeviceManager::RegisterPrefs(pref_service.registry()); 292 CryptAuthDeviceManager::RegisterPrefs(pref_service.registry());
293 EXPECT_TRUE(pref_service.FindPreference( 293 EXPECT_TRUE(pref_service.FindPreference(
294 prefs::kCryptAuthDeviceSyncLastSyncTimeSeconds)); 294 prefs::kCryptAuthDeviceSyncLastSyncTimeSeconds));
295 EXPECT_TRUE(pref_service.FindPreference( 295 EXPECT_TRUE(pref_service.FindPreference(
296 prefs::kCryptAuthDeviceSyncIsRecoveringFromFailure)); 296 prefs::kCryptAuthDeviceSyncIsRecoveringFromFailure));
297 EXPECT_TRUE(pref_service.FindPreference(prefs::kCryptAuthDeviceSyncReason)); 297 EXPECT_TRUE(pref_service.FindPreference(prefs::kCryptAuthDeviceSyncReason));
298 EXPECT_TRUE( 298 EXPECT_TRUE(
299 pref_service.FindPreference(prefs::kCryptAuthDeviceSyncUnlockKeys)); 299 pref_service.FindPreference(prefs::kCryptAuthDeviceSyncUnlockKeys));
300 } 300 }
301 301
302 TEST_F(ProximityAuthCryptAuthDeviceManagerTest, GetSyncState) { 302 TEST_F(ProximityAuthCryptAuthDeviceManagerTest, GetSyncState) {
303 device_manager_->Start(); 303 device_manager_.Start();
304 304
305 ON_CALL(*sync_scheduler(), GetStrategy()) 305 ON_CALL(*sync_scheduler(), GetStrategy())
306 .WillByDefault(Return(SyncScheduler::Strategy::PERIODIC_REFRESH)); 306 .WillByDefault(Return(SyncScheduler::Strategy::PERIODIC_REFRESH));
307 EXPECT_FALSE(device_manager_->IsRecoveringFromFailure()); 307 EXPECT_FALSE(device_manager_.IsRecoveringFromFailure());
308 308
309 ON_CALL(*sync_scheduler(), GetStrategy()) 309 ON_CALL(*sync_scheduler(), GetStrategy())
310 .WillByDefault(Return(SyncScheduler::Strategy::AGGRESSIVE_RECOVERY)); 310 .WillByDefault(Return(SyncScheduler::Strategy::AGGRESSIVE_RECOVERY));
311 EXPECT_TRUE(device_manager_->IsRecoveringFromFailure()); 311 EXPECT_TRUE(device_manager_.IsRecoveringFromFailure());
312 312
313 base::TimeDelta time_to_next_sync = base::TimeDelta::FromMinutes(60); 313 base::TimeDelta time_to_next_sync = base::TimeDelta::FromMinutes(60);
314 ON_CALL(*sync_scheduler(), GetTimeToNextSync()) 314 ON_CALL(*sync_scheduler(), GetTimeToNextSync())
315 .WillByDefault(Return(time_to_next_sync)); 315 .WillByDefault(Return(time_to_next_sync));
316 EXPECT_EQ(time_to_next_sync, device_manager_->GetTimeToNextAttempt()); 316 EXPECT_EQ(time_to_next_sync, device_manager_.GetTimeToNextAttempt());
317 317
318 ON_CALL(*sync_scheduler(), GetSyncState()) 318 ON_CALL(*sync_scheduler(), GetSyncState())
319 .WillByDefault(Return(SyncScheduler::SyncState::SYNC_IN_PROGRESS)); 319 .WillByDefault(Return(SyncScheduler::SyncState::SYNC_IN_PROGRESS));
320 EXPECT_TRUE(device_manager_->IsSyncInProgress()); 320 EXPECT_TRUE(device_manager_.IsSyncInProgress());
321 321
322 ON_CALL(*sync_scheduler(), GetSyncState()) 322 ON_CALL(*sync_scheduler(), GetSyncState())
323 .WillByDefault(Return(SyncScheduler::SyncState::WAITING_FOR_REFRESH)); 323 .WillByDefault(Return(SyncScheduler::SyncState::WAITING_FOR_REFRESH));
324 EXPECT_FALSE(device_manager_->IsSyncInProgress()); 324 EXPECT_FALSE(device_manager_.IsSyncInProgress());
325 } 325 }
326 326
327 TEST_F(ProximityAuthCryptAuthDeviceManagerTest, InitWithDefaultPrefs) { 327 TEST_F(ProximityAuthCryptAuthDeviceManagerTest, InitWithDefaultPrefs) {
328 scoped_ptr<base::SimpleTestClock> clock(new base::SimpleTestClock); 328 scoped_ptr<base::SimpleTestClock> clock(new base::SimpleTestClock);
329 clock->SetNow(base::Time::FromDoubleT(kInitialTimeNowSeconds)); 329 clock->SetNow(base::Time::FromDoubleT(kInitialTimeNowSeconds));
330 base::TimeDelta elapsed_time = clock->Now() - base::Time::FromDoubleT(0); 330 base::TimeDelta elapsed_time = clock->Now() - base::Time::FromDoubleT(0);
331 331
332 TestingPrefServiceSimple pref_service; 332 TestingPrefServiceSimple pref_service;
333 CryptAuthDeviceManager::RegisterPrefs(pref_service.registry()); 333 CryptAuthDeviceManager::RegisterPrefs(pref_service.registry());
334 334
(...skipping 10 matching lines...) Expand all
345 EXPECT_TRUE(device_manager.GetLastSyncTime().is_null()); 345 EXPECT_TRUE(device_manager.GetLastSyncTime().is_null());
346 EXPECT_EQ(0u, device_manager.unlock_keys().size()); 346 EXPECT_EQ(0u, device_manager.unlock_keys().size());
347 } 347 }
348 348
349 TEST_F(ProximityAuthCryptAuthDeviceManagerTest, InitWithExistingPrefs) { 349 TEST_F(ProximityAuthCryptAuthDeviceManagerTest, InitWithExistingPrefs) {
350 EXPECT_CALL( 350 EXPECT_CALL(
351 *sync_scheduler(), 351 *sync_scheduler(),
352 Start(clock_->Now() - base::Time::FromDoubleT(kLastSyncTimeSeconds), 352 Start(clock_->Now() - base::Time::FromDoubleT(kLastSyncTimeSeconds),
353 SyncScheduler::Strategy::PERIODIC_REFRESH)); 353 SyncScheduler::Strategy::PERIODIC_REFRESH));
354 354
355 device_manager_->Start(); 355 device_manager_.Start();
356 EXPECT_EQ(base::Time::FromDoubleT(kLastSyncTimeSeconds), 356 EXPECT_EQ(base::Time::FromDoubleT(kLastSyncTimeSeconds),
357 device_manager_->GetLastSyncTime()); 357 device_manager_.GetLastSyncTime());
358 358
359 auto unlock_keys = device_manager_->unlock_keys(); 359 auto unlock_keys = device_manager_.unlock_keys();
360 ASSERT_EQ(1u, unlock_keys.size()); 360 ASSERT_EQ(1u, unlock_keys.size());
361 EXPECT_EQ(kStoredPublicKey, unlock_keys[0].public_key()); 361 EXPECT_EQ(kStoredPublicKey, unlock_keys[0].public_key());
362 EXPECT_EQ(kStoredDeviceName, unlock_keys[0].friendly_device_name()); 362 EXPECT_EQ(kStoredDeviceName, unlock_keys[0].friendly_device_name());
363 EXPECT_EQ(kStoredBluetoothAddress, unlock_keys[0].bluetooth_address()); 363 EXPECT_EQ(kStoredBluetoothAddress, unlock_keys[0].bluetooth_address());
364 EXPECT_TRUE(unlock_keys[0].unlock_key()); 364 EXPECT_TRUE(unlock_keys[0].unlock_key());
365 } 365 }
366 366
367 TEST_F(ProximityAuthCryptAuthDeviceManagerTest, SyncSucceedsForFirstTime) { 367 TEST_F(ProximityAuthCryptAuthDeviceManagerTest, SyncSucceedsForFirstTime) {
368 pref_service_.ClearPref(prefs::kCryptAuthDeviceSyncLastSyncTimeSeconds); 368 pref_service_.ClearPref(prefs::kCryptAuthDeviceSyncLastSyncTimeSeconds);
369 device_manager_->Start(); 369 device_manager_.Start();
370 370
371 FireSchedulerForSync(cryptauth::INVOCATION_REASON_INITIALIZATION); 371 FireSchedulerForSync(cryptauth::INVOCATION_REASON_INITIALIZATION);
372 ASSERT_FALSE(success_callback_.is_null()); 372 ASSERT_FALSE(success_callback_.is_null());
373 373
374 clock_->SetNow(base::Time::FromDoubleT(kLaterTimeNowSeconds)); 374 clock_->SetNow(base::Time::FromDoubleT(kLaterTimeNowSeconds));
375 EXPECT_CALL(*this, OnSyncFinishedProxy( 375 EXPECT_CALL(*this, OnSyncFinishedProxy(
376 CryptAuthDeviceManager::SyncResult::SUCCESS, 376 CryptAuthDeviceManager::SyncResult::SUCCESS,
377 CryptAuthDeviceManager::DeviceChangeResult::CHANGED)); 377 CryptAuthDeviceManager::DeviceChangeResult::CHANGED));
378 378
379 success_callback_.Run(get_my_devices_response_); 379 success_callback_.Run(get_my_devices_response_);
380 EXPECT_EQ(clock_->Now(), device_manager_->GetLastSyncTime()); 380 EXPECT_EQ(clock_->Now(), device_manager_.GetLastSyncTime());
381 381
382 ExpectUnlockKeysAndPrefAreEqual(std::vector<cryptauth::ExternalDeviceInfo>( 382 ExpectUnlockKeysAndPrefAreEqual(std::vector<cryptauth::ExternalDeviceInfo>(
383 1, get_my_devices_response_.devices(0)), 383 1, get_my_devices_response_.devices(0)),
384 device_manager_->unlock_keys(), 384 device_manager_.unlock_keys(), pref_service_);
385 pref_service_);
386 } 385 }
387 386
388 TEST_F(ProximityAuthCryptAuthDeviceManagerTest, ForceSync) { 387 TEST_F(ProximityAuthCryptAuthDeviceManagerTest, ForceSync) {
389 device_manager_->Start(); 388 device_manager_.Start();
390 389
391 EXPECT_CALL(*sync_scheduler(), ForceSync()); 390 EXPECT_CALL(*sync_scheduler(), ForceSync());
392 device_manager_->ForceSyncNow(cryptauth::INVOCATION_REASON_MANUAL); 391 device_manager_.ForceSyncNow(cryptauth::INVOCATION_REASON_MANUAL);
393 392
394 FireSchedulerForSync(cryptauth::INVOCATION_REASON_MANUAL); 393 FireSchedulerForSync(cryptauth::INVOCATION_REASON_MANUAL);
395 394
396 clock_->SetNow(base::Time::FromDoubleT(kLaterTimeNowSeconds)); 395 clock_->SetNow(base::Time::FromDoubleT(kLaterTimeNowSeconds));
397 EXPECT_CALL(*this, OnSyncFinishedProxy( 396 EXPECT_CALL(*this, OnSyncFinishedProxy(
398 CryptAuthDeviceManager::SyncResult::SUCCESS, 397 CryptAuthDeviceManager::SyncResult::SUCCESS,
399 CryptAuthDeviceManager::DeviceChangeResult::CHANGED)); 398 CryptAuthDeviceManager::DeviceChangeResult::CHANGED));
400 success_callback_.Run(get_my_devices_response_); 399 success_callback_.Run(get_my_devices_response_);
401 EXPECT_EQ(clock_->Now(), device_manager_->GetLastSyncTime()); 400 EXPECT_EQ(clock_->Now(), device_manager_.GetLastSyncTime());
402 401
403 ExpectUnlockKeysAndPrefAreEqual(std::vector<cryptauth::ExternalDeviceInfo>( 402 ExpectUnlockKeysAndPrefAreEqual(std::vector<cryptauth::ExternalDeviceInfo>(
404 1, get_my_devices_response_.devices(0)), 403 1, get_my_devices_response_.devices(0)),
405 device_manager_->unlock_keys(), 404 device_manager_.unlock_keys(), pref_service_);
406 pref_service_);
407 } 405 }
408 406
409 TEST_F(ProximityAuthCryptAuthDeviceManagerTest, ForceSyncFailsThenSucceeds) { 407 TEST_F(ProximityAuthCryptAuthDeviceManagerTest, ForceSyncFailsThenSucceeds) {
410 device_manager_->Start(); 408 device_manager_.Start();
411 EXPECT_FALSE(pref_service_.GetBoolean( 409 EXPECT_FALSE(pref_service_.GetBoolean(
412 prefs::kCryptAuthDeviceSyncIsRecoveringFromFailure)); 410 prefs::kCryptAuthDeviceSyncIsRecoveringFromFailure));
413 base::Time old_sync_time = device_manager_->GetLastSyncTime(); 411 base::Time old_sync_time = device_manager_.GetLastSyncTime();
414 412
415 // The first force sync fails. 413 // The first force sync fails.
416 EXPECT_CALL(*sync_scheduler(), ForceSync()); 414 EXPECT_CALL(*sync_scheduler(), ForceSync());
417 device_manager_->ForceSyncNow(cryptauth::INVOCATION_REASON_MANUAL); 415 device_manager_.ForceSyncNow(cryptauth::INVOCATION_REASON_MANUAL);
418 FireSchedulerForSync(cryptauth::INVOCATION_REASON_MANUAL); 416 FireSchedulerForSync(cryptauth::INVOCATION_REASON_MANUAL);
419 clock_->SetNow(base::Time::FromDoubleT(kLaterTimeNowSeconds)); 417 clock_->SetNow(base::Time::FromDoubleT(kLaterTimeNowSeconds));
420 EXPECT_CALL(*this, 418 EXPECT_CALL(*this,
421 OnSyncFinishedProxy( 419 OnSyncFinishedProxy(
422 CryptAuthDeviceManager::SyncResult::FAILURE, 420 CryptAuthDeviceManager::SyncResult::FAILURE,
423 CryptAuthDeviceManager::DeviceChangeResult::UNCHANGED)); 421 CryptAuthDeviceManager::DeviceChangeResult::UNCHANGED));
424 error_callback_.Run("404"); 422 error_callback_.Run("404");
425 EXPECT_EQ(old_sync_time, device_manager_->GetLastSyncTime()); 423 EXPECT_EQ(old_sync_time, device_manager_.GetLastSyncTime());
426 EXPECT_TRUE(pref_service_.GetBoolean( 424 EXPECT_TRUE(pref_service_.GetBoolean(
427 prefs::kCryptAuthDeviceSyncIsRecoveringFromFailure)); 425 prefs::kCryptAuthDeviceSyncIsRecoveringFromFailure));
428 EXPECT_EQ(static_cast<int>(cryptauth::INVOCATION_REASON_MANUAL), 426 EXPECT_EQ(static_cast<int>(cryptauth::INVOCATION_REASON_MANUAL),
429 pref_service_.GetInteger(prefs::kCryptAuthDeviceSyncReason)); 427 pref_service_.GetInteger(prefs::kCryptAuthDeviceSyncReason));
430 428
431 // The second recovery sync succeeds. 429 // The second recovery sync succeeds.
432 ON_CALL(*sync_scheduler(), GetStrategy()) 430 ON_CALL(*sync_scheduler(), GetStrategy())
433 .WillByDefault(Return(SyncScheduler::Strategy::AGGRESSIVE_RECOVERY)); 431 .WillByDefault(Return(SyncScheduler::Strategy::AGGRESSIVE_RECOVERY));
434 FireSchedulerForSync(cryptauth::INVOCATION_REASON_MANUAL); 432 FireSchedulerForSync(cryptauth::INVOCATION_REASON_MANUAL);
435 clock_->SetNow(base::Time::FromDoubleT(kLaterTimeNowSeconds + 30)); 433 clock_->SetNow(base::Time::FromDoubleT(kLaterTimeNowSeconds + 30));
436 EXPECT_CALL(*this, OnSyncFinishedProxy( 434 EXPECT_CALL(*this, OnSyncFinishedProxy(
437 CryptAuthDeviceManager::SyncResult::SUCCESS, 435 CryptAuthDeviceManager::SyncResult::SUCCESS,
438 CryptAuthDeviceManager::DeviceChangeResult::CHANGED)); 436 CryptAuthDeviceManager::DeviceChangeResult::CHANGED));
439 success_callback_.Run(get_my_devices_response_); 437 success_callback_.Run(get_my_devices_response_);
440 EXPECT_EQ(clock_->Now(), device_manager_->GetLastSyncTime()); 438 EXPECT_EQ(clock_->Now(), device_manager_.GetLastSyncTime());
441 439
442 ExpectUnlockKeysAndPrefAreEqual(std::vector<cryptauth::ExternalDeviceInfo>( 440 ExpectUnlockKeysAndPrefAreEqual(std::vector<cryptauth::ExternalDeviceInfo>(
443 1, get_my_devices_response_.devices(0)), 441 1, get_my_devices_response_.devices(0)),
444 device_manager_->unlock_keys(), 442 device_manager_.unlock_keys(), pref_service_);
445 pref_service_);
446 443
447 EXPECT_FLOAT_EQ( 444 EXPECT_FLOAT_EQ(
448 clock_->Now().ToDoubleT(), 445 clock_->Now().ToDoubleT(),
449 pref_service_.GetDouble(prefs::kCryptAuthDeviceSyncLastSyncTimeSeconds)); 446 pref_service_.GetDouble(prefs::kCryptAuthDeviceSyncLastSyncTimeSeconds));
450 EXPECT_EQ(static_cast<int>(cryptauth::INVOCATION_REASON_UNKNOWN), 447 EXPECT_EQ(static_cast<int>(cryptauth::INVOCATION_REASON_UNKNOWN),
451 pref_service_.GetInteger(prefs::kCryptAuthDeviceSyncReason)); 448 pref_service_.GetInteger(prefs::kCryptAuthDeviceSyncReason));
452 EXPECT_FALSE(pref_service_.GetBoolean( 449 EXPECT_FALSE(pref_service_.GetBoolean(
453 prefs::kCryptAuthDeviceSyncIsRecoveringFromFailure)); 450 prefs::kCryptAuthDeviceSyncIsRecoveringFromFailure));
454 } 451 }
455 452
456 TEST_F(ProximityAuthCryptAuthDeviceManagerTest, PeriodicSyncFailsThenSucceeds) { 453 TEST_F(ProximityAuthCryptAuthDeviceManagerTest, PeriodicSyncFailsThenSucceeds) {
457 device_manager_->Start(); 454 device_manager_.Start();
458 base::Time old_sync_time = device_manager_->GetLastSyncTime(); 455 base::Time old_sync_time = device_manager_.GetLastSyncTime();
459 456
460 // The first periodic sync fails. 457 // The first periodic sync fails.
461 FireSchedulerForSync(cryptauth::INVOCATION_REASON_PERIODIC); 458 FireSchedulerForSync(cryptauth::INVOCATION_REASON_PERIODIC);
462 clock_->SetNow(base::Time::FromDoubleT(kLaterTimeNowSeconds)); 459 clock_->SetNow(base::Time::FromDoubleT(kLaterTimeNowSeconds));
463 EXPECT_CALL(*this, 460 EXPECT_CALL(*this,
464 OnSyncFinishedProxy( 461 OnSyncFinishedProxy(
465 CryptAuthDeviceManager::SyncResult::FAILURE, 462 CryptAuthDeviceManager::SyncResult::FAILURE,
466 CryptAuthDeviceManager::DeviceChangeResult::UNCHANGED)); 463 CryptAuthDeviceManager::DeviceChangeResult::UNCHANGED));
467 error_callback_.Run("401"); 464 error_callback_.Run("401");
468 EXPECT_EQ(old_sync_time, device_manager_->GetLastSyncTime()); 465 EXPECT_EQ(old_sync_time, device_manager_.GetLastSyncTime());
469 EXPECT_TRUE(pref_service_.GetBoolean( 466 EXPECT_TRUE(pref_service_.GetBoolean(
470 prefs::kCryptAuthDeviceSyncIsRecoveringFromFailure)); 467 prefs::kCryptAuthDeviceSyncIsRecoveringFromFailure));
471 468
472 // The second recovery sync succeeds. 469 // The second recovery sync succeeds.
473 ON_CALL(*sync_scheduler(), GetStrategy()) 470 ON_CALL(*sync_scheduler(), GetStrategy())
474 .WillByDefault(Return(SyncScheduler::Strategy::AGGRESSIVE_RECOVERY)); 471 .WillByDefault(Return(SyncScheduler::Strategy::AGGRESSIVE_RECOVERY));
475 FireSchedulerForSync(cryptauth::INVOCATION_REASON_FAILURE_RECOVERY); 472 FireSchedulerForSync(cryptauth::INVOCATION_REASON_FAILURE_RECOVERY);
476 clock_->SetNow(base::Time::FromDoubleT(kLaterTimeNowSeconds + 30)); 473 clock_->SetNow(base::Time::FromDoubleT(kLaterTimeNowSeconds + 30));
477 EXPECT_CALL(*this, OnSyncFinishedProxy( 474 EXPECT_CALL(*this, OnSyncFinishedProxy(
478 CryptAuthDeviceManager::SyncResult::SUCCESS, 475 CryptAuthDeviceManager::SyncResult::SUCCESS,
479 CryptAuthDeviceManager::DeviceChangeResult::CHANGED)); 476 CryptAuthDeviceManager::DeviceChangeResult::CHANGED));
480 success_callback_.Run(get_my_devices_response_); 477 success_callback_.Run(get_my_devices_response_);
481 EXPECT_EQ(clock_->Now(), device_manager_->GetLastSyncTime()); 478 EXPECT_EQ(clock_->Now(), device_manager_.GetLastSyncTime());
482 479
483 ExpectUnlockKeysAndPrefAreEqual(std::vector<cryptauth::ExternalDeviceInfo>( 480 ExpectUnlockKeysAndPrefAreEqual(std::vector<cryptauth::ExternalDeviceInfo>(
484 1, get_my_devices_response_.devices(0)), 481 1, get_my_devices_response_.devices(0)),
485 device_manager_->unlock_keys(), 482 device_manager_.unlock_keys(), pref_service_);
486 pref_service_);
487 483
488 EXPECT_FLOAT_EQ( 484 EXPECT_FLOAT_EQ(
489 clock_->Now().ToDoubleT(), 485 clock_->Now().ToDoubleT(),
490 pref_service_.GetDouble(prefs::kCryptAuthDeviceSyncLastSyncTimeSeconds)); 486 pref_service_.GetDouble(prefs::kCryptAuthDeviceSyncLastSyncTimeSeconds));
491 EXPECT_FALSE(pref_service_.GetBoolean( 487 EXPECT_FALSE(pref_service_.GetBoolean(
492 prefs::kCryptAuthDeviceSyncIsRecoveringFromFailure)); 488 prefs::kCryptAuthDeviceSyncIsRecoveringFromFailure));
493 } 489 }
494 490
495 TEST_F(ProximityAuthCryptAuthDeviceManagerTest, SyncSameDevice) { 491 TEST_F(ProximityAuthCryptAuthDeviceManagerTest, SyncSameDevice) {
496 device_manager_->Start(); 492 // Set the same unlock key in the user prefs as the one that would be synced.
497 auto original_unlock_keys = device_manager_->unlock_keys(); 493 {
494 scoped_ptr<base::DictionaryValue> unlock_key_dictionary(
495 new base::DictionaryValue());
496 std::string public_key_b64, device_name_b64, bluetooth_address_b64;
497 Base64UrlEncode(kPublicKey1, &public_key_b64);
498 Base64UrlEncode(kDeviceName1, &device_name_b64);
499 Base64UrlEncode(kBluetoothAddress1, &bluetooth_address_b64);
500 unlock_key_dictionary->SetString("public_key", public_key_b64);
501 unlock_key_dictionary->SetString("device_name", device_name_b64);
502 unlock_key_dictionary->SetString("bluetooth_address",
503 bluetooth_address_b64);
504
505 ListPrefUpdate update(&pref_service_,
506 prefs::kCryptAuthDeviceSyncUnlockKeys);
507 update.Get()->Clear();
508 update.Get()->Append(unlock_key_dictionary.Pass());
509 }
510
511 // Check unlock keys before sync.
512 device_manager_.Start();
513 auto original_unlock_keys = device_manager_.unlock_keys();
514 ASSERT_EQ(1u, original_unlock_keys.size());
515 EXPECT_EQ(kPublicKey1, original_unlock_keys[0].public_key());
516 EXPECT_EQ(kDeviceName1, original_unlock_keys[0].friendly_device_name());
517 EXPECT_EQ(kBluetoothAddress1, original_unlock_keys[0].bluetooth_address());
498 518
499 // Sync new devices. 519 // Sync new devices.
500 FireSchedulerForSync(cryptauth::INVOCATION_REASON_PERIODIC); 520 FireSchedulerForSync(cryptauth::INVOCATION_REASON_PERIODIC);
501 ASSERT_FALSE(success_callback_.is_null()); 521 ASSERT_FALSE(success_callback_.is_null());
502 EXPECT_CALL(*this, 522 EXPECT_CALL(*this,
503 OnSyncFinishedProxy( 523 OnSyncFinishedProxy(
504 CryptAuthDeviceManager::SyncResult::SUCCESS, 524 CryptAuthDeviceManager::SyncResult::SUCCESS,
505 CryptAuthDeviceManager::DeviceChangeResult::UNCHANGED)); 525 CryptAuthDeviceManager::DeviceChangeResult::UNCHANGED));
506 526 success_callback_.Run(get_my_devices_response_);
507 // Sync the same device.
508 cryptauth::ExternalDeviceInfo synced_unlock_key;
509 synced_unlock_key.set_public_key(kStoredPublicKey);
510 synced_unlock_key.set_friendly_device_name(kStoredDeviceName);
511 synced_unlock_key.set_bluetooth_address(kStoredBluetoothAddress);
512 synced_unlock_key.set_unlock_key(true);
513 synced_unlock_key.set_unlockable(false);
514 cryptauth::GetMyDevicesResponse get_my_devices_response;
515 get_my_devices_response.add_devices()->CopyFrom(synced_unlock_key);
516 success_callback_.Run(get_my_devices_response);
517 527
518 // Check that unlock keys are still the same after sync. 528 // Check that unlock keys are still the same after sync.
519 ExpectUnlockKeysAndPrefAreEqual( 529 ExpectUnlockKeysAndPrefAreEqual(original_unlock_keys,
520 original_unlock_keys, device_manager_->unlock_keys(), pref_service_); 530 device_manager_.unlock_keys(), pref_service_);
521 } 531 }
522 532
523 TEST_F(ProximityAuthCryptAuthDeviceManagerTest, SyncEmptyDeviceList) { 533 TEST_F(ProximityAuthCryptAuthDeviceManagerTest, SyncEmptyDeviceList) {
524 cryptauth::GetMyDevicesResponse empty_response; 534 cryptauth::GetMyDevicesResponse empty_response;
525 535
526 device_manager_->Start(); 536 device_manager_.Start();
527 EXPECT_EQ(1u, device_manager_->unlock_keys().size()); 537 EXPECT_EQ(1u, device_manager_.unlock_keys().size());
528 538
529 FireSchedulerForSync(cryptauth::INVOCATION_REASON_PERIODIC); 539 FireSchedulerForSync(cryptauth::INVOCATION_REASON_PERIODIC);
530 ASSERT_FALSE(success_callback_.is_null()); 540 ASSERT_FALSE(success_callback_.is_null());
531 EXPECT_CALL(*this, OnSyncFinishedProxy( 541 EXPECT_CALL(*this, OnSyncFinishedProxy(
532 CryptAuthDeviceManager::SyncResult::SUCCESS, 542 CryptAuthDeviceManager::SyncResult::SUCCESS,
533 CryptAuthDeviceManager::DeviceChangeResult::CHANGED)); 543 CryptAuthDeviceManager::DeviceChangeResult::CHANGED));
534 success_callback_.Run(empty_response); 544 success_callback_.Run(empty_response);
535 545
536 ExpectUnlockKeysAndPrefAreEqual(std::vector<cryptauth::ExternalDeviceInfo>(), 546 ExpectUnlockKeysAndPrefAreEqual(std::vector<cryptauth::ExternalDeviceInfo>(),
537 device_manager_->unlock_keys(), 547 device_manager_.unlock_keys(), pref_service_);
538 pref_service_);
539 } 548 }
540 549
541 TEST_F(ProximityAuthCryptAuthDeviceManagerTest, SyncTwoUnlockKeys) { 550 TEST_F(ProximityAuthCryptAuthDeviceManagerTest, SyncTwoUnlockKeys) {
542 cryptauth::GetMyDevicesResponse response(get_my_devices_response_); 551 cryptauth::GetMyDevicesResponse response(get_my_devices_response_);
543 cryptauth::ExternalDeviceInfo unlock_key2; 552 cryptauth::ExternalDeviceInfo unlock_key2;
544 unlock_key2.set_public_key("new public key"); 553 unlock_key2.set_public_key("new public key");
545 unlock_key2.set_friendly_device_name("new device name"); 554 unlock_key2.set_friendly_device_name("new device name");
546 unlock_key2.set_bluetooth_address("aa:bb:cc:dd:ee:ff"); 555 unlock_key2.set_bluetooth_address("aa:bb:cc:dd:ee:ff");
547 unlock_key2.set_unlock_key(true); 556 unlock_key2.set_unlock_key(true);
548 response.add_devices()->CopyFrom(unlock_key2); 557 response.add_devices()->CopyFrom(unlock_key2);
549 558
550 std::vector<cryptauth::ExternalDeviceInfo> expected_unlock_keys; 559 std::vector<cryptauth::ExternalDeviceInfo> expected_unlock_keys;
551 expected_unlock_keys.push_back(get_my_devices_response_.devices(0)); 560 expected_unlock_keys.push_back(get_my_devices_response_.devices(0));
552 expected_unlock_keys.push_back(unlock_key2); 561 expected_unlock_keys.push_back(unlock_key2);
553 562
554 device_manager_->Start(); 563 device_manager_.Start();
555 EXPECT_EQ(1u, device_manager_->unlock_keys().size()); 564 EXPECT_EQ(1u, device_manager_.unlock_keys().size());
556 EXPECT_EQ(1u, pref_service_.GetList(prefs::kCryptAuthDeviceSyncUnlockKeys) 565 EXPECT_EQ(1u, pref_service_.GetList(prefs::kCryptAuthDeviceSyncUnlockKeys)
557 ->GetSize()); 566 ->GetSize());
558 567
559 FireSchedulerForSync(cryptauth::INVOCATION_REASON_PERIODIC); 568 FireSchedulerForSync(cryptauth::INVOCATION_REASON_PERIODIC);
560 ASSERT_FALSE(success_callback_.is_null()); 569 ASSERT_FALSE(success_callback_.is_null());
561 EXPECT_CALL(*this, OnSyncFinishedProxy( 570 EXPECT_CALL(*this, OnSyncFinishedProxy(
562 CryptAuthDeviceManager::SyncResult::SUCCESS, 571 CryptAuthDeviceManager::SyncResult::SUCCESS,
563 CryptAuthDeviceManager::DeviceChangeResult::CHANGED)); 572 CryptAuthDeviceManager::DeviceChangeResult::CHANGED));
564 success_callback_.Run(response); 573 success_callback_.Run(response);
565 574
566 ExpectUnlockKeysAndPrefAreEqual( 575 ExpectUnlockKeysAndPrefAreEqual(expected_unlock_keys,
567 expected_unlock_keys, device_manager_->unlock_keys(), pref_service_); 576 device_manager_.unlock_keys(), pref_service_);
568 } 577 }
569 578
570 TEST_F(ProximityAuthCryptAuthDeviceManagerTest, SyncOnGCMPushMessage) { 579 TEST_F(ProximityAuthCryptAuthDeviceManagerTest, SyncOnGCMPushMessage) {
571 device_manager_->Start(); 580 device_manager_.Start();
572 581
573 EXPECT_CALL(*sync_scheduler(), ForceSync()); 582 EXPECT_CALL(*sync_scheduler(), ForceSync());
574 gcm_manager_.PushResyncMessage(); 583 gcm_manager_.PushResyncMessage();
575 584
576 FireSchedulerForSync(cryptauth::INVOCATION_REASON_SERVER_INITIATED); 585 FireSchedulerForSync(cryptauth::INVOCATION_REASON_SERVER_INITIATED);
577 586
578 EXPECT_CALL(*this, OnSyncFinishedProxy( 587 EXPECT_CALL(*this, OnSyncFinishedProxy(
579 CryptAuthDeviceManager::SyncResult::SUCCESS, 588 CryptAuthDeviceManager::SyncResult::SUCCESS,
580 CryptAuthDeviceManager::DeviceChangeResult::CHANGED)); 589 CryptAuthDeviceManager::DeviceChangeResult::CHANGED));
581 success_callback_.Run(get_my_devices_response_); 590 success_callback_.Run(get_my_devices_response_);
582 591
583 ExpectUnlockKeysAndPrefAreEqual(std::vector<cryptauth::ExternalDeviceInfo>( 592 ExpectUnlockKeysAndPrefAreEqual(std::vector<cryptauth::ExternalDeviceInfo>(
584 1, get_my_devices_response_.devices(0)), 593 1, get_my_devices_response_.devices(0)),
585 device_manager_->unlock_keys(), 594 device_manager_.unlock_keys(), pref_service_);
586 pref_service_);
587 } 595 }
588 596
589 } // namespace proximity_auth 597 } // namespace proximity_auth
OLDNEW
« no previous file with comments | « components/proximity_auth/cryptauth/cryptauth_device_manager.cc ('k') | components/proximity_auth/messenger_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698