diff --git a/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java b/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java index 99cfdc2189..96069605ce 100644 --- a/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java +++ b/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java @@ -2829,6 +2829,19 @@ public class ConnectivityManagerTest { }); } + /** + * The networks used in this test are real networks and as such they can see seemingly random + * updates of their capabilities or link properties as conditions change, e.g. the network + * loses validation or IPv4 shows up. Many tests should simply treat these callbacks as + * spurious. + */ + private void assertNoCallbackExceptCapOrLpChange( + @NonNull final TestableNetworkCallback cb) { + cb.assertNoCallbackThat(NO_CALLBACK_TIMEOUT_MS, + c -> !(c instanceof CallbackEntry.CapabilitiesChanged + || c instanceof CallbackEntry.LinkPropertiesChanged)); + } + @AppModeFull(reason = "Cannot get WifiManager in instant app mode") @Test public void testMobileDataPreferredUids() throws Exception { @@ -2861,8 +2874,7 @@ public class ConnectivityManagerTest { // CtsNetTestCases uid is not listed in MOBILE_DATA_PREFERRED_UIDS setting, so the // per-app default network should be same as system default network. waitForAvailable(systemDefaultCb, wifiNetwork); - defaultTrackingCb.eventuallyExpect(CallbackEntry.AVAILABLE, NETWORK_CALLBACK_TIMEOUT_MS, - entry -> wifiNetwork.equals(entry.getNetwork())); + waitForAvailable(defaultTrackingCb, wifiNetwork); // Active network for CtsNetTestCases uid should be wifi now. assertEquals(wifiNetwork, mCm.getActiveNetwork()); @@ -2872,10 +2884,10 @@ public class ConnectivityManagerTest { newMobileDataPreferredUids.add(uid); ConnectivitySettingsManager.setMobileDataPreferredUids( mContext, newMobileDataPreferredUids); - defaultTrackingCb.eventuallyExpect(CallbackEntry.AVAILABLE, NETWORK_CALLBACK_TIMEOUT_MS, - entry -> cellNetwork.equals(entry.getNetwork())); - // System default network doesn't change. - systemDefaultCb.assertNoCallback(); + waitForAvailable(defaultTrackingCb, cellNetwork); + // No change for system default network. Expect no callback except CapabilitiesChanged + // or LinkPropertiesChanged which may be triggered randomly from wifi network. + assertNoCallbackExceptCapOrLpChange(systemDefaultCb); // Active network for CtsNetTestCases uid should change to cell, too. assertEquals(cellNetwork, mCm.getActiveNetwork()); @@ -2884,10 +2896,10 @@ public class ConnectivityManagerTest { newMobileDataPreferredUids.remove(uid); ConnectivitySettingsManager.setMobileDataPreferredUids( mContext, newMobileDataPreferredUids); - defaultTrackingCb.eventuallyExpect(CallbackEntry.AVAILABLE, NETWORK_CALLBACK_TIMEOUT_MS, - entry -> wifiNetwork.equals(entry.getNetwork())); - // System default network still doesn't change. - systemDefaultCb.assertNoCallback(); + waitForAvailable(defaultTrackingCb, wifiNetwork); + // No change for system default network. Expect no callback except CapabilitiesChanged + // or LinkPropertiesChanged which may be triggered randomly from wifi network. + assertNoCallbackExceptCapOrLpChange(systemDefaultCb); // Active network for CtsNetTestCases uid should change back to wifi. assertEquals(wifiNetwork, mCm.getActiveNetwork()); } finally {