Ignore non-matching callbacks to fix flakiness
This is a host-side tests that receives its network callbacks through a custom AIDL that proxies them to this host-side process. As this runs of the real callbacks from a real network, this test receives unrelated callbacks – in particular calls to onCapabilitiesUpdated to warn the process of updates of the signal strength. This skips these callbacks across the board by only matching the expected callback. This will fix flakiness in the test. Also, as a drive-by fix, this also checks the network in the onBlockedStatusChanged callback. If the network object is not the expected one, the test should not pass. Bug: 160270536 Test: NetworkCallbackTests Change-Id: I67c685ebfb2c5e2ee6f7615196eedea8292ca3ff
This commit is contained in:
@@ -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();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user