ethernet: add test for removing interface while in server mode

Bug: 236892130
Bug: 252963267
Test: atest EthernetManagerTest#testRemoveInterface_whileInServerMode
Change-Id: I3ca71cd87301da8e96d31f7632b69d318ee97d4a
(cherry picked from commit f34945bf6f7e1db2b4361f4938f5d2a35bc23707)
Merged-In: I3ca71cd87301da8e96d31f7632b69d318ee97d4a
diff --git a/tests/cts/net/src/android/net/cts/EthernetManagerTest.kt b/tests/cts/net/src/android/net/cts/EthernetManagerTest.kt
index 5dbdd8a..c590bd7 100644
--- a/tests/cts/net/src/android/net/cts/EthernetManagerTest.kt
+++ b/tests/cts/net/src/android/net/cts/EthernetManagerTest.kt
@@ -74,6 +74,7 @@
 import java.net.Inet6Address
 import java.util.concurrent.CompletableFuture
 import java.util.concurrent.ExecutionException
+import java.util.concurrent.TimeoutException
 import java.util.concurrent.TimeUnit
 import java.util.function.IntConsumer
 import kotlin.test.assertEquals
@@ -403,6 +404,21 @@
         }
     }
 
+    private fun assumeNoInterfaceForTetheringAvailable() {
+        // Interfaces that have configured NetworkCapabilities will never be used for tethering,
+        // see aosp/2123900.
+        try {
+            // assumeException does not exist.
+            requestTetheredInterface().expectOnAvailable()
+            // interface used for tethering is available, throw an assumption error.
+            assumeTrue(false)
+        } catch (e: TimeoutException) {
+            // do nothing -- the TimeoutException indicates that no interface is available for
+            // tethering.
+            releaseTetheredInterface()
+        }
+    }
+
     // TODO: this function is now used in two places (EthernetManagerTest and
     // EthernetTetheringTest), so it should be moved to testutils.
     private fun isAdbOverNetwork(): Boolean {
@@ -414,6 +430,7 @@
     @Test
     fun testCallbacks_forServerModeInterfaces() {
         // do not run this test when adb might be connected over ethernet.
+        // TODO: Consider using assumeNoInterfaceForTetheringAvailable() instead, so this runs on CF
         assumeFalse(isAdbOverNetwork())
 
         val listener = EthernetStateListener()