From e897f2fdbf049da69fb93e4329c8e3ec2f5e0097 Mon Sep 17 00:00:00 2001 From: Paul Hu Date: Thu, 26 Jun 2025 07:30:00 +0000 Subject: [PATCH 1/2] Exclude more files from mDNS standalone library MdnsPacketRepeater and MdnsReplySender are not used in the current mDNS standalone library. Exclude these files from the library, as they are unnecessary. Bug: 427426427 Test: m Flag: EXEMPT bug fix Change-Id: I2ae559df5257773d854772adced5c39bde67172b --- service-t/Android.bp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/service-t/Android.bp b/service-t/Android.bp index 81378f5ead..551788ae1f 100644 --- a/service-t/Android.bp +++ b/service-t/Android.bp @@ -114,8 +114,10 @@ java_library { "src/com/android/server/connectivity/mdns/MdnsAdvertiser.java", "src/com/android/server/connectivity/mdns/MdnsAnnouncer.java", "src/com/android/server/connectivity/mdns/MdnsInterfaceAdvertiser.java", + "src/com/android/server/connectivity/mdns/MdnsPacketRepeater.java", "src/com/android/server/connectivity/mdns/MdnsProber.java", "src/com/android/server/connectivity/mdns/MdnsRecordRepository.java", + "src/com/android/server/connectivity/mdns/MdnsReplySender.java", "src/com/android/server/connectivity/mdns/SchedulerFactory.java", "src/com/android/server/connectivity/mdns/SocketNetLinkMonitorFactory.java", ], From 4d22c15b0af776c65f50bb5e0e69f60feba01b74 Mon Sep 17 00:00:00 2001 From: Paul Hu Date: Wed, 25 Jun 2025 10:01:41 +0000 Subject: [PATCH 2/2] Remove delayed messages from handler queue correctly This change replaces removeMessages() with removeEqualMessages(). The latter uses the equals() method to correctly compare the content of interface name strings, ensuring previously delayed messages are properly removed. Bug: 427426427 Test: Manual testing with some modifications. Test: atest ConnectivityCoverageTests NsdManagerTest Flag: EXEMPT bug fix Change-Id: If5f9b5e8425fc9bb235431edd78c3f3a28a037d8 --- .../server/connectivity/mdns/MdnsReplySender.java | 12 +++++++----- .../connectivity/mdns/MdnsReplySenderTest.kt | 15 ++++++++++++--- 2 files changed, 19 insertions(+), 8 deletions(-) diff --git a/service-t/src/com/android/server/connectivity/mdns/MdnsReplySender.java b/service-t/src/com/android/server/connectivity/mdns/MdnsReplySender.java index f41d6be8d2..2fff2172bc 100644 --- a/service-t/src/com/android/server/connectivity/mdns/MdnsReplySender.java +++ b/service-t/src/com/android/server/connectivity/mdns/MdnsReplySender.java @@ -53,7 +53,8 @@ import java.util.Set; */ @RequiresApi(Build.VERSION_CODES.TIRAMISU) public class MdnsReplySender { - private static final int MSG_SEND = 1; + @VisibleForTesting + static final int MSG_SEND = 1; private static final int PACKET_NOT_SENT = 0; private static final int PACKET_SENT = 1; @@ -96,10 +97,11 @@ public class MdnsReplySender { } /** - * @see Handler#removeMessages(int) + * @see Handler#removeEqualMessages(int, Object) */ - public void removeMessages(@NonNull Handler handler, int what, @NonNull Object object) { - handler.removeMessages(what, object); + public void removeEqualMessages(@NonNull Handler handler, int what, + @NonNull Object object) { + handler.removeEqualMessages(what, object); } /** @@ -155,7 +157,7 @@ public class MdnsReplySender { ensureRunningOnHandlerThread(mHandler); if (mMdnsFeatureFlags.isKnownAnswerSuppressionEnabled()) { - mDependencies.removeMessages(mHandler, MSG_SEND, reply.source); + mDependencies.removeEqualMessages(mHandler, MSG_SEND, reply.source); final MdnsReplyInfo queuingReply = mSrcReplies.remove(reply.source); final ArraySet answers = new ArraySet<>(); diff --git a/tests/unit/java/com/android/server/connectivity/mdns/MdnsReplySenderTest.kt b/tests/unit/java/com/android/server/connectivity/mdns/MdnsReplySenderTest.kt index 92560472ee..edcd078677 100644 --- a/tests/unit/java/com/android/server/connectivity/mdns/MdnsReplySenderTest.kt +++ b/tests/unit/java/com/android/server/connectivity/mdns/MdnsReplySenderTest.kt @@ -25,6 +25,7 @@ import android.os.Message import com.android.net.module.util.SharedLog import com.android.server.connectivity.mdns.MdnsConstants.IPV4_SOCKET_ADDR import com.android.server.connectivity.mdns.MdnsConstants.IPV6_SOCKET_ADDR +import com.android.server.connectivity.mdns.MdnsReplySender.MSG_SEND import com.android.server.connectivity.mdns.MdnsReplySender.getReplyDestination import com.android.testutils.DevSdkIgnoreRule.IgnoreUpTo import com.android.testutils.DevSdkIgnoreRunner @@ -352,12 +353,18 @@ class MdnsReplySenderTest { private fun verifyMessageQueued( sender: MdnsReplySender, - replies: List + replies: List, + enableKAS: Boolean = true ): Pair { val handlerCaptor = ArgumentCaptor.forClass(Handler::class.java) val messageCaptor = ArgumentCaptor.forClass(Message::class.java) - for (reply in replies) { + for ((index, reply) in replies.withIndex()) { queueReply(sender, reply) + verify(deps, times(if (enableKAS) index + 1 else 0)).removeEqualMessages( + any(), + eq(MSG_SEND), + any() + ) verify(deps).sendMessageDelayed( handlerCaptor.capture(), messageCaptor.capture(), @@ -396,7 +403,7 @@ class MdnsReplySenderTest { source, emptyList() ) - val (handler, message) = verifyMessageQueued(replySender, listOf(reply)) + val (handler, message) = verifyMessageQueued(replySender, listOf(reply), enableKAS = false) verifyReplySent(handler, message, answers) } @@ -438,6 +445,7 @@ class MdnsReplySenderTest { answers ) queueReply(replySender, knownAnswersReply) + verify(deps, times(2)).removeEqualMessages(any(), eq(MSG_SEND), any()) verify(deps, times(1)).sendMessageDelayed(any(), any(), anyLong()) } @@ -517,6 +525,7 @@ class MdnsReplySenderTest { ) queueReply(replySender, secondKnownAnswerReply) + verify(deps, times(3)).removeEqualMessages(any(), eq(MSG_SEND), any()) // Verify that no reply is queued, as all answers are known. verify(deps, times(2)).sendMessageDelayed(any(), any(), anyLong()) }