| Index: components/proximity_auth/cryptauth/cryptauth_enrollment_manager_unittest.cc
|
| diff --git a/components/proximity_auth/cryptauth/cryptauth_enrollment_manager_unittest.cc b/components/proximity_auth/cryptauth/cryptauth_enrollment_manager_unittest.cc
|
| index b387ea69d5c4f10da931095f15a2aba60dfc2c82..f06a4dfeb6bbb0595ceb54df4c51f953b5a1e527 100644
|
| --- a/components/proximity_auth/cryptauth/cryptauth_enrollment_manager_unittest.cc
|
| +++ b/components/proximity_auth/cryptauth/cryptauth_enrollment_manager_unittest.cc
|
| @@ -10,6 +10,7 @@
|
| #include "base/time/clock.h"
|
| #include "base/time/time.h"
|
| #include "components/proximity_auth/cryptauth/cryptauth_enroller.h"
|
| +#include "components/proximity_auth/cryptauth/fake_cryptauth_gcm_manager.h"
|
| #include "components/proximity_auth/cryptauth/mock_sync_scheduler.h"
|
| #include "components/proximity_auth/cryptauth/pref_names.h"
|
| #include "testing/gmock/include/gmock/gmock.h"
|
| @@ -24,6 +25,9 @@ namespace proximity_auth {
|
|
|
| namespace {
|
|
|
| +// The GCM registration id from a successful registration.
|
| +const char kGCMRegistrationId[] = "new gcm registration id";
|
| +
|
| // The user's persistent key pair identifying the local device.
|
| const char kUserPublicKey[] = "user public key";
|
| const char kUserPrivateKey[] = "user private key";
|
| @@ -93,12 +97,14 @@ class TestCryptAuthEnrollmentManager : public CryptAuthEnrollmentManager {
|
| scoped_ptr<base::Clock> clock,
|
| scoped_ptr<CryptAuthEnrollerFactory> enroller_factory,
|
| const cryptauth::GcmDeviceInfo& device_info,
|
| + CryptAuthGCMManager* gcm_manager,
|
| PrefService* pref_service)
|
| : CryptAuthEnrollmentManager(clock.Pass(),
|
| enroller_factory.Pass(),
|
| kUserPublicKey,
|
| kUserPrivateKey,
|
| device_info,
|
| + gcm_manager,
|
| pref_service),
|
| scoped_sync_scheduler_(new NiceMock<MockSyncScheduler>()),
|
| weak_sync_scheduler_factory_(scoped_sync_scheduler_.get()) {}
|
| @@ -137,9 +143,11 @@ class ProximityAuthCryptAuthEnrollmentManagerTest
|
| ProximityAuthCryptAuthEnrollmentManagerTest()
|
| : clock_(new base::SimpleTestClock()),
|
| enroller_factory_(new MockCryptAuthEnrollerFactory()),
|
| + gcm_manager_(kGCMRegistrationId),
|
| enrollment_manager_(make_scoped_ptr(clock_),
|
| make_scoped_ptr(enroller_factory_),
|
| device_info_,
|
| + &gcm_manager_,
|
| &pref_service_) {}
|
|
|
| // testing::Test:
|
| @@ -218,6 +226,8 @@ class ProximityAuthCryptAuthEnrollmentManagerTest
|
|
|
| TestingPrefServiceSimple pref_service_;
|
|
|
| + FakeCryptAuthGCMManager gcm_manager_;
|
| +
|
| TestCryptAuthEnrollmentManager enrollment_manager_;
|
|
|
| DISALLOW_COPY_AND_ASSIGN(ProximityAuthCryptAuthEnrollmentManagerTest);
|
| @@ -268,7 +278,7 @@ TEST_F(ProximityAuthCryptAuthEnrollmentManagerTest, InitWithDefaultPrefs) {
|
|
|
| TestCryptAuthEnrollmentManager enrollment_manager(
|
| clock.Pass(), make_scoped_ptr(new MockCryptAuthEnrollerFactory()),
|
| - device_info_, &pref_service);
|
| + device_info_, &gcm_manager_, &pref_service);
|
|
|
| EXPECT_CALL(
|
| *enrollment_manager.GetSyncScheduler(),
|
| @@ -370,4 +380,65 @@ TEST_F(ProximityAuthCryptAuthEnrollmentManagerTest,
|
| prefs::kCryptAuthEnrollmentIsRecoveringFromFailure));
|
| }
|
|
|
| +TEST_F(ProximityAuthCryptAuthEnrollmentManagerTest,
|
| + EnrollWithoutGCMRegistrationId) {
|
| + // Initialize |enrollment_manager_|.
|
| + ON_CALL(*sync_scheduler(), GetStrategy())
|
| + .WillByDefault(Return(SyncScheduler::Strategy::PERIODIC_REFRESH));
|
| + gcm_manager_.set_registration_id(std::string());
|
| + enrollment_manager_.Start();
|
| +
|
| + // Trigger a sync request.
|
| + EXPECT_CALL(*this, OnEnrollmentStartedProxy());
|
| + auto sync_request = make_scoped_ptr(
|
| + new SyncScheduler::SyncRequest(enrollment_manager_.GetSyncScheduler()));
|
| + static_cast<SyncScheduler::Delegate*>(&enrollment_manager_)
|
| + ->OnSyncRequested(sync_request.Pass());
|
| +
|
| + // Complete GCM registration successfully.
|
| + CryptAuthEnroller::EnrollmentFinishedCallback enrollment_callback;
|
| + EXPECT_CALL(*next_cryptauth_enroller(),
|
| + Enroll(kUserPublicKey, kUserPrivateKey, _,
|
| + cryptauth::INVOCATION_REASON_PERIODIC, _))
|
| + .WillOnce(SaveArg<4>(&enrollment_callback));
|
| + ASSERT_TRUE(gcm_manager_.registration_in_progress());
|
| + gcm_manager_.CompleteRegistration(kGCMRegistrationId);
|
| +
|
| + // Complete CryptAuth enrollment.
|
| + ASSERT_FALSE(enrollment_callback.is_null());
|
| + EXPECT_CALL(*this, OnEnrollmentFinishedProxy(true));
|
| + enrollment_callback.Run(true);
|
| +}
|
| +
|
| +TEST_F(ProximityAuthCryptAuthEnrollmentManagerTest, GCMRegistrationFails) {
|
| + // Initialize |enrollment_manager_|.
|
| + ON_CALL(*sync_scheduler(), GetStrategy())
|
| + .WillByDefault(Return(SyncScheduler::Strategy::PERIODIC_REFRESH));
|
| + gcm_manager_.set_registration_id(std::string());
|
| + enrollment_manager_.Start();
|
| +
|
| + // Trigger a sync request.
|
| + EXPECT_CALL(*this, OnEnrollmentStartedProxy());
|
| + auto sync_request = make_scoped_ptr(
|
| + new SyncScheduler::SyncRequest(enrollment_manager_.GetSyncScheduler()));
|
| + static_cast<SyncScheduler::Delegate*>(&enrollment_manager_)
|
| + ->OnSyncRequested(sync_request.Pass());
|
| +
|
| + // Complete GCM registration with failure.
|
| + EXPECT_CALL(*this, OnEnrollmentFinishedProxy(false));
|
| + gcm_manager_.CompleteRegistration(std::string());
|
| +}
|
| +
|
| +TEST_F(ProximityAuthCryptAuthEnrollmentManagerTest, ReenrollOnGCMPushMessage) {
|
| + enrollment_manager_.Start();
|
| +
|
| + // Simulate receiving a GCM push message, forcing the device to re-enroll.
|
| + gcm_manager_.PushReenrollMessage();
|
| + auto completion_callback =
|
| + FireSchedulerForEnrollment(cryptauth::INVOCATION_REASON_SERVER_INITIATED);
|
| +
|
| + EXPECT_CALL(*this, OnEnrollmentFinishedProxy(true));
|
| + completion_callback.Run(true);
|
| +}
|
| +
|
| } // namespace proximity_auth
|
|
|