blob: e640c42324a18ddf951a7030d59a081d1c4b4b2f [file] [log] [blame]
/*
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.server.wifi;
import static org.junit.Assert.*;
import static org.mockito.Mockito.*;
import android.net.IpConfiguration;
import android.net.wifi.WifiConfiguration;
import android.os.Process;
import androidx.test.filters.SmallTest;
import com.android.server.wifi.util.WifiPermissionsUtil;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.FileDescriptor;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Random;
/**
* Unit tests for {@link com.android.server.wifi.WifiBackupRestore}.
*/
@SmallTest
public class WifiBackupRestoreTest extends WifiBaseTest {
private static final String WIFI_BACKUP_DATA_WITH_UNSUPPORTED_TAG =
"<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n"
+ "<WifiBackupData>\n"
+ "<int name=\"Version\" value=\"1\" />\n"
+ "<NetworkList>\n"
+ "<Network>\n"
+ "<WifiConfiguration>\n"
+ "<string name=\"ConfigKey\">&quot;" + WifiConfigurationTestUtil.TEST_SSID
+ "&quot;NONE</string>\n"
+ "<string name=\"SSID\">&quot;" + WifiConfigurationTestUtil.TEST_SSID
+ "&quot;</string>\n"
+ "<null name=\"BSSID\" />\n"
+ "<null name=\"PreSharedKey\" />\n"
+ "<null name=\"WEPKeys\" />\n"
+ "<int name=\"WEPTxKeyIndex\" value=\"0\" />\n"
+ "<boolean name=\"HiddenSSID\" value=\"false\" />\n"
+ "<boolean name=\"RequirePMF\" value=\"false\" />\n"
+ "<byte-array name=\"AllowedKeyMgmt\" num=\"1\">01</byte-array>\n"
+ "<byte-array name=\"AllowedProtocols\" num=\"1\">03</byte-array>\n"
+ "<byte-array name=\"AllowedAuthAlgos\" num=\"1\">01</byte-array>\n"
+ "<byte-array name=\"AllowedGroupCiphers\" num=\"1\">0f</byte-array>\n"
+ "<byte-array name=\"AllowedPairwiseCiphers\" num=\"1\">06</byte-array>\n"
+ "<boolean name=\"Shared\" value=\"true\" />\n"
+ "<null name=\"SimSlot\" />\n"
+ "</WifiConfiguration>\n"
+ "<IpConfiguration>\n"
+ "<string name=\"IpAssignment\">DHCP</string>\n"
+ "<string name=\"ProxySettings\">NONE</string>\n"
+ "</IpConfiguration>\n"
+ "</Network>\n"
+ "</NetworkList>\n"
+ "</WifiBackupData>\n";
// |AllowedKeyMgmt|, |AllowedProtocols|, |AllowedAuthAlgorithms|, |AllowedGroupCiphers| and
// |AllowedPairwiseCiphers| fields have invalid values in them.
// NOTE: The byte values are encoded in little endian
private static final String WIFI_BACKUP_DATA_WITH_UNSUPPORTED_VALUES_IN_BITSETS =
"<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n"
+ "<WifiBackupData>\n"
+ "<int name=\"Version\" value=\"1\" />\n"
+ "<NetworkList>\n"
+ "<Network>\n"
+ "<WifiConfiguration>\n"
+ "<string name=\"ConfigKey\">&quot;" + WifiConfigurationTestUtil.TEST_SSID
+ "&quot;NONE</string>\n"
+ "<string name=\"SSID\">&quot;" + WifiConfigurationTestUtil.TEST_SSID
+ "&quot;</string>\n"
+ "<null name=\"BSSID\" />\n"
+ "<null name=\"PreSharedKey\" />\n"
+ "<null name=\"WEPKeys\" />\n"
+ "<int name=\"WEPTxKeyIndex\" value=\"0\" />\n"
+ "<boolean name=\"HiddenSSID\" value=\"false\" />\n"
+ "<boolean name=\"RequirePMF\" value=\"false\" />\n"
// Valid Value: 01
+ "<byte-array name=\"AllowedKeyMgmt\" num=\"3\">010002</byte-array>\n"
// Valid Value: 03
+ "<byte-array name=\"AllowedProtocols\" num=\"1\">13</byte-array>\n"
// Valid Value: 01
+ "<byte-array name=\"AllowedAuthAlgos\" num=\"1\">11</byte-array>\n"
// Valid Value: 0f
+ "<byte-array name=\"AllowedGroupCiphers\" num=\"1\">8f</byte-array>\n"
// Valid Value: 06
+ "<byte-array name=\"AllowedPairwiseCiphers\" num=\"1\">26</byte-array>\n"
+ "<boolean name=\"Shared\" value=\"true\" />\n"
+ "<null name=\"SimSlot\" />\n"
+ "</WifiConfiguration>\n"
+ "<IpConfiguration>\n"
+ "<string name=\"IpAssignment\">DHCP</string>\n"
+ "<string name=\"ProxySettings\">NONE</string>\n"
+ "</IpConfiguration>\n"
+ "</Network>\n"
+ "</NetworkList>\n"
+ "</WifiBackupData>\n";
private static final String WIFI_BACKUP_DATA_V1_0 =
"<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n"
+ "<WifiBackupData>\n"
+ "<float name=\"Version\" value=\"1.0\" />\n"
+ "<NetworkList>\n"
+ "<Network>\n"
+ "<WifiConfiguration>\n"
+ "<string name=\"ConfigKey\">&quot;" + WifiConfigurationTestUtil.TEST_SSID
+ "&quot;NONE</string>\n"
+ "<string name=\"SSID\">&quot;" + WifiConfigurationTestUtil.TEST_SSID
+ "&quot;</string>\n"
+ "<null name=\"BSSID\" />\n"
+ "<null name=\"PreSharedKey\" />\n"
+ "<null name=\"WEPKeys\" />\n"
+ "<int name=\"WEPTxKeyIndex\" value=\"0\" />\n"
+ "<boolean name=\"HiddenSSID\" value=\"false\" />\n"
+ "<boolean name=\"RequirePMF\" value=\"false\" />\n"
+ "<byte-array name=\"AllowedKeyMgmt\" num=\"1\">01</byte-array>\n"
+ "<byte-array name=\"AllowedProtocols\" num=\"1\">03</byte-array>\n"
+ "<byte-array name=\"AllowedAuthAlgos\" num=\"1\">01</byte-array>\n"
+ "<byte-array name=\"AllowedGroupCiphers\" num=\"1\">0f</byte-array>\n"
+ "<byte-array name=\"AllowedPairwiseCiphers\" num=\"1\">06</byte-array>\n"
+ "<boolean name=\"Shared\" value=\"true\" />\n"
+ "</WifiConfiguration>\n"
+ "<IpConfiguration>\n"
+ "<string name=\"IpAssignment\">DHCP</string>\n"
+ "<string name=\"ProxySettings\">NONE</string>\n"
+ "</IpConfiguration>\n"
+ "</Network>\n"
+ "</NetworkList>\n"
+ "</WifiBackupData>\n";
private static final String WIFI_BACKUP_DATA_V1_1 =
"<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n"
+ "<WifiBackupData>\n"
+ "<float name=\"Version\" value=\"1.1\" />\n"
+ "<NetworkList>\n"
+ "<Network>\n"
+ "<WifiConfiguration>\n"
+ "<string name=\"ConfigKey\">&quot;" + WifiConfigurationTestUtil.TEST_SSID
+ "&quot;NONE</string>\n"
+ "<string name=\"SSID\">&quot;" + WifiConfigurationTestUtil.TEST_SSID
+ "&quot;</string>\n"
+ "<null name=\"BSSID\" />\n"
+ "<null name=\"PreSharedKey\" />\n"
+ "<null name=\"WEPKeys\" />\n"
+ "<int name=\"WEPTxKeyIndex\" value=\"0\" />\n"
+ "<boolean name=\"HiddenSSID\" value=\"false\" />\n"
+ "<boolean name=\"RequirePMF\" value=\"false\" />\n"
+ "<byte-array name=\"AllowedKeyMgmt\" num=\"1\">01</byte-array>\n"
+ "<byte-array name=\"AllowedProtocols\" num=\"1\">03</byte-array>\n"
+ "<byte-array name=\"AllowedAuthAlgos\" num=\"1\">01</byte-array>\n"
+ "<byte-array name=\"AllowedGroupCiphers\" num=\"1\">0f</byte-array>\n"
+ "<byte-array name=\"AllowedPairwiseCiphers\" num=\"1\">06</byte-array>\n"
+ "<boolean name=\"Shared\" value=\"true\" />\n"
+ "<int name=\"MeteredOverride\" value=\"1\" />\n"
+ "</WifiConfiguration>\n"
+ "<IpConfiguration>\n"
+ "<string name=\"IpAssignment\">DHCP</string>\n"
+ "<string name=\"ProxySettings\">NONE</string>\n"
+ "</IpConfiguration>\n"
+ "</Network>\n"
+ "</NetworkList>\n"
+ "</WifiBackupData>\n";
private static final String WIFI_BACKUP_DATA_V1_2 =
"<?xml version='1.0' encoding='utf-8' standalone='yes' ?>\n"
+ "<WifiBackupData>\n"
+ "<float name=\"Version\" value=\"1.2\" />\n"
+ "<NetworkList>\n"
+ "<Network>\n"
+ "<WifiConfiguration>\n"
+ "<string name=\"ConfigKey\">&quot;" + WifiConfigurationTestUtil.TEST_SSID
+ "&quot;NONE</string>\n"
+ "<string name=\"SSID\">&quot;" + WifiConfigurationTestUtil.TEST_SSID
+ "&quot;</string>\n"
+ "<null name=\"PreSharedKey\" />\n"
+ "<null name=\"WEPKeys\" />\n"
+ "<int name=\"WEPTxKeyIndex\" value=\"0\" />\n"
+ "<boolean name=\"HiddenSSID\" value=\"false\" />\n"
+ "<boolean name=\"RequirePMF\" value=\"false\" />\n"
+ "<byte-array name=\"AllowedKeyMgmt\" num=\"1\">01</byte-array>\n"
+ "<byte-array name=\"AllowedProtocols\" num=\"1\">03</byte-array>\n"
+ "<byte-array name=\"AllowedAuthAlgos\" num=\"1\">01</byte-array>\n"
+ "<byte-array name=\"AllowedGroupCiphers\" num=\"1\">0f</byte-array>\n"
+ "<byte-array name=\"AllowedPairwiseCiphers\" num=\"1\">06</byte-array>\n"
+ "<byte-array name=\"AllowedGroupMgmtCiphers\" num=\"0\"></byte-array>\n"
+ "<byte-array name=\"AllowedSuiteBCiphers\" num=\"0\"></byte-array>\n"
+ "<boolean name=\"Shared\" value=\"true\" />\n"
+ "<boolean name=\"AutoJoinEnabled\" value=\"false\" />\n"
+ "<int name=\"MeteredOverride\" value=\"1\" />\n"
+ "</WifiConfiguration>\n"
+ "<IpConfiguration>\n"
+ "<string name=\"IpAssignment\">DHCP</string>\n"
+ "<string name=\"ProxySettings\">NONE</string>\n"
+ "</IpConfiguration>\n"
+ "</Network>\n"
+ "</NetworkList>\n"
+ "</WifiBackupData>\n";
@Mock WifiPermissionsUtil mWifiPermissionsUtil;
private WifiBackupRestore mWifiBackupRestore;
private boolean mCheckDump = true;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
when(mWifiPermissionsUtil.checkConfigOverridePermission(anyInt())).thenReturn(true);
mWifiBackupRestore = new WifiBackupRestore(mWifiPermissionsUtil);
// Enable verbose logging before tests to check the backup data dumps.
mWifiBackupRestore.enableVerboseLogging(1);
}
@After
public void cleanUp() throws Exception {
if (mCheckDump) {
StringWriter stringWriter = new StringWriter();
mWifiBackupRestore.dump(
new FileDescriptor(), new PrintWriter(stringWriter), new String[0]);
String dumpString = stringWriter.toString();
// Ensure that the SSID was dumped out.
assertTrue("Dump: " + dumpString,
dumpString.contains(WifiConfigurationTestUtil.TEST_SSID));
// Ensure that the password wasn't dumped out.
assertFalse("Dump: " + dumpString,
dumpString.contains(WifiConfigurationTestUtil.TEST_PSK));
assertFalse("Dump: " + dumpString,
dumpString.contains(WifiConfigurationTestUtil.TEST_WEP_KEYS[0]));
assertFalse("Dump: " + dumpString,
dumpString.contains(WifiConfigurationTestUtil.TEST_WEP_KEYS[1]));
assertFalse("Dump: " + dumpString,
dumpString.contains(WifiConfigurationTestUtil.TEST_WEP_KEYS[2]));
assertFalse("Dump: " + dumpString,
dumpString.contains(WifiConfigurationTestUtil.TEST_WEP_KEYS[3]));
}
}
/**
* Verify that a null network list is serialized correctly.
*/
@Test
public void testNullNetworkListBackup() {
byte[] backupData = mWifiBackupRestore.retrieveBackupDataFromConfigurations(null);
assertTrue(backupData != null);
assertEquals(backupData.length, 0);
// No valid data to check in dump.
mCheckDump = false;
}
/**
* Verify that a single open network configuration is serialized & deserialized correctly.
*/
@Test
public void testSingleOpenNetworkBackupRestore() {
List<WifiConfiguration> configurations = new ArrayList<>();
configurations.add(WifiConfigurationTestUtil.createOpenNetwork());
byte[] backupData = mWifiBackupRestore.retrieveBackupDataFromConfigurations(configurations);
List<WifiConfiguration> retrievedConfigurations =
mWifiBackupRestore.retrieveConfigurationsFromBackupData(backupData);
WifiConfigurationTestUtil.assertConfigurationsEqualForBackup(
configurations, retrievedConfigurations);
}
/**
* Verify that a single open hidden network configuration is serialized & deserialized
* correctly.
*/
@Test
public void testSingleOpenHiddenNetworkBackupRestore() {
List<WifiConfiguration> configurations = new ArrayList<>();
configurations.add(WifiConfigurationTestUtil.createOpenHiddenNetwork());
byte[] backupData = mWifiBackupRestore.retrieveBackupDataFromConfigurations(configurations);
List<WifiConfiguration> retrievedConfigurations =
mWifiBackupRestore.retrieveConfigurationsFromBackupData(backupData);
WifiConfigurationTestUtil.assertConfigurationsEqualForBackup(
configurations, retrievedConfigurations);
}
/**
* Verify that a single PSK network configuration is serialized & deserialized correctly.
*/
@Test
public void testSinglePskNetworkBackupRestore() {
List<WifiConfiguration> configurations = new ArrayList<>();
configurations.add(WifiConfigurationTestUtil.createPskNetwork());
byte[] backupData = mWifiBackupRestore.retrieveBackupDataFromConfigurations(configurations);
List<WifiConfiguration> retrievedConfigurations =
mWifiBackupRestore.retrieveConfigurationsFromBackupData(backupData);
WifiConfigurationTestUtil.assertConfigurationsEqualForBackup(
configurations, retrievedConfigurations);
}
/**
* Verify that a single PSK hidden network configuration is serialized & deserialized correctly.
*/
@Test
public void testSinglePskHiddenNetworkBackupRestore() {
List<WifiConfiguration> configurations = new ArrayList<>();
configurations.add(WifiConfigurationTestUtil.createPskHiddenNetwork());
byte[] backupData = mWifiBackupRestore.retrieveBackupDataFromConfigurations(configurations);
List<WifiConfiguration> retrievedConfigurations =
mWifiBackupRestore.retrieveConfigurationsFromBackupData(backupData);
WifiConfigurationTestUtil.assertConfigurationsEqualForBackup(
configurations, retrievedConfigurations);
}
/**
* Verify that a single WEP network configuration is serialized & deserialized correctly.
*/
@Test
public void testSingleWepNetworkBackupRestore() {
List<WifiConfiguration> configurations = new ArrayList<>();
configurations.add(WifiConfigurationTestUtil.createWepNetwork());
byte[] backupData = mWifiBackupRestore.retrieveBackupDataFromConfigurations(configurations);
List<WifiConfiguration> retrievedConfigurations =
mWifiBackupRestore.retrieveConfigurationsFromBackupData(backupData);
WifiConfigurationTestUtil.assertConfigurationsEqualForBackup(
configurations, retrievedConfigurations);
}
/**
* Verify that restoring of configuration that contains unsupported tags works correctly
* (unsupported tags are ignored).
*/
@Test
public void testConfigurationWithUnsupportedTagsRestore() {
List<WifiConfiguration> configurations = new ArrayList<>();
configurations.add(createNetworkForConfigurationWithUnsupportedTag());
byte[] backupData = WIFI_BACKUP_DATA_WITH_UNSUPPORTED_TAG.getBytes();
List<WifiConfiguration> retrievedConfigurations =
mWifiBackupRestore.retrieveConfigurationsFromBackupData(backupData);
WifiConfigurationTestUtil.assertConfigurationsEqualForBackup(
configurations, retrievedConfigurations);
// No valid data to check in dump.
mCheckDump = false;
}
/**
* Creates correct WiFiConfiguration that should be parsed out of
* {@link #WIFI_BACKUP_DATA_WITH_UNSUPPORTED_TAG} configuration which contains unsupported tag.
*/
private static WifiConfiguration createNetworkForConfigurationWithUnsupportedTag() {
final WifiConfiguration config = new WifiConfiguration();
config.SSID = "\"" + WifiConfigurationTestUtil.TEST_SSID + "\"";
config.wepTxKeyIndex = 0;
config.hiddenSSID = false;
config.requirePmf = false;
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
config.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
config.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
config.shared = true;
IpConfiguration ipConfiguration = new IpConfiguration();
ipConfiguration.setIpAssignment(IpConfiguration.IpAssignment.DHCP);
ipConfiguration.setProxySettings(IpConfiguration.ProxySettings.NONE);
config.setIpConfiguration(ipConfiguration);
return config;
}
/**
* Verify that restoring of configuration that contains unsupported values in bitsets works
* correctly (unsupported values are ignored).
*/
@Test
public void testConfigurationWithUnsupportedValuesInBitsetsRestore() {
List<WifiConfiguration> configurations = new ArrayList<>();
configurations.add(createNetworkForConfigurationWithUnsupportedValuesInBitsetsInRestore());
byte[] backupData = WIFI_BACKUP_DATA_WITH_UNSUPPORTED_VALUES_IN_BITSETS.getBytes();
List<WifiConfiguration> retrievedConfigurations =
mWifiBackupRestore.retrieveConfigurationsFromBackupData(backupData);
WifiConfigurationTestUtil.assertConfigurationsEqualForBackup(
configurations, retrievedConfigurations);
// No valid data to check in dump.
mCheckDump = false;
}
/**
* Creates correct WiFiConfiguration that should be parsed out of
* {@link #WIFI_BACKUP_DATA_WITH_UNSUPPORTED_VALUES_IN_BITSETS} configuration which contains
* unsupported values.
* |AllowedKeyMgmt|, |AllowedProtocols|, |AllowedAuthAlgorithms|, |AllowedGroupCiphers| and
* |AllowedPairwiseCiphers| fields have invalid values in them.
*/
private static WifiConfiguration
createNetworkForConfigurationWithUnsupportedValuesInBitsetsInRestore() {
final WifiConfiguration config = new WifiConfiguration();
config.SSID = "\"" + WifiConfigurationTestUtil.TEST_SSID + "\"";
config.wepTxKeyIndex = 0;
config.hiddenSSID = false;
config.requirePmf = false;
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
config.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
config.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
config.shared = true;
IpConfiguration ipConfiguration = new IpConfiguration();
ipConfiguration.setIpAssignment(IpConfiguration.IpAssignment.DHCP);
ipConfiguration.setProxySettings(IpConfiguration.ProxySettings.NONE);
config.setIpConfiguration(ipConfiguration);
return config;
}
/**
* Verify that a single WEP network configuration with only 1 key is serialized & deserialized
* correctly.
*/
@Test
public void testSingleWepNetworkWithSingleKeyBackupRestore() {
List<WifiConfiguration> configurations = new ArrayList<>();
configurations.add(WifiConfigurationTestUtil.createWepNetworkWithSingleKey());
byte[] backupData = mWifiBackupRestore.retrieveBackupDataFromConfigurations(configurations);
List<WifiConfiguration> retrievedConfigurations =
mWifiBackupRestore.retrieveConfigurationsFromBackupData(backupData);
WifiConfigurationTestUtil.assertConfigurationsEqualForBackup(
configurations, retrievedConfigurations);
}
/**
* Verify that a single enterprise network configuration is not serialized.
*/
@Test
public void testSingleEnterpriseNetworkNotBackupRestore() {
List<WifiConfiguration> configurations = new ArrayList<>();
configurations.add(WifiConfigurationTestUtil.createEapNetwork());
configurations.add(WifiConfigurationTestUtil.createEapSuiteBNetwork());
byte[] backupData = mWifiBackupRestore.retrieveBackupDataFromConfigurations(configurations);
List<WifiConfiguration> retrievedConfigurations =
mWifiBackupRestore.retrieveConfigurationsFromBackupData(backupData);
assertTrue(retrievedConfigurations.isEmpty());
// No valid data to check in dump.
mCheckDump = false;
}
/**
* Verify that a single PSK network configuration with static ip/proxy settings is serialized &
* deserialized correctly.
*/
@Test
public void testSinglePskNetworkWithStaticIpAndStaticProxyBackupRestore() {
List<WifiConfiguration> configurations = new ArrayList<>();
WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork();
pskNetwork.setIpConfiguration(
WifiConfigurationTestUtil.createStaticIpConfigurationWithStaticProxy());
configurations.add(pskNetwork);
byte[] backupData = mWifiBackupRestore.retrieveBackupDataFromConfigurations(configurations);
List<WifiConfiguration> retrievedConfigurations =
mWifiBackupRestore.retrieveConfigurationsFromBackupData(backupData);
WifiConfigurationTestUtil.assertConfigurationsEqualForBackup(
configurations, retrievedConfigurations);
}
/**
* Verify that a single PSK network configuration with static ip & PAC proxy settings is
* serialized & deserialized correctly.
*/
@Test
public void testSinglePskNetworkWithStaticIpAndPACProxyBackupRestore() {
List<WifiConfiguration> configurations = new ArrayList<>();
WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork();
pskNetwork.setIpConfiguration(
WifiConfigurationTestUtil.createStaticIpConfigurationWithPacProxy());
configurations.add(pskNetwork);
byte[] backupData = mWifiBackupRestore.retrieveBackupDataFromConfigurations(configurations);
List<WifiConfiguration> retrievedConfigurations =
mWifiBackupRestore.retrieveConfigurationsFromBackupData(backupData);
WifiConfigurationTestUtil.assertConfigurationsEqualForBackup(
configurations, retrievedConfigurations);
}
/**
* Verify that a single PSK network configuration with DHCP ip & PAC proxy settings is
* serialized & deserialized correctly.
*/
@Test
public void testSinglePskNetworkWithDHCPIpAndPACProxyBackupRestore() {
List<WifiConfiguration> configurations = new ArrayList<>();
WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork();
pskNetwork.setIpConfiguration(
WifiConfigurationTestUtil.createDHCPIpConfigurationWithPacProxy());
configurations.add(pskNetwork);
byte[] backupData = mWifiBackupRestore.retrieveBackupDataFromConfigurations(configurations);
List<WifiConfiguration> retrievedConfigurations =
mWifiBackupRestore.retrieveConfigurationsFromBackupData(backupData);
WifiConfigurationTestUtil.assertConfigurationsEqualForBackup(
configurations, retrievedConfigurations);
}
/**
* Verify that a single PSK network configuration with partial static ip settings is serialized
* & deserialized correctly.
*/
@Test
public void testSinglePskNetworkWithPartialStaticIpBackupRestore() {
List<WifiConfiguration> configurations = new ArrayList<>();
WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork();
pskNetwork.setIpConfiguration(
WifiConfigurationTestUtil.createPartialStaticIpConfigurationWithPacProxy());
configurations.add(pskNetwork);
byte[] backupData = mWifiBackupRestore.retrieveBackupDataFromConfigurations(configurations);
List<WifiConfiguration> retrievedConfigurations =
mWifiBackupRestore.retrieveConfigurationsFromBackupData(backupData);
WifiConfigurationTestUtil.assertConfigurationsEqualForBackup(
configurations, retrievedConfigurations);
}
/**
* Verify that multiple networks of different types are serialized and deserialized correctly.
*/
@Test
public void testMultipleNetworksAllBackupRestore() {
List<WifiConfiguration> configurations = new ArrayList<>();
configurations.add(WifiConfigurationTestUtil.createWepNetwork());
configurations.add(WifiConfigurationTestUtil.createWepNetwork());
configurations.add(WifiConfigurationTestUtil.createPskNetwork());
configurations.add(WifiConfigurationTestUtil.createOpenNetwork());
configurations.add(WifiConfigurationTestUtil.createOweNetwork());
configurations.add(WifiConfigurationTestUtil.createSaeNetwork());
byte[] backupData = mWifiBackupRestore.retrieveBackupDataFromConfigurations(configurations);
List<WifiConfiguration> retrievedConfigurations =
mWifiBackupRestore.retrieveConfigurationsFromBackupData(backupData);
WifiConfigurationTestUtil.assertConfigurationsEqualForBackup(
configurations, retrievedConfigurations);
}
/**
* Verify that multiple networks of different types except enterprise ones are serialized and
* deserialized correctly
*/
@Test
public void testMultipleNetworksNonEnterpriseBackupRestore() {
List<WifiConfiguration> configurations = new ArrayList<>();
List<WifiConfiguration> expectedConfigurations = new ArrayList<>();
WifiConfiguration wepNetwork = WifiConfigurationTestUtil.createWepNetwork();
configurations.add(wepNetwork);
expectedConfigurations.add(wepNetwork);
configurations.add(WifiConfigurationTestUtil.createEapNetwork());
configurations.add(WifiConfigurationTestUtil.createEapSuiteBNetwork());
WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork();
configurations.add(pskNetwork);
expectedConfigurations.add(pskNetwork);
WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork();
configurations.add(openNetwork);
expectedConfigurations.add(openNetwork);
WifiConfiguration saeNetwork = WifiConfigurationTestUtil.createSaeNetwork();
configurations.add(saeNetwork);
expectedConfigurations.add(saeNetwork);
WifiConfiguration oweNetwork = WifiConfigurationTestUtil.createOweNetwork();
configurations.add(oweNetwork);
expectedConfigurations.add(oweNetwork);
byte[] backupData = mWifiBackupRestore.retrieveBackupDataFromConfigurations(configurations);
List<WifiConfiguration> retrievedConfigurations =
mWifiBackupRestore.retrieveConfigurationsFromBackupData(backupData);
WifiConfigurationTestUtil.assertConfigurationsEqualForBackup(
expectedConfigurations, retrievedConfigurations);
}
/**
* Verify that multiple networks with different credential types and IpConfiguration types are
* serialized and deserialized correctly.
*/
@Test
public void testMultipleNetworksWithDifferentIpConfigurationsAllBackupRestore() {
List<WifiConfiguration> configurations = new ArrayList<>();
WifiConfiguration wepNetwork = WifiConfigurationTestUtil.createWepNetwork();
wepNetwork.setIpConfiguration(
WifiConfigurationTestUtil.createDHCPIpConfigurationWithPacProxy());
configurations.add(wepNetwork);
WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork();
pskNetwork.setIpConfiguration(
WifiConfigurationTestUtil.createStaticIpConfigurationWithPacProxy());
configurations.add(pskNetwork);
WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork();
openNetwork.setIpConfiguration(
WifiConfigurationTestUtil.createStaticIpConfigurationWithStaticProxy());
configurations.add(openNetwork);
byte[] backupData = mWifiBackupRestore.retrieveBackupDataFromConfigurations(configurations);
List<WifiConfiguration> retrievedConfigurations =
mWifiBackupRestore.retrieveConfigurationsFromBackupData(backupData);
WifiConfigurationTestUtil.assertConfigurationsEqualForBackup(
configurations, retrievedConfigurations);
}
/**
* Verify that multiple networks of different types except the non system app created ones are
* serialized and deserialized correctly.
*/
@Test
public void testMultipleNetworksSystemAppBackupRestore() {
int systemAppUid = Process.SYSTEM_UID;
int nonSystemAppUid = Process.FIRST_APPLICATION_UID + 556;
when(mWifiPermissionsUtil.checkConfigOverridePermission(eq(systemAppUid)))
.thenReturn(true);
when(mWifiPermissionsUtil.checkConfigOverridePermission(eq(nonSystemAppUid)))
.thenReturn(false);
List<WifiConfiguration> configurations = new ArrayList<>();
List<WifiConfiguration> expectedConfigurations = new ArrayList<>();
WifiConfiguration wepNetwork = WifiConfigurationTestUtil.createWepNetwork();
wepNetwork.creatorUid = systemAppUid;
configurations.add(wepNetwork);
expectedConfigurations.add(wepNetwork);
// These should not be in |expectedConfigurations|.
WifiConfiguration nonSystemAppWepNetwork = WifiConfigurationTestUtil.createWepNetwork();
nonSystemAppWepNetwork.creatorUid = nonSystemAppUid;
configurations.add(nonSystemAppWepNetwork);
WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork();
pskNetwork.creatorUid = systemAppUid;
configurations.add(pskNetwork);
expectedConfigurations.add(pskNetwork);
// These should not be in |expectedConfigurations|.
WifiConfiguration nonSystemAppPskNetwork = WifiConfigurationTestUtil.createPskNetwork();
nonSystemAppPskNetwork.creatorUid = nonSystemAppUid;
configurations.add(nonSystemAppPskNetwork);
WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork();
configurations.add(openNetwork);
expectedConfigurations.add(openNetwork);
byte[] backupData = mWifiBackupRestore.retrieveBackupDataFromConfigurations(configurations);
List<WifiConfiguration> retrievedConfigurations =
mWifiBackupRestore.retrieveConfigurationsFromBackupData(backupData);
WifiConfigurationTestUtil.assertConfigurationsEqualForBackup(
expectedConfigurations, retrievedConfigurations);
}
/**
* Verify that a single open network configuration is serialized & deserialized correctly from
* old backups.
*/
@Test
public void testSingleOpenNetworkSupplicantBackupRestore() {
List<WifiConfiguration> configurations = new ArrayList<>();
configurations.add(WifiConfigurationTestUtil.createOpenNetwork());
byte[] supplicantData = createWpaSupplicantConfBackupData(configurations);
byte[] ipConfigData = createIpConfBackupData(configurations);
List<WifiConfiguration> retrievedConfigurations =
mWifiBackupRestore.retrieveConfigurationsFromSupplicantBackupData(
supplicantData, ipConfigData);
WifiConfigurationTestUtil.assertConfigurationsEqualForBackup(
configurations, retrievedConfigurations);
}
/**
* Verify that a single open hidden network configuration is serialized & deserialized
* correctly from old backups.
*/
@Test
public void testSingleOpenHiddenNetworkSupplicantBackupRestore() {
List<WifiConfiguration> configurations = new ArrayList<>();
configurations.add(WifiConfigurationTestUtil.createOpenHiddenNetwork());
byte[] supplicantData = createWpaSupplicantConfBackupData(configurations);
byte[] ipConfigData = createIpConfBackupData(configurations);
List<WifiConfiguration> retrievedConfigurations =
mWifiBackupRestore.retrieveConfigurationsFromSupplicantBackupData(
supplicantData, ipConfigData);
WifiConfigurationTestUtil.assertConfigurationsEqualForBackup(
configurations, retrievedConfigurations);
}
/**
* Verify that a single PSK network configuration is serialized & deserialized correctly from
* old backups.
*/
@Test
public void testSinglePskNetworkSupplicantBackupRestore() {
List<WifiConfiguration> configurations = new ArrayList<>();
configurations.add(WifiConfigurationTestUtil.createPskNetwork());
byte[] supplicantData = createWpaSupplicantConfBackupData(configurations);
byte[] ipConfigData = createIpConfBackupData(configurations);
List<WifiConfiguration> retrievedConfigurations =
mWifiBackupRestore.retrieveConfigurationsFromSupplicantBackupData(
supplicantData, ipConfigData);
WifiConfigurationTestUtil.assertConfigurationsEqualForBackup(
configurations, retrievedConfigurations);
}
/**
* Verify that a single PSK hidden network configuration is serialized & deserialized correctly
* from old backups.
*/
@Test
public void testSinglePskHiddenNetworkSupplicantBackupRestore() {
List<WifiConfiguration> configurations = new ArrayList<>();
configurations.add(WifiConfigurationTestUtil.createPskHiddenNetwork());
byte[] supplicantData = createWpaSupplicantConfBackupData(configurations);
byte[] ipConfigData = createIpConfBackupData(configurations);
List<WifiConfiguration> retrievedConfigurations =
mWifiBackupRestore.retrieveConfigurationsFromSupplicantBackupData(
supplicantData, ipConfigData);
WifiConfigurationTestUtil.assertConfigurationsEqualForBackup(
configurations, retrievedConfigurations);
}
/**
* Verify that a single WEP network configuration is serialized & deserialized correctly from
* old backups.
*/
@Test
public void testSingleWepNetworkSupplicantBackupRestore() {
List<WifiConfiguration> configurations = new ArrayList<>();
configurations.add(WifiConfigurationTestUtil.createWepNetwork());
byte[] supplicantData = createWpaSupplicantConfBackupData(configurations);
byte[] ipConfigData = createIpConfBackupData(configurations);
List<WifiConfiguration> retrievedConfigurations =
mWifiBackupRestore.retrieveConfigurationsFromSupplicantBackupData(
supplicantData, ipConfigData);
WifiConfigurationTestUtil.assertConfigurationsEqualForBackup(
configurations, retrievedConfigurations);
}
/**
* Verify that a single WEP network configuration with only 1 key is serialized & deserialized
* correctly from old backups.
*/
@Test
public void testSingleWepNetworkWithSingleKeySupplicantBackupRestore() {
List<WifiConfiguration> configurations = new ArrayList<>();
configurations.add(WifiConfigurationTestUtil.createWepNetworkWithSingleKey());
byte[] supplicantData = createWpaSupplicantConfBackupData(configurations);
byte[] ipConfigData = createIpConfBackupData(configurations);
List<WifiConfiguration> retrievedConfigurations =
mWifiBackupRestore.retrieveConfigurationsFromSupplicantBackupData(
supplicantData, ipConfigData);
WifiConfigurationTestUtil.assertConfigurationsEqualForBackup(
configurations, retrievedConfigurations);
}
/**
* Verify that a single enterprise network configuration is not serialized from old backups.
*/
@Test
public void testSingleEnterpriseNetworkNotSupplicantBackupRestore() {
List<WifiConfiguration> configurations = new ArrayList<>();
configurations.add(WifiConfigurationTestUtil.createEapNetwork());
byte[] supplicantData = createWpaSupplicantConfBackupData(configurations);
byte[] ipConfigData = createIpConfBackupData(configurations);
List<WifiConfiguration> retrievedConfigurations =
mWifiBackupRestore.retrieveConfigurationsFromSupplicantBackupData(
supplicantData, ipConfigData);
assertTrue(retrievedConfigurations.isEmpty());
}
/**
* Verify that multiple networks with different credential types and IpConfiguration types are
* serialized and deserialized correctly from old backups
*/
@Test
public void testMultipleNetworksWithDifferentIpConfigurationsAllSupplicantBackupRestore() {
List<WifiConfiguration> configurations = new ArrayList<>();
WifiConfiguration wepNetwork = WifiConfigurationTestUtil.createWepNetwork();
wepNetwork.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);
wepNetwork.setIpConfiguration(
WifiConfigurationTestUtil.createDHCPIpConfigurationWithPacProxy());
configurations.add(wepNetwork);
WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork();
pskNetwork.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
pskNetwork.setIpConfiguration(
WifiConfigurationTestUtil.createStaticIpConfigurationWithPacProxy());
configurations.add(pskNetwork);
WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork();
openNetwork.setIpConfiguration(
WifiConfigurationTestUtil.createStaticIpConfigurationWithStaticProxy());
configurations.add(openNetwork);
byte[] supplicantData = createWpaSupplicantConfBackupData(configurations);
byte[] ipConfigData = createIpConfBackupData(configurations);
List<WifiConfiguration> retrievedConfigurations =
mWifiBackupRestore.retrieveConfigurationsFromSupplicantBackupData(
supplicantData, ipConfigData);
WifiConfigurationTestUtil.assertConfigurationsEqualForBackup(
configurations, retrievedConfigurations);
}
/**
* Verify that a single open network configuration is serialized & deserialized correctly from
* old backups with no ipconfig data.
*/
@Test
public void testSingleOpenNetworkSupplicantBackupRestoreWithNoIpConfigData() {
List<WifiConfiguration> configurations = new ArrayList<>();
configurations.add(WifiConfigurationTestUtil.createOpenNetwork());
byte[] supplicantData = createWpaSupplicantConfBackupData(configurations);
List<WifiConfiguration> retrievedConfigurations =
mWifiBackupRestore.retrieveConfigurationsFromSupplicantBackupData(
supplicantData, null);
WifiConfigurationTestUtil.assertConfigurationsEqualForBackup(
configurations, retrievedConfigurations);
}
/**
* Verify that multiple networks with different credential types are serialized and
* deserialized correctly from old backups with no ipconfig data.
*/
@Test
public void testMultipleNetworksAllSupplicantBackupRestoreWithNoIpConfigData() {
List<WifiConfiguration> configurations = new ArrayList<>();
WifiConfiguration wepNetwork = WifiConfigurationTestUtil.createWepNetwork();
configurations.add(wepNetwork);
WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork();
configurations.add(pskNetwork);
WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork();
configurations.add(openNetwork);
byte[] supplicantData = createWpaSupplicantConfBackupData(configurations);
List<WifiConfiguration> retrievedConfigurations =
mWifiBackupRestore.retrieveConfigurationsFromSupplicantBackupData(
supplicantData, null);
WifiConfigurationTestUtil.assertConfigurationsEqualForBackup(
configurations, retrievedConfigurations);
}
/**
* Verify that multiple networks of different types except the non system app created ones are
* serialized and deserialized correctly from old backups.
*/
@Test
public void testMultipleNetworksSystemAppSupplicantBackupRestore() {
List<WifiConfiguration> configurations = new ArrayList<>();
List<WifiConfiguration> expectedConfigurations = new ArrayList<>();
WifiConfiguration wepNetwork = WifiConfigurationTestUtil.createWepNetwork();
configurations.add(wepNetwork);
expectedConfigurations.add(wepNetwork);
// These should not be in |expectedConfigurations|.
WifiConfiguration nonSystemAppWepNetwork = WifiConfigurationTestUtil.createWepNetwork();
nonSystemAppWepNetwork.creatorUid = Process.FIRST_APPLICATION_UID;
configurations.add(nonSystemAppWepNetwork);
WifiConfiguration pskNetwork = WifiConfigurationTestUtil.createPskNetwork();
configurations.add(pskNetwork);
expectedConfigurations.add(pskNetwork);
// These should not be in |expectedConfigurations|.
WifiConfiguration nonSystemAppPskNetwork = WifiConfigurationTestUtil.createPskNetwork();
nonSystemAppPskNetwork.creatorUid = Process.FIRST_APPLICATION_UID + 1;
configurations.add(nonSystemAppPskNetwork);
WifiConfiguration openNetwork = WifiConfigurationTestUtil.createOpenNetwork();
configurations.add(openNetwork);
expectedConfigurations.add(openNetwork);
byte[] supplicantData = createWpaSupplicantConfBackupData(configurations);
byte[] ipConfigData = createIpConfBackupData(configurations);
List<WifiConfiguration> retrievedConfigurations =
mWifiBackupRestore.retrieveConfigurationsFromSupplicantBackupData(
supplicantData, ipConfigData);
WifiConfigurationTestUtil.assertConfigurationsEqualForBackup(
expectedConfigurations, retrievedConfigurations);
}
/**
* Verifying that backup data containing some unknown keys is properly restored.
* The backup data used here is a PII masked version of a backup data seen in a reported bug.
*/
@Test
public void testSingleNetworkSupplicantBackupRestoreWithUnknownEAPKey() {
String backupSupplicantConfNetworkBlock = "network={\n"
+ "ssid=" + WifiConfigurationTestUtil.TEST_SSID + "\n"
+ "psk=" + WifiConfigurationTestUtil.TEST_PSK + "\n"
+ "key_mgmt=WPA-PSK WPA-PSK-SHA256\n"
+ "priority=18\n"
+ "id_str=\"%7B%22creatorUid%22%3A%221000%22%2C%22configKey"
+ "%22%3A%22%5C%22BLAH%5C%22WPA_PSK%22%7D\"\n"
+ "eapRetryCount=6\n";
byte[] supplicantData = backupSupplicantConfNetworkBlock.getBytes();
List<WifiConfiguration> retrievedConfigurations =
mWifiBackupRestore.retrieveConfigurationsFromSupplicantBackupData(
supplicantData, null);
final WifiConfiguration expectedConfiguration = new WifiConfiguration();
expectedConfiguration.SSID = WifiConfigurationTestUtil.TEST_SSID;
expectedConfiguration.preSharedKey = WifiConfigurationTestUtil.TEST_PSK;
expectedConfiguration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
ArrayList<WifiConfiguration> expectedConfigurations = new ArrayList<WifiConfiguration>() {{
add(expectedConfiguration);
}};
WifiConfigurationTestUtil.assertConfigurationsEqualForBackup(
expectedConfigurations, retrievedConfigurations);
}
/**
* Verify that any corrupted data provided by Backup/Restore is ignored correctly.
*/
@Test
public void testCorruptBackupRestore() {
Random random = new Random();
byte[] backupData = new byte[100];
random.nextBytes(backupData);
List<WifiConfiguration> retrievedConfigurations =
mWifiBackupRestore.retrieveConfigurationsFromBackupData(backupData);
assertNull(retrievedConfigurations);
// No valid data to check in dump.
mCheckDump = false;
}
/**
* Verify that restoring of configuration from a 1.0 version backup data.
*/
@Test
public void testRestoreFromV1_0BackupData() {
List<WifiConfiguration> configurations = new ArrayList<>();
configurations.add(createNetworkForConfigurationWithV1_0Data());
byte[] backupData = WIFI_BACKUP_DATA_V1_0.getBytes();
List<WifiConfiguration> retrievedConfigurations =
mWifiBackupRestore.retrieveConfigurationsFromBackupData(backupData);
WifiConfigurationTestUtil.assertConfigurationsEqualForBackup(
configurations, retrievedConfigurations);
}
/**
* Verify that restoring of configuration from a 1.1 version backup data.
*/
@Test
public void testRestoreFromV1_1BackupData() {
List<WifiConfiguration> configurations = new ArrayList<>();
configurations.add(createNetworkForConfigurationWithV1_1Data());
byte[] backupData = WIFI_BACKUP_DATA_V1_1.getBytes();
List<WifiConfiguration> retrievedConfigurations =
mWifiBackupRestore.retrieveConfigurationsFromBackupData(backupData);
WifiConfigurationTestUtil.assertConfigurationsEqualForBackup(
configurations, retrievedConfigurations);
}
/**
* Verify that restoring of configuration from a 1.2 version backup data.
*/
@Test
public void testRestoreFromV1_2BackupData() {
List<WifiConfiguration> configurations = new ArrayList<>();
configurations.add(createNetworkForConfigurationWithV1_2Data());
byte[] backupData = WIFI_BACKUP_DATA_V1_2.getBytes();
List<WifiConfiguration> retrievedConfigurations =
mWifiBackupRestore.retrieveConfigurationsFromBackupData(backupData);
WifiConfigurationTestUtil.assertConfigurationsEqualForBackup(
configurations, retrievedConfigurations);
// Also, assert in the reverse direction to ensure the serialization logic matches.
// Note: This will stop working when we bump up the version. Then we'll need to copy
// the below assert to the test for the latest version.
assertEquals(WIFI_BACKUP_DATA_V1_2,
new String(mWifiBackupRestore.retrieveBackupDataFromConfigurations(
retrievedConfigurations)));
}
/**
* Creates correct WiFiConfiguration that should be parsed out of
* {@link #WIFI_BACKUP_DATA_V1_0} configuration which contains 1.0 version backup.
*/
private static WifiConfiguration createNetworkForConfigurationWithV1_0Data() {
final WifiConfiguration config = new WifiConfiguration();
config.SSID = "\"" + WifiConfigurationTestUtil.TEST_SSID + "\"";
config.wepTxKeyIndex = 0;
config.hiddenSSID = false;
config.requirePmf = false;
config.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
config.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
config.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
config.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
config.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
config.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
config.shared = true;
IpConfiguration ipConfiguration = new IpConfiguration();
ipConfiguration.setIpAssignment(IpConfiguration.IpAssignment.DHCP);
ipConfiguration.setProxySettings(IpConfiguration.ProxySettings.NONE);
config.setIpConfiguration(ipConfiguration);
return config;
}
/**
* Creates correct WiFiConfiguration that should be parsed out of
* {@link #WIFI_BACKUP_DATA_V1_1} configuration which contains 1.1 version backup.
*/
private static WifiConfiguration createNetworkForConfigurationWithV1_1Data() {
final WifiConfiguration config = createNetworkForConfigurationWithV1_0Data();
config.meteredOverride = WifiConfiguration.METERED_OVERRIDE_METERED;
return config;
}
/**
* Creates correct WiFiConfiguration that should be parsed out of
* {@link #WIFI_BACKUP_DATA_V1_1} configuration which contains 1.2 version backup.
*/
private static WifiConfiguration createNetworkForConfigurationWithV1_2Data() {
final WifiConfiguration config = createNetworkForConfigurationWithV1_1Data();
config.allowAutojoin = false;
return config;
}
/**
* Helper method to write a list of networks in wpa_supplicant.conf format to the output stream.
*/
private byte[] createWpaSupplicantConfBackupData(List<WifiConfiguration> configurations) {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
OutputStreamWriter out = new OutputStreamWriter(bos);
try {
for (WifiConfiguration configuration : configurations) {
writeConfigurationToWpaSupplicantConf(out, configuration);
}
out.flush();
return bos.toByteArray();
} catch (IOException e) {
return null;
}
}
/**
* Helper method to write a network in wpa_supplicant.conf format to the output stream.
* This was created using a sample wpa_supplicant.conf file. Using the raw key strings here
* (instead of consts in WifiBackupRestore).
*/
private void writeConfigurationToWpaSupplicantConf(
OutputStreamWriter out, WifiConfiguration configuration)
throws IOException {
out.write("network={\n");
out.write(" " + "ssid=" + configuration.SSID + "\n");
if (configuration.hiddenSSID) {
out.write(" " + "scan_ssid=1" + "\n");
}
String allowedKeyManagement = "";
if (configuration.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.NONE)) {
allowedKeyManagement += "NONE";
}
if (configuration.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.WPA_PSK)) {
allowedKeyManagement += "WPA-PSK ";
}
if (configuration.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.WPA_EAP)) {
allowedKeyManagement += "WPA-EAP ";
}
if (configuration.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.IEEE8021X)) {
allowedKeyManagement += "IEEE8021X ";
}
out.write(" " + "key_mgmt=" + allowedKeyManagement + "\n");
String allowedAuthAlgorithm = "";
if (configuration.allowedAuthAlgorithms.get(WifiConfiguration.AuthAlgorithm.OPEN)) {
allowedAuthAlgorithm += "OPEN ";
}
if (configuration.allowedAuthAlgorithms.get(WifiConfiguration.AuthAlgorithm.SHARED)) {
allowedAuthAlgorithm += "SHARED ";
}
out.write(" " + "auth_alg=" + allowedAuthAlgorithm + "\n");
if (configuration.preSharedKey != null) {
out.write(" " + "psk=" + configuration.preSharedKey + "\n");
}
if (configuration.wepKeys[0] != null) {
out.write(" " + "wep_key0=" + configuration.wepKeys[0] + "\n");
}
if (configuration.wepKeys[1] != null) {
out.write(" " + "wep_key1=" + configuration.wepKeys[1] + "\n");
}
if (configuration.wepKeys[2] != null) {
out.write(" " + "wep_key2=" + configuration.wepKeys[2] + "\n");
}
if (configuration.wepKeys[3] != null) {
out.write(" " + "wep_key3=" + configuration.wepKeys[3] + "\n");
}
if (configuration.wepKeys[0] != null || configuration.wepKeys[1] != null
|| configuration.wepKeys[2] != null || configuration.wepKeys[3] != null) {
out.write(" " + "wep_tx_keyidx=" + configuration.wepTxKeyIndex + "\n");
}
Map<String, String> extras = new HashMap<>();
extras.put(SupplicantStaNetworkHal.ID_STRING_KEY_CONFIG_KEY, configuration.getKey());
extras.put(SupplicantStaNetworkHal.ID_STRING_KEY_CREATOR_UID,
Integer.toString(configuration.creatorUid));
String idString = "\"" + SupplicantStaNetworkHal.createNetworkExtra(extras) + "\"";
if (idString != null) {
out.write(" " + "id_str=" + idString + "\n");
}
out.write("}\n");
out.write("\n");
}
/**
* Helper method to write a list of networks in ipconfig.txt format to the output stream.
*/
private byte[] createIpConfBackupData(List<WifiConfiguration> configurations) {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
DataOutputStream out = new DataOutputStream(bos);
final int configStoreVersion = 2;
try {
// write version first.
out.writeInt(configStoreVersion);
for (WifiConfiguration configuration : configurations) {
// TODO: store configKey as a string instead of calculating its hash
IpConfigStoreTestWriter.writeConfig(
out,
String.valueOf(configuration.getKey().hashCode()),
configuration.getIpConfiguration(),
configStoreVersion);
}
out.flush();
return bos.toByteArray();
} catch (IOException e) {
return null;
}
}
}