Merge "Ignore non-matching callbacks to fix flakiness"
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