diff --git a/service-t/src/com/android/server/ethernet/EthernetNetworkFactory.java b/service-t/src/com/android/server/ethernet/EthernetNetworkFactory.java index 604afc3ba0..e5bddf64fe 100644 --- a/service-t/src/com/android/server/ethernet/EthernetNetworkFactory.java +++ b/service-t/src/com/android/server/ethernet/EthernetNetworkFactory.java @@ -649,13 +649,12 @@ public class EthernetNetworkFactory { if (!up) { // was up, goes down // retract network offer and stop IpClient. unregisterNetworkOfferAndStop(); - // If only setting the interface down, send a callback to signal completion. - EthernetNetworkFactory.maybeSendNetworkManagementCallback(listener, name, null); } else { // was down, goes up // register network offer registerNetworkOffer(); } + EthernetNetworkFactory.maybeSendNetworkManagementCallback(listener, name, null); return true; } diff --git a/tests/cts/net/src/android/net/cts/EthernetManagerTest.kt b/tests/cts/net/src/android/net/cts/EthernetManagerTest.kt index 1a3b01ed65..d72cf1ff1f 100644 --- a/tests/cts/net/src/android/net/cts/EthernetManagerTest.kt +++ b/tests/cts/net/src/android/net/cts/EthernetManagerTest.kt @@ -718,4 +718,18 @@ class EthernetManagerTest { releaseTetheredInterface() listener.assertNoCallback() } + + @Test + fun testEnableDisableInterface_withActiveRequest() { + val iface = createInterface() + val cb = requestNetwork(ETH_REQUEST) + cb.expectAvailable() + cb.assertNeverLost() + + disableInterface(iface).expectResult(iface.name) + cb.eventuallyExpectLost() + + enableInterface(iface).expectResult(iface.name) + cb.expectAvailable() + } } diff --git a/tests/unit/java/com/android/server/ethernet/EthernetNetworkFactoryTest.java b/tests/unit/java/com/android/server/ethernet/EthernetNetworkFactoryTest.java index 8a18ee75ee..b42058f8a3 100644 --- a/tests/unit/java/com/android/server/ethernet/EthernetNetworkFactoryTest.java +++ b/tests/unit/java/com/android/server/ethernet/EthernetNetworkFactoryTest.java @@ -320,14 +320,21 @@ public class EthernetNetworkFactoryTest { public void testUpdateInterfaceLinkStateForProvisionedInterface() throws Exception { initEthernetNetworkFactory(); createAndVerifyProvisionedInterface(TEST_IFACE); - final TestNetworkManagementListener listener = new TestNetworkManagementListener(); + final TestNetworkManagementListener listenerDown = new TestNetworkManagementListener(); + final TestNetworkManagementListener listenerUp = new TestNetworkManagementListener(); - final boolean ret = - mNetFactory.updateInterfaceLinkState(TEST_IFACE, false /* up */, listener); + final boolean retDown = + mNetFactory.updateInterfaceLinkState(TEST_IFACE, false /* up */, listenerDown); - assertTrue(ret); + assertTrue(retDown); verifyStop(); - assertEquals(listener.expectOnResult(), TEST_IFACE); + assertEquals(listenerDown.expectOnResult(), TEST_IFACE); + + final boolean retUp = + mNetFactory.updateInterfaceLinkState(TEST_IFACE, true /* up */, listenerUp); + + assertTrue(retUp); + assertEquals(listenerUp.expectOnResult(), TEST_IFACE); } @Test