diff options
-rw-r--r-- | tests/cts/net/src/android/net/cts/EthernetManagerTest.kt | 40 |
1 files changed, 38 insertions, 2 deletions
diff --git a/tests/cts/net/src/android/net/cts/EthernetManagerTest.kt b/tests/cts/net/src/android/net/cts/EthernetManagerTest.kt index a0fb29e8b8..69c41cd390 100644 --- a/tests/cts/net/src/android/net/cts/EthernetManagerTest.kt +++ b/tests/cts/net/src/android/net/cts/EthernetManagerTest.kt @@ -22,6 +22,8 @@ import android.content.Context import android.net.ConnectivityManager import android.net.EthernetManager import android.net.EthernetManager.InterfaceStateListener +import android.net.EthernetManager.ETHERNET_STATE_DISABLED +import android.net.EthernetManager.ETHERNET_STATE_ENABLED import android.net.EthernetManager.ROLE_CLIENT import android.net.EthernetManager.ROLE_NONE import android.net.EthernetManager.ROLE_SERVER @@ -41,6 +43,7 @@ import android.net.NetworkCapabilities.TRANSPORT_TEST import android.net.NetworkRequest import android.net.TestNetworkInterface import android.net.TestNetworkManager +import android.net.cts.EthernetManagerTest.EthernetStateListener.CallbackEntry.EthernetStateChanged import android.net.cts.EthernetManagerTest.EthernetStateListener.CallbackEntry.InterfaceStateChanged import android.os.Build import android.os.Handler @@ -72,6 +75,7 @@ import java.net.Inet6Address import java.util.concurrent.CompletableFuture import java.util.concurrent.ExecutionException import java.util.concurrent.TimeUnit +import java.util.function.IntConsumer import kotlin.test.assertEquals import kotlin.test.assertFailsWith import kotlin.test.assertFalse @@ -142,7 +146,7 @@ class EthernetManagerTest { private open class EthernetStateListener private constructor( private val history: ArrayTrackRecord<CallbackEntry> - ) : InterfaceStateListener, + ) : InterfaceStateListener, IntConsumer, TrackRecord<EthernetStateListener.CallbackEntry> by history { constructor() : this(ArrayTrackRecord()) @@ -155,6 +159,8 @@ class EthernetManagerTest { val role: Int, val configuration: IpConfiguration? ) : CallbackEntry() + + data class EthernetStateChanged(val state: Int) : CallbackEntry() } override fun onInterfaceStateChanged( @@ -166,6 +172,10 @@ class EthernetManagerTest { add(InterfaceStateChanged(iface, state, role, cfg)) } + override fun accept(state: Int) { + add(EthernetStateChanged(state)) + } + fun <T : CallbackEntry> expectCallback(expected: T): T { val event = pollForNextCallback() assertEquals(expected, event) @@ -176,6 +186,10 @@ class EthernetManagerTest { expectCallback(createChangeEvent(iface.interfaceName, state, role)) } + fun expectCallback(state: Int) { + expectCallback(EthernetStateChanged(state)) + } + fun createChangeEvent(iface: String, state: Int, role: Int) = InterfaceStateChanged(iface, state, role, if (state != STATE_ABSENT) DEFAULT_IP_CONFIGURATION else null) @@ -194,6 +208,10 @@ class EthernetManagerTest { eventuallyExpect(iface.interfaceName, state, role) } + fun eventuallyExpect(state: Int) { + assertNotNull(eventuallyExpect(EthernetStateChanged(state))) + } + fun assertNoCallback() { val cb = events.poll(NO_CALLBACK_TIMEOUT_MS) assertNull(cb, "Expected no callback but got $cb") @@ -240,12 +258,17 @@ class EthernetManagerTest { @After fun tearDown() { if (!isEthernetSupported()) return - setIncludeTestInterfaces(false) + // Reenable ethernet, so ABSENT callbacks are received. + setEthernetEnabled(true) for (iface in createdIfaces) { iface.destroy() ifaceListener.eventuallyExpect(iface, STATE_ABSENT, ROLE_NONE) } + + // After test interfaces are removed, disable tracking. + setIncludeTestInterfaces(false) + for (listener in addedListeners) { em.removeInterfaceStateListener(listener) } @@ -310,6 +333,19 @@ class EthernetManagerTest { } } + private fun setEthernetEnabled(enabled: Boolean) { + runAsShell(NETWORK_SETTINGS) { em.setEthernetEnabled(enabled) } + + val listener = EthernetStateListener() + em.addEthernetStateListener(HandlerExecutor(Handler(Looper.getMainLooper())), listener) + try { + listener.eventuallyExpect( + if (enabled) ETHERNET_STATE_ENABLED else ETHERNET_STATE_DISABLED) + } finally { + em.removeEthernetStateListener(listener) + } + } + private fun NetworkRequest.createCopyWithEthernetSpecifier(ifaceName: String) = NetworkRequest.Builder(NetworkRequest(ETH_REQUEST)) .setNetworkSpecifier(EthernetNetworkSpecifier(ifaceName)).build() |