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

Commit f6b3d72b authored by Nucca Chen's avatar Nucca Chen Committed by android-build-merger
Browse files

Merge "resolv: Disallow duplicate DNS metrics listener subscription" am:...

Merge "resolv: Disallow duplicate DNS metrics listener subscription" am: 389bcf6a28 am: 0b54cb601b am: 3f65171942
am: d3e98b44cf

Change-Id: I521fc65661a7ac082f0e16a392fb3261a7bedfdf
parents e5879e0c 6e8909e4
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -90,12 +90,12 @@ int ResolverEventReporter::addListenerImplLocked(
        return -EINVAL;
    }

    // TODO: Perhaps ignore the listener which comes from the same binder.
    const auto& it = mListeners.find(listener);
    if (it != mListeners.end()) {
    for (const auto& it : mListeners) {
        if (it->asBinder().get() == listener->asBinder().get()) {
            LOG(WARNING) << "The listener was already subscribed";
            return -EEXIST;
        }
    }

    static AIBinder_DeathRecipient* deathRecipient = nullptr;
    if (deathRecipient == nullptr) {
+26 −1
Original line number Diff line number Diff line
@@ -145,8 +145,33 @@ TEST_F(DnsResolverBinderTest, IsAlive) {
    ASSERT_TRUE(isAlive);
}

TEST_F(DnsResolverBinderTest, RegisterEventListener_NullListener) {
    android::binder::Status status = mDnsResolver->registerEventListener(
            android::interface_cast<INetdEventListener>(nullptr));
    ASSERT_FALSE(status.isOk());
    ASSERT_EQ(EINVAL, status.serviceSpecificErrorCode());
}

TEST_F(DnsResolverBinderTest, RegisterEventListener_DuplicateSubscription) {
    class DummyListener : public android::net::metrics::BaseTestMetricsListener {
        bool isVerified() override { return true; }  // unused
    };

    // Expect to subscribe successfully.
    android::sp<DummyListener> dummyListener = new DummyListener();
    android::binder::Status status = mDnsResolver->registerEventListener(
            android::interface_cast<INetdEventListener>(dummyListener));
    ASSERT_TRUE(status.isOk()) << status.exceptionMessage();

    // Expect to subscribe failed with registered listener instance.
    status = mDnsResolver->registerEventListener(
            android::interface_cast<INetdEventListener>(dummyListener));
    ASSERT_FALSE(status.isOk());
    ASSERT_EQ(EEXIST, status.serviceSpecificErrorCode());
}

// TODO: Move this test to resolver_test.cpp
TEST_F(DnsResolverBinderTest, EventListener_onDnsEvent) {
TEST_F(DnsResolverBinderTest, RegisterEventListener_onDnsEvent) {
    // The test configs are used to trigger expected events. The expected results are defined in
    // expectedResults.
    static const struct TestConfig {