/* * Copyright 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include #include #include #include #include #include #include #include #include #include #include #include using ::aidl::hardware::google::bluetooth::ccc::IBluetoothCcc; using ::aidl::hardware::google::bluetooth::ccc::IBluetoothCccCallback; using ::aidl::hardware::google::bluetooth::ccc::Direction; using ::aidl::hardware::google::bluetooth::ccc::LmpEventId; using ::aidl::hardware::google::bluetooth::ccc::Timestamp; using ::ndk::ScopedAStatus; class BluetoothCccTest : public ::testing::TestWithParam { public: class BluetoothCccCallback : public ::aidl::hardware::google::bluetooth::ccc::BnBluetoothCccCallback { public: BluetoothCccCallback() = default; ::ndk::ScopedAStatus onEventGenerated(const Timestamp& /* timestamp */, const std::array& /* address */, Direction /* direction */, LmpEventId /* lmpEventId */, char16_t /* eventCounter */) override { return ::ndk::ScopedAStatus::ok(); } ::ndk::ScopedAStatus onRegistered(bool) override { return ::ndk::ScopedAStatus::ok(); } }; virtual void SetUp() override { ALOGI("SetUp Ccc Test"); bluetooth_ccc = IBluetoothCcc::fromBinder( ndk::SpAIBinder(AServiceManager_waitForService(GetParam().c_str()))); ASSERT_NE(bluetooth_ccc, nullptr); ccc_callback = ndk::SharedRefBase::make(); ASSERT_NE(ccc_callback, nullptr); } virtual void TearDown() override { ALOGI("TearDown Ccc Test"); bluetooth_ccc = nullptr; ASSERT_EQ(bluetooth_ccc, nullptr); } // test functions to call ScopedAStatus registerForLmpEvents(std::array); ScopedAStatus unregisterLmpEvents(std::array); private: std::shared_ptr bluetooth_ccc; std::shared_ptr ccc_callback; }; ScopedAStatus BluetoothCccTest::registerForLmpEvents(std::array addr) { std::vector events = {LmpEventId::CONNECT_IND, LmpEventId::LL_PHY_UPDATE_IND}; return bluetooth_ccc->registerForLmpEvents(ccc_callback, std::array(addr), events); } ScopedAStatus BluetoothCccTest::unregisterLmpEvents(std::array addr) { return bluetooth_ccc->unregisterLmpEvents(std::array(addr)); } TEST_P(BluetoothCccTest, RegisterForLmpEvents) { ALOGI("Run test RegisterForLmpEvents"); ScopedAStatus status = registerForLmpEvents( std::array{0x11, 0x22, 0x33, 0x44, 0x55, 0x66}); ASSERT_TRUE(status.isOk()); } TEST_P(BluetoothCccTest, UnregisterLmpEvents) { std::array addr = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66}; ScopedAStatus status = registerForLmpEvents(addr); ASSERT_TRUE(status.isOk()); status = unregisterLmpEvents(addr); ASSERT_TRUE(status.isOk()); } GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(BluetoothCccTest); INSTANTIATE_TEST_SUITE_P(PerInstance, BluetoothCccTest, testing::ValuesIn(android::getAidlHalInstanceNames( IBluetoothCcc::descriptor)), android::PrintInstanceNameToString); int main(int argc, char **argv) { ::testing::InitGoogleTest(&argc, argv); ABinderProcess_startThreadPool(); int status = RUN_ALL_TESTS(); ALOGI("Test result = %d", status); return status; }