Specify which callback is unexpected in testMobileDataPreferredUids

This test is flaky due to assertNoCallback(). Because this
method expects no any callback received but the wifi network
may update its capabilities during testing and trigger
onCapabilitiesChanged() to cause test failed. Thus, these
callbacks should be ignored in the tests.

Replace the assertNoCallback to assertNoCallbackThat with
callback type specified to deflake tests.

Also align the available callback verification in the test to
avoid confusion.

Fix: 198367703
Test: atest android.net.cts.ConnectivityManagerTest\
      --iterations 20
Change-Id: Ifde5e9730823c3b6f32590cc436cc4ba11d2b36e
This commit is contained in:
paulhu
2021-09-02 06:06:59 +00:00
parent 39379a40bd
commit c344c9fb9c

View File

@@ -2828,6 +2828,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") @AppModeFull(reason = "Cannot get WifiManager in instant app mode")
@Test @Test
public void testMobileDataPreferredUids() throws Exception { public void testMobileDataPreferredUids() throws Exception {
@@ -2860,8 +2873,7 @@ public class ConnectivityManagerTest {
// CtsNetTestCases uid is not listed in MOBILE_DATA_PREFERRED_UIDS setting, so the // CtsNetTestCases uid is not listed in MOBILE_DATA_PREFERRED_UIDS setting, so the
// per-app default network should be same as system default network. // per-app default network should be same as system default network.
waitForAvailable(systemDefaultCb, wifiNetwork); waitForAvailable(systemDefaultCb, wifiNetwork);
defaultTrackingCb.eventuallyExpect(CallbackEntry.AVAILABLE, NETWORK_CALLBACK_TIMEOUT_MS, waitForAvailable(defaultTrackingCb, wifiNetwork);
entry -> wifiNetwork.equals(entry.getNetwork()));
// Active network for CtsNetTestCases uid should be wifi now. // Active network for CtsNetTestCases uid should be wifi now.
assertEquals(wifiNetwork, mCm.getActiveNetwork()); assertEquals(wifiNetwork, mCm.getActiveNetwork());
@@ -2871,10 +2883,10 @@ public class ConnectivityManagerTest {
newMobileDataPreferredUids.add(uid); newMobileDataPreferredUids.add(uid);
ConnectivitySettingsManager.setMobileDataPreferredUids( ConnectivitySettingsManager.setMobileDataPreferredUids(
mContext, newMobileDataPreferredUids); mContext, newMobileDataPreferredUids);
defaultTrackingCb.eventuallyExpect(CallbackEntry.AVAILABLE, NETWORK_CALLBACK_TIMEOUT_MS, waitForAvailable(defaultTrackingCb, cellNetwork);
entry -> cellNetwork.equals(entry.getNetwork())); // No change for system default network. Expect no callback except CapabilitiesChanged
// System default network doesn't change. // or LinkPropertiesChanged which may be triggered randomly from wifi network.
systemDefaultCb.assertNoCallback(); assertNoCallbackExceptCapOrLpChange(systemDefaultCb);
// Active network for CtsNetTestCases uid should change to cell, too. // Active network for CtsNetTestCases uid should change to cell, too.
assertEquals(cellNetwork, mCm.getActiveNetwork()); assertEquals(cellNetwork, mCm.getActiveNetwork());
@@ -2883,10 +2895,10 @@ public class ConnectivityManagerTest {
newMobileDataPreferredUids.remove(uid); newMobileDataPreferredUids.remove(uid);
ConnectivitySettingsManager.setMobileDataPreferredUids( ConnectivitySettingsManager.setMobileDataPreferredUids(
mContext, newMobileDataPreferredUids); mContext, newMobileDataPreferredUids);
defaultTrackingCb.eventuallyExpect(CallbackEntry.AVAILABLE, NETWORK_CALLBACK_TIMEOUT_MS, waitForAvailable(defaultTrackingCb, wifiNetwork);
entry -> wifiNetwork.equals(entry.getNetwork())); // No change for system default network. Expect no callback except CapabilitiesChanged
// System default network still doesn't change. // or LinkPropertiesChanged which may be triggered randomly from wifi network.
systemDefaultCb.assertNoCallback(); assertNoCallbackExceptCapOrLpChange(systemDefaultCb);
// Active network for CtsNetTestCases uid should change back to wifi. // Active network for CtsNetTestCases uid should change back to wifi.
assertEquals(wifiNetwork, mCm.getActiveNetwork()); assertEquals(wifiNetwork, mCm.getActiveNetwork());
} finally { } finally {