Merge "Ignore non-matching callbacks to fix flakiness" am: 2e2642f909

Original change: https://android-review.googlesource.com/c/platform/cts/+/1318219

Change-Id: Iedf444b13c9009d296869beb161ac1614095ae41
This commit is contained in:
Chalard Jean
2020-07-09 06:25:29 +00:00
committed by Automerger Merge Worker

View File

@@ -29,6 +29,7 @@ import static org.junit.Assert.fail;
import android.net.Network; import android.net.Network;
import android.net.NetworkCapabilities; import android.net.NetworkCapabilities;
import android.util.Log;
import org.junit.After; import org.junit.After;
import org.junit.Before; import org.junit.Before;
@@ -141,15 +142,16 @@ public class NetworkCallbackTest extends AbstractRestrictBackgroundNetworkTestCa
} }
public void expectBlockedStatusCallback(Network expectedNetwork, boolean expectBlocked) { public void expectBlockedStatusCallback(Network expectedNetwork, boolean expectBlocked) {
expectCallback(CallbackState.BLOCKED_STATUS, expectedNetwork, expectCallback(CallbackState.BLOCKED_STATUS, expectedNetwork, expectBlocked);
expectBlocked);
} }
public void waitBlockedStatusCallback(Network expectedNetwork, boolean expectBlocked) { public void expectBlockedStatusCallbackEventually(Network expectedNetwork,
boolean expectBlocked) {
final long deadline = System.currentTimeMillis() + TEST_CALLBACK_TIMEOUT_MS; final long deadline = System.currentTimeMillis() + TEST_CALLBACK_TIMEOUT_MS;
do { do {
final CallbackInfo cb = nextCallback((int) (deadline - System.currentTimeMillis())); final CallbackInfo cb = nextCallback((int) (deadline - System.currentTimeMillis()));
if (cb.state == CallbackState.BLOCKED_STATUS) { if (cb.state == CallbackState.BLOCKED_STATUS
&& cb.network.equals(expectedNetwork)) {
assertEquals(expectBlocked, cb.arg); assertEquals(expectBlocked, cb.arg);
return; return;
} }
@@ -157,17 +159,23 @@ public class NetworkCallbackTest extends AbstractRestrictBackgroundNetworkTestCa
fail("Didn't receive onBlockedStatusChanged()"); fail("Didn't receive onBlockedStatusChanged()");
} }
public void expectCapabilitiesCallback(Network expectedNetwork, boolean hasCapability, public void expectCapabilitiesCallbackEventually(Network expectedNetwork, boolean hasCap,
int capability) { int cap) {
final CallbackInfo cb = nextCallback(TEST_CALLBACK_TIMEOUT_MS); final long deadline = System.currentTimeMillis() + TEST_CALLBACK_TIMEOUT_MS;
final NetworkCapabilities cap = (NetworkCapabilities) cb.arg; do {
assertEquals(expectedNetwork, cb.network); final CallbackInfo cb = nextCallback((int) (deadline - System.currentTimeMillis()));
assertEquals(CallbackState.CAPABILITIES, cb.state); if (cb.state != CallbackState.CAPABILITIES
if (hasCapability != cap.hasCapability(capability)) { || !expectedNetwork.equals(cb.network)
fail("NetworkCapabilities callback " || (hasCap != ((NetworkCapabilities) cb.arg).hasCapability(cap))) {
+ (hasCapability ? "missing expected" : "has unexpected") Log.i("NetworkCallbackTest#expectCapabilitiesCallback",
+ " capability. " + cb); "Ignoring non-matching callback : " + cb);
continue;
} }
// Found a match, return
return;
} while (System.currentTimeMillis() <= deadline);
fail("Didn't receive the expected callback to onCapabilitiesChanged(). Check the "
+ "log for a list of received callbacks, if any.");
} }
} }
@@ -194,8 +202,8 @@ public class NetworkCallbackTest extends AbstractRestrictBackgroundNetworkTestCa
// callback to ensure wifi is connected before the test and store the default network. // callback to ensure wifi is connected before the test and store the default network.
mNetwork = mTestNetworkCallback.expectAvailableCallbackAndGetNetwork(); mNetwork = mTestNetworkCallback.expectAvailableCallbackAndGetNetwork();
// Check that the network is metered. // Check that the network is metered.
mTestNetworkCallback.expectCapabilitiesCallback(mNetwork, false /* hasCapability */, mTestNetworkCallback.expectCapabilitiesCallbackEventually(mNetwork,
NET_CAPABILITY_NOT_METERED); false /* hasCapability */, NET_CAPABILITY_NOT_METERED);
mTestNetworkCallback.expectBlockedStatusCallback(mNetwork, false); mTestNetworkCallback.expectBlockedStatusCallback(mNetwork, false);
} }
@@ -215,28 +223,28 @@ public class NetworkCallbackTest extends AbstractRestrictBackgroundNetworkTestCa
// Enable restrict background // Enable restrict background
setRestrictBackground(true); setRestrictBackground(true);
assertBackgroundNetworkAccess(false); assertBackgroundNetworkAccess(false);
mTestNetworkCallback.waitBlockedStatusCallback(mNetwork, true); mTestNetworkCallback.expectBlockedStatusCallbackEventually(mNetwork, true);
// Add to whitelist // Add to whitelist
addRestrictBackgroundWhitelist(mUid); addRestrictBackgroundWhitelist(mUid);
assertBackgroundNetworkAccess(true); assertBackgroundNetworkAccess(true);
mTestNetworkCallback.waitBlockedStatusCallback(mNetwork, false); mTestNetworkCallback.expectBlockedStatusCallbackEventually(mNetwork, false);
// Remove from whitelist // Remove from whitelist
removeRestrictBackgroundWhitelist(mUid); removeRestrictBackgroundWhitelist(mUid);
assertBackgroundNetworkAccess(false); assertBackgroundNetworkAccess(false);
mTestNetworkCallback.waitBlockedStatusCallback(mNetwork, true); mTestNetworkCallback.expectBlockedStatusCallbackEventually(mNetwork, true);
} finally { } finally {
mMeterednessConfiguration.resetNetworkMeteredness(); mMeterednessConfiguration.resetNetworkMeteredness();
} }
// Set to non-metered network // Set to non-metered network
mMeterednessConfiguration.configureNetworkMeteredness(false); mMeterednessConfiguration.configureNetworkMeteredness(false);
mTestNetworkCallback.expectCapabilitiesCallback(mNetwork, true /* hasCapability */, mTestNetworkCallback.expectCapabilitiesCallbackEventually(mNetwork,
NET_CAPABILITY_NOT_METERED); true /* hasCapability */, NET_CAPABILITY_NOT_METERED);
try { try {
assertBackgroundNetworkAccess(true); assertBackgroundNetworkAccess(true);
mTestNetworkCallback.waitBlockedStatusCallback(mNetwork, false); mTestNetworkCallback.expectBlockedStatusCallbackEventually(mNetwork, false);
// Disable restrict background, should not trigger callback // Disable restrict background, should not trigger callback
setRestrictBackground(false); setRestrictBackground(false);
@@ -253,30 +261,30 @@ public class NetworkCallbackTest extends AbstractRestrictBackgroundNetworkTestCa
// Enable Power Saver // Enable Power Saver
setBatterySaverMode(true); setBatterySaverMode(true);
assertBackgroundNetworkAccess(false); assertBackgroundNetworkAccess(false);
mTestNetworkCallback.waitBlockedStatusCallback(mNetwork, true); mTestNetworkCallback.expectBlockedStatusCallbackEventually(mNetwork, true);
// Disable Power Saver // Disable Power Saver
setBatterySaverMode(false); setBatterySaverMode(false);
assertBackgroundNetworkAccess(true); assertBackgroundNetworkAccess(true);
mTestNetworkCallback.waitBlockedStatusCallback(mNetwork, false); mTestNetworkCallback.expectBlockedStatusCallbackEventually(mNetwork, false);
} finally { } finally {
mMeterednessConfiguration.resetNetworkMeteredness(); mMeterednessConfiguration.resetNetworkMeteredness();
} }
// Set to non-metered network // Set to non-metered network
mMeterednessConfiguration.configureNetworkMeteredness(false); mMeterednessConfiguration.configureNetworkMeteredness(false);
mTestNetworkCallback.expectCapabilitiesCallback(mNetwork, true /* hasCapability */, mTestNetworkCallback.expectCapabilitiesCallbackEventually(mNetwork,
NET_CAPABILITY_NOT_METERED); true /* hasCapability */, NET_CAPABILITY_NOT_METERED);
try { try {
// Enable Power Saver // Enable Power Saver
setBatterySaverMode(true); setBatterySaverMode(true);
assertBackgroundNetworkAccess(false); assertBackgroundNetworkAccess(false);
mTestNetworkCallback.waitBlockedStatusCallback(mNetwork, true); mTestNetworkCallback.expectBlockedStatusCallbackEventually(mNetwork, true);
// Disable Power Saver // Disable Power Saver
setBatterySaverMode(false); setBatterySaverMode(false);
assertBackgroundNetworkAccess(true); assertBackgroundNetworkAccess(true);
mTestNetworkCallback.waitBlockedStatusCallback(mNetwork, false); mTestNetworkCallback.expectBlockedStatusCallbackEventually(mNetwork, false);
} finally { } finally {
mMeterednessConfiguration.resetNetworkMeteredness(); mMeterednessConfiguration.resetNetworkMeteredness();
} }