Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b9da5561 authored by Jeff Pu's avatar Jeff Pu
Browse files

Wait for HAL service death signal before trying to connect it again

Bug: 390787326
Test: atest VtsHalBiometricsFaceTargetTest
Change-Id: Ie360cc2c9050e093d88de4b347c7a82e0bd8d666
parent 74a6d419
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -157,6 +157,11 @@ class SessionCallback : public BnSessionCallback {
};

class Face : public testing::TestWithParam<std::string> {
    static void HalServiceDied(void* cookie) {
        auto halDeathPromise = static_cast<std::promise<void>*>(cookie);
        halDeathPromise->set_value();
    }

  protected:
    void SetUp() override {
        // Prepare the callback.
@@ -176,8 +181,23 @@ class Face : public testing::TestWithParam<std::string> {
            ASSERT_NE(binder, nullptr);
            mHal = IFace::fromBinder(ndk::SpAIBinder(binder));

            // Create HAL service death notifier
            auto halDeathPromise = std::make_shared<std::promise<void>>();
            mHalDeathRecipient = ndk::ScopedAIBinder_DeathRecipient(
                    AIBinder_DeathRecipient_new(&HalServiceDied));
            ASSERT_EQ(STATUS_OK, AIBinder_linkToDeath(binder, mHalDeathRecipient.get(),
                                                      static_cast<void*>(halDeathPromise.get())));

            // Create a session.
            isOk = mHal->createSession(kSensorId, kUserId, mCb, &mSession).isOk();
            if (!isOk) {
                // Failed to create session on first attempt, it is likely that the HAL service
                //   is dying or dead. Wait for its death notification signal before next try
                auto future = halDeathPromise->get_future();
                auto status = future.wait_for(std::chrono::milliseconds(500));
                EXPECT_EQ(status, std::future_status::ready);
            }

            ++retries;
        } while (!isOk && retries < 2);

@@ -196,6 +216,7 @@ class Face : public testing::TestWithParam<std::string> {
    std::shared_ptr<IFace> mHal;
    std::shared_ptr<SessionCallback> mCb;
    std::shared_ptr<ISession> mSession;
    ::ndk::ScopedAIBinder_DeathRecipient mHalDeathRecipient;
};

TEST_P(Face, GetSensorPropsWorksTest) {