Merge "Wait for validation of WiFi in OEM pref test"

This commit is contained in:
Treehugger Robot
2021-09-09 18:51:32 +00:00
committed by Gerrit Code Review

View File

@@ -1082,7 +1082,8 @@ public class ConnectivityManagerTest {
} }
private Network waitForActiveNetworkMetered(final int targetTransportType, private Network waitForActiveNetworkMetered(final int targetTransportType,
final boolean requestedMeteredness, final boolean useSystemDefault) final boolean requestedMeteredness, final boolean waitForValidation,
final boolean useSystemDefault)
throws Exception { throws Exception {
final CompletableFuture<Network> networkFuture = new CompletableFuture<>(); final CompletableFuture<Network> networkFuture = new CompletableFuture<>();
final NetworkCallback networkCallback = new NetworkCallback() { final NetworkCallback networkCallback = new NetworkCallback() {
@@ -1091,7 +1092,8 @@ public class ConnectivityManagerTest {
if (!nc.hasTransport(targetTransportType)) return; if (!nc.hasTransport(targetTransportType)) return;
final boolean metered = !nc.hasCapability(NET_CAPABILITY_NOT_METERED); final boolean metered = !nc.hasCapability(NET_CAPABILITY_NOT_METERED);
if (metered == requestedMeteredness) { final boolean validated = nc.hasCapability(NET_CAPABILITY_VALIDATED);
if (metered == requestedMeteredness && (!waitForValidation || validated)) {
networkFuture.complete(network); networkFuture.complete(network);
} }
} }
@@ -1120,11 +1122,13 @@ public class ConnectivityManagerTest {
} }
} }
private Network setWifiMeteredStatusAndWait(String ssid, boolean isMetered) throws Exception { private Network setWifiMeteredStatusAndWait(String ssid, boolean isMetered,
boolean waitForValidation) throws Exception {
setWifiMeteredStatus(ssid, Boolean.toString(isMetered) /* metered */); setWifiMeteredStatus(ssid, Boolean.toString(isMetered) /* metered */);
mCtsNetUtils.ensureWifiConnected(); mCtsNetUtils.ensureWifiConnected();
return waitForActiveNetworkMetered(TRANSPORT_WIFI, return waitForActiveNetworkMetered(TRANSPORT_WIFI,
isMetered /* requestedMeteredness */, isMetered /* requestedMeteredness */,
waitForValidation,
true /* useSystemDefault */); true /* useSystemDefault */);
} }
@@ -1187,9 +1191,10 @@ public class ConnectivityManagerTest {
int newMeteredPreference = findNextPrefValue(resolver); int newMeteredPreference = findNextPrefValue(resolver);
Settings.Global.putString(resolver, NETWORK_METERED_MULTIPATH_PREFERENCE, Settings.Global.putString(resolver, NETWORK_METERED_MULTIPATH_PREFERENCE,
Integer.toString(newMeteredPreference)); Integer.toString(newMeteredPreference));
// Wifi meterness changes from unmetered to metered will disconnect and reconnect since // Wifi meteredness changes from unmetered to metered will disconnect and reconnect
// R. // since R.
final Network network = setWifiMeteredStatusAndWait(ssid, true); final Network network = setWifiMeteredStatusAndWait(ssid, true /* isMetered */,
false /* waitForValidation */);
assertEquals(ssid, unquoteSSID(mWifiManager.getConnectionInfo().getSSID())); assertEquals(ssid, unquoteSSID(mWifiManager.getConnectionInfo().getSSID()));
assertEquals(mCm.getNetworkCapabilities(network).hasCapability( assertEquals(mCm.getNetworkCapabilities(network).hasCapability(
NET_CAPABILITY_NOT_METERED), false); NET_CAPABILITY_NOT_METERED), false);
@@ -1206,7 +1211,7 @@ public class ConnectivityManagerTest {
oldMeteredPreference, newMeteredPreference); oldMeteredPreference, newMeteredPreference);
// No disconnect from unmetered to metered. // No disconnect from unmetered to metered.
setWifiMeteredStatusAndWait(ssid, false); setWifiMeteredStatusAndWait(ssid, false /* isMetered */, false /* waitForValidation */);
assertEquals(mCm.getNetworkCapabilities(network).hasCapability( assertEquals(mCm.getNetworkCapabilities(network).hasCapability(
NET_CAPABILITY_NOT_METERED), true); NET_CAPABILITY_NOT_METERED), true);
assertMultipathPreferenceIsEventually(network, newMeteredPreference, assertMultipathPreferenceIsEventually(network, newMeteredPreference,
@@ -2322,8 +2327,10 @@ public class ConnectivityManagerTest {
final boolean oldMeteredValue = wifiNetworkCapabilities.isMetered(); final boolean oldMeteredValue = wifiNetworkCapabilities.isMetered();
try { try {
// This network will be used for unmetered. // This network will be used for unmetered. Wait for it to be validated because
setWifiMeteredStatusAndWait(ssid, false /* isMetered */); // OEM_NETWORK_PREFERENCE_TEST only prefers NOT_METERED&VALIDATED to a network with
// TRANSPORT_TEST, like OEM_NETWORK_PREFERENCE_OEM_PAID.
setWifiMeteredStatusAndWait(ssid, false /* isMetered */, true /* waitForValidation */);
setOemNetworkPreferenceForMyPackage(OemNetworkPreferences.OEM_NETWORK_PREFERENCE_TEST); setOemNetworkPreferenceForMyPackage(OemNetworkPreferences.OEM_NETWORK_PREFERENCE_TEST);
registerTestOemNetworkPreferenceCallbacks(defaultCallback, systemDefaultCallback); registerTestOemNetworkPreferenceCallbacks(defaultCallback, systemDefaultCallback);
@@ -2332,9 +2339,10 @@ public class ConnectivityManagerTest {
waitForAvailable(defaultCallback, wifiNetwork); waitForAvailable(defaultCallback, wifiNetwork);
waitForAvailable(systemDefaultCallback, wifiNetwork); waitForAvailable(systemDefaultCallback, wifiNetwork);
// Validate when setting unmetered to metered, unmetered is lost and replaced by the // Validate that when setting unmetered to metered, unmetered is lost and replaced by
// network with the TEST transport. // the network with the TEST transport. Also wait for validation here, in case there
setWifiMeteredStatusAndWait(ssid, true /* isMetered */); // is a bug that's only visible when the network is validated.
setWifiMeteredStatusAndWait(ssid, true /* isMetered */, true /* waitForValidation */);
defaultCallback.expectCallback(CallbackEntry.LOST, wifiNetwork, defaultCallback.expectCallback(CallbackEntry.LOST, wifiNetwork,
NETWORK_CALLBACK_TIMEOUT_MS); NETWORK_CALLBACK_TIMEOUT_MS);
waitForAvailable(defaultCallback, tnt.getNetwork()); waitForAvailable(defaultCallback, tnt.getNetwork());
@@ -2350,7 +2358,7 @@ public class ConnectivityManagerTest {
NETWORK_CALLBACK_TIMEOUT_MS); NETWORK_CALLBACK_TIMEOUT_MS);
waitForAvailable(defaultCallback); waitForAvailable(defaultCallback);
setWifiMeteredStatusAndWait(ssid, oldMeteredValue); setWifiMeteredStatusAndWait(ssid, oldMeteredValue, false /* waitForValidation */);
// Cleanup any prior test state from setOemNetworkPreference // Cleanup any prior test state from setOemNetworkPreference
clearOemNetworkPreference(); clearOemNetworkPreference();