Fix flaky NsdManagerTest
There is a race condition between socket connection succeeding
and interface returning a non-empty address list. So verify
that interface returns a non-empty list, before trying the
socket connection.
Bug: 272147547
Test: atest android.net.cts.NsdManagerTest --iteration 10
Change-Id: I7c7a03688ad6d8d76c741a99eeb74d28933986f1
diff --git a/tests/cts/net/src/android/net/cts/NsdManagerTest.kt b/tests/cts/net/src/android/net/cts/NsdManagerTest.kt
index 469fdba..db7f38c 100644
--- a/tests/cts/net/src/android/net/cts/NsdManagerTest.kt
+++ b/tests/cts/net/src/android/net/cts/NsdManagerTest.kt
@@ -403,6 +403,13 @@
// Wait until the link-local address can be used. Address flags are not available without
// elevated permissions, so check that bindSocket works.
PollingCheck.check("No usable v6 address on interface after $TIMEOUT_MS ms", TIMEOUT_MS) {
+ // To avoid race condition between socket connection succeeding and interface returning
+ // a non-empty address list. Verify that interface returns a non-empty list, before
+ // trying the socket connection.
+ if (NetworkInterface.getByName(ifaceName).interfaceAddresses.isEmpty()) {
+ return@check false
+ }
+
val sock = Os.socket(AF_INET6, SOCK_DGRAM, IPPROTO_UDP)
tryTest {
network.bindSocket(sock)