summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark <markchien@google.com>2022-06-22 09:42:54 +0000
committerPatrick Rohr <prohr@google.com>2022-10-03 19:59:13 +0000
commit88f253679b410d3d9702177babe7524a4b8055dc (patch)
treebe434987e6b544a827b589eed4a7d21209ae46b1
parentb0b4fa9c10a57c4db4e5968d1f686b7bf8059d14 (diff)
downloadConnectivity-88f253679b410d3d9702177babe7524a4b8055dc.tar.gz
TestOnly: add setEthernetEnable support to EthernetManagerTest
Also fix the bug in teardown that setIncludeTestInterfaces(false) should be called after the interfaces are destroyed, otherwise the call to ifaceListener.eventuallyExpect(ABSENT) may receive callbacks out of order (and it doesn't actually wait on the interface being removed properly). Test: atest EthernetManagerTest Bug: 247964480 Merged-In: I6650c028c121d932f10219d04d40d1ad60d9d4d8 Change-Id: I6650c028c121d932f10219d04d40d1ad60d9d4d8 (cherry picked from commit bd5745effa805a77de263e48444dfee1831f998e)
-rw-r--r--tests/cts/net/src/android/net/cts/EthernetManagerTest.kt40
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()