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

Side by Side Diff: components/proximity_auth/proximity_auth_system_unittest.cc

Issue 2902093002: [EasyUnlock] Force user to enter their password after 20 hours. (Closed)
Patch Set: fix test Created 3 years, 6 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/proximity_auth_system.h" 5 #include "components/proximity_auth/proximity_auth_system.h"
6 6
7 #include "base/test/simple_test_clock.h"
7 #include "base/test/test_simple_task_runner.h" 8 #include "base/test/test_simple_task_runner.h"
8 #include "base/threading/thread_task_runner_handle.h" 9 #include "base/threading/thread_task_runner_handle.h"
9 #include "components/cryptauth/remote_device.h" 10 #include "components/cryptauth/remote_device.h"
10 #include "components/proximity_auth/fake_lock_handler.h" 11 #include "components/proximity_auth/fake_lock_handler.h"
11 #include "components/proximity_auth/fake_remote_device_life_cycle.h" 12 #include "components/proximity_auth/fake_remote_device_life_cycle.h"
12 #include "components/proximity_auth/logging/logging.h" 13 #include "components/proximity_auth/logging/logging.h"
13 #include "components/proximity_auth/mock_proximity_auth_client.h" 14 #include "components/proximity_auth/mock_proximity_auth_client.h"
15 #include "components/proximity_auth/proximity_auth_pref_manager.h"
14 #include "components/proximity_auth/unlock_manager.h" 16 #include "components/proximity_auth/unlock_manager.h"
15 #include "testing/gmock/include/gmock/gmock.h" 17 #include "testing/gmock/include/gmock/gmock.h"
16 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
17 19
18 using cryptauth::RemoteDevice; 20 using cryptauth::RemoteDevice;
19 using cryptauth::RemoteDeviceList; 21 using cryptauth::RemoteDeviceList;
20 using testing::AnyNumber; 22 using testing::AnyNumber;
21 using testing::AtLeast; 23 using testing::AtLeast;
22 using testing::InSequence; 24 using testing::InSequence;
23 using testing::NiceMock; 25 using testing::NiceMock;
24 using testing::NotNull; 26 using testing::NotNull;
25 using testing::Return; 27 using testing::Return;
26 using testing::SaveArg; 28 using testing::SaveArg;
27 using testing::_; 29 using testing::_;
28 30
29 namespace proximity_auth { 31 namespace proximity_auth {
30 32
31 namespace { 33 namespace {
32 34
33 const char kUser1[] = "user1"; 35 const char kUser1[] = "user1";
34 const char kUser2[] = "user2"; 36 const char kUser2[] = "user2";
35 37
38 const int64_t kLastPasswordEntryTimestampMs = 123456L;
39 const int64_t kTimestampBeforeReauthMs = 123457L;
40 const int64_t kTimestampAfterReauthMs = 123457890123L;
41
36 void CompareRemoteDeviceLists(const RemoteDeviceList& list1, 42 void CompareRemoteDeviceLists(const RemoteDeviceList& list1,
37 const RemoteDeviceList& list2) { 43 const RemoteDeviceList& list2) {
38 ASSERT_EQ(list1.size(), list2.size()); 44 ASSERT_EQ(list1.size(), list2.size());
39 for (size_t i = 0; i < list1.size(); ++i) { 45 for (size_t i = 0; i < list1.size(); ++i) {
40 RemoteDevice device1 = list1[i]; 46 RemoteDevice device1 = list1[i];
41 RemoteDevice device2 = list2[i]; 47 RemoteDevice device2 = list2[i];
42 EXPECT_EQ(device1.public_key, device2.public_key); 48 EXPECT_EQ(device1.public_key, device2.public_key);
43 } 49 }
44 } 50 }
45 51
(...skipping 11 matching lines...) Expand all
57 ~MockUnlockManager() override {} 63 ~MockUnlockManager() override {}
58 MOCK_METHOD0(IsUnlockAllowed, bool()); 64 MOCK_METHOD0(IsUnlockAllowed, bool());
59 MOCK_METHOD1(SetRemoteDeviceLifeCycle, void(RemoteDeviceLifeCycle*)); 65 MOCK_METHOD1(SetRemoteDeviceLifeCycle, void(RemoteDeviceLifeCycle*));
60 MOCK_METHOD0(OnLifeCycleStateChanged, void()); 66 MOCK_METHOD0(OnLifeCycleStateChanged, void());
61 MOCK_METHOD1(OnAuthAttempted, void(ScreenlockBridge::LockHandler::AuthType)); 67 MOCK_METHOD1(OnAuthAttempted, void(ScreenlockBridge::LockHandler::AuthType));
62 68
63 private: 69 private:
64 DISALLOW_COPY_AND_ASSIGN(MockUnlockManager); 70 DISALLOW_COPY_AND_ASSIGN(MockUnlockManager);
65 }; 71 };
66 72
73 // Mock implementation of ProximityAuthPrefManager.
74 class MockProximityAuthPrefManager : public ProximityAuthPrefManager {
75 public:
76 MockProximityAuthPrefManager() : ProximityAuthPrefManager(nullptr) {}
77 ~MockProximityAuthPrefManager() override {}
78 MOCK_CONST_METHOD0(GetLastPasswordEntryTimestampMs, int64_t());
79
80 private:
81 DISALLOW_COPY_AND_ASSIGN(MockProximityAuthPrefManager);
82 };
83
67 // Harness for ProximityAuthSystem to make it testable. 84 // Harness for ProximityAuthSystem to make it testable.
68 class TestableProximityAuthSystem : public ProximityAuthSystem { 85 class TestableProximityAuthSystem : public ProximityAuthSystem {
69 public: 86 public:
70 TestableProximityAuthSystem(ScreenlockType screenlock_type, 87 TestableProximityAuthSystem(
71 ProximityAuthClient* proximity_auth_client, 88 ScreenlockType screenlock_type,
72 std::unique_ptr<UnlockManager> unlock_manager) 89 ProximityAuthClient* proximity_auth_client,
90 std::unique_ptr<UnlockManager> unlock_manager,
91 std::unique_ptr<base::Clock> clock,
92 std::unique_ptr<ProximityAuthPrefManager> pref_manager)
73 : ProximityAuthSystem(screenlock_type, 93 : ProximityAuthSystem(screenlock_type,
74 proximity_auth_client, 94 proximity_auth_client,
75 std::move(unlock_manager)), 95 std::move(unlock_manager),
96 std::move(clock),
97 std::move(pref_manager)),
76 life_cycle_(nullptr) {} 98 life_cycle_(nullptr) {}
77 ~TestableProximityAuthSystem() override {} 99 ~TestableProximityAuthSystem() override {}
78 100
79 FakeRemoteDeviceLifeCycle* life_cycle() { return life_cycle_; } 101 FakeRemoteDeviceLifeCycle* life_cycle() { return life_cycle_; }
80 102
81 private: 103 private:
82 std::unique_ptr<RemoteDeviceLifeCycle> CreateRemoteDeviceLifeCycle( 104 std::unique_ptr<RemoteDeviceLifeCycle> CreateRemoteDeviceLifeCycle(
83 const RemoteDevice& remote_device) override { 105 const RemoteDevice& remote_device) override {
84 std::unique_ptr<FakeRemoteDeviceLifeCycle> life_cycle( 106 std::unique_ptr<FakeRemoteDeviceLifeCycle> life_cycle(
85 new FakeRemoteDeviceLifeCycle(remote_device)); 107 new FakeRemoteDeviceLifeCycle(remote_device));
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 LockScreen(); 142 LockScreen();
121 } 143 }
122 144
123 void TearDown() override { UnlockScreen(); } 145 void TearDown() override { UnlockScreen(); }
124 146
125 void InitProximityAuthSystem(ProximityAuthSystem::ScreenlockType type) { 147 void InitProximityAuthSystem(ProximityAuthSystem::ScreenlockType type) {
126 std::unique_ptr<MockUnlockManager> unlock_manager( 148 std::unique_ptr<MockUnlockManager> unlock_manager(
127 new NiceMock<MockUnlockManager>()); 149 new NiceMock<MockUnlockManager>());
128 unlock_manager_ = unlock_manager.get(); 150 unlock_manager_ = unlock_manager.get();
129 151
152 std::unique_ptr<base::SimpleTestClock> clock =
153 base::MakeUnique<base::SimpleTestClock>();
154 clock_ = clock.get();
155
156 std::unique_ptr<MockProximityAuthPrefManager> pref_manager(
157 new NiceMock<MockProximityAuthPrefManager>());
158 pref_manager_ = pref_manager.get();
159
160 clock_->SetNow(base::Time::FromJavaTime(kTimestampBeforeReauthMs));
161 ON_CALL(*pref_manager_, GetLastPasswordEntryTimestampMs())
162 .WillByDefault(Return(kLastPasswordEntryTimestampMs));
163
130 proximity_auth_system_.reset(new TestableProximityAuthSystem( 164 proximity_auth_system_.reset(new TestableProximityAuthSystem(
131 type, &proximity_auth_client_, std::move(unlock_manager))); 165 type, &proximity_auth_client_, std::move(unlock_manager),
166 std::move(clock), std::move(pref_manager)));
132 } 167 }
133 168
134 void LockScreen() { ScreenlockBridge::Get()->SetLockHandler(&lock_handler_); } 169 void LockScreen() { ScreenlockBridge::Get()->SetLockHandler(&lock_handler_); }
135 170
136 void FocusUser(const std::string& user_id) { 171 void FocusUser(const std::string& user_id) {
137 ScreenlockBridge::Get()->SetFocusedUser(AccountId::FromUserEmail(user_id)); 172 ScreenlockBridge::Get()->SetFocusedUser(AccountId::FromUserEmail(user_id));
138 } 173 }
139 174
140 void UnlockScreen() { ScreenlockBridge::Get()->SetLockHandler(nullptr); } 175 void UnlockScreen() { ScreenlockBridge::Get()->SetLockHandler(nullptr); }
141 176
142 void SimulateSuspend() { 177 void SimulateSuspend() {
143 proximity_auth_system_->OnSuspend(); 178 proximity_auth_system_->OnSuspend();
144 proximity_auth_system_->OnSuspendDone(); 179 proximity_auth_system_->OnSuspendDone();
145 task_runner_->RunUntilIdle(); 180 task_runner_->RunUntilIdle();
146 } 181 }
147 182
148 FakeRemoteDeviceLifeCycle* life_cycle() { 183 FakeRemoteDeviceLifeCycle* life_cycle() {
149 return proximity_auth_system_->life_cycle(); 184 return proximity_auth_system_->life_cycle();
150 } 185 }
151 186
152 FakeLockHandler lock_handler_; 187 FakeLockHandler lock_handler_;
153 NiceMock<MockProximityAuthClient> proximity_auth_client_; 188 NiceMock<MockProximityAuthClient> proximity_auth_client_;
154 std::unique_ptr<TestableProximityAuthSystem> proximity_auth_system_; 189 std::unique_ptr<TestableProximityAuthSystem> proximity_auth_system_;
155 MockUnlockManager* unlock_manager_; 190 MockUnlockManager* unlock_manager_;
191 base::SimpleTestClock* clock_;
192 MockProximityAuthPrefManager* pref_manager_;
156 193
157 RemoteDeviceList user1_remote_devices_; 194 RemoteDeviceList user1_remote_devices_;
158 RemoteDeviceList user2_remote_devices_; 195 RemoteDeviceList user2_remote_devices_;
159 196
160 scoped_refptr<base::TestSimpleTaskRunner> task_runner_; 197 scoped_refptr<base::TestSimpleTaskRunner> task_runner_;
161 base::ThreadTaskRunnerHandle thread_task_runner_handle_; 198 base::ThreadTaskRunnerHandle thread_task_runner_handle_;
162 199
163 private: 200 private:
164 ScopedDisableLoggingForTesting disable_logging_; 201 ScopedDisableLoggingForTesting disable_logging_;
165 202
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 243
207 CompareRemoteDeviceLists( 244 CompareRemoteDeviceLists(
208 user2_remote_devices_, 245 user2_remote_devices_,
209 proximity_auth_system_->GetRemoteDevicesForUser(account2)); 246 proximity_auth_system_->GetRemoteDevicesForUser(account2));
210 } 247 }
211 248
212 TEST_F(ProximityAuthSystemTest, FocusRegisteredUser) { 249 TEST_F(ProximityAuthSystemTest, FocusRegisteredUser) {
213 EXPECT_FALSE(life_cycle()); 250 EXPECT_FALSE(life_cycle());
214 EXPECT_EQ(std::string(), 251 EXPECT_EQ(std::string(),
215 ScreenlockBridge::Get()->focused_account_id().GetUserEmail()); 252 ScreenlockBridge::Get()->focused_account_id().GetUserEmail());
216 EXPECT_FALSE(life_cycle());
217 253
218 RemoteDeviceLifeCycle* unlock_manager_life_cycle = nullptr; 254 RemoteDeviceLifeCycle* unlock_manager_life_cycle = nullptr;
219 EXPECT_CALL(*unlock_manager_, SetRemoteDeviceLifeCycle(_)) 255 EXPECT_CALL(*unlock_manager_, SetRemoteDeviceLifeCycle(_))
220 .WillOnce(SaveArg<0>(&unlock_manager_life_cycle)); 256 .WillOnce(SaveArg<0>(&unlock_manager_life_cycle));
221 FocusUser(kUser1); 257 FocusUser(kUser1);
222 258
223 EXPECT_EQ(life_cycle(), unlock_manager_life_cycle); 259 EXPECT_EQ(life_cycle(), unlock_manager_life_cycle);
224 EXPECT_TRUE(life_cycle()); 260 EXPECT_TRUE(life_cycle());
225 EXPECT_TRUE(life_cycle()->started()); 261 EXPECT_TRUE(life_cycle()->started());
226 EXPECT_EQ(kUser1, life_cycle()->GetRemoteDevice().user_id); 262 EXPECT_EQ(kUser1, life_cycle()->GetRemoteDevice().user_id);
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after
383 EXPECT_CALL(*unlock_manager_, SetRemoteDeviceLifeCycle(NotNull())); 419 EXPECT_CALL(*unlock_manager_, SetRemoteDeviceLifeCycle(NotNull()));
384 SimulateSuspend(); 420 SimulateSuspend();
385 } 421 }
386 422
387 EXPECT_EQ(kUser1, life_cycle()->GetRemoteDevice().user_id); 423 EXPECT_EQ(kUser1, life_cycle()->GetRemoteDevice().user_id);
388 424
389 EXPECT_CALL(*unlock_manager_, SetRemoteDeviceLifeCycle(nullptr)) 425 EXPECT_CALL(*unlock_manager_, SetRemoteDeviceLifeCycle(nullptr))
390 .Times(AtLeast(1)); 426 .Times(AtLeast(1));
391 } 427 }
392 428
429 TEST_F(ProximityAuthSystemTest, ForcePasswordReauth) {
430 ON_CALL(*pref_manager_, GetLastPasswordEntryTimestampMs())
431 .WillByDefault(Return(kTimestampAfterReauthMs));
432 EXPECT_CALL(proximity_auth_client_,
433 UpdateScreenlockState(ScreenlockState::PASSWORD_REAUTH));
434 FocusUser(kUser1);
435 EXPECT_FALSE(life_cycle());
436 }
437
393 } // namespace proximity_auth 438 } // namespace proximity_auth
OLDNEW
« no previous file with comments | « components/proximity_auth/proximity_auth_system.cc ('k') | components/proximity_auth/screenlock_state.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698