From a189e9eae01279993284492f08e573c0aeaec1b7 Mon Sep 17 00:00:00 2001 From: Patrick Rohr Date: Wed, 9 Aug 2023 02:32:59 -0700 Subject: [PATCH 1/3] ethernet: add missing assert in eventuallyExpect helper eventuallyExpect(CallbackEntry) was missing an assertNotNull, which essentially made it a no-op. Bug: 241070589 Test: atest EthernetManagerTest Change-Id: I0ebf54bc9b7ae8a5de59f2bc302b06747174d4ea --- .../src/android/net/cts/EthernetManagerTest.kt | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/tests/cts/net/src/android/net/cts/EthernetManagerTest.kt b/tests/cts/net/src/android/net/cts/EthernetManagerTest.kt index 732a42b60e..36c7c11125 100644 --- a/tests/cts/net/src/android/net/cts/EthernetManagerTest.kt +++ b/tests/cts/net/src/android/net/cts/EthernetManagerTest.kt @@ -275,16 +275,17 @@ class EthernetManagerTest { return events.poll(TIMEOUT_MS) ?: fail("Did not receive callback after ${TIMEOUT_MS}ms") } - fun eventuallyExpect(expected: CallbackEntry) = events.poll(TIMEOUT_MS) { it == expected } + fun eventuallyExpect(expected: CallbackEntry) { + val cb = events.poll(TIMEOUT_MS) { it == expected } + assertNotNull(cb, "Never received expected $expected") + } fun eventuallyExpect(iface: EthernetTestInterface, state: Int, role: Int) { - val event = createChangeEvent(iface.name, state, role) - assertNotNull(eventuallyExpect(event), "Never received expected $event") + eventuallyExpect(createChangeEvent(iface.name, state, role)) } fun eventuallyExpect(state: Int) { - val event = EthernetStateChanged(state) - assertNotNull(eventuallyExpect(event), "Never received expected $event") + eventuallyExpect(EthernetStateChanged(state)) } fun assertNoCallback() { @@ -652,9 +653,9 @@ class EthernetManagerTest { val listener = EthernetStateListener() addInterfaceStateListener(listener) - // Note: using eventuallyExpect as there may be other interfaces present. + // BUG(241070589): server mode interfaces should report STATE_LINK_UP listener.eventuallyExpect(InterfaceStateChanged(iface.name, - STATE_LINK_UP, ROLE_SERVER, /* IpConfiguration */ null)) + STATE_ABSENT, ROLE_SERVER, /* IpConfiguration */ null)) releaseTetheredInterface() listener.eventuallyExpect(iface, STATE_LINK_UP, ROLE_CLIENT) From 4dc25339861ab52abda625778cfc41a58980cf28 Mon Sep 17 00:00:00 2001 From: Patrick Rohr Date: Wed, 9 Aug 2023 02:40:05 -0700 Subject: [PATCH 2/3] ethernet: correctly report tethering interface state EthernetNetworkFactory does not track interfaces in server mode; use EthernetTracker#getInterfaceState() instead. Bug: 241070589 Test: atest EthernetManagerTest Change-Id: Id68f2ae8b30dd5bacef09b828692a9692c6dba75 --- .../src/com/android/server/ethernet/EthernetTracker.java | 2 +- tests/cts/net/src/android/net/cts/EthernetManagerTest.kt | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/service-t/src/com/android/server/ethernet/EthernetTracker.java b/service-t/src/com/android/server/ethernet/EthernetTracker.java index 81413503ca..48e86d8e7e 100644 --- a/service-t/src/com/android/server/ethernet/EthernetTracker.java +++ b/service-t/src/com/android/server/ethernet/EthernetTracker.java @@ -325,7 +325,7 @@ public class EthernetTracker { protected void unicastInterfaceStateChange(@NonNull IEthernetServiceListener listener, @NonNull String iface) { ensureRunningOnEthernetServiceThread(); - final int state = mFactory.getInterfaceState(iface); + final int state = getInterfaceState(iface); final int role = getInterfaceRole(iface); final IpConfiguration config = getIpConfigurationForCallback(iface, state); try { diff --git a/tests/cts/net/src/android/net/cts/EthernetManagerTest.kt b/tests/cts/net/src/android/net/cts/EthernetManagerTest.kt index 36c7c11125..11203d7422 100644 --- a/tests/cts/net/src/android/net/cts/EthernetManagerTest.kt +++ b/tests/cts/net/src/android/net/cts/EthernetManagerTest.kt @@ -653,9 +653,8 @@ class EthernetManagerTest { val listener = EthernetStateListener() addInterfaceStateListener(listener) - // BUG(241070589): server mode interfaces should report STATE_LINK_UP - listener.eventuallyExpect(InterfaceStateChanged(iface.name, - STATE_ABSENT, ROLE_SERVER, /* IpConfiguration */ null)) + // TODO(b/295146844): do not report IpConfiguration for server mode interfaces. + listener.eventuallyExpect(iface, STATE_LINK_UP, ROLE_SERVER) releaseTetheredInterface() listener.eventuallyExpect(iface, STATE_LINK_UP, ROLE_CLIENT) From dbe0fd3f53c062c29ea8db4c40be961d4d6af458 Mon Sep 17 00:00:00 2001 From: Patrick Rohr Date: Wed, 9 Aug 2023 05:46:46 -0700 Subject: [PATCH 3/3] ethernet: use TrackRecord backtrace for better failure logs Test: atest EthernetManagerTest Change-Id: Ifcc038281164b0d840bfc52524e7ac4d32c640a0 --- tests/cts/net/src/android/net/cts/EthernetManagerTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/cts/net/src/android/net/cts/EthernetManagerTest.kt b/tests/cts/net/src/android/net/cts/EthernetManagerTest.kt index 11203d7422..76a955b40c 100644 --- a/tests/cts/net/src/android/net/cts/EthernetManagerTest.kt +++ b/tests/cts/net/src/android/net/cts/EthernetManagerTest.kt @@ -277,7 +277,7 @@ class EthernetManagerTest { fun eventuallyExpect(expected: CallbackEntry) { val cb = events.poll(TIMEOUT_MS) { it == expected } - assertNotNull(cb, "Never received expected $expected") + assertNotNull(cb, "Never received expected $expected. Received: ${events.backtrace()}") } fun eventuallyExpect(iface: EthernetTestInterface, state: Int, role: Int) {