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

Commit ebfb4c29 authored by Jeff Pu's avatar Jeff Pu Committed by Automerger Merge Worker
Browse files

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

Merge "Wait for HAL service death signal before trying to connect it again" into main am: 1be0855a am: 14f79686

Original change: https://android-review.googlesource.com/c/platform/hardware/interfaces/+/3478785



Change-Id: I8c870ad3411b6c9a95d67054d445d1d6f821ff26
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents e2439374 14f79686
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);

@@ -197,6 +217,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) {