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", ], 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()) }