blob: 1b071eecd28f4f07d57835f11fa87e2dbf7312c5 [file] [log] [blame]
Jeff Pu52653182022-10-12 16:27:23 -04001/*
2 * Copyright (C) 2022 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#include <android/binder_process.h>
18#include <fingerprint.sysprop.h>
19#include <gtest/gtest.h>
20
21#include <android-base/logging.h>
22
23#include "FakeLockoutTracker.h"
24#include "util/Util.h"
25
26using namespace ::android::fingerprint::virt;
27using namespace ::aidl::android::hardware::biometrics::fingerprint;
28
29namespace aidl::android::hardware::biometrics::fingerprint {
30
31class FakeLockoutTrackerTest : public ::testing::Test {
32 protected:
33 static constexpr int32_t LOCKOUT_TIMED_THRESHOLD = 3;
34 static constexpr int32_t LOCKOUT_PERMANENT_THRESHOLD = 5;
35 static constexpr int32_t LOCKOUT_TIMED_DURATION = 100;
36
37 void SetUp() override {
38 FingerprintHalProperties::lockout_timed_threshold(LOCKOUT_TIMED_THRESHOLD);
39 FingerprintHalProperties::lockout_timed_duration(LOCKOUT_TIMED_DURATION);
40 FingerprintHalProperties::lockout_permanent_threshold(LOCKOUT_PERMANENT_THRESHOLD);
41 }
42
43 void TearDown() override {
44 // reset to default
45 FingerprintHalProperties::lockout_timed_threshold(5);
46 FingerprintHalProperties::lockout_timed_duration(20);
47 FingerprintHalProperties::lockout_permanent_threshold(10000);
48 FingerprintHalProperties::lockout_enable(false);
49 FingerprintHalProperties::lockout(false);
50 }
51
52 FakeLockoutTracker mLockoutTracker;
53};
54
55TEST_F(FakeLockoutTrackerTest, addFailedAttemptDisable) {
56 FingerprintHalProperties::lockout_enable(false);
57 for (int i = 0; i < LOCKOUT_TIMED_THRESHOLD + 1; i++) mLockoutTracker.addFailedAttempt();
58 ASSERT_EQ(mLockoutTracker.getMode(), FakeLockoutTracker::LockoutMode::kNone);
59 mLockoutTracker.reset();
60}
61
62TEST_F(FakeLockoutTrackerTest, addFailedAttemptLockoutTimed) {
63 FingerprintHalProperties::lockout_enable(true);
64 for (int i = 0; i < LOCKOUT_TIMED_THRESHOLD; i++) mLockoutTracker.addFailedAttempt();
65 ASSERT_EQ(mLockoutTracker.getMode(), FakeLockoutTracker::LockoutMode::kTimed);
66 // time left
67 int N = 5;
68 int64_t prevTimeLeft = INT_MIN;
69 for (int i = 0; i < N; i++) {
70 SLEEP_MS(LOCKOUT_TIMED_DURATION / N + 1);
71 int64_t currTimeLeft = mLockoutTracker.getLockoutTimeLeft();
72 ASSERT_TRUE(currTimeLeft > prevTimeLeft);
73 prevTimeLeft = currTimeLeft;
74 }
75 ASSERT_EQ(mLockoutTracker.getMode(), FakeLockoutTracker::LockoutMode::kNone);
76 mLockoutTracker.reset();
77}
78
79TEST_F(FakeLockoutTrackerTest, addFailedAttemptPermanent) {
80 FingerprintHalProperties::lockout_enable(true);
81 for (int i = 0; i < LOCKOUT_PERMANENT_THRESHOLD - 1; i++) mLockoutTracker.addFailedAttempt();
82 ASSERT_NE(mLockoutTracker.getMode(), FakeLockoutTracker::LockoutMode::kPermanent);
83 mLockoutTracker.addFailedAttempt();
84 ASSERT_EQ(mLockoutTracker.getMode(), FakeLockoutTracker::LockoutMode::kPermanent);
85 ASSERT_TRUE(FingerprintHalProperties::lockout());
86 mLockoutTracker.reset();
87}
88
89} // namespace aidl::android::hardware::biometrics::fingerprint
90
91int main(int argc, char** argv) {
92 testing::InitGoogleTest(&argc, argv);
93 ABinderProcess_startThreadPool();
94 return RUN_ALL_TESTS();
95}