diff --git a/biometrics/face/aidl/vts/VtsHalBiometricsFaceTargetTest.cpp b/biometrics/face/aidl/vts/VtsHalBiometricsFaceTargetTest.cpp index ada6f734ca..47a78139f2 100644 --- a/biometrics/face/aidl/vts/VtsHalBiometricsFaceTargetTest.cpp +++ b/biometrics/face/aidl/vts/VtsHalBiometricsFaceTargetTest.cpp @@ -32,21 +32,8 @@ using namespace std::literals::chrono_literals; constexpr int kSensorId = 0; constexpr int kUserId = 0; -enum class MethodName { - kOnError, - kOnSessionClosed, -}; - -struct Invocation { - MethodName methodName; - Error error; - int32_t vendorCode; -}; - class SessionCallback : public BnSessionCallback { public: - explicit SessionCallback(Invocation* inv) : mInv(inv) {} - ndk::ScopedAStatus onChallengeGenerated(int64_t /*challenge*/) override { return ndk::ScopedAStatus::ok(); } @@ -64,11 +51,11 @@ class SessionCallback : public BnSessionCallback { } ndk::ScopedAStatus onError(Error error, int32_t vendorCode) override { - *mInv = {}; - mInv->methodName = MethodName::kOnError; - mInv->error = error; - mInv->vendorCode = vendorCode; - + auto lock = std::lock_guard{mMutex}; + mError = error; + mVendorCode = vendorCode; + mOnErrorInvoked = true; + mCv.notify_one(); return ndk::ScopedAStatus::ok(); } @@ -121,14 +108,18 @@ class SessionCallback : public BnSessionCallback { } ndk::ScopedAStatus onSessionClosed() override { - *mInv = {}; - mInv->methodName = MethodName::kOnSessionClosed; - + auto lock = std::lock_guard{mMutex}; + mOnSessionClosedInvoked = true; + mCv.notify_one(); return ndk::ScopedAStatus::ok(); } - private: - Invocation* mInv; + std::mutex mMutex; + std::condition_variable mCv; + Error mError = Error::UNKNOWN; + int32_t mVendorCode = 0; + bool mOnErrorInvoked = false; + bool mOnSessionClosedInvoked = false; }; class Face : public testing::TestWithParam { @@ -140,12 +131,11 @@ class Face : public testing::TestWithParam { } std::shared_ptr mHal; - Invocation mInv; }; TEST_P(Face, AuthenticateTest) { // Prepare the callback. - auto cb = ndk::SharedRefBase::make(&mInv); + auto cb = ndk::SharedRefBase::make(); // Create a session std::shared_ptr session; @@ -155,15 +145,18 @@ TEST_P(Face, AuthenticateTest) { std::shared_ptr cancellationSignal; ASSERT_TRUE(session->authenticate(0 /* operationId */, &cancellationSignal).isOk()); + auto lock = std::unique_lock(cb->mMutex); + cb->mCv.wait(lock, [&cb] { return cb->mOnErrorInvoked; }); // Get the results - EXPECT_EQ(mInv.methodName, MethodName::kOnError); - EXPECT_EQ(mInv.error, Error::UNABLE_TO_PROCESS); - EXPECT_EQ(mInv.vendorCode, 0); + EXPECT_EQ(cb->mError, Error::UNABLE_TO_PROCESS); + EXPECT_EQ(cb->mVendorCode, 0); + lock.unlock(); // Close the session ASSERT_TRUE(session->close().isOk()); - EXPECT_EQ(mInv.methodName, MethodName::kOnSessionClosed); + lock.lock(); + cb->mCv.wait(lock, [&cb] { return cb->mOnSessionClosedInvoked; }); } GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(Face); @@ -180,4 +173,3 @@ int main(int argc, char** argv) { ABinderProcess_startThreadPool(); return RUN_ALL_TESTS(); } -