From 13d8406217824aa311c7a3b16133c20807af2457 Mon Sep 17 00:00:00 2001 From: Ilya Matyukhin Date: Mon, 7 Jun 2021 16:56:11 -0700 Subject: [PATCH] Fix VTS test Bug: 187128449 Test: atest VtsHalBiometricsFaceTargetTest Change-Id: I8e77b18a5e79ae905a78e540b4da0b304672b514 --- .../vts/VtsHalBiometricsFaceTargetTest.cpp | 52 ++++++++----------- 1 file changed, 22 insertions(+), 30 deletions(-) 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(); } -