mirror of
https://github.com/Evolution-X/hardware_interfaces
synced 2026-02-01 11:36:00 +00:00
Merge "[vts-core] add VtsHalBiometricsFaceV1_0TargetTest to vts-core"
am: 78e5470dbc
Change-Id: Icb763b887d9cf72f9618848274441e73a9e5fc4b
This commit is contained in:
@@ -19,6 +19,6 @@ cc_test {
|
||||
defaults: ["VtsHalTargetTestDefaults"],
|
||||
srcs: ["VtsHalBiometricsFaceV1_0TargetTest.cpp"],
|
||||
static_libs: ["android.hardware.biometrics.face@1.0"],
|
||||
test_suites: ["general-tests"],
|
||||
test_suites: ["general-tests", "vts-core"],
|
||||
}
|
||||
|
||||
|
||||
@@ -20,9 +20,10 @@
|
||||
#include <android/hardware/biometrics/face/1.0/IBiometricsFaceClientCallback.h>
|
||||
|
||||
#include <VtsHalHidlTargetCallbackBase.h>
|
||||
#include <VtsHalHidlTargetTestBase.h>
|
||||
#include <VtsHalHidlTargetTestEnvBase.h>
|
||||
#include <android-base/logging.h>
|
||||
#include <gtest/gtest.h>
|
||||
#include <hidl/GtestPrinter.h>
|
||||
#include <hidl/ServiceManagement.h>
|
||||
|
||||
#include <chrono>
|
||||
#include <cstdint>
|
||||
@@ -124,27 +125,11 @@ class FaceCallback : public ::testing::VtsHalHidlTargetCallbackBase<FaceCallback
|
||||
}
|
||||
};
|
||||
|
||||
// Test environment for the BiometricsFace HAL.
|
||||
class FaceHidlEnvironment : public ::testing::VtsHalHidlTargetTestEnvBase {
|
||||
public:
|
||||
// Get the test environment singleton.
|
||||
static FaceHidlEnvironment* Instance() {
|
||||
static FaceHidlEnvironment* instance = new FaceHidlEnvironment;
|
||||
return instance;
|
||||
}
|
||||
|
||||
void registerTestServices() override { registerTestService<IBiometricsFace>(); }
|
||||
|
||||
private:
|
||||
FaceHidlEnvironment() = default;
|
||||
};
|
||||
|
||||
// Test class for the BiometricsFace HAL.
|
||||
class FaceHidlTest : public ::testing::VtsHalHidlTargetTestBase {
|
||||
class FaceHidlTest : public ::testing::TestWithParam<std::string> {
|
||||
public:
|
||||
void SetUp() override {
|
||||
mService = ::testing::VtsHalHidlTargetTestBase::getService<IBiometricsFace>(
|
||||
FaceHidlEnvironment::Instance()->getServiceName<IBiometricsFace>());
|
||||
mService = IBiometricsFace::getService(GetParam());
|
||||
ASSERT_NE(mService, nullptr);
|
||||
mCallback = new FaceCallback();
|
||||
mCallback->SetWaitTimeoutDefault(kTimeout);
|
||||
@@ -167,7 +152,7 @@ class FaceHidlTest : public ::testing::VtsHalHidlTargetTestBase {
|
||||
|
||||
// generateChallenge should always return a unique, cryptographically secure,
|
||||
// non-zero number.
|
||||
TEST_F(FaceHidlTest, GenerateChallengeTest) {
|
||||
TEST_P(FaceHidlTest, GenerateChallengeTest) {
|
||||
std::map<uint64_t, int> m;
|
||||
for (int i = 0; i < kGenerateChallengeIterations; ++i) {
|
||||
Return<void> ret =
|
||||
@@ -182,7 +167,7 @@ TEST_F(FaceHidlTest, GenerateChallengeTest) {
|
||||
}
|
||||
|
||||
// enroll with an invalid (all zeroes) HAT should fail.
|
||||
TEST_F(FaceHidlTest, EnrollZeroHatTest) {
|
||||
TEST_P(FaceHidlTest, EnrollZeroHatTest) {
|
||||
// Filling HAT with zeros
|
||||
hidl_vec<uint8_t> token(69);
|
||||
for (size_t i = 0; i < 69; i++) {
|
||||
@@ -200,7 +185,7 @@ TEST_F(FaceHidlTest, EnrollZeroHatTest) {
|
||||
}
|
||||
|
||||
// enroll with an invalid HAT should fail.
|
||||
TEST_F(FaceHidlTest, EnrollGarbageHatTest) {
|
||||
TEST_P(FaceHidlTest, EnrollGarbageHatTest) {
|
||||
// Filling HAT with pseudorandom invalid data.
|
||||
// Using default seed to make the test reproducible.
|
||||
std::mt19937 gen(std::mt19937::default_seed);
|
||||
@@ -221,7 +206,7 @@ TEST_F(FaceHidlTest, EnrollGarbageHatTest) {
|
||||
}
|
||||
|
||||
// setFeature with an invalid (all zeros) HAT should fail.
|
||||
TEST_F(FaceHidlTest, SetFeatureZeroHatTest) {
|
||||
TEST_P(FaceHidlTest, SetFeatureZeroHatTest) {
|
||||
hidl_vec<uint8_t> token(69);
|
||||
for (size_t i = 0; i < 69; i++) {
|
||||
token[i] = 0;
|
||||
@@ -232,7 +217,7 @@ TEST_F(FaceHidlTest, SetFeatureZeroHatTest) {
|
||||
}
|
||||
|
||||
// setFeature with an invalid HAT should fail.
|
||||
TEST_F(FaceHidlTest, SetFeatureGarbageHatTest) {
|
||||
TEST_P(FaceHidlTest, SetFeatureGarbageHatTest) {
|
||||
// Filling HAT with pseudorandom invalid data.
|
||||
// Using default seed to make the test reproducible.
|
||||
std::mt19937 gen(std::mt19937::default_seed);
|
||||
@@ -254,16 +239,16 @@ void assertGetFeatureFails(const sp<IBiometricsFace>& service, uint32_t faceId,
|
||||
ASSERT_TRUE(res.isOk());
|
||||
}
|
||||
|
||||
TEST_F(FaceHidlTest, GetFeatureRequireAttentionTest) {
|
||||
TEST_P(FaceHidlTest, GetFeatureRequireAttentionTest) {
|
||||
assertGetFeatureFails(mService, 0 /* faceId */, Feature::REQUIRE_ATTENTION);
|
||||
}
|
||||
|
||||
TEST_F(FaceHidlTest, GetFeatureRequireDiversityTest) {
|
||||
TEST_P(FaceHidlTest, GetFeatureRequireDiversityTest) {
|
||||
assertGetFeatureFails(mService, 0 /* faceId */, Feature::REQUIRE_DIVERSITY);
|
||||
}
|
||||
|
||||
// revokeChallenge should always return within the timeout
|
||||
TEST_F(FaceHidlTest, RevokeChallengeTest) {
|
||||
TEST_P(FaceHidlTest, RevokeChallengeTest) {
|
||||
auto start = std::chrono::system_clock::now();
|
||||
Return<Status> ret = mService->revokeChallenge();
|
||||
auto elapsed = std::chrono::system_clock::now() - start;
|
||||
@@ -272,14 +257,14 @@ TEST_F(FaceHidlTest, RevokeChallengeTest) {
|
||||
}
|
||||
|
||||
// The call to getAuthenticatorId should succeed.
|
||||
TEST_F(FaceHidlTest, GetAuthenticatorIdTest) {
|
||||
TEST_P(FaceHidlTest, GetAuthenticatorIdTest) {
|
||||
Return<void> ret = mService->getAuthenticatorId(
|
||||
[](const OptionalUint64& res) { ASSERT_EQ(Status::OK, res.status); });
|
||||
ASSERT_TRUE(ret.isOk());
|
||||
}
|
||||
|
||||
// The call to enumerate should succeed.
|
||||
TEST_F(FaceHidlTest, EnumerateTest) {
|
||||
TEST_P(FaceHidlTest, EnumerateTest) {
|
||||
Return<Status> ret = mService->enumerate();
|
||||
ASSERT_EQ(Status::OK, static_cast<Status>(ret));
|
||||
auto res = mCallback->WaitForCallback(kCallbackNameOnEnumerate);
|
||||
@@ -288,21 +273,21 @@ TEST_F(FaceHidlTest, EnumerateTest) {
|
||||
}
|
||||
|
||||
// The call to remove should succeed for any faceId
|
||||
TEST_F(FaceHidlTest, RemoveFaceTest) {
|
||||
TEST_P(FaceHidlTest, RemoveFaceTest) {
|
||||
// Remove a face
|
||||
Return<Status> ret = mService->remove(kFaceId);
|
||||
ASSERT_EQ(Status::OK, static_cast<Status>(ret));
|
||||
}
|
||||
|
||||
// Remove should accept 0 to delete all faces
|
||||
TEST_F(FaceHidlTest, RemoveAllFacesTest) {
|
||||
TEST_P(FaceHidlTest, RemoveAllFacesTest) {
|
||||
// Remove all faces
|
||||
Return<Status> ret = mService->remove(0);
|
||||
ASSERT_EQ(Status::OK, static_cast<Status>(ret));
|
||||
}
|
||||
|
||||
// Active user should successfully set to a writable location.
|
||||
TEST_F(FaceHidlTest, SetActiveUserTest) {
|
||||
TEST_P(FaceHidlTest, SetActiveUserTest) {
|
||||
// Create an active user
|
||||
Return<Status> ret = mService->setActiveUser(2, kFacedataDir);
|
||||
ASSERT_EQ(Status::OK, static_cast<Status>(ret));
|
||||
@@ -313,7 +298,7 @@ TEST_F(FaceHidlTest, SetActiveUserTest) {
|
||||
}
|
||||
|
||||
// Active user should fail to set to an unwritable location.
|
||||
TEST_F(FaceHidlTest, SetActiveUserUnwritableTest) {
|
||||
TEST_P(FaceHidlTest, SetActiveUserUnwritableTest) {
|
||||
// Create an active user to an unwritable location (device root dir)
|
||||
Return<Status> ret = mService->setActiveUser(3, "/");
|
||||
ASSERT_NE(Status::OK, static_cast<Status>(ret));
|
||||
@@ -324,7 +309,7 @@ TEST_F(FaceHidlTest, SetActiveUserUnwritableTest) {
|
||||
}
|
||||
|
||||
// Active user should fail to set to a null location.
|
||||
TEST_F(FaceHidlTest, SetActiveUserNullTest) {
|
||||
TEST_P(FaceHidlTest, SetActiveUserNullTest) {
|
||||
// Create an active user to a null location.
|
||||
Return<Status> ret = mService->setActiveUser(4, nullptr);
|
||||
ASSERT_NE(Status::OK, static_cast<Status>(ret));
|
||||
@@ -336,7 +321,7 @@ TEST_F(FaceHidlTest, SetActiveUserNullTest) {
|
||||
|
||||
// Cancel should always return CANCELED from any starting state including
|
||||
// the IDLE state.
|
||||
TEST_F(FaceHidlTest, CancelTest) {
|
||||
TEST_P(FaceHidlTest, CancelTest) {
|
||||
Return<Status> ret = mService->cancel();
|
||||
// check that we were able to make an IPC request successfully
|
||||
ASSERT_EQ(Status::OK, static_cast<Status>(ret));
|
||||
@@ -347,7 +332,7 @@ TEST_F(FaceHidlTest, CancelTest) {
|
||||
EXPECT_EQ(FaceError::CANCELED, res.args->error);
|
||||
}
|
||||
|
||||
TEST_F(FaceHidlTest, OnLockoutChangedTest) {
|
||||
TEST_P(FaceHidlTest, OnLockoutChangedTest) {
|
||||
// Update active user and ensure onLockoutChanged was called.
|
||||
Return<Status> ret = mService->setActiveUser(kUserId + 1, kFacedataDir);
|
||||
ASSERT_EQ(Status::OK, static_cast<Status>(ret));
|
||||
@@ -359,11 +344,7 @@ TEST_F(FaceHidlTest, OnLockoutChangedTest) {
|
||||
|
||||
} // anonymous namespace
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
::testing::AddGlobalTestEnvironment(FaceHidlEnvironment::Instance());
|
||||
::testing::InitGoogleTest(&argc, argv);
|
||||
FaceHidlEnvironment::Instance()->init(&argc, argv);
|
||||
int status = RUN_ALL_TESTS();
|
||||
LOG(INFO) << "Test result = " << status;
|
||||
return status;
|
||||
}
|
||||
INSTANTIATE_TEST_SUITE_P(
|
||||
PerInstance, FaceHidlTest,
|
||||
testing::ValuesIn(android::hardware::getAllHalInstanceNames(IBiometricsFace::descriptor)),
|
||||
android::hardware::PrintInstanceNameToString);
|
||||
|
||||
Reference in New Issue
Block a user