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