Merge "Wait for connect before dropping permissions" am: 6af04d2b3a am: 561ac85ed3 am: e429055678
Original change: https://android-review.googlesource.com/c/platform/cts/+/1470543 Change-Id: Ifcce4a9f364fd53227871fa41869c6ffed70f24e
This commit is contained in:
@@ -23,10 +23,11 @@ import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
|
|||||||
import static android.net.NetworkCapabilities.TRANSPORT_TEST;
|
import static android.net.NetworkCapabilities.TRANSPORT_TEST;
|
||||||
import static android.net.wifi.WifiManager.SCAN_RESULTS_AVAILABLE_ACTION;
|
import static android.net.wifi.WifiManager.SCAN_RESULTS_AVAILABLE_ACTION;
|
||||||
|
|
||||||
import static com.android.compatibility.common.util.ShellIdentityUtils.invokeWithShellPermissions;
|
import static com.android.testutils.TestPermissionUtil.runAsShell;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertNotNull;
|
import static org.junit.Assert.assertNotNull;
|
||||||
|
import static org.junit.Assert.assertNull;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
import static org.junit.Assert.fail;
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
@@ -71,7 +72,6 @@ import java.net.InetSocketAddress;
|
|||||||
import java.net.Socket;
|
import java.net.Socket;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.concurrent.CompletableFuture;
|
import java.util.concurrent.CompletableFuture;
|
||||||
import java.util.concurrent.CountDownLatch;
|
import java.util.concurrent.CountDownLatch;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
@@ -219,13 +219,18 @@ public final class CtsNetUtils {
|
|||||||
if (config == null) {
|
if (config == null) {
|
||||||
// TODO: this may not clear the BSSID blacklist, as opposed to
|
// TODO: this may not clear the BSSID blacklist, as opposed to
|
||||||
// mWifiManager.connect(config)
|
// mWifiManager.connect(config)
|
||||||
SystemUtil.runWithShellPermissionIdentity(() -> mWifiManager.reconnect(),
|
assertTrue("Error reconnecting wifi", runAsShell(NETWORK_SETTINGS,
|
||||||
NETWORK_SETTINGS);
|
mWifiManager::reconnect));
|
||||||
} else {
|
} else {
|
||||||
// When running CTS, devices are expected to have wifi networks pre-configured.
|
// When running CTS, devices are expected to have wifi networks pre-configured.
|
||||||
// This condition is only hit on virtual devices.
|
// This condition is only hit on virtual devices.
|
||||||
SystemUtil.runWithShellPermissionIdentity(
|
final Integer error = runAsShell(NETWORK_SETTINGS, () -> {
|
||||||
() -> mWifiManager.connect(config, null /* listener */), NETWORK_SETTINGS);
|
final ConnectWifiListener listener = new ConnectWifiListener();
|
||||||
|
mWifiManager.connect(config, listener);
|
||||||
|
return listener.connectFuture.get(
|
||||||
|
CONNECTIVITY_CHANGE_TIMEOUT_SECS, TimeUnit.SECONDS);
|
||||||
|
});
|
||||||
|
assertNull("Error connecting to wifi: " + error, error);
|
||||||
}
|
}
|
||||||
// Ensure we get an onAvailable callback and possibly a CONNECTIVITY_ACTION.
|
// Ensure we get an onAvailable callback and possibly a CONNECTIVITY_ACTION.
|
||||||
wifiNetwork = callback.waitForAvailable();
|
wifiNetwork = callback.waitForAvailable();
|
||||||
@@ -242,8 +247,24 @@ public final class CtsNetUtils {
|
|||||||
return wifiNetwork;
|
return wifiNetwork;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static class ConnectWifiListener implements WifiManager.ActionListener {
|
||||||
|
/**
|
||||||
|
* Future completed when the connect process ends. Provides the error code or null if none.
|
||||||
|
*/
|
||||||
|
final CompletableFuture<Integer> connectFuture = new CompletableFuture<>();
|
||||||
|
@Override
|
||||||
|
public void onSuccess() {
|
||||||
|
connectFuture.complete(null);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onFailure(int reason) {
|
||||||
|
connectFuture.complete(reason);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private WifiConfiguration maybeAddVirtualWifiConfiguration() {
|
private WifiConfiguration maybeAddVirtualWifiConfiguration() {
|
||||||
final List<WifiConfiguration> configs = invokeWithShellPermissions(
|
final List<WifiConfiguration> configs = runAsShell(NETWORK_SETTINGS,
|
||||||
mWifiManager::getConfiguredNetworks);
|
mWifiManager::getConfiguredNetworks);
|
||||||
// If no network is configured, add a config for virtual access points if applicable
|
// If no network is configured, add a config for virtual access points if applicable
|
||||||
if (configs.size() == 0) {
|
if (configs.size() == 0) {
|
||||||
@@ -259,7 +280,7 @@ public final class CtsNetUtils {
|
|||||||
|
|
||||||
private List<ScanResult> getWifiScanResults() {
|
private List<ScanResult> getWifiScanResults() {
|
||||||
final CompletableFuture<List<ScanResult>> scanResultsFuture = new CompletableFuture<>();
|
final CompletableFuture<List<ScanResult>> scanResultsFuture = new CompletableFuture<>();
|
||||||
SystemUtil.runWithShellPermissionIdentity(() -> {
|
runAsShell(NETWORK_SETTINGS, () -> {
|
||||||
final BroadcastReceiver receiver = new BroadcastReceiver() {
|
final BroadcastReceiver receiver = new BroadcastReceiver() {
|
||||||
@Override
|
@Override
|
||||||
public void onReceive(Context context, Intent intent) {
|
public void onReceive(Context context, Intent intent) {
|
||||||
@@ -296,7 +317,7 @@ public final class CtsNetUtils {
|
|||||||
virtualConfig.SSID = "\"" + virtualScanResult.SSID + "\"";
|
virtualConfig.SSID = "\"" + virtualScanResult.SSID + "\"";
|
||||||
virtualConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
|
virtualConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
|
||||||
|
|
||||||
SystemUtil.runWithShellPermissionIdentity(() -> {
|
runAsShell(NETWORK_SETTINGS, () -> {
|
||||||
final int networkId = mWifiManager.addNetwork(virtualConfig);
|
final int networkId = mWifiManager.addNetwork(virtualConfig);
|
||||||
assertTrue(networkId >= 0);
|
assertTrue(networkId >= 0);
|
||||||
assertTrue(mWifiManager.enableNetwork(networkId, false /* attemptConnect */));
|
assertTrue(mWifiManager.enableNetwork(networkId, false /* attemptConnect */));
|
||||||
@@ -310,7 +331,7 @@ public final class CtsNetUtils {
|
|||||||
* to them.
|
* to them.
|
||||||
*/
|
*/
|
||||||
private void clearWifiBlacklist() {
|
private void clearWifiBlacklist() {
|
||||||
SystemUtil.runWithShellPermissionIdentity(() -> {
|
runAsShell(NETWORK_SETTINGS, () -> {
|
||||||
for (WifiConfiguration cfg : mWifiManager.getConfiguredNetworks()) {
|
for (WifiConfiguration cfg : mWifiManager.getConfiguredNetworks()) {
|
||||||
assertTrue(mWifiManager.enableNetwork(cfg.networkId, false /* attemptConnect */));
|
assertTrue(mWifiManager.enableNetwork(cfg.networkId, false /* attemptConnect */));
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user