Add polling for WifiManager#getConnectionInfo
In Cts test after disabling Wifi, the WifiManager#getConnectionInfo will
not return network id -1 immediately. Need to poll the wifi disabled and
the network connection info cleared before asserting the connection
info.
Bug: 252869312
Test: atest ConnectivityManagerTest#testRejectPartialConnectivity_TearDownNetwork
Change-Id: If88261b0d81c1dc1731c683513878d054d2cb0dc
diff --git a/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java b/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java
index 218eb04..aa417ce 100644
--- a/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java
+++ b/tests/cts/net/src/android/net/cts/ConnectivityManagerTest.java
@@ -2822,7 +2822,7 @@
// Wifi will not automatically reconnect to the network. ensureWifiDisconnected cannot
// apply here. Thus, turn off wifi first and restart to restore.
mTestValidationConfigRule.runAfterNextCleanup(() -> {
- runShellCommand("svc wifi disable");
+ mCtsNetUtils.disableWifi();
mCtsNetUtils.ensureWifiConnected();
});
}
@@ -2864,7 +2864,7 @@
/// Wifi will not automatically reconnect to the network. ensureWifiDisconnected cannot
// apply here. Thus, turn off wifi first and restart to restore.
mTestValidationConfigRule.runAfterNextCleanup(() -> {
- runShellCommand("svc wifi disable");
+ mCtsNetUtils.disableWifi();
mCtsNetUtils.ensureWifiConnected();
});
}
diff --git a/tests/cts/net/util/java/android/net/cts/util/CtsNetUtils.java b/tests/cts/net/util/java/android/net/cts/util/CtsNetUtils.java
index 9d1fa60..3f2ff9d 100644
--- a/tests/cts/net/util/java/android/net/cts/util/CtsNetUtils.java
+++ b/tests/cts/net/util/java/android/net/cts/util/CtsNetUtils.java
@@ -57,6 +57,8 @@
import android.text.TextUtils;
import android.util.Log;
+import com.android.compatibility.common.util.PollingCheck;
+import com.android.compatibility.common.util.ShellIdentityUtils;
import com.android.compatibility.common.util.SystemUtil;
import com.android.net.module.util.ConnectivitySettingsUtils;
import com.android.testutils.ConnectUtil;
@@ -268,6 +270,19 @@
}
/**
+ * Disable WiFi and wait for the connection info to be cleared.
+ */
+ public void disableWifi() throws Exception {
+ SystemUtil.runShellCommand("svc wifi disable");
+ PollingCheck.check(
+ "Wifi not disconnected! Current network is not null "
+ + mWifiManager.getConnectionInfo().getNetworkId(),
+ TimeUnit.SECONDS.toMillis(CONNECTIVITY_CHANGE_TIMEOUT_SECS),
+ () -> ShellIdentityUtils.invokeWithShellPermissions(
+ () -> mWifiManager.getConnectionInfo().getNetworkId()) == -1);
+ }
+
+ /**
* Disable WiFi and wait for it to become disconnected from the network.
*
* @param wifiNetworkToCheck If non-null, a network that should be disconnected. This network
diff --git a/tests/cts/net/util/java/android/net/cts/util/CtsTetheringUtils.java b/tests/cts/net/util/java/android/net/cts/util/CtsTetheringUtils.java
index 8b904bc..f506c23 100644
--- a/tests/cts/net/util/java/android/net/cts/util/CtsTetheringUtils.java
+++ b/tests/cts/net/util/java/android/net/cts/util/CtsTetheringUtils.java
@@ -478,7 +478,9 @@
waitForWifiEnabled(ctx);
return runAsShell(ACCESS_WIFI_STATE, () -> wm.isPortableHotspotSupported());
} finally {
- if (!previousWifiEnabledState) SystemUtil.runShellCommand("svc wifi disable");
+ if (!previousWifiEnabledState) {
+ new CtsNetUtils(ctx).disableWifi();
+ }
}
}