Jeff Pu | 5265318 | 2022-10-12 16:27:23 -0400 | [diff] [blame] | 1 | /* |
| 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 Pu | 6ccd956 | 2024-02-21 10:46:35 -0500 | [diff] [blame] | 24 | #include "Fingerprint.h" |
Jeff Pu | 5265318 | 2022-10-12 16:27:23 -0400 | [diff] [blame] | 25 | #include "util/Util.h" |
| 26 | |
| 27 | using namespace ::android::fingerprint::virt; |
| 28 | using namespace ::aidl::android::hardware::biometrics::fingerprint; |
| 29 | |
| 30 | namespace aidl::android::hardware::biometrics::fingerprint { |
| 31 | |
| 32 | class 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 Pu | 6ccd956 | 2024-02-21 10:46:35 -0500 | [diff] [blame] | 39 | 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 Pu | 5265318 | 2022-10-12 16:27:23 -0400 | [diff] [blame] | 43 | } |
| 44 | |
| 45 | void TearDown() override { |
| 46 | // reset to default |
Jeff Pu | 6ccd956 | 2024-02-21 10:46:35 -0500 | [diff] [blame] | 47 | 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 Pu | 5265318 | 2022-10-12 16:27:23 -0400 | [diff] [blame] | 52 | } |
| 53 | |
| 54 | FakeLockoutTracker mLockoutTracker; |
| 55 | }; |
| 56 | |
| 57 | TEST_F(FakeLockoutTrackerTest, addFailedAttemptDisable) { |
Jeff Pu | 6ccd956 | 2024-02-21 10:46:35 -0500 | [diff] [blame] | 58 | Fingerprint::cfg().set<bool>("lockout_enable", false); |
Jeff Pu | 5265318 | 2022-10-12 16:27:23 -0400 | [diff] [blame] | 59 | 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 | |
| 64 | TEST_F(FakeLockoutTrackerTest, addFailedAttemptLockoutTimed) { |
Jeff Pu | 6ccd956 | 2024-02-21 10:46:35 -0500 | [diff] [blame] | 65 | Fingerprint::cfg().set<bool>("lockout_enable", true); |
Jeff Pu | 5265318 | 2022-10-12 16:27:23 -0400 | [diff] [blame] | 66 | 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 Pu | 437516e | 2023-06-28 15:21:21 +0000 | [diff] [blame] | 70 | int64_t prevTimeLeft = INT_MAX; |
Jeff Pu | 5265318 | 2022-10-12 16:27:23 -0400 | [diff] [blame] | 71 | for (int i = 0; i < N; i++) { |
| 72 | SLEEP_MS(LOCKOUT_TIMED_DURATION / N + 1); |
| 73 | int64_t currTimeLeft = mLockoutTracker.getLockoutTimeLeft(); |
Jeff Pu | 437516e | 2023-06-28 15:21:21 +0000 | [diff] [blame] | 74 | ASSERT_TRUE(currTimeLeft < prevTimeLeft); |
Jeff Pu | 5265318 | 2022-10-12 16:27:23 -0400 | [diff] [blame] | 75 | prevTimeLeft = currTimeLeft; |
| 76 | } |
| 77 | ASSERT_EQ(mLockoutTracker.getMode(), FakeLockoutTracker::LockoutMode::kNone); |
| 78 | mLockoutTracker.reset(); |
| 79 | } |
| 80 | |
| 81 | TEST_F(FakeLockoutTrackerTest, addFailedAttemptPermanent) { |
Jeff Pu | 6ccd956 | 2024-02-21 10:46:35 -0500 | [diff] [blame] | 82 | Fingerprint::cfg().set<bool>("lockout_enable", true); |
Jeff Pu | 5265318 | 2022-10-12 16:27:23 -0400 | [diff] [blame] | 83 | 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 Pu | 6ccd956 | 2024-02-21 10:46:35 -0500 | [diff] [blame] | 87 | ASSERT_TRUE(Fingerprint::cfg().get<bool>("lockout")); |
Jeff Pu | 5265318 | 2022-10-12 16:27:23 -0400 | [diff] [blame] | 88 | mLockoutTracker.reset(); |
| 89 | } |
| 90 | |
| 91 | } // namespace aidl::android::hardware::biometrics::fingerprint |
| 92 | |
| 93 | int main(int argc, char** argv) { |
| 94 | testing::InitGoogleTest(&argc, argv); |
| 95 | ABinderProcess_startThreadPool(); |
| 96 | return RUN_ALL_TESTS(); |
| 97 | } |