From 61a6d8d72effaedf8ed6bc5461e36859faac4f4f Mon Sep 17 00:00:00 2001 From: Ilya Matyukhin Date: Wed, 21 Jul 2021 13:22:45 -0700 Subject: [PATCH 1/2] IFace: fix VTS test to match the interface contract Bug: 193849101 Test: atest VtsHalBiometricsFaceTargetTest Change-Id: I5b3ed1b87244d6265d23c15ef2c2efe4f6155973 --- .../face/aidl/vts/VtsHalBiometricsFaceTargetTest.cpp | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/biometrics/face/aidl/vts/VtsHalBiometricsFaceTargetTest.cpp b/biometrics/face/aidl/vts/VtsHalBiometricsFaceTargetTest.cpp index 4dc44f16c7..8906b8d935 100644 --- a/biometrics/face/aidl/vts/VtsHalBiometricsFaceTargetTest.cpp +++ b/biometrics/face/aidl/vts/VtsHalBiometricsFaceTargetTest.cpp @@ -60,9 +60,10 @@ class SessionCallback : public BnSessionCallback { return ndk::ScopedAStatus::ok(); } - ndk::ScopedAStatus onError(Error error, int32_t /*vendorCode*/) override { + ndk::ScopedAStatus onError(Error error, int32_t vendorCode) override { auto lock = std::lock_guard{mMutex}; mError = error; + mVendorCode = vendorCode; mOnErrorInvoked = true; mCv.notify_one(); return ndk::ScopedAStatus::ok(); @@ -141,6 +142,7 @@ class SessionCallback : public BnSessionCallback { std::mutex mMutex; std::condition_variable mCv; Error mError = Error::UNKNOWN; + int32_t mVendorCode = 0; int64_t mGeneratedChallenge = 0; int64_t mRevokedChallenge = 0; bool mOnChallengeGeneratedInvoked = false; @@ -218,6 +220,8 @@ TEST_P(Face, EnrollWithBadHatResultsInErrorTest) { // Make sure an error is returned. auto lock = std::unique_lock{mCb->mMutex}; mCb->mCv.wait(lock, [this] { return mCb->mOnErrorInvoked; }); + EXPECT_EQ(mCb->mError, Error::UNABLE_TO_PROCESS); + EXPECT_EQ(mCb->mVendorCode, 0); } TEST_P(Face, GenerateChallengeProducesUniqueChallengesTest) { @@ -287,13 +291,15 @@ TEST_P(Face, RemoveEnrollmentsWorksTest) { mCb->mCv.wait(lock, [this] { return mCb->mOnEnrollmentsRemovedInvoked; }); } -TEST_P(Face, GetFeaturesWorksTest) { +TEST_P(Face, GetFeaturesWithoutEnrollmentsResultsInUnableToProcess) { // Call the method. ASSERT_TRUE(mSession->getFeatures().isOk()); // Wait for the result. auto lock = std::unique_lock{mCb->mMutex}; - mCb->mCv.wait(lock, [this] { return mCb->mOnFeaturesRetrievedInvoked; }); + mCb->mCv.wait(lock, [this] { return mCb->mOnErrorInvoked; }); + EXPECT_EQ(mCb->mError, Error::UNABLE_TO_PROCESS); + EXPECT_EQ(mCb->mVendorCode, 0); } TEST_P(Face, GetAuthenticatorIdWorksTest) { From 9208a095686a2b39e6ef3f6a664719ed933563f5 Mon Sep 17 00:00:00 2001 From: Ilya Matyukhin Date: Wed, 21 Jul 2021 23:13:12 +0000 Subject: [PATCH 2/2] IFace: fix default implementation to pass VTS Bug: 193849101 Test: atest VtsHalBiometricsFaceTargetTest Change-Id: Ia90c639074a6a9ed270f7c499c8816a8c7224b7f --- biometrics/face/aidl/default/Session.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/biometrics/face/aidl/default/Session.cpp b/biometrics/face/aidl/default/Session.cpp index 0cb7c95de8..39f37538f7 100644 --- a/biometrics/face/aidl/default/Session.cpp +++ b/biometrics/face/aidl/default/Session.cpp @@ -107,7 +107,8 @@ ndk::ScopedAStatus Session::removeEnrollments(const std::vector& /*enro ndk::ScopedAStatus Session::getFeatures() { LOG(INFO) << "getFeatures"; if (cb_) { - cb_->onFeaturesRetrieved({}); + // Must error out with UNABLE_TO_PROCESS when no faces are enrolled. + cb_->onError(Error::UNABLE_TO_PROCESS, 0 /* vendorCode */); } return ndk::ScopedAStatus::ok(); }