From c6be26e0ef34e50535e221a8b1c0083f54b74e46 Mon Sep 17 00:00:00 2001 From: Remi NGUYEN VAN Date: Wed, 7 Jul 2021 10:53:17 +0900 Subject: [PATCH] Ensure wifi reconnects before waiting for metered testGetMultipathPreference assumes that wifi will auto-reconnect after changing its metered status, but this is not necessarily the case if the BSSID has been blocklisted after it failed validating too many times. Call ensureWifiConnected to force wifi to reconnect before waiting for it to become metered. Bug: 190913510 Test: atest ConnectivityManagerTest Change-Id: Iafe9837b97e4d654bb0f3962d48a94c1f31bbebc --- .../net/cts/ConnectivityManagerTest.java | 23 ++++++++++--------- 1 file changed, 12 insertions(+), 11 deletions(-) diff --git a/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java b/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java index cd5281ff2b..3d21d3db11 100644 --- a/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java +++ b/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java @@ -1101,10 +1101,10 @@ public class ConnectivityManagerTest { } } - private void waitForActiveNetworkMetered(final int targetTransportType, + private Network waitForActiveNetworkMetered(final int targetTransportType, final boolean requestedMeteredness, final boolean useSystemDefault) throws Exception { - final CountDownLatch latch = new CountDownLatch(1); + final CompletableFuture networkFuture = new CompletableFuture<>(); final NetworkCallback networkCallback = new NetworkCallback() { @Override public void onCapabilitiesChanged(Network network, NetworkCapabilities nc) { @@ -1112,7 +1112,7 @@ public class ConnectivityManagerTest { final boolean metered = !nc.hasCapability(NET_CAPABILITY_NOT_METERED); if (metered == requestedMeteredness) { - latch.countDown(); + networkFuture.complete(network); } } }; @@ -1132,18 +1132,20 @@ public class ConnectivityManagerTest { // Changing meteredness on wifi involves reconnecting, which can take several seconds // (involves re-associating, DHCP...). - if (!latch.await(NETWORK_CALLBACK_TIMEOUT_MS, TimeUnit.MILLISECONDS)) { - fail("Timed out waiting for active network metered status to change to " - + requestedMeteredness + " ; network = " + mCm.getActiveNetwork()); - } + return networkFuture.get(NETWORK_CALLBACK_TIMEOUT_MS, TimeUnit.MILLISECONDS); + } catch (TimeoutException e) { + throw new AssertionError("Timed out waiting for active network metered status to " + + "change to " + requestedMeteredness + " ; network = " + + mCm.getActiveNetwork(), e); } finally { mCm.unregisterNetworkCallback(networkCallback); } } - private void setWifiMeteredStatusAndWait(String ssid, boolean isMetered) throws Exception { + private Network setWifiMeteredStatusAndWait(String ssid, boolean isMetered) throws Exception { setWifiMeteredStatus(ssid, Boolean.toString(isMetered) /* metered */); - waitForActiveNetworkMetered(TRANSPORT_WIFI, + mCtsNetUtils.ensureWifiConnected(); + return waitForActiveNetworkMetered(TRANSPORT_WIFI, isMetered /* requestedMeteredness */, true /* useSystemDefault */); } @@ -1209,8 +1211,7 @@ public class ConnectivityManagerTest { Integer.toString(newMeteredPreference)); // Wifi meterness changes from unmetered to metered will disconnect and reconnect since // R. - setWifiMeteredStatusAndWait(ssid, true); - final Network network = mCtsNetUtils.ensureWifiConnected(); + final Network network = setWifiMeteredStatusAndWait(ssid, true); assertEquals(ssid, unquoteSSID(mWifiManager.getConnectionInfo().getSSID())); assertEquals(mCm.getNetworkCapabilities(network).hasCapability( NET_CAPABILITY_NOT_METERED), false);