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

Commit 81b4d5a5 authored by Parth Sane's avatar Parth Sane
Browse files

Add negative tests for ServiceManager RegisterForNotifications and unregisterForNotifications

Bug: 333854840
Test: atest binderLibTest

Change-Id: I8a304def1d26cd1a3a4b9b3e9a3048ad702aa941
parent 5f5998f2
Loading
Loading
Loading
Loading
+32 −1
Original line number Original line Diff line number Diff line
@@ -38,6 +38,7 @@
#include <binder/IServiceManager.h>
#include <binder/IServiceManager.h>
#include <binder/RpcServer.h>
#include <binder/RpcServer.h>
#include <binder/RpcSession.h>
#include <binder/RpcSession.h>
#include <binder/Status.h>
#include <binder/unique_fd.h>
#include <binder/unique_fd.h>
#include <utils/Flattenable.h>
#include <utils/Flattenable.h>


@@ -57,6 +58,7 @@ using namespace std::string_literals;
using namespace std::chrono_literals;
using namespace std::chrono_literals;
using android::base::testing::HasValue;
using android::base::testing::HasValue;
using android::base::testing::Ok;
using android::base::testing::Ok;
using android::binder::Status;
using android::binder::unique_fd;
using android::binder::unique_fd;
using testing::ExplainMatchResult;
using testing::ExplainMatchResult;
using testing::Matcher;
using testing::Matcher;
@@ -461,6 +463,35 @@ TEST_F(BinderLibTest, AddManagerToManager) {
    EXPECT_EQ(NO_ERROR, sm->addService(String16("binderLibTest-manager"), binder));
    EXPECT_EQ(NO_ERROR, sm->addService(String16("binderLibTest-manager"), binder));
}
}


TEST_F(BinderLibTest, RegisterForNotificationsFailure) {
    auto sm = defaultServiceManager();
    using LocalRegistrationCallback = IServiceManager::LocalRegistrationCallback;
    class LocalRegistrationCallbackImpl : public virtual LocalRegistrationCallback {
        void onServiceRegistration(const String16&, const sp<IBinder>&) override {}
        virtual ~LocalRegistrationCallbackImpl() {}
    };
    sp<LocalRegistrationCallback> cb = sp<LocalRegistrationCallbackImpl>::make();

    EXPECT_EQ(BAD_VALUE, sm->registerForNotifications(String16("ValidName"), nullptr));
    EXPECT_EQ(UNKNOWN_ERROR, sm->registerForNotifications(String16("InvalidName!$"), cb));
}

TEST_F(BinderLibTest, UnregisterForNotificationsFailure) {
    auto sm = defaultServiceManager();
    using LocalRegistrationCallback = IServiceManager::LocalRegistrationCallback;
    class LocalRegistrationCallbackImpl : public virtual LocalRegistrationCallback {
        void onServiceRegistration(const String16&, const sp<IBinder>&) override {}
        virtual ~LocalRegistrationCallbackImpl() {}
    };
    sp<LocalRegistrationCallback> cb = sp<LocalRegistrationCallbackImpl>::make();

    EXPECT_EQ(OK, sm->registerForNotifications(String16("ValidName"), cb));

    EXPECT_EQ(BAD_VALUE, sm->unregisterForNotifications(String16("ValidName"), nullptr));
    EXPECT_EQ(BAD_VALUE, sm->unregisterForNotifications(String16("AnotherValidName"), cb));
    EXPECT_EQ(BAD_VALUE, sm->unregisterForNotifications(String16("InvalidName!!!"), cb));
}

TEST_F(BinderLibTest, WasParceled) {
TEST_F(BinderLibTest, WasParceled) {
    auto binder = sp<BBinder>::make();
    auto binder = sp<BBinder>::make();
    EXPECT_FALSE(binder->wasParceled());
    EXPECT_FALSE(binder->wasParceled());