blob: 3c12b6d97fca66f5efadb33738e9c3f1b38054e0 [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"
Jeff Pu6ccd9562024-02-21 10:46:35 -050024#include "Fingerprint.h"
Jeff Pu52653182022-10-12 16:27:23 -040025#include "util/Util.h"
26
27using namespace ::android::fingerprint::virt;
28using namespace ::aidl::android::hardware::biometrics::fingerprint;
29
30namespace aidl::android::hardware::biometrics::fingerprint {
31
32class FakeLockoutTrackerTest : public ::testing::Test {
33 protected:
34 static constexpr int32_t LOCKOUT_TIMED_THRESHOLD = 3;
35 static constexpr int32_t LOCKOUT_PERMANENT_THRESHOLD = 5;
36 static constexpr int32_t LOCKOUT_TIMED_DURATION = 100;
37
38 void SetUp() override {
Jeff Pu6ccd9562024-02-21 10:46:35 -050039 Fingerprint::cfg().set<std::int32_t>("lockout_timed_threshold", LOCKOUT_TIMED_THRESHOLD);
40 Fingerprint::cfg().set<std::int32_t>("lockout_timed_duration", LOCKOUT_TIMED_DURATION);
41 Fingerprint::cfg().set<std::int32_t>("lockout_permanent_threshold",
42 LOCKOUT_PERMANENT_THRESHOLD);
Jeff Pu52653182022-10-12 16:27:23 -040043 }
44
45 void TearDown() override {
46 // reset to default
Jeff Pu6ccd9562024-02-21 10:46:35 -050047 Fingerprint::cfg().set<std::int32_t>("lockout_timed_threshold", 5);
48 Fingerprint::cfg().set<std::int32_t>("lockout_timed_duration", 20);
49 Fingerprint::cfg().set<std::int32_t>("lockout_permanent_threshold", 10000);
50 Fingerprint::cfg().set<bool>("lockout_enable", false);
51 Fingerprint::cfg().set<bool>("lockout", false);
Jeff Pu52653182022-10-12 16:27:23 -040052 }
53
54 FakeLockoutTracker mLockoutTracker;
55};
56
57TEST_F(FakeLockoutTrackerTest, addFailedAttemptDisable) {
Jeff Pu6ccd9562024-02-21 10:46:35 -050058 Fingerprint::cfg().set<bool>("lockout_enable", false);
Jeff Pu52653182022-10-12 16:27:23 -040059 for (int i = 0; i < LOCKOUT_TIMED_THRESHOLD + 1; i++) mLockoutTracker.addFailedAttempt();
60 ASSERT_EQ(mLockoutTracker.getMode(), FakeLockoutTracker::LockoutMode::kNone);
61 mLockoutTracker.reset();
62}
63
64TEST_F(FakeLockoutTrackerTest, addFailedAttemptLockoutTimed) {
Jeff Pu6ccd9562024-02-21 10:46:35 -050065 Fingerprint::cfg().set<bool>("lockout_enable", true);
Jeff Pu52653182022-10-12 16:27:23 -040066 for (int i = 0; i < LOCKOUT_TIMED_THRESHOLD; i++) mLockoutTracker.addFailedAttempt();
67 ASSERT_EQ(mLockoutTracker.getMode(), FakeLockoutTracker::LockoutMode::kTimed);
68 // time left
69 int N = 5;
Jeff Pu437516e2023-06-28 15:21:21 +000070 int64_t prevTimeLeft = INT_MAX;
Jeff Pu52653182022-10-12 16:27:23 -040071 for (int i = 0; i < N; i++) {
72 SLEEP_MS(LOCKOUT_TIMED_DURATION / N + 1);
73 int64_t currTimeLeft = mLockoutTracker.getLockoutTimeLeft();
Jeff Pu437516e2023-06-28 15:21:21 +000074 ASSERT_TRUE(currTimeLeft < prevTimeLeft);
Jeff Pu52653182022-10-12 16:27:23 -040075 prevTimeLeft = currTimeLeft;
76 }
77 ASSERT_EQ(mLockoutTracker.getMode(), FakeLockoutTracker::LockoutMode::kNone);
78 mLockoutTracker.reset();
79}
80
81TEST_F(FakeLockoutTrackerTest, addFailedAttemptPermanent) {
Jeff Pu6ccd9562024-02-21 10:46:35 -050082 Fingerprint::cfg().set<bool>("lockout_enable", true);
Jeff Pu52653182022-10-12 16:27:23 -040083 for (int i = 0; i < LOCKOUT_PERMANENT_THRESHOLD - 1; i++) mLockoutTracker.addFailedAttempt();
84 ASSERT_NE(mLockoutTracker.getMode(), FakeLockoutTracker::LockoutMode::kPermanent);
85 mLockoutTracker.addFailedAttempt();
86 ASSERT_EQ(mLockoutTracker.getMode(), FakeLockoutTracker::LockoutMode::kPermanent);
Jeff Pu6ccd9562024-02-21 10:46:35 -050087 ASSERT_TRUE(Fingerprint::cfg().get<bool>("lockout"));
Jeff Pu52653182022-10-12 16:27:23 -040088 mLockoutTracker.reset();
89}
90
91} // namespace aidl::android::hardware::biometrics::fingerprint
92
93int main(int argc, char** argv) {
94 testing::InitGoogleTest(&argc, argv);
95 ABinderProcess_startThreadPool();
96 return RUN_ALL_TESTS();
97}