WifiBackupRestoreTest.java revision 3204fb9682242a7b5a749489076c66d448c42577
1/* 2 * Copyright (C) 2016 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17package com.android.server.wifi; 18 19import static org.junit.Assert.*; 20import static org.mockito.Mockito.*; 21 22import android.net.IpConfiguration; 23import android.net.LinkAddress; 24import android.net.NetworkUtils; 25import android.net.ProxyInfo; 26import android.net.StaticIpConfiguration; 27import android.net.wifi.WifiConfiguration; 28import android.test.suitebuilder.annotation.SmallTest; 29import android.util.Log; 30 31import com.android.server.net.IpConfigStore; 32 33import org.junit.After; 34import org.junit.Before; 35import org.junit.Test; 36 37import java.io.ByteArrayOutputStream; 38import java.io.DataOutputStream; 39import java.io.FileDescriptor; 40import java.io.IOException; 41import java.io.OutputStreamWriter; 42import java.io.PrintWriter; 43import java.io.StringWriter; 44import java.net.InetAddress; 45import java.util.ArrayList; 46import java.util.HashMap; 47import java.util.List; 48import java.util.Map; 49import java.util.Random; 50 51/** 52 * Unit tests for {@link com.android.server.wifi.WifiBackupRestore}. 53 */ 54@SmallTest 55public class WifiBackupRestoreTest { 56 57 private static final int TEST_NETWORK_ID = -1; 58 private static final int TEST_UID = 1; 59 private static final String TEST_SSID = "WifiBackupRestoreSSID_"; 60 private static final String TEST_PSK = "WifiBackupRestorePsk"; 61 private static final String[] TEST_WEP_KEYS = 62 {"WifiBackupRestoreWep1", "WifiBackupRestoreWep2", 63 "WifiBackupRestoreWep3", "WifiBackupRestoreWep3"}; 64 private static final int TEST_WEP_TX_KEY_INDEX = 1; 65 private static final String TEST_FQDN = "WifiBackupRestoreFQDN"; 66 private static final String TEST_PROVIDER_FRIENDLY_NAME = "WifiBackupRestoreFriendlyName"; 67 private static final String TEST_STATIC_IP_LINK_ADDRESS = "192.168.48.2"; 68 private static final int TEST_STATIC_IP_LINK_PREFIX_LENGTH = 8; 69 private static final String TEST_STATIC_IP_GATEWAY_ADDRESS = "192.168.48.1"; 70 private static final String[] TEST_STATIC_IP_DNS_SERVER_ADDRESSES = 71 new String[]{"192.168.48.1", "192.168.48.10"}; 72 private static final String TEST_STATIC_PROXY_HOST = "192.168.48.1"; 73 private static final int TEST_STATIC_PROXY_PORT = 8000; 74 private static final String TEST_STATIC_PROXY_EXCLUSION_LIST = ""; 75 private static final String TEST_PAC_PROXY_LOCATION = "http://"; 76 77 private final WifiBackupRestore mWifiBackupRestore = new WifiBackupRestore(); 78 private boolean mCheckDump = true; 79 80 @Before 81 public void setUp() throws Exception { 82 // Enable verbose logging before tests to check the backup data dumps. 83 mWifiBackupRestore.enableVerboseLogging(1); 84 } 85 86 @After 87 public void cleanUp() throws Exception { 88 if (mCheckDump) { 89 StringWriter stringWriter = new StringWriter(); 90 mWifiBackupRestore.dump( 91 new FileDescriptor(), new PrintWriter(stringWriter), new String[0]); 92 // Ensure that the SSID was dumped out. 93 assertTrue(stringWriter.toString().contains(TEST_SSID)); 94 // Ensure that the password wasn't dumped out. 95 assertFalse(stringWriter.toString().contains(TEST_PSK)); 96 } 97 } 98 99 /** 100 * Verify that a single open network configuration is serialized & deserialized correctly. 101 */ 102 @Test 103 public void testSingleOpenNetworkBackupRestore() { 104 List<WifiConfiguration> configurations = new ArrayList<>(); 105 configurations.add(createOpenNetwork(0)); 106 107 byte[] backupData = mWifiBackupRestore.retrieveBackupDataFromConfigurations(configurations); 108 List<WifiConfiguration> retrievedConfigurations = 109 mWifiBackupRestore.retrieveConfigurationsFromBackupData(backupData); 110 assertConfigurationsEqual(configurations, retrievedConfigurations); 111 } 112 113 /** 114 * Verify that a single open hidden network configuration is serialized & deserialized 115 * correctly. 116 */ 117 @Test 118 public void testSingleOpenHiddenNetworkBackupRestore() { 119 List<WifiConfiguration> configurations = new ArrayList<>(); 120 configurations.add(createOpenHiddenNetwork(0)); 121 122 byte[] backupData = mWifiBackupRestore.retrieveBackupDataFromConfigurations(configurations); 123 List<WifiConfiguration> retrievedConfigurations = 124 mWifiBackupRestore.retrieveConfigurationsFromBackupData(backupData); 125 assertConfigurationsEqual(configurations, retrievedConfigurations); 126 } 127 128 /** 129 * Verify that a single PSK network configuration is serialized & deserialized correctly. 130 */ 131 @Test 132 public void testSinglePskNetworkBackupRestore() { 133 List<WifiConfiguration> configurations = new ArrayList<>(); 134 configurations.add(createPskNetwork(0)); 135 136 byte[] backupData = mWifiBackupRestore.retrieveBackupDataFromConfigurations(configurations); 137 List<WifiConfiguration> retrievedConfigurations = 138 mWifiBackupRestore.retrieveConfigurationsFromBackupData(backupData); 139 assertConfigurationsEqual(configurations, retrievedConfigurations); 140 } 141 142 /** 143 * Verify that a single PSK hidden network configuration is serialized & deserialized correctly. 144 */ 145 @Test 146 public void testSinglePskHiddenNetworkBackupRestore() { 147 List<WifiConfiguration> configurations = new ArrayList<>(); 148 configurations.add(createPskHiddenNetwork(0)); 149 150 byte[] backupData = mWifiBackupRestore.retrieveBackupDataFromConfigurations(configurations); 151 List<WifiConfiguration> retrievedConfigurations = 152 mWifiBackupRestore.retrieveConfigurationsFromBackupData(backupData); 153 assertConfigurationsEqual(configurations, retrievedConfigurations); 154 } 155 156 /** 157 * Verify that a single WEP network configuration is serialized & deserialized correctly. 158 */ 159 @Test 160 public void testSingleWepNetworkBackupRestore() { 161 List<WifiConfiguration> configurations = new ArrayList<>(); 162 configurations.add(createWepNetwork(0)); 163 164 byte[] backupData = mWifiBackupRestore.retrieveBackupDataFromConfigurations(configurations); 165 List<WifiConfiguration> retrievedConfigurations = 166 mWifiBackupRestore.retrieveConfigurationsFromBackupData(backupData); 167 assertConfigurationsEqual(configurations, retrievedConfigurations); 168 } 169 170 /** 171 * Verify that a single enterprise network configuration is not serialized. 172 */ 173 @Test 174 public void testSingleEnterpriseNetworkNotBackupRestore() { 175 List<WifiConfiguration> configurations = new ArrayList<>(); 176 configurations.add(createEapNetwork(0)); 177 178 byte[] backupData = mWifiBackupRestore.retrieveBackupDataFromConfigurations(configurations); 179 List<WifiConfiguration> retrievedConfigurations = 180 mWifiBackupRestore.retrieveConfigurationsFromBackupData(backupData); 181 assertTrue(retrievedConfigurations.isEmpty()); 182 // No valid data to check in dump. 183 mCheckDump = false; 184 } 185 186 /** 187 * Verify that a single PSK network configuration with static ip/proxy settings is serialized & 188 * deserialized correctly. 189 */ 190 @Test 191 public void testSinglePskNetworkWithStaticIpAndStaticProxyBackupRestore() { 192 List<WifiConfiguration> configurations = new ArrayList<>(); 193 WifiConfiguration pskNetwork = createPskNetwork(0); 194 pskNetwork.setIpConfiguration(createStaticIpConfigurationWithStaticProxy()); 195 configurations.add(pskNetwork); 196 197 byte[] backupData = mWifiBackupRestore.retrieveBackupDataFromConfigurations(configurations); 198 List<WifiConfiguration> retrievedConfigurations = 199 mWifiBackupRestore.retrieveConfigurationsFromBackupData(backupData); 200 assertConfigurationsEqual(configurations, retrievedConfigurations); 201 } 202 203 /** 204 * Verify that a single PSK network configuration with static ip & PAC proxy settings is 205 * serialized & deserialized correctly. 206 */ 207 @Test 208 public void testSinglePskNetworkWithStaticIpAndPACProxyBackupRestore() { 209 List<WifiConfiguration> configurations = new ArrayList<>(); 210 WifiConfiguration pskNetwork = createPskNetwork(0); 211 pskNetwork.setIpConfiguration(createStaticIpConfigurationWithPacProxy()); 212 configurations.add(pskNetwork); 213 214 byte[] backupData = mWifiBackupRestore.retrieveBackupDataFromConfigurations(configurations); 215 List<WifiConfiguration> retrievedConfigurations = 216 mWifiBackupRestore.retrieveConfigurationsFromBackupData(backupData); 217 assertConfigurationsEqual(configurations, retrievedConfigurations); 218 } 219 220 /** 221 * Verify that a single PSK network configuration with DHCP ip & PAC proxy settings is 222 * serialized & deserialized correctly. 223 */ 224 @Test 225 public void testSinglePskNetworkWithDHCPIpAndPACProxyBackupRestore() { 226 List<WifiConfiguration> configurations = new ArrayList<>(); 227 WifiConfiguration pskNetwork = createPskNetwork(0); 228 pskNetwork.setIpConfiguration(createDHCPIpConfigurationWithPacProxy()); 229 configurations.add(pskNetwork); 230 231 byte[] backupData = mWifiBackupRestore.retrieveBackupDataFromConfigurations(configurations); 232 List<WifiConfiguration> retrievedConfigurations = 233 mWifiBackupRestore.retrieveConfigurationsFromBackupData(backupData); 234 assertConfigurationsEqual(configurations, retrievedConfigurations); 235 } 236 237 /** 238 * Verify that a single PSK network configuration with partial static ip settings is serialized 239 * & deserialized correctly. 240 */ 241 @Test 242 public void testSinglePskNetworkWithPartialStaticIpBackupRestore() { 243 List<WifiConfiguration> configurations = new ArrayList<>(); 244 WifiConfiguration pskNetwork = createPskNetwork(0); 245 pskNetwork.setIpConfiguration(createPartialStaticIpConfigurationWithPacProxy()); 246 configurations.add(pskNetwork); 247 248 byte[] backupData = mWifiBackupRestore.retrieveBackupDataFromConfigurations(configurations); 249 List<WifiConfiguration> retrievedConfigurations = 250 mWifiBackupRestore.retrieveConfigurationsFromBackupData(backupData); 251 assertConfigurationsEqual(configurations, retrievedConfigurations); 252 } 253 254 /** 255 * Verify that multiple networks of different types are serialized and deserialized correctly. 256 */ 257 @Test 258 public void testMultipleNetworksAllBackupRestore() { 259 List<WifiConfiguration> configurations = new ArrayList<>(); 260 configurations.add(createWepNetwork(0)); 261 configurations.add(createWepNetwork(1)); 262 configurations.add(createPskNetwork(2)); 263 configurations.add(createOpenNetwork(3)); 264 265 byte[] backupData = mWifiBackupRestore.retrieveBackupDataFromConfigurations(configurations); 266 List<WifiConfiguration> retrievedConfigurations = 267 mWifiBackupRestore.retrieveConfigurationsFromBackupData(backupData); 268 assertConfigurationsEqual(configurations, retrievedConfigurations); 269 } 270 271 /** 272 * Verify that multiple networks of different types except enterprise ones are serialized and 273 * deserialized correctly 274 */ 275 @Test 276 public void testMultipleNetworksNonEnterpriseBackupRestore() { 277 List<WifiConfiguration> configurations = new ArrayList<>(); 278 List<WifiConfiguration> expectedConfigurations = new ArrayList<>(); 279 280 configurations.add(createWepNetwork(0)); 281 expectedConfigurations.add(createWepNetwork(0)); 282 283 configurations.add(createEapNetwork(1)); 284 285 configurations.add(createPskNetwork(2)); 286 expectedConfigurations.add(createPskNetwork(2)); 287 288 configurations.add(createOpenNetwork(3)); 289 expectedConfigurations.add(createOpenNetwork(3)); 290 291 byte[] backupData = mWifiBackupRestore.retrieveBackupDataFromConfigurations(configurations); 292 List<WifiConfiguration> retrievedConfigurations = 293 mWifiBackupRestore.retrieveConfigurationsFromBackupData(backupData); 294 assertConfigurationsEqual(expectedConfigurations, retrievedConfigurations); 295 } 296 297 /** 298 * Verify that multiple networks with different credential types and IpConfiguration types are 299 * serialized and deserialized correctly. 300 */ 301 @Test 302 public void testMultipleNetworksWithDifferentIpConfigurationsAllBackupRestore() { 303 List<WifiConfiguration> configurations = new ArrayList<>(); 304 305 WifiConfiguration wepNetwork = createWepNetwork(0); 306 wepNetwork.setIpConfiguration(createDHCPIpConfigurationWithPacProxy()); 307 configurations.add(wepNetwork); 308 309 WifiConfiguration pskNetwork = createPskNetwork(1); 310 pskNetwork.setIpConfiguration(createStaticIpConfigurationWithPacProxy()); 311 configurations.add(pskNetwork); 312 313 WifiConfiguration openNetwork = createOpenNetwork(2); 314 openNetwork.setIpConfiguration(createStaticIpConfigurationWithStaticProxy()); 315 configurations.add(openNetwork); 316 317 byte[] backupData = mWifiBackupRestore.retrieveBackupDataFromConfigurations(configurations); 318 List<WifiConfiguration> retrievedConfigurations = 319 mWifiBackupRestore.retrieveConfigurationsFromBackupData(backupData); 320 assertConfigurationsEqual(configurations, retrievedConfigurations); 321 } 322 323 /** 324 * Verify that a single open network configuration is serialized & deserialized correctly from 325 * old backups. 326 */ 327 @Test 328 public void testSingleOpenNetworkSupplicantBackupRestore() { 329 List<WifiConfiguration> configurations = new ArrayList<>(); 330 configurations.add(createOpenNetwork(0)); 331 332 byte[] supplicantData = createWpaSupplicantConfBackupData(configurations); 333 byte[] ipConfigData = createIpConfBackupData(configurations); 334 List<WifiConfiguration> retrievedConfigurations = 335 mWifiBackupRestore.retrieveConfigurationsFromSupplicantBackupData( 336 supplicantData, ipConfigData); 337 assertConfigurationsEqual(configurations, retrievedConfigurations); 338 } 339 340 /** 341 * Verify that a single open hidden network configuration is serialized & deserialized 342 * correctly from old backups. 343 */ 344 @Test 345 public void testSingleOpenHiddenNetworkSupplicantBackupRestore() { 346 List<WifiConfiguration> configurations = new ArrayList<>(); 347 configurations.add(createOpenHiddenNetwork(0)); 348 349 byte[] supplicantData = createWpaSupplicantConfBackupData(configurations); 350 byte[] ipConfigData = createIpConfBackupData(configurations); 351 List<WifiConfiguration> retrievedConfigurations = 352 mWifiBackupRestore.retrieveConfigurationsFromSupplicantBackupData( 353 supplicantData, ipConfigData); 354 assertConfigurationsEqual(configurations, retrievedConfigurations); 355 } 356 357 /** 358 * Verify that a single PSK network configuration is serialized & deserialized correctly from 359 * old backups. 360 */ 361 @Test 362 public void testSinglePskNetworkSupplicantBackupRestore() { 363 List<WifiConfiguration> configurations = new ArrayList<>(); 364 configurations.add(createPskNetwork(0)); 365 366 byte[] supplicantData = createWpaSupplicantConfBackupData(configurations); 367 byte[] ipConfigData = createIpConfBackupData(configurations); 368 List<WifiConfiguration> retrievedConfigurations = 369 mWifiBackupRestore.retrieveConfigurationsFromSupplicantBackupData( 370 supplicantData, ipConfigData); 371 assertConfigurationsEqual(configurations, retrievedConfigurations); 372 } 373 374 /** 375 * Verify that a single PSK hidden network configuration is serialized & deserialized correctly 376 * from old backups. 377 */ 378 @Test 379 public void testSinglePskHiddenNetworkSupplicantBackupRestore() { 380 List<WifiConfiguration> configurations = new ArrayList<>(); 381 configurations.add(createPskHiddenNetwork(0)); 382 383 byte[] supplicantData = createWpaSupplicantConfBackupData(configurations); 384 byte[] ipConfigData = createIpConfBackupData(configurations); 385 List<WifiConfiguration> retrievedConfigurations = 386 mWifiBackupRestore.retrieveConfigurationsFromSupplicantBackupData( 387 supplicantData, ipConfigData); 388 assertConfigurationsEqual(configurations, retrievedConfigurations); 389 } 390 391 /** 392 * Verify that a single WEP network configuration is serialized & deserialized correctly from 393 * old backups. 394 */ 395 @Test 396 public void testSingleWepNetworkSupplicantBackupRestore() { 397 List<WifiConfiguration> configurations = new ArrayList<>(); 398 configurations.add(createWepNetwork(0)); 399 400 byte[] supplicantData = createWpaSupplicantConfBackupData(configurations); 401 byte[] ipConfigData = createIpConfBackupData(configurations); 402 List<WifiConfiguration> retrievedConfigurations = 403 mWifiBackupRestore.retrieveConfigurationsFromSupplicantBackupData( 404 supplicantData, ipConfigData); 405 assertConfigurationsEqual(configurations, retrievedConfigurations); 406 } 407 408 /** 409 * Verify that a single enterprise network configuration is not serialized from old backups. 410 */ 411 @Test 412 public void testSingleEnterpriseNetworkNotSupplicantBackupRestore() { 413 List<WifiConfiguration> configurations = new ArrayList<>(); 414 configurations.add(createEapNetwork(0)); 415 416 byte[] supplicantData = createWpaSupplicantConfBackupData(configurations); 417 byte[] ipConfigData = createIpConfBackupData(configurations); 418 List<WifiConfiguration> retrievedConfigurations = 419 mWifiBackupRestore.retrieveConfigurationsFromSupplicantBackupData( 420 supplicantData, ipConfigData); 421 assertTrue(retrievedConfigurations.isEmpty()); 422 } 423 424 /** 425 * Verify that multiple networks with different credential types and IpConfiguration types are 426 * serialized and deserialized correctly from old backups 427 */ 428 @Test 429 public void testMultipleNetworksWithDifferentIpConfigurationsAllSupplicantBackupRestore() { 430 List<WifiConfiguration> configurations = new ArrayList<>(); 431 432 WifiConfiguration wepNetwork = createWepNetwork(0); 433 wepNetwork.setIpConfiguration(createDHCPIpConfigurationWithPacProxy()); 434 configurations.add(wepNetwork); 435 436 WifiConfiguration pskNetwork = createPskNetwork(1); 437 pskNetwork.setIpConfiguration(createStaticIpConfigurationWithPacProxy()); 438 configurations.add(pskNetwork); 439 440 WifiConfiguration openNetwork = createOpenNetwork(2); 441 openNetwork.setIpConfiguration(createStaticIpConfigurationWithStaticProxy()); 442 configurations.add(openNetwork); 443 444 byte[] supplicantData = createWpaSupplicantConfBackupData(configurations); 445 byte[] ipConfigData = createIpConfBackupData(configurations); 446 List<WifiConfiguration> retrievedConfigurations = 447 mWifiBackupRestore.retrieveConfigurationsFromSupplicantBackupData( 448 supplicantData, ipConfigData); 449 assertConfigurationsEqual(configurations, retrievedConfigurations); 450 } 451 452 /** 453 * Verify that any corrupted data provided by Backup/Restore is ignored correctly. 454 */ 455 @Test 456 public void testCorruptBackupRestore() { 457 Random random = new Random(); 458 byte[] backupData = new byte[100]; 459 random.nextBytes(backupData); 460 461 List<WifiConfiguration> retrievedConfigurations = 462 mWifiBackupRestore.retrieveConfigurationsFromBackupData(backupData); 463 assertNull(retrievedConfigurations); 464 // No valid data to check in dump. 465 mCheckDump = false; 466 } 467 468 private WifiConfiguration createOpenNetwork(int id) { 469 String ssid = "\"" + TEST_SSID + id + "\""; 470 return WifiConfigurationTestUtil.generateWifiConfig(TEST_NETWORK_ID, TEST_UID, ssid, 471 true, true, null, null, 472 WifiConfigurationTestUtil.SECURITY_NONE); 473 } 474 475 private WifiConfiguration createOpenHiddenNetwork(int id) { 476 String ssid = "\"" + TEST_SSID + id + "\""; 477 WifiConfiguration config = 478 WifiConfigurationTestUtil.generateWifiConfig(TEST_NETWORK_ID, TEST_UID, ssid, 479 true, true, null, null, 480 WifiConfigurationTestUtil.SECURITY_NONE); 481 config.hiddenSSID = true; 482 return config; 483 } 484 485 private WifiConfiguration createPskNetwork(int id) { 486 String ssid = "\"" + TEST_SSID + id + "\""; 487 WifiConfiguration configuration = 488 WifiConfigurationTestUtil.generateWifiConfig(TEST_NETWORK_ID, TEST_UID, ssid, 489 true, true, null, null, 490 WifiConfigurationTestUtil.SECURITY_PSK); 491 configuration.preSharedKey = TEST_PSK; 492 return configuration; 493 } 494 495 private WifiConfiguration createPskHiddenNetwork(int id) { 496 String ssid = "\"" + TEST_SSID + id + "\""; 497 WifiConfiguration configuration = 498 WifiConfigurationTestUtil.generateWifiConfig(TEST_NETWORK_ID, TEST_UID, ssid, 499 true, true, null, null, 500 WifiConfigurationTestUtil.SECURITY_PSK); 501 configuration.preSharedKey = TEST_PSK; 502 configuration.hiddenSSID = true; 503 return configuration; 504 } 505 506 private WifiConfiguration createWepNetwork(int id) { 507 String ssid = "\"" + TEST_SSID + id + "\""; 508 WifiConfiguration configuration = 509 WifiConfigurationTestUtil.generateWifiConfig(TEST_NETWORK_ID, TEST_UID, ssid, 510 true, true, null, null, 511 WifiConfigurationTestUtil.SECURITY_WEP); 512 configuration.wepKeys = TEST_WEP_KEYS; 513 configuration.wepTxKeyIndex = TEST_WEP_TX_KEY_INDEX; 514 return configuration; 515 } 516 517 private WifiConfiguration createEapNetwork(int id) { 518 String ssid = "\"" + TEST_SSID + id + "\""; 519 WifiConfiguration configuration = 520 WifiConfigurationTestUtil.generateWifiConfig(TEST_NETWORK_ID, TEST_UID, ssid, 521 true, true, TEST_FQDN, TEST_PROVIDER_FRIENDLY_NAME, 522 WifiConfigurationTestUtil.SECURITY_EAP); 523 return configuration; 524 } 525 526 private StaticIpConfiguration createStaticIpConfiguration() { 527 StaticIpConfiguration staticIpConfiguration = new StaticIpConfiguration(); 528 LinkAddress linkAddress = 529 new LinkAddress(NetworkUtils.numericToInetAddress(TEST_STATIC_IP_LINK_ADDRESS), 530 TEST_STATIC_IP_LINK_PREFIX_LENGTH); 531 staticIpConfiguration.ipAddress = linkAddress; 532 InetAddress gatewayAddress = 533 NetworkUtils.numericToInetAddress(TEST_STATIC_IP_GATEWAY_ADDRESS); 534 staticIpConfiguration.gateway = gatewayAddress; 535 for (String dnsServerAddress : TEST_STATIC_IP_DNS_SERVER_ADDRESSES) { 536 staticIpConfiguration.dnsServers.add( 537 NetworkUtils.numericToInetAddress(dnsServerAddress)); 538 } 539 return staticIpConfiguration; 540 } 541 542 private StaticIpConfiguration createPartialStaticIpConfiguration() { 543 StaticIpConfiguration staticIpConfiguration = new StaticIpConfiguration(); 544 LinkAddress linkAddress = 545 new LinkAddress(NetworkUtils.numericToInetAddress(TEST_STATIC_IP_LINK_ADDRESS), 546 TEST_STATIC_IP_LINK_PREFIX_LENGTH); 547 staticIpConfiguration.ipAddress = linkAddress; 548 // Only set the link address, don't set the gateway/dns servers. 549 return staticIpConfiguration; 550 } 551 552 private IpConfiguration createStaticIpConfigurationWithPacProxy() { 553 StaticIpConfiguration staticIpConfiguration = createStaticIpConfiguration(); 554 ProxyInfo proxyInfo = new ProxyInfo(TEST_PAC_PROXY_LOCATION); 555 return new IpConfiguration(IpConfiguration.IpAssignment.STATIC, 556 IpConfiguration.ProxySettings.PAC, staticIpConfiguration, proxyInfo); 557 } 558 559 private IpConfiguration createStaticIpConfigurationWithStaticProxy() { 560 StaticIpConfiguration staticIpConfiguration = createStaticIpConfiguration(); 561 ProxyInfo proxyInfo = 562 new ProxyInfo(TEST_STATIC_PROXY_HOST, 563 TEST_STATIC_PROXY_PORT, 564 TEST_STATIC_PROXY_EXCLUSION_LIST); 565 return new IpConfiguration(IpConfiguration.IpAssignment.STATIC, 566 IpConfiguration.ProxySettings.STATIC, staticIpConfiguration, proxyInfo); 567 } 568 569 private IpConfiguration createPartialStaticIpConfigurationWithPacProxy() { 570 StaticIpConfiguration staticIpConfiguration = createPartialStaticIpConfiguration(); 571 ProxyInfo proxyInfo = new ProxyInfo(TEST_PAC_PROXY_LOCATION); 572 return new IpConfiguration(IpConfiguration.IpAssignment.STATIC, 573 IpConfiguration.ProxySettings.PAC, staticIpConfiguration, proxyInfo); 574 } 575 576 private IpConfiguration createDHCPIpConfigurationWithPacProxy() { 577 ProxyInfo proxyInfo = new ProxyInfo(TEST_PAC_PROXY_LOCATION); 578 return new IpConfiguration(IpConfiguration.IpAssignment.DHCP, 579 IpConfiguration.ProxySettings.PAC, null, proxyInfo); 580 } 581 582 /** 583 * Helper method to write a list of networks in wpa_supplicant.conf format to the output stream. 584 */ 585 private byte[] createWpaSupplicantConfBackupData(List<WifiConfiguration> configurations) { 586 ByteArrayOutputStream bos = new ByteArrayOutputStream(); 587 OutputStreamWriter out = new OutputStreamWriter(bos); 588 try { 589 for (WifiConfiguration configuration : configurations) { 590 writeConfigurationToWpaSupplicantConf(out, configuration); 591 } 592 out.flush(); 593 return bos.toByteArray(); 594 } catch (IOException e) { 595 return null; 596 } 597 } 598 599 /** 600 * Helper method to write a network in wpa_supplicant.conf format to the output stream. 601 * This was created using a sample wpa_supplicant.conf file. Using the raw key strings here 602 * (instead of consts in WifiBackupRestore). 603 */ 604 private void writeConfigurationToWpaSupplicantConf( 605 OutputStreamWriter out, WifiConfiguration configuration) 606 throws IOException { 607 out.write("network={\n"); 608 out.write(" " + "ssid=" + configuration.SSID + "\n"); 609 String allowedKeyManagement = ""; 610 if (configuration.hiddenSSID) { 611 out.write(" " + "scan_ssid=1" + "\n"); 612 } 613 if (configuration.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.NONE)) { 614 allowedKeyManagement += "NONE"; 615 } 616 if (configuration.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.WPA_PSK)) { 617 allowedKeyManagement += "WPA-PSK "; 618 } 619 if (configuration.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.WPA_EAP)) { 620 allowedKeyManagement += "WPA-EAP "; 621 } 622 if (configuration.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.IEEE8021X)) { 623 allowedKeyManagement += "IEEE8021X "; 624 } 625 out.write(" " + "key_mgmt=" + allowedKeyManagement + "\n"); 626 if (configuration.preSharedKey != null) { 627 out.write(" " + "psk=" + configuration.preSharedKey + "\n"); 628 } 629 if (configuration.wepKeys[0] != null) { 630 out.write(" " + "wep_key0=" + configuration.wepKeys[0] + "\n"); 631 } 632 if (configuration.wepKeys[1] != null) { 633 out.write(" " + "wep_key1=" + configuration.wepKeys[1] + "\n"); 634 } 635 if (configuration.wepKeys[2] != null) { 636 out.write(" " + "wep_key2=" + configuration.wepKeys[2] + "\n"); 637 } 638 if (configuration.wepKeys[3] != null) { 639 out.write(" " + "wep_key3=" + configuration.wepKeys[3] + "\n"); 640 } 641 if (configuration.wepKeys[0] != null || configuration.wepKeys[1] != null 642 || configuration.wepKeys[2] != null || configuration.wepKeys[3] != null) { 643 out.write(" " + "wep_tx_keyidx=" + configuration.wepTxKeyIndex + "\n"); 644 } 645 Map<String, String> extras = new HashMap<>(); 646 extras.put(WifiConfigStore.ID_STRING_KEY_CONFIG_KEY, configuration.configKey()); 647 extras.put(WifiConfigStore.ID_STRING_KEY_CREATOR_UID, 648 Integer.toString(configuration.creatorUid)); 649 String idString = WifiNative.createNetworkExtra(extras); 650 if (idString != null) { 651 idString = "\"" + idString + "\""; 652 out.write(" " + "id_str=" + idString + "\n"); 653 } 654 out.write("}\n"); 655 out.write("\n"); 656 } 657 658 /** 659 * Helper method to write a list of networks in ipconfig.txt format to the output stream. 660 */ 661 private byte[] createIpConfBackupData(List<WifiConfiguration> configurations) { 662 ByteArrayOutputStream bos = new ByteArrayOutputStream(); 663 DataOutputStream out = new DataOutputStream(bos); 664 try { 665 // write version first. 666 out.writeInt(2); 667 for (WifiConfiguration configuration : configurations) { 668 IpConfigStore.writeConfig(out, configuration.configKey().hashCode(), 669 configuration.getIpConfiguration()); 670 } 671 out.flush(); 672 return bos.toByteArray(); 673 } catch (IOException e) { 674 return null; 675 } 676 } 677 678 /** 679 * Asserts that the 2 lists of configurations are equal 680 */ 681 private void assertConfigurationsEqual( 682 List<WifiConfiguration> expected, List<WifiConfiguration> actual) { 683 assertEquals(expected.size(), actual.size()); 684 for (WifiConfiguration expectedConfiguration : expected) { 685 String expectedConfigKey = expectedConfiguration.configKey(); 686 boolean didCompare = false; 687 for (WifiConfiguration actualConfiguration : actual) { 688 String actualConfigKey = actualConfiguration.configKey(); 689 if (actualConfigKey.equals(expectedConfigKey)) { 690 assertConfigurationEqual(expectedConfiguration, actualConfiguration); 691 didCompare = true; 692 } 693 } 694 assertTrue(didCompare); 695 } 696 } 697 698 /** 699 * Asserts that the 2 WifiConfigurations are equal 700 */ 701 private void assertConfigurationEqual( 702 WifiConfiguration expected, WifiConfiguration actual) { 703 assertEquals(expected.SSID, actual.SSID); 704 assertEquals(expected.BSSID, actual.BSSID); 705 assertEquals(expected.preSharedKey, actual.preSharedKey); 706 assertEquals(expected.wepKeys, actual.wepKeys); 707 assertEquals(expected.wepTxKeyIndex, actual.wepTxKeyIndex); 708 assertEquals(expected.hiddenSSID, actual.hiddenSSID); 709 assertEquals(expected.allowedKeyManagement, actual.allowedKeyManagement); 710 assertEquals(expected.allowedProtocols, actual.allowedProtocols); 711 assertEquals(expected.allowedAuthAlgorithms, actual.allowedAuthAlgorithms); 712 assertEquals(expected.shared, actual.shared); 713 assertEquals(expected.creatorUid, actual.creatorUid); 714 assertEquals(expected.getIpConfiguration(), actual.getIpConfiguration()); 715 } 716} 717