Loading libs/binder/ndk/tests/libbinder_ndk_unit_test.cpp +32 −0 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ constexpr char kBinderNdkUnitTestService[] = "BinderNdkUnitTest"; constexpr char kLazyBinderNdkUnitTestService[] = "LazyBinderNdkUnitTest"; constexpr char kForcePersistNdkUnitTestService[] = "ForcePersistNdkUnitTestService"; constexpr char kActiveServicesNdkUnitTestService[] = "ActiveServicesNdkUnitTestService"; constexpr char kBinderNdkUnitTestServiceFlagged[] = "BinderNdkUnitTestFlagged"; constexpr unsigned int kShutdownWaitTime = 11; constexpr uint64_t kContextTestValue = 0xb4e42fb4d9a1d715; Loading Loading @@ -158,6 +159,24 @@ int generatedService() { return 1; // should not return } int generatedFlaggedService(const AServiceManager_AddServiceFlag flags, const char* instance) { ABinderProcess_setThreadPoolMaxThreadCount(0); auto service = ndk::SharedRefBase::make<MyBinderNdkUnitTest>(); auto binder = service->asBinder(); binder_exception_t exception = AServiceManager_addServiceWithFlags(binder.get(), instance, flags); if (exception != EX_NONE) { LOG(FATAL) << "Could not register: " << exception << " " << instance; } ABinderProcess_joinThreadPool(); return 1; // should not return } // manually-written parceling class considered bad practice class MyFoo : public IFoo { binder_status_t doubleNumber(int32_t in, int32_t* out) override { Loading Loading @@ -847,6 +866,12 @@ TEST(NdkBinder, UseHandleShellCommand) { EXPECT_EQ("CMD", shellCmdToString(testService, {"C", "M", "D"})); } TEST(NdkBinder, FlaggedServiceAccessible) { static const sp<android::IServiceManager> sm(android::defaultServiceManager()); sp<IBinder> testService = sm->getService(String16(kBinderNdkUnitTestServiceFlagged)); ASSERT_NE(nullptr, testService); } TEST(NdkBinder, GetClassInterfaceDescriptor) { ASSERT_STREQ(IFoo::kIFooDescriptor, AIBinder_Class_getDescriptor(IFoo::kClass)); } Loading Loading @@ -901,6 +926,13 @@ int main(int argc, char* argv[]) { prctl(PR_SET_PDEATHSIG, SIGHUP); return generatedService(); } if (fork() == 0) { prctl(PR_SET_PDEATHSIG, SIGHUP); // We may want to change this flag to be more generic ones for the future AServiceManager_AddServiceFlag test_flags = AServiceManager_AddServiceFlag::ADD_SERVICE_ALLOW_ISOLATED; return generatedFlaggedService(test_flags, kBinderNdkUnitTestServiceFlagged); } ABinderProcess_setThreadPoolMaxThreadCount(1); // to receive death notifications/callbacks ABinderProcess_startThreadPool(); Loading Loading
libs/binder/ndk/tests/libbinder_ndk_unit_test.cpp +32 −0 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ constexpr char kBinderNdkUnitTestService[] = "BinderNdkUnitTest"; constexpr char kLazyBinderNdkUnitTestService[] = "LazyBinderNdkUnitTest"; constexpr char kForcePersistNdkUnitTestService[] = "ForcePersistNdkUnitTestService"; constexpr char kActiveServicesNdkUnitTestService[] = "ActiveServicesNdkUnitTestService"; constexpr char kBinderNdkUnitTestServiceFlagged[] = "BinderNdkUnitTestFlagged"; constexpr unsigned int kShutdownWaitTime = 11; constexpr uint64_t kContextTestValue = 0xb4e42fb4d9a1d715; Loading Loading @@ -158,6 +159,24 @@ int generatedService() { return 1; // should not return } int generatedFlaggedService(const AServiceManager_AddServiceFlag flags, const char* instance) { ABinderProcess_setThreadPoolMaxThreadCount(0); auto service = ndk::SharedRefBase::make<MyBinderNdkUnitTest>(); auto binder = service->asBinder(); binder_exception_t exception = AServiceManager_addServiceWithFlags(binder.get(), instance, flags); if (exception != EX_NONE) { LOG(FATAL) << "Could not register: " << exception << " " << instance; } ABinderProcess_joinThreadPool(); return 1; // should not return } // manually-written parceling class considered bad practice class MyFoo : public IFoo { binder_status_t doubleNumber(int32_t in, int32_t* out) override { Loading Loading @@ -847,6 +866,12 @@ TEST(NdkBinder, UseHandleShellCommand) { EXPECT_EQ("CMD", shellCmdToString(testService, {"C", "M", "D"})); } TEST(NdkBinder, FlaggedServiceAccessible) { static const sp<android::IServiceManager> sm(android::defaultServiceManager()); sp<IBinder> testService = sm->getService(String16(kBinderNdkUnitTestServiceFlagged)); ASSERT_NE(nullptr, testService); } TEST(NdkBinder, GetClassInterfaceDescriptor) { ASSERT_STREQ(IFoo::kIFooDescriptor, AIBinder_Class_getDescriptor(IFoo::kClass)); } Loading Loading @@ -901,6 +926,13 @@ int main(int argc, char* argv[]) { prctl(PR_SET_PDEATHSIG, SIGHUP); return generatedService(); } if (fork() == 0) { prctl(PR_SET_PDEATHSIG, SIGHUP); // We may want to change this flag to be more generic ones for the future AServiceManager_AddServiceFlag test_flags = AServiceManager_AddServiceFlag::ADD_SERVICE_ALLOW_ISOLATED; return generatedFlaggedService(test_flags, kBinderNdkUnitTestServiceFlagged); } ABinderProcess_setThreadPoolMaxThreadCount(1); // to receive death notifications/callbacks ABinderProcess_startThreadPool(); Loading