Loading services/vibratorservice/VibratorManagerHalController.cpp +17 −0 Original line number Diff line number Diff line Loading @@ -150,6 +150,23 @@ HalResult<void> ManagerHalController::cancelSynced() { return apply(cancelSyncedFn, "cancelSynced"); } HalResult<std::shared_ptr<Aidl::IVibrationSession>> ManagerHalController::startSession( const std::vector<int32_t>& ids, const Aidl::VibrationSessionConfig& config, const std::function<void()>& completionCallback) { hal_fn<std::shared_ptr<Aidl::IVibrationSession>> startSessionFn = [&](std::shared_ptr<ManagerHalWrapper> hal) { return hal->startSession(ids, config, completionCallback); }; return apply(startSessionFn, "startSession"); } HalResult<void> ManagerHalController::clearSessions() { hal_fn<void> clearSessionsFn = [](std::shared_ptr<ManagerHalWrapper> hal) { return hal->clearSessions(); }; return apply(clearSessionsFn, "clearSessions"); } }; // namespace vibrator }; // namespace android services/vibratorservice/VibratorManagerHalWrapper.cpp +39 −12 Original line number Diff line number Diff line Loading @@ -29,6 +29,30 @@ namespace vibrator { constexpr int32_t SINGLE_VIBRATOR_ID = 0; const constexpr char* MISSING_VIBRATOR_MESSAGE_PREFIX = "No vibrator with id="; HalResult<void> ManagerHalWrapper::prepareSynced(const std::vector<int32_t>&) { return HalResult<void>::unsupported(); } HalResult<void> ManagerHalWrapper::triggerSynced(const std::function<void()>&) { return HalResult<void>::unsupported(); } HalResult<void> ManagerHalWrapper::cancelSynced() { return HalResult<void>::unsupported(); } HalResult<std::shared_ptr<Aidl::IVibrationSession>> ManagerHalWrapper::startSession( const std::vector<int32_t>&, const Aidl::VibrationSessionConfig&, const std::function<void()>&) { return HalResult<std::shared_ptr<Aidl::IVibrationSession>>::unsupported(); } HalResult<void> ManagerHalWrapper::clearSessions() { return HalResult<void>::unsupported(); } // ------------------------------------------------------------------------------------------------- HalResult<void> LegacyManagerHalWrapper::ping() { auto pingFn = [](HalWrapper* hal) { return hal->ping(); }; return mController->doWithRetry<void>(pingFn, "ping"); Loading Loading @@ -59,18 +83,6 @@ HalResult<std::shared_ptr<HalController>> LegacyManagerHalWrapper::getVibrator(i (MISSING_VIBRATOR_MESSAGE_PREFIX + std::to_string(id)).c_str()); } HalResult<void> LegacyManagerHalWrapper::prepareSynced(const std::vector<int32_t>&) { return HalResult<void>::unsupported(); } HalResult<void> LegacyManagerHalWrapper::triggerSynced(const std::function<void()>&) { return HalResult<void>::unsupported(); } HalResult<void> LegacyManagerHalWrapper::cancelSynced() { return HalResult<void>::unsupported(); } // ------------------------------------------------------------------------------------------------- std::shared_ptr<HalWrapper> AidlManagerHalWrapper::connectToVibrator( Loading Loading @@ -186,6 +198,17 @@ HalResult<void> AidlManagerHalWrapper::triggerSynced( return HalResultFactory::fromStatus(getHal()->triggerSynced(cb)); } HalResult<std::shared_ptr<Aidl::IVibrationSession>> AidlManagerHalWrapper::startSession( const std::vector<int32_t>& ids, const Aidl::VibrationSessionConfig& config, const std::function<void()>& completionCallback) { auto cb = ndk::SharedRefBase::make<HalCallbackWrapper>(completionCallback); std::shared_ptr<Aidl::IVibrationSession> session; auto status = getHal()->startSession(ids, config, cb, &session); return HalResultFactory::fromStatus<std::shared_ptr<Aidl::IVibrationSession>>(std::move(status), std::move( session)); } HalResult<void> AidlManagerHalWrapper::cancelSynced() { auto ret = HalResultFactory::fromStatus(getHal()->cancelSynced()); if (ret.isOk()) { Loading @@ -200,6 +223,10 @@ HalResult<void> AidlManagerHalWrapper::cancelSynced() { return ret; } HalResult<void> AidlManagerHalWrapper::clearSessions() { return HalResultFactory::fromStatus(getHal()->clearSessions()); } std::shared_ptr<Aidl::IVibratorManager> AidlManagerHalWrapper::getHal() { std::lock_guard<std::mutex> lock(mHandleMutex); return mHandle; Loading services/vibratorservice/include/vibratorservice/VibratorManagerHalController.h +4 −0 Original line number Diff line number Diff line Loading @@ -62,6 +62,10 @@ public: HalResult<void> prepareSynced(const std::vector<int32_t>& ids) override final; HalResult<void> triggerSynced(const std::function<void()>& completionCallback) override final; HalResult<void> cancelSynced() override final; HalResult<std::shared_ptr<IVibrationSession>> startSession( const std::vector<int32_t>& ids, const VibrationSessionConfig& config, const std::function<void()>& completionCallback) override final; HalResult<void> clearSessions() override final; private: Connector mConnector; Loading services/vibratorservice/include/vibratorservice/VibratorManagerHalWrapper.h +16 −8 Original line number Diff line number Diff line Loading @@ -38,7 +38,8 @@ enum class ManagerCapabilities : int32_t { aidl::android::hardware::vibrator::IVibratorManager::CAP_MIXED_TRIGGER_PERFORM, MIXED_TRIGGER_COMPOSE = aidl::android::hardware::vibrator::IVibratorManager::CAP_MIXED_TRIGGER_COMPOSE, TRIGGER_CALLBACK = aidl::android::hardware::vibrator::IVibratorManager::CAP_TRIGGER_CALLBACK TRIGGER_CALLBACK = aidl::android::hardware::vibrator::IVibratorManager::CAP_TRIGGER_CALLBACK, START_SESSIONS = aidl::android::hardware::vibrator::IVibratorManager::CAP_START_SESSIONS }; inline ManagerCapabilities operator|(ManagerCapabilities lhs, ManagerCapabilities rhs) { Loading @@ -64,6 +65,9 @@ inline ManagerCapabilities& operator&=(ManagerCapabilities& lhs, ManagerCapabili // Wrapper for VibratorManager HAL handlers. class ManagerHalWrapper { public: using IVibrationSession = aidl::android::hardware::vibrator::IVibrationSession; using VibrationSessionConfig = aidl::android::hardware::vibrator::VibrationSessionConfig; ManagerHalWrapper() = default; virtual ~ManagerHalWrapper() = default; Loading @@ -78,9 +82,13 @@ public: virtual HalResult<std::vector<int32_t>> getVibratorIds() = 0; virtual HalResult<std::shared_ptr<HalController>> getVibrator(int32_t id) = 0; virtual HalResult<void> prepareSynced(const std::vector<int32_t>& ids) = 0; virtual HalResult<void> triggerSynced(const std::function<void()>& completionCallback) = 0; virtual HalResult<void> cancelSynced() = 0; virtual HalResult<void> prepareSynced(const std::vector<int32_t>& ids); virtual HalResult<void> triggerSynced(const std::function<void()>& completionCallback); virtual HalResult<void> cancelSynced(); virtual HalResult<std::shared_ptr<IVibrationSession>> startSession( const std::vector<int32_t>& ids, const VibrationSessionConfig& config, const std::function<void()>& completionCallback); virtual HalResult<void> clearSessions(); }; // Wrapper for the VibratorManager over single Vibrator HAL. Loading @@ -98,10 +106,6 @@ public: HalResult<std::vector<int32_t>> getVibratorIds() override final; HalResult<std::shared_ptr<HalController>> getVibrator(int32_t id) override final; HalResult<void> prepareSynced(const std::vector<int32_t>& ids) override final; HalResult<void> triggerSynced(const std::function<void()>& completionCallback) override final; HalResult<void> cancelSynced() override final; private: const std::shared_ptr<HalController> mController; }; Loading @@ -126,6 +130,10 @@ public: HalResult<void> prepareSynced(const std::vector<int32_t>& ids) override final; HalResult<void> triggerSynced(const std::function<void()>& completionCallback) override final; HalResult<void> cancelSynced() override final; HalResult<std::shared_ptr<IVibrationSession>> startSession( const std::vector<int32_t>& ids, const VibrationSessionConfig& config, const std::function<void()>& completionCallback) override final; HalResult<void> clearSessions() override final; private: std::mutex mHandleMutex; Loading services/vibratorservice/test/VibratorManagerHalControllerTest.cpp +34 −6 Original line number Diff line number Diff line Loading @@ -27,6 +27,8 @@ #include "test_mocks.h" #include "test_utils.h" using aidl::android::hardware::vibrator::IVibrationSession; using aidl::android::hardware::vibrator::VibrationSessionConfig; using android::vibrator::HalController; using namespace android; Loading @@ -34,6 +36,7 @@ using namespace testing; static constexpr int MAX_ATTEMPTS = 2; static const std::vector<int32_t> VIBRATOR_IDS = {1, 2}; static const VibrationSessionConfig SESSION_CONFIG; static constexpr int VIBRATOR_ID = 1; // ------------------------------------------------------------------------------------------------- Loading @@ -52,6 +55,11 @@ public: MOCK_METHOD(vibrator::HalResult<void>, triggerSynced, (const std::function<void()>& completionCallback), (override)); MOCK_METHOD(vibrator::HalResult<void>, cancelSynced, (), (override)); MOCK_METHOD(vibrator::HalResult<std::shared_ptr<IVibrationSession>>, startSession, (const std::vector<int32_t>& ids, const VibrationSessionConfig& s, const std::function<void()>& completionCallback), (override)); MOCK_METHOD(vibrator::HalResult<void>, clearSessions, (), (override)); }; // ------------------------------------------------------------------------------------------------- Loading Loading @@ -79,7 +87,8 @@ protected: void setHalExpectations(int32_t cardinality, vibrator::HalResult<void> voidResult, vibrator::HalResult<vibrator::ManagerCapabilities> capabilitiesResult, vibrator::HalResult<std::vector<int32_t>> idsResult, vibrator::HalResult<std::shared_ptr<HalController>> vibratorResult) { vibrator::HalResult<std::shared_ptr<HalController>> vibratorResult, vibrator::HalResult<std::shared_ptr<IVibrationSession>> sessionResult) { EXPECT_CALL(*mMockHal.get(), ping()) .Times(Exactly(cardinality)) .WillRepeatedly(Return(voidResult)); Loading @@ -101,10 +110,16 @@ protected: EXPECT_CALL(*mMockHal.get(), cancelSynced()) .Times(Exactly(cardinality)) .WillRepeatedly(Return(voidResult)); EXPECT_CALL(*mMockHal.get(), startSession(_, _, _)) .Times(Exactly(cardinality)) .WillRepeatedly(Return(sessionResult)); EXPECT_CALL(*mMockHal.get(), clearSessions()) .Times(Exactly(cardinality)) .WillRepeatedly(Return(voidResult)); if (cardinality > 1) { // One reconnection for each retry. EXPECT_CALL(*mMockHal.get(), tryReconnect()).Times(Exactly(7 * (cardinality - 1))); EXPECT_CALL(*mMockHal.get(), tryReconnect()).Times(Exactly(9 * (cardinality - 1))); } else { EXPECT_CALL(*mMockHal.get(), tryReconnect()).Times(Exactly(0)); } Loading @@ -127,7 +142,8 @@ TEST_F(VibratorManagerHalControllerTest, TestApiCallsAreForwardedToHal) { vibrator::HalResult<vibrator::ManagerCapabilities>::ok( vibrator::ManagerCapabilities::SYNC), vibrator::HalResult<std::vector<int32_t>>::ok(VIBRATOR_IDS), vibrator::HalResult<std::shared_ptr<HalController>>::ok(nullptr)); vibrator::HalResult<std::shared_ptr<HalController>>::ok(nullptr), vibrator::HalResult<std::shared_ptr<IVibrationSession>>::ok(nullptr)); ASSERT_TRUE(mController->ping().isOk()); Loading @@ -146,6 +162,8 @@ TEST_F(VibratorManagerHalControllerTest, TestApiCallsAreForwardedToHal) { ASSERT_TRUE(mController->prepareSynced(VIBRATOR_IDS).isOk()); ASSERT_TRUE(mController->triggerSynced([]() {}).isOk()); ASSERT_TRUE(mController->cancelSynced().isOk()); ASSERT_TRUE(mController->startSession(VIBRATOR_IDS, SESSION_CONFIG, []() {}).isOk()); ASSERT_TRUE(mController->clearSessions().isOk()); ASSERT_EQ(1, mConnectCounter); } Loading @@ -154,7 +172,8 @@ TEST_F(VibratorManagerHalControllerTest, TestUnsupportedApiResultDoesNotResetHal setHalExpectations(/* cardinality= */ 1, vibrator::HalResult<void>::unsupported(), vibrator::HalResult<vibrator::ManagerCapabilities>::unsupported(), vibrator::HalResult<std::vector<int32_t>>::unsupported(), vibrator::HalResult<std::shared_ptr<HalController>>::unsupported()); vibrator::HalResult<std::shared_ptr<HalController>>::unsupported(), vibrator::HalResult<std::shared_ptr<IVibrationSession>>::unsupported()); ASSERT_TRUE(mController->ping().isUnsupported()); ASSERT_TRUE(mController->getCapabilities().isUnsupported()); Loading @@ -163,6 +182,8 @@ TEST_F(VibratorManagerHalControllerTest, TestUnsupportedApiResultDoesNotResetHal ASSERT_TRUE(mController->prepareSynced(VIBRATOR_IDS).isUnsupported()); ASSERT_TRUE(mController->triggerSynced([]() {}).isUnsupported()); ASSERT_TRUE(mController->cancelSynced().isUnsupported()); ASSERT_TRUE(mController->startSession(VIBRATOR_IDS, SESSION_CONFIG, []() {}).isUnsupported()); ASSERT_TRUE(mController->clearSessions().isUnsupported()); ASSERT_EQ(1, mConnectCounter); } Loading @@ -171,7 +192,8 @@ TEST_F(VibratorManagerHalControllerTest, TestOperationFailedApiResultDoesNotRese setHalExpectations(/* cardinality= */ 1, vibrator::HalResult<void>::failed("msg"), vibrator::HalResult<vibrator::ManagerCapabilities>::failed("msg"), vibrator::HalResult<std::vector<int32_t>>::failed("msg"), vibrator::HalResult<std::shared_ptr<HalController>>::failed("msg")); vibrator::HalResult<std::shared_ptr<HalController>>::failed("msg"), vibrator::HalResult<std::shared_ptr<IVibrationSession>>::failed("msg")); ASSERT_TRUE(mController->ping().isFailed()); ASSERT_TRUE(mController->getCapabilities().isFailed()); Loading @@ -180,6 +202,8 @@ TEST_F(VibratorManagerHalControllerTest, TestOperationFailedApiResultDoesNotRese ASSERT_TRUE(mController->prepareSynced(VIBRATOR_IDS).isFailed()); ASSERT_TRUE(mController->triggerSynced([]() {}).isFailed()); ASSERT_TRUE(mController->cancelSynced().isFailed()); ASSERT_TRUE(mController->startSession(VIBRATOR_IDS, SESSION_CONFIG, []() {}).isFailed()); ASSERT_TRUE(mController->clearSessions().isFailed()); ASSERT_EQ(1, mConnectCounter); } Loading @@ -188,7 +212,9 @@ TEST_F(VibratorManagerHalControllerTest, TestTransactionFailedApiResultResetsHal setHalExpectations(MAX_ATTEMPTS, vibrator::HalResult<void>::transactionFailed("m"), vibrator::HalResult<vibrator::ManagerCapabilities>::transactionFailed("m"), vibrator::HalResult<std::vector<int32_t>>::transactionFailed("m"), vibrator::HalResult<std::shared_ptr<HalController>>::transactionFailed("m")); vibrator::HalResult<std::shared_ptr<HalController>>::transactionFailed("m"), vibrator::HalResult<std::shared_ptr<IVibrationSession>>::transactionFailed( "m")); ASSERT_TRUE(mController->ping().isFailed()); ASSERT_TRUE(mController->getCapabilities().isFailed()); Loading @@ -197,6 +223,8 @@ TEST_F(VibratorManagerHalControllerTest, TestTransactionFailedApiResultResetsHal ASSERT_TRUE(mController->prepareSynced(VIBRATOR_IDS).isFailed()); ASSERT_TRUE(mController->triggerSynced([]() {}).isFailed()); ASSERT_TRUE(mController->cancelSynced().isFailed()); ASSERT_TRUE(mController->startSession(VIBRATOR_IDS, SESSION_CONFIG, []() {}).isFailed()); ASSERT_TRUE(mController->clearSessions().isFailed()); ASSERT_EQ(1, mConnectCounter); } Loading Loading
services/vibratorservice/VibratorManagerHalController.cpp +17 −0 Original line number Diff line number Diff line Loading @@ -150,6 +150,23 @@ HalResult<void> ManagerHalController::cancelSynced() { return apply(cancelSyncedFn, "cancelSynced"); } HalResult<std::shared_ptr<Aidl::IVibrationSession>> ManagerHalController::startSession( const std::vector<int32_t>& ids, const Aidl::VibrationSessionConfig& config, const std::function<void()>& completionCallback) { hal_fn<std::shared_ptr<Aidl::IVibrationSession>> startSessionFn = [&](std::shared_ptr<ManagerHalWrapper> hal) { return hal->startSession(ids, config, completionCallback); }; return apply(startSessionFn, "startSession"); } HalResult<void> ManagerHalController::clearSessions() { hal_fn<void> clearSessionsFn = [](std::shared_ptr<ManagerHalWrapper> hal) { return hal->clearSessions(); }; return apply(clearSessionsFn, "clearSessions"); } }; // namespace vibrator }; // namespace android
services/vibratorservice/VibratorManagerHalWrapper.cpp +39 −12 Original line number Diff line number Diff line Loading @@ -29,6 +29,30 @@ namespace vibrator { constexpr int32_t SINGLE_VIBRATOR_ID = 0; const constexpr char* MISSING_VIBRATOR_MESSAGE_PREFIX = "No vibrator with id="; HalResult<void> ManagerHalWrapper::prepareSynced(const std::vector<int32_t>&) { return HalResult<void>::unsupported(); } HalResult<void> ManagerHalWrapper::triggerSynced(const std::function<void()>&) { return HalResult<void>::unsupported(); } HalResult<void> ManagerHalWrapper::cancelSynced() { return HalResult<void>::unsupported(); } HalResult<std::shared_ptr<Aidl::IVibrationSession>> ManagerHalWrapper::startSession( const std::vector<int32_t>&, const Aidl::VibrationSessionConfig&, const std::function<void()>&) { return HalResult<std::shared_ptr<Aidl::IVibrationSession>>::unsupported(); } HalResult<void> ManagerHalWrapper::clearSessions() { return HalResult<void>::unsupported(); } // ------------------------------------------------------------------------------------------------- HalResult<void> LegacyManagerHalWrapper::ping() { auto pingFn = [](HalWrapper* hal) { return hal->ping(); }; return mController->doWithRetry<void>(pingFn, "ping"); Loading Loading @@ -59,18 +83,6 @@ HalResult<std::shared_ptr<HalController>> LegacyManagerHalWrapper::getVibrator(i (MISSING_VIBRATOR_MESSAGE_PREFIX + std::to_string(id)).c_str()); } HalResult<void> LegacyManagerHalWrapper::prepareSynced(const std::vector<int32_t>&) { return HalResult<void>::unsupported(); } HalResult<void> LegacyManagerHalWrapper::triggerSynced(const std::function<void()>&) { return HalResult<void>::unsupported(); } HalResult<void> LegacyManagerHalWrapper::cancelSynced() { return HalResult<void>::unsupported(); } // ------------------------------------------------------------------------------------------------- std::shared_ptr<HalWrapper> AidlManagerHalWrapper::connectToVibrator( Loading Loading @@ -186,6 +198,17 @@ HalResult<void> AidlManagerHalWrapper::triggerSynced( return HalResultFactory::fromStatus(getHal()->triggerSynced(cb)); } HalResult<std::shared_ptr<Aidl::IVibrationSession>> AidlManagerHalWrapper::startSession( const std::vector<int32_t>& ids, const Aidl::VibrationSessionConfig& config, const std::function<void()>& completionCallback) { auto cb = ndk::SharedRefBase::make<HalCallbackWrapper>(completionCallback); std::shared_ptr<Aidl::IVibrationSession> session; auto status = getHal()->startSession(ids, config, cb, &session); return HalResultFactory::fromStatus<std::shared_ptr<Aidl::IVibrationSession>>(std::move(status), std::move( session)); } HalResult<void> AidlManagerHalWrapper::cancelSynced() { auto ret = HalResultFactory::fromStatus(getHal()->cancelSynced()); if (ret.isOk()) { Loading @@ -200,6 +223,10 @@ HalResult<void> AidlManagerHalWrapper::cancelSynced() { return ret; } HalResult<void> AidlManagerHalWrapper::clearSessions() { return HalResultFactory::fromStatus(getHal()->clearSessions()); } std::shared_ptr<Aidl::IVibratorManager> AidlManagerHalWrapper::getHal() { std::lock_guard<std::mutex> lock(mHandleMutex); return mHandle; Loading
services/vibratorservice/include/vibratorservice/VibratorManagerHalController.h +4 −0 Original line number Diff line number Diff line Loading @@ -62,6 +62,10 @@ public: HalResult<void> prepareSynced(const std::vector<int32_t>& ids) override final; HalResult<void> triggerSynced(const std::function<void()>& completionCallback) override final; HalResult<void> cancelSynced() override final; HalResult<std::shared_ptr<IVibrationSession>> startSession( const std::vector<int32_t>& ids, const VibrationSessionConfig& config, const std::function<void()>& completionCallback) override final; HalResult<void> clearSessions() override final; private: Connector mConnector; Loading
services/vibratorservice/include/vibratorservice/VibratorManagerHalWrapper.h +16 −8 Original line number Diff line number Diff line Loading @@ -38,7 +38,8 @@ enum class ManagerCapabilities : int32_t { aidl::android::hardware::vibrator::IVibratorManager::CAP_MIXED_TRIGGER_PERFORM, MIXED_TRIGGER_COMPOSE = aidl::android::hardware::vibrator::IVibratorManager::CAP_MIXED_TRIGGER_COMPOSE, TRIGGER_CALLBACK = aidl::android::hardware::vibrator::IVibratorManager::CAP_TRIGGER_CALLBACK TRIGGER_CALLBACK = aidl::android::hardware::vibrator::IVibratorManager::CAP_TRIGGER_CALLBACK, START_SESSIONS = aidl::android::hardware::vibrator::IVibratorManager::CAP_START_SESSIONS }; inline ManagerCapabilities operator|(ManagerCapabilities lhs, ManagerCapabilities rhs) { Loading @@ -64,6 +65,9 @@ inline ManagerCapabilities& operator&=(ManagerCapabilities& lhs, ManagerCapabili // Wrapper for VibratorManager HAL handlers. class ManagerHalWrapper { public: using IVibrationSession = aidl::android::hardware::vibrator::IVibrationSession; using VibrationSessionConfig = aidl::android::hardware::vibrator::VibrationSessionConfig; ManagerHalWrapper() = default; virtual ~ManagerHalWrapper() = default; Loading @@ -78,9 +82,13 @@ public: virtual HalResult<std::vector<int32_t>> getVibratorIds() = 0; virtual HalResult<std::shared_ptr<HalController>> getVibrator(int32_t id) = 0; virtual HalResult<void> prepareSynced(const std::vector<int32_t>& ids) = 0; virtual HalResult<void> triggerSynced(const std::function<void()>& completionCallback) = 0; virtual HalResult<void> cancelSynced() = 0; virtual HalResult<void> prepareSynced(const std::vector<int32_t>& ids); virtual HalResult<void> triggerSynced(const std::function<void()>& completionCallback); virtual HalResult<void> cancelSynced(); virtual HalResult<std::shared_ptr<IVibrationSession>> startSession( const std::vector<int32_t>& ids, const VibrationSessionConfig& config, const std::function<void()>& completionCallback); virtual HalResult<void> clearSessions(); }; // Wrapper for the VibratorManager over single Vibrator HAL. Loading @@ -98,10 +106,6 @@ public: HalResult<std::vector<int32_t>> getVibratorIds() override final; HalResult<std::shared_ptr<HalController>> getVibrator(int32_t id) override final; HalResult<void> prepareSynced(const std::vector<int32_t>& ids) override final; HalResult<void> triggerSynced(const std::function<void()>& completionCallback) override final; HalResult<void> cancelSynced() override final; private: const std::shared_ptr<HalController> mController; }; Loading @@ -126,6 +130,10 @@ public: HalResult<void> prepareSynced(const std::vector<int32_t>& ids) override final; HalResult<void> triggerSynced(const std::function<void()>& completionCallback) override final; HalResult<void> cancelSynced() override final; HalResult<std::shared_ptr<IVibrationSession>> startSession( const std::vector<int32_t>& ids, const VibrationSessionConfig& config, const std::function<void()>& completionCallback) override final; HalResult<void> clearSessions() override final; private: std::mutex mHandleMutex; Loading
services/vibratorservice/test/VibratorManagerHalControllerTest.cpp +34 −6 Original line number Diff line number Diff line Loading @@ -27,6 +27,8 @@ #include "test_mocks.h" #include "test_utils.h" using aidl::android::hardware::vibrator::IVibrationSession; using aidl::android::hardware::vibrator::VibrationSessionConfig; using android::vibrator::HalController; using namespace android; Loading @@ -34,6 +36,7 @@ using namespace testing; static constexpr int MAX_ATTEMPTS = 2; static const std::vector<int32_t> VIBRATOR_IDS = {1, 2}; static const VibrationSessionConfig SESSION_CONFIG; static constexpr int VIBRATOR_ID = 1; // ------------------------------------------------------------------------------------------------- Loading @@ -52,6 +55,11 @@ public: MOCK_METHOD(vibrator::HalResult<void>, triggerSynced, (const std::function<void()>& completionCallback), (override)); MOCK_METHOD(vibrator::HalResult<void>, cancelSynced, (), (override)); MOCK_METHOD(vibrator::HalResult<std::shared_ptr<IVibrationSession>>, startSession, (const std::vector<int32_t>& ids, const VibrationSessionConfig& s, const std::function<void()>& completionCallback), (override)); MOCK_METHOD(vibrator::HalResult<void>, clearSessions, (), (override)); }; // ------------------------------------------------------------------------------------------------- Loading Loading @@ -79,7 +87,8 @@ protected: void setHalExpectations(int32_t cardinality, vibrator::HalResult<void> voidResult, vibrator::HalResult<vibrator::ManagerCapabilities> capabilitiesResult, vibrator::HalResult<std::vector<int32_t>> idsResult, vibrator::HalResult<std::shared_ptr<HalController>> vibratorResult) { vibrator::HalResult<std::shared_ptr<HalController>> vibratorResult, vibrator::HalResult<std::shared_ptr<IVibrationSession>> sessionResult) { EXPECT_CALL(*mMockHal.get(), ping()) .Times(Exactly(cardinality)) .WillRepeatedly(Return(voidResult)); Loading @@ -101,10 +110,16 @@ protected: EXPECT_CALL(*mMockHal.get(), cancelSynced()) .Times(Exactly(cardinality)) .WillRepeatedly(Return(voidResult)); EXPECT_CALL(*mMockHal.get(), startSession(_, _, _)) .Times(Exactly(cardinality)) .WillRepeatedly(Return(sessionResult)); EXPECT_CALL(*mMockHal.get(), clearSessions()) .Times(Exactly(cardinality)) .WillRepeatedly(Return(voidResult)); if (cardinality > 1) { // One reconnection for each retry. EXPECT_CALL(*mMockHal.get(), tryReconnect()).Times(Exactly(7 * (cardinality - 1))); EXPECT_CALL(*mMockHal.get(), tryReconnect()).Times(Exactly(9 * (cardinality - 1))); } else { EXPECT_CALL(*mMockHal.get(), tryReconnect()).Times(Exactly(0)); } Loading @@ -127,7 +142,8 @@ TEST_F(VibratorManagerHalControllerTest, TestApiCallsAreForwardedToHal) { vibrator::HalResult<vibrator::ManagerCapabilities>::ok( vibrator::ManagerCapabilities::SYNC), vibrator::HalResult<std::vector<int32_t>>::ok(VIBRATOR_IDS), vibrator::HalResult<std::shared_ptr<HalController>>::ok(nullptr)); vibrator::HalResult<std::shared_ptr<HalController>>::ok(nullptr), vibrator::HalResult<std::shared_ptr<IVibrationSession>>::ok(nullptr)); ASSERT_TRUE(mController->ping().isOk()); Loading @@ -146,6 +162,8 @@ TEST_F(VibratorManagerHalControllerTest, TestApiCallsAreForwardedToHal) { ASSERT_TRUE(mController->prepareSynced(VIBRATOR_IDS).isOk()); ASSERT_TRUE(mController->triggerSynced([]() {}).isOk()); ASSERT_TRUE(mController->cancelSynced().isOk()); ASSERT_TRUE(mController->startSession(VIBRATOR_IDS, SESSION_CONFIG, []() {}).isOk()); ASSERT_TRUE(mController->clearSessions().isOk()); ASSERT_EQ(1, mConnectCounter); } Loading @@ -154,7 +172,8 @@ TEST_F(VibratorManagerHalControllerTest, TestUnsupportedApiResultDoesNotResetHal setHalExpectations(/* cardinality= */ 1, vibrator::HalResult<void>::unsupported(), vibrator::HalResult<vibrator::ManagerCapabilities>::unsupported(), vibrator::HalResult<std::vector<int32_t>>::unsupported(), vibrator::HalResult<std::shared_ptr<HalController>>::unsupported()); vibrator::HalResult<std::shared_ptr<HalController>>::unsupported(), vibrator::HalResult<std::shared_ptr<IVibrationSession>>::unsupported()); ASSERT_TRUE(mController->ping().isUnsupported()); ASSERT_TRUE(mController->getCapabilities().isUnsupported()); Loading @@ -163,6 +182,8 @@ TEST_F(VibratorManagerHalControllerTest, TestUnsupportedApiResultDoesNotResetHal ASSERT_TRUE(mController->prepareSynced(VIBRATOR_IDS).isUnsupported()); ASSERT_TRUE(mController->triggerSynced([]() {}).isUnsupported()); ASSERT_TRUE(mController->cancelSynced().isUnsupported()); ASSERT_TRUE(mController->startSession(VIBRATOR_IDS, SESSION_CONFIG, []() {}).isUnsupported()); ASSERT_TRUE(mController->clearSessions().isUnsupported()); ASSERT_EQ(1, mConnectCounter); } Loading @@ -171,7 +192,8 @@ TEST_F(VibratorManagerHalControllerTest, TestOperationFailedApiResultDoesNotRese setHalExpectations(/* cardinality= */ 1, vibrator::HalResult<void>::failed("msg"), vibrator::HalResult<vibrator::ManagerCapabilities>::failed("msg"), vibrator::HalResult<std::vector<int32_t>>::failed("msg"), vibrator::HalResult<std::shared_ptr<HalController>>::failed("msg")); vibrator::HalResult<std::shared_ptr<HalController>>::failed("msg"), vibrator::HalResult<std::shared_ptr<IVibrationSession>>::failed("msg")); ASSERT_TRUE(mController->ping().isFailed()); ASSERT_TRUE(mController->getCapabilities().isFailed()); Loading @@ -180,6 +202,8 @@ TEST_F(VibratorManagerHalControllerTest, TestOperationFailedApiResultDoesNotRese ASSERT_TRUE(mController->prepareSynced(VIBRATOR_IDS).isFailed()); ASSERT_TRUE(mController->triggerSynced([]() {}).isFailed()); ASSERT_TRUE(mController->cancelSynced().isFailed()); ASSERT_TRUE(mController->startSession(VIBRATOR_IDS, SESSION_CONFIG, []() {}).isFailed()); ASSERT_TRUE(mController->clearSessions().isFailed()); ASSERT_EQ(1, mConnectCounter); } Loading @@ -188,7 +212,9 @@ TEST_F(VibratorManagerHalControllerTest, TestTransactionFailedApiResultResetsHal setHalExpectations(MAX_ATTEMPTS, vibrator::HalResult<void>::transactionFailed("m"), vibrator::HalResult<vibrator::ManagerCapabilities>::transactionFailed("m"), vibrator::HalResult<std::vector<int32_t>>::transactionFailed("m"), vibrator::HalResult<std::shared_ptr<HalController>>::transactionFailed("m")); vibrator::HalResult<std::shared_ptr<HalController>>::transactionFailed("m"), vibrator::HalResult<std::shared_ptr<IVibrationSession>>::transactionFailed( "m")); ASSERT_TRUE(mController->ping().isFailed()); ASSERT_TRUE(mController->getCapabilities().isFailed()); Loading @@ -197,6 +223,8 @@ TEST_F(VibratorManagerHalControllerTest, TestTransactionFailedApiResultResetsHal ASSERT_TRUE(mController->prepareSynced(VIBRATOR_IDS).isFailed()); ASSERT_TRUE(mController->triggerSynced([]() {}).isFailed()); ASSERT_TRUE(mController->cancelSynced().isFailed()); ASSERT_TRUE(mController->startSession(VIBRATOR_IDS, SESSION_CONFIG, []() {}).isFailed()); ASSERT_TRUE(mController->clearSessions().isFailed()); ASSERT_EQ(1, mConnectCounter); } Loading