XmlUtilTest.java revision 7d100897cd3ab3a05c3925da42bd25af6e3c8c4a
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.util; 18 19import static org.junit.Assert.*; 20import static org.mockito.Mockito.*; 21 22import android.net.IpConfiguration; 23import android.net.wifi.WifiConfiguration; 24import android.net.wifi.WifiConfiguration.NetworkSelectionStatus; 25import android.net.wifi.WifiEnterpriseConfig; 26import android.test.suitebuilder.annotation.SmallTest; 27import android.util.Pair; 28import android.util.Xml; 29 30import com.android.internal.util.FastXmlSerializer; 31import com.android.server.wifi.WifiConfigurationTestUtil; 32import com.android.server.wifi.util.XmlUtil.IpConfigurationXmlUtil; 33import com.android.server.wifi.util.XmlUtil.NetworkSelectionStatusXmlUtil; 34import com.android.server.wifi.util.XmlUtil.WifiConfigurationXmlUtil; 35import com.android.server.wifi.util.XmlUtil.WifiEnterpriseConfigXmlUtil; 36 37import org.junit.Test; 38import org.xmlpull.v1.XmlPullParser; 39import org.xmlpull.v1.XmlPullParserException; 40import org.xmlpull.v1.XmlSerializer; 41 42import java.io.ByteArrayInputStream; 43import java.io.ByteArrayOutputStream; 44import java.io.IOException; 45import java.nio.charset.StandardCharsets; 46import java.util.HashMap; 47 48/** 49 * Unit tests for {@link com.android.server.wifi.util.XmlUtil}. 50 */ 51@SmallTest 52public class XmlUtilTest { 53 public static final String XML_STRING_EAP_METHOD_REPLACE_FORMAT = 54 "<int name=\"EapMethod\" value=\"%d\" />"; 55 56 private static final String TEST_PACKAGE_NAME = "XmlUtilPackage"; 57 private static final String TEST_STATIC_IP_GATEWAY_ADDRESS = "192.168.48.1"; 58 private static final String TEST_DUMMY_CONFIG_KEY = "XmlUtilDummyConfigKey"; 59 private static final String TEST_IDENTITY = "XmlUtilTestIdentity"; 60 private static final String TEST_ANON_IDENTITY = "XmlUtilTestAnonIdentity"; 61 private static final String TEST_PASSWORD = "XmlUtilTestPassword"; 62 private static final String TEST_CLIENT_CERT = "XmlUtilTestClientCert"; 63 private static final String TEST_CA_CERT = "XmlUtilTestCaCert"; 64 private static final String TEST_SUBJECT_MATCH = "XmlUtilTestSubjectMatch"; 65 private static final String TEST_ENGINE = "XmlUtilTestEngine"; 66 private static final String TEST_ENGINE_ID = "XmlUtilTestEngineId"; 67 private static final String TEST_PRIVATE_KEY_ID = "XmlUtilTestPrivateKeyId"; 68 private static final String TEST_ALTSUBJECT_MATCH = "XmlUtilTestAltSubjectMatch"; 69 private static final String TEST_DOM_SUFFIX_MATCH = "XmlUtilTestDomSuffixMatch"; 70 private static final String TEST_CA_PATH = "XmlUtilTestCaPath"; 71 private static final int TEST_EAP_METHOD = WifiEnterpriseConfig.Eap.PEAP; 72 private static final int TEST_PHASE2_METHOD = WifiEnterpriseConfig.Phase2.MSCHAPV2; 73 private final String mXmlDocHeader = "XmlUtilTest"; 74 75 /** 76 * Verify that a open WifiConfiguration is serialized & deserialized correctly. 77 */ 78 @Test 79 public void testOpenWifiConfigurationSerializeDeserialize() 80 throws IOException, XmlPullParserException { 81 serializeDeserializeWifiConfiguration(WifiConfigurationTestUtil.createOpenNetwork()); 82 } 83 84 /** 85 * Verify that a open hidden WifiConfiguration is serialized & deserialized correctly. 86 */ 87 @Test 88 public void testOpenHiddenWifiConfigurationSerializeDeserialize() 89 throws IOException, XmlPullParserException { 90 serializeDeserializeWifiConfiguration(WifiConfigurationTestUtil.createOpenHiddenNetwork()); 91 } 92 93 /** 94 * Verify that a psk WifiConfiguration is serialized & deserialized correctly. 95 */ 96 @Test 97 public void testPskWifiConfigurationSerializeDeserialize() 98 throws IOException, XmlPullParserException { 99 serializeDeserializeWifiConfiguration(WifiConfigurationTestUtil.createPskNetwork()); 100 } 101 102 /** 103 * Verify that a psk hidden WifiConfiguration is serialized & deserialized correctly. 104 */ 105 @Test 106 public void testPskHiddenWifiConfigurationSerializeDeserialize() 107 throws IOException, XmlPullParserException { 108 serializeDeserializeWifiConfiguration(WifiConfigurationTestUtil.createPskHiddenNetwork()); 109 } 110 111 /** 112 * Verify that a WEP WifiConfiguration is serialized & deserialized correctly. 113 */ 114 @Test 115 public void testWepWifiConfigurationSerializeDeserialize() 116 throws IOException, XmlPullParserException { 117 serializeDeserializeWifiConfiguration(WifiConfigurationTestUtil.createWepNetwork()); 118 } 119 120 /** 121 * Verify that a EAP WifiConfiguration is serialized & deserialized correctly only for 122 * ConfigStore. 123 */ 124 @Test 125 public void testEapWifiConfigurationSerializeDeserialize() 126 throws IOException, XmlPullParserException { 127 serializeDeserializeWifiConfigurationForConfigStore( 128 WifiConfigurationTestUtil.createEapNetwork()); 129 } 130 131 /** 132 * Verify that a static IpConfiguration with PAC proxy is serialized & deserialized correctly. 133 */ 134 @Test 135 public void testStaticIpConfigurationWithPacProxySerializeDeserialize() 136 throws IOException, XmlPullParserException { 137 serializeDeserializeIpConfiguration( 138 WifiConfigurationTestUtil.createStaticIpConfigurationWithPacProxy()); 139 } 140 141 /** 142 * Verify that a static IpConfiguration with static proxy is serialized & deserialized correctly. 143 */ 144 @Test 145 public void testStaticIpConfigurationWithStaticProxySerializeDeserialize() 146 throws IOException, XmlPullParserException { 147 serializeDeserializeIpConfiguration( 148 WifiConfigurationTestUtil.createStaticIpConfigurationWithStaticProxy()); 149 } 150 151 /** 152 * Verify that a partial static IpConfiguration with PAC proxy is serialized & deserialized 153 * correctly. 154 */ 155 @Test 156 public void testPartialStaticIpConfigurationWithPacProxySerializeDeserialize() 157 throws IOException, XmlPullParserException { 158 serializeDeserializeIpConfiguration( 159 WifiConfigurationTestUtil.createPartialStaticIpConfigurationWithPacProxy()); 160 } 161 162 /** 163 * Verify that a DHCP IpConfiguration with PAC proxy is serialized & deserialized 164 * correctly. 165 */ 166 @Test 167 public void testDHCPIpConfigurationWithPacProxySerializeDeserialize() 168 throws IOException, XmlPullParserException { 169 serializeDeserializeIpConfiguration( 170 WifiConfigurationTestUtil.createDHCPIpConfigurationWithPacProxy()); 171 } 172 173 /** 174 * Verify that a DHCP IpConfiguration with Static proxy is serialized & deserialized 175 * correctly. 176 */ 177 @Test 178 public void testDHCPIpConfigurationWithStaticProxySerializeDeserialize() 179 throws IOException, XmlPullParserException { 180 serializeDeserializeIpConfiguration( 181 WifiConfigurationTestUtil.createDHCPIpConfigurationWithStaticProxy()); 182 } 183 184 /** 185 * Verify that a EAP WifiConfiguration is serialized & deserialized correctly for config store. 186 * This basically exercises all the elements being serialized in config store. 187 */ 188 @Test 189 public void testEapWifiConfigurationSerializeDeserializeForConfigStore() 190 throws IOException, XmlPullParserException { 191 WifiConfiguration configuration = WifiConfigurationTestUtil.createEapNetwork(); 192 configuration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP104); 193 configuration.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40); 194 configuration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP); 195 configuration.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP); 196 configuration.status = WifiConfiguration.Status.DISABLED; 197 configuration.linkedConfigurations = new HashMap<>(); 198 configuration.linkedConfigurations.put(TEST_DUMMY_CONFIG_KEY, Integer.valueOf(1)); 199 configuration.defaultGwMacAddress = TEST_STATIC_IP_GATEWAY_ADDRESS; 200 configuration.requirePMF = true; 201 configuration.validatedInternetAccess = true; 202 configuration.noInternetAccessExpected = true; 203 configuration.userApproved = WifiConfiguration.USER_UNSPECIFIED; 204 configuration.meteredHint = true; 205 configuration.useExternalScores = true; 206 configuration.numAssociation = 5; 207 configuration.lastUpdateUid = configuration.lastConnectUid = configuration.creatorUid; 208 configuration.creatorName = configuration.lastUpdateName = TEST_PACKAGE_NAME; 209 configuration.creationTime = "04-04-2016"; 210 211 serializeDeserializeWifiConfigurationForConfigStore(configuration); 212 } 213 214 /** 215 * Verify that an enabled network selection status object is serialized & deserialized 216 * correctly. 217 */ 218 @Test 219 public void testEnabledNetworkSelectionStatusSerializeDeserialize() 220 throws IOException, XmlPullParserException { 221 NetworkSelectionStatus status = new NetworkSelectionStatus(); 222 status.setNetworkSelectionStatus(NetworkSelectionStatus.NETWORK_SELECTION_ENABLED); 223 status.setNetworkSelectionDisableReason(NetworkSelectionStatus.NETWORK_SELECTION_ENABLE); 224 status.setConnectChoice(TEST_DUMMY_CONFIG_KEY); 225 status.setConnectChoiceTimestamp(867889); 226 status.setHasEverConnected(true); 227 serializeDeserializeNetworkSelectionStatus(status); 228 } 229 230 /** 231 * Verify that a temporarily disabled network selection status object is serialized & 232 * deserialized correctly. 233 */ 234 @Test 235 public void testTemporarilyDisabledNetworkSelectionStatusSerializeDeserialize() 236 throws IOException, XmlPullParserException { 237 NetworkSelectionStatus status = new NetworkSelectionStatus(); 238 status.setNetworkSelectionStatus( 239 NetworkSelectionStatus.NETWORK_SELECTION_TEMPORARY_DISABLED); 240 status.setNetworkSelectionDisableReason( 241 NetworkSelectionStatus.DISABLED_ASSOCIATION_REJECTION); 242 serializeDeserializeNetworkSelectionStatus(status); 243 } 244 245 /** 246 * Verify that a network selection status deprecation is handled correctly during restore 247 * of data after upgrade. 248 * This test tries to simulate the scenario where we have a 249 * {@link NetworkSelectionStatus#getNetworkStatusString()} string stored 250 * in the XML file from a previous release which has now been deprecated. The network should 251 * be restored as enabled. 252 */ 253 @Test 254 public void testDeprecatedNetworkSelectionStatusDeserialize() 255 throws IOException, XmlPullParserException { 256 // Create a dummy network selection status. 257 NetworkSelectionStatus status = new NetworkSelectionStatus(); 258 status.setNetworkSelectionStatus( 259 NetworkSelectionStatus.NETWORK_SELECTION_TEMPORARY_DISABLED); 260 status.setNetworkSelectionDisableReason( 261 NetworkSelectionStatus.DISABLED_DHCP_FAILURE); 262 status.setConnectChoice(TEST_DUMMY_CONFIG_KEY); 263 status.setConnectChoiceTimestamp(867889); 264 status.setHasEverConnected(true); 265 266 // Serialize this to XML string. 267 byte[] xmlData = serializeNetworkSelectionStatus(status); 268 269 // Now modify the status string with some invalid string in XML data.. 270 String xmlString = new String(xmlData); 271 String deprecatedXmlString = 272 xmlString.replaceAll( 273 status.getNetworkStatusString(), "NETWORK_SELECTION_DEPRECATED"); 274 // Ensure that the modification did take effect. 275 assertFalse(xmlString.equals(deprecatedXmlString)); 276 277 // Now Deserialize the modified XML data. 278 byte[] deprecatedXmlData = xmlString.getBytes(); 279 NetworkSelectionStatus retrievedStatus = 280 deserializeNetworkSelectionStatus(deprecatedXmlData); 281 282 // The status retrieved should have reset both the |Status| & |DisableReason| fields after 283 // deserialization, but should have restored all the other fields correctly. 284 NetworkSelectionStatus expectedStatus = new NetworkSelectionStatus(); 285 expectedStatus.copy(status); 286 expectedStatus.setNetworkSelectionStatus(NetworkSelectionStatus.NETWORK_SELECTION_ENABLED); 287 expectedStatus.setNetworkSelectionDisableReason( 288 NetworkSelectionStatus.NETWORK_SELECTION_ENABLE); 289 290 WifiConfigurationTestUtil.assertNetworkSelectionStatusEqualForConfigStore( 291 expectedStatus, retrievedStatus); 292 } 293 294 /** 295 * Verify that a network selection disable reason deprecation is handled correctly during 296 * restore of data after upgrade. 297 * This test tries to simulate the scenario where we have a 298 * {@link NetworkSelectionStatus#getNetworkDisableReasonString()} ()} string stored 299 * in the XML file from a previous release which has now been deprecated. The network should 300 * be restored as enabled. 301 */ 302 @Test 303 public void testDeprecatedNetworkSelectionDisableReasonDeserialize() 304 throws IOException, XmlPullParserException { 305 // Create a dummy network selection status. 306 NetworkSelectionStatus status = new NetworkSelectionStatus(); 307 status.setNetworkSelectionStatus( 308 NetworkSelectionStatus.NETWORK_SELECTION_TEMPORARY_DISABLED); 309 status.setNetworkSelectionDisableReason( 310 NetworkSelectionStatus.DISABLED_DHCP_FAILURE); 311 status.setConnectChoice(TEST_DUMMY_CONFIG_KEY); 312 status.setConnectChoiceTimestamp(867889); 313 status.setHasEverConnected(true); 314 315 // Serialize this to XML string. 316 byte[] xmlData = serializeNetworkSelectionStatus(status); 317 318 // Now modify the disable reason string with some invalid string in XML data. 319 String xmlString = new String(xmlData); 320 String deprecatedXmlString = 321 xmlString.replaceAll(status.getNetworkDisableReasonString(), "DISABLED_DEPRECATED"); 322 // Ensure that the modification did take effect. 323 assertFalse(xmlString.equals(deprecatedXmlString)); 324 325 // Now Deserialize the modified XML data. 326 byte[] deprecatedXmlData = xmlString.getBytes(); 327 NetworkSelectionStatus retrievedStatus = 328 deserializeNetworkSelectionStatus(deprecatedXmlData); 329 330 // The status retrieved should have reset both the |Status| & |DisableReason| fields after 331 // deserialization, but should have restored all the other fields correctly. 332 NetworkSelectionStatus expectedStatus = new NetworkSelectionStatus(); 333 expectedStatus.copy(status); 334 expectedStatus.setNetworkSelectionStatus(NetworkSelectionStatus.NETWORK_SELECTION_ENABLED); 335 expectedStatus.setNetworkSelectionDisableReason( 336 NetworkSelectionStatus.NETWORK_SELECTION_ENABLE); 337 338 WifiConfigurationTestUtil.assertNetworkSelectionStatusEqualForConfigStore( 339 expectedStatus, retrievedStatus); 340 } 341 342 /** 343 * Verify that a WifiEnterpriseConfig object is serialized & deserialized correctly. 344 */ 345 @Test 346 public void testWifiEnterpriseConfigSerializeDeserialize() 347 throws IOException, XmlPullParserException { 348 WifiEnterpriseConfig config = new WifiEnterpriseConfig(); 349 config.setFieldValue(WifiEnterpriseConfig.IDENTITY_KEY, TEST_IDENTITY); 350 config.setFieldValue(WifiEnterpriseConfig.ANON_IDENTITY_KEY, TEST_ANON_IDENTITY); 351 config.setFieldValue(WifiEnterpriseConfig.PASSWORD_KEY, TEST_PASSWORD); 352 config.setFieldValue(WifiEnterpriseConfig.CLIENT_CERT_KEY, TEST_CLIENT_CERT); 353 config.setFieldValue(WifiEnterpriseConfig.CA_CERT_KEY, TEST_CA_CERT); 354 config.setFieldValue(WifiEnterpriseConfig.SUBJECT_MATCH_KEY, TEST_SUBJECT_MATCH); 355 config.setFieldValue(WifiEnterpriseConfig.ENGINE_KEY, TEST_ENGINE); 356 config.setFieldValue(WifiEnterpriseConfig.ENGINE_ID_KEY, TEST_ENGINE_ID); 357 config.setFieldValue(WifiEnterpriseConfig.PRIVATE_KEY_ID_KEY, TEST_PRIVATE_KEY_ID); 358 config.setFieldValue(WifiEnterpriseConfig.ALTSUBJECT_MATCH_KEY, TEST_ALTSUBJECT_MATCH); 359 config.setFieldValue(WifiEnterpriseConfig.DOM_SUFFIX_MATCH_KEY, TEST_DOM_SUFFIX_MATCH); 360 config.setFieldValue(WifiEnterpriseConfig.CA_PATH_KEY, TEST_CA_PATH); 361 config.setEapMethod(TEST_EAP_METHOD); 362 config.setPhase2Method(TEST_PHASE2_METHOD); 363 serializeDeserializeWifiEnterpriseConfig(config); 364 } 365 366 /** 367 * Verify that an illegal argument exception is thrown when trying to parse out a corrupted 368 * WifiEnterpriseConfig. 369 * 370 * @throws Exception 371 */ 372 @Test(expected = IllegalArgumentException.class) 373 public void testWifiEnterpriseConfigSerializeDeserializeThrowsIllegalArgException() 374 throws Exception { 375 WifiEnterpriseConfig config = new WifiEnterpriseConfig(); 376 config.setFieldValue(WifiEnterpriseConfig.IDENTITY_KEY, TEST_IDENTITY); 377 config.setFieldValue(WifiEnterpriseConfig.ANON_IDENTITY_KEY, TEST_ANON_IDENTITY); 378 config.setFieldValue(WifiEnterpriseConfig.PASSWORD_KEY, TEST_PASSWORD); 379 config.setFieldValue(WifiEnterpriseConfig.CLIENT_CERT_KEY, TEST_CLIENT_CERT); 380 config.setFieldValue(WifiEnterpriseConfig.CA_CERT_KEY, TEST_CA_CERT); 381 config.setFieldValue(WifiEnterpriseConfig.SUBJECT_MATCH_KEY, TEST_SUBJECT_MATCH); 382 config.setFieldValue(WifiEnterpriseConfig.ENGINE_KEY, TEST_ENGINE); 383 config.setFieldValue(WifiEnterpriseConfig.ENGINE_ID_KEY, TEST_ENGINE_ID); 384 config.setFieldValue(WifiEnterpriseConfig.PRIVATE_KEY_ID_KEY, TEST_PRIVATE_KEY_ID); 385 config.setFieldValue(WifiEnterpriseConfig.ALTSUBJECT_MATCH_KEY, TEST_ALTSUBJECT_MATCH); 386 config.setFieldValue(WifiEnterpriseConfig.DOM_SUFFIX_MATCH_KEY, TEST_DOM_SUFFIX_MATCH); 387 config.setFieldValue(WifiEnterpriseConfig.CA_PATH_KEY, TEST_CA_PATH); 388 config.setEapMethod(TEST_EAP_METHOD); 389 config.setPhase2Method(TEST_PHASE2_METHOD); 390 String xmlString = new String(serializeWifiEnterpriseConfig(config)); 391 // Manipulate the XML data to set the EAP method to None, this should raise an Illegal 392 // argument exception in WifiEnterpriseConfig.setEapMethod(). 393 xmlString = xmlString.replaceAll( 394 String.format(XML_STRING_EAP_METHOD_REPLACE_FORMAT, TEST_EAP_METHOD), 395 String.format(XML_STRING_EAP_METHOD_REPLACE_FORMAT, WifiEnterpriseConfig.Eap.NONE)); 396 deserializeWifiEnterpriseConfig(xmlString.getBytes(StandardCharsets.UTF_8)); 397 } 398 399 private byte[] serializeWifiConfigurationForBackup(WifiConfiguration configuration) 400 throws IOException, XmlPullParserException { 401 final XmlSerializer out = new FastXmlSerializer(); 402 final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 403 out.setOutput(outputStream, StandardCharsets.UTF_8.name()); 404 XmlUtil.writeDocumentStart(out, mXmlDocHeader); 405 WifiConfigurationXmlUtil.writeToXmlForBackup(out, configuration); 406 XmlUtil.writeDocumentEnd(out, mXmlDocHeader); 407 return outputStream.toByteArray(); 408 } 409 410 private byte[] serializeWifiConfigurationForConfigStore( 411 WifiConfiguration configuration) 412 throws IOException, XmlPullParserException { 413 final XmlSerializer out = new FastXmlSerializer(); 414 final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 415 out.setOutput(outputStream, StandardCharsets.UTF_8.name()); 416 XmlUtil.writeDocumentStart(out, mXmlDocHeader); 417 WifiConfigurationXmlUtil.writeToXmlForConfigStore(out, configuration); 418 XmlUtil.writeDocumentEnd(out, mXmlDocHeader); 419 return outputStream.toByteArray(); 420 } 421 422 private Pair<String, WifiConfiguration> deserializeWifiConfiguration(byte[] data) 423 throws IOException, XmlPullParserException { 424 // Deserialize the configuration object. 425 final XmlPullParser in = Xml.newPullParser(); 426 ByteArrayInputStream inputStream = new ByteArrayInputStream(data); 427 in.setInput(inputStream, StandardCharsets.UTF_8.name()); 428 XmlUtil.gotoDocumentStart(in, mXmlDocHeader); 429 return WifiConfigurationXmlUtil.parseFromXml(in, in.getDepth()); 430 } 431 432 /** 433 * This helper method tests the serialization for backup/restore. 434 */ 435 private void serializeDeserializeWifiConfigurationForBackupRestore( 436 WifiConfiguration configuration) 437 throws IOException, XmlPullParserException { 438 Pair<String, WifiConfiguration> retrieved; 439 // Test serialization/deserialization for config store. 440 retrieved = 441 deserializeWifiConfiguration( 442 serializeWifiConfigurationForBackup(configuration)); 443 assertEquals(retrieved.first, retrieved.second.configKey()); 444 WifiConfigurationTestUtil.assertConfigurationEqualForBackup( 445 configuration, retrieved.second); 446 } 447 448 /** 449 * This helper method tests the serialization for config store. 450 */ 451 private void serializeDeserializeWifiConfigurationForConfigStore( 452 WifiConfiguration configuration) 453 throws IOException, XmlPullParserException { 454 // Reset enterprise config because this needs to be serialized/deserialized separately. 455 configuration.enterpriseConfig = new WifiEnterpriseConfig(); 456 Pair<String, WifiConfiguration> retrieved; 457 // Test serialization/deserialization for config store. 458 retrieved = 459 deserializeWifiConfiguration( 460 serializeWifiConfigurationForConfigStore(configuration)); 461 assertEquals(retrieved.first, retrieved.second.configKey()); 462 WifiConfigurationTestUtil.assertConfigurationEqualForConfigStore( 463 configuration, retrieved.second); 464 } 465 466 /** 467 * This helper method tests both the serialization for backup/restore and config store. 468 */ 469 private void serializeDeserializeWifiConfiguration(WifiConfiguration configuration) 470 throws IOException, XmlPullParserException { 471 Pair<String, WifiConfiguration> retrieved; 472 // Test serialization/deserialization for backup first. 473 serializeDeserializeWifiConfigurationForBackupRestore(configuration); 474 475 // Test serialization/deserialization for config store. 476 serializeDeserializeWifiConfigurationForConfigStore(configuration); 477 } 478 479 private void serializeDeserializeIpConfiguration(IpConfiguration configuration) 480 throws IOException, XmlPullParserException { 481 // Serialize the configuration object. 482 final XmlSerializer out = new FastXmlSerializer(); 483 final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 484 out.setOutput(outputStream, StandardCharsets.UTF_8.name()); 485 XmlUtil.writeDocumentStart(out, mXmlDocHeader); 486 IpConfigurationXmlUtil.writeToXml(out, configuration); 487 XmlUtil.writeDocumentEnd(out, mXmlDocHeader); 488 489 // Deserialize the configuration object. 490 final XmlPullParser in = Xml.newPullParser(); 491 ByteArrayInputStream inputStream = new ByteArrayInputStream(outputStream.toByteArray()); 492 in.setInput(inputStream, StandardCharsets.UTF_8.name()); 493 XmlUtil.gotoDocumentStart(in, mXmlDocHeader); 494 IpConfiguration retrievedConfiguration = 495 IpConfigurationXmlUtil.parseFromXml(in, in.getDepth()); 496 assertEquals(configuration, retrievedConfiguration); 497 } 498 499 private byte[] serializeNetworkSelectionStatus(NetworkSelectionStatus status) 500 throws IOException, XmlPullParserException { 501 // Serialize the configuration object. 502 final XmlSerializer out = new FastXmlSerializer(); 503 final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 504 out.setOutput(outputStream, StandardCharsets.UTF_8.name()); 505 XmlUtil.writeDocumentStart(out, mXmlDocHeader); 506 NetworkSelectionStatusXmlUtil.writeToXml(out, status); 507 XmlUtil.writeDocumentEnd(out, mXmlDocHeader); 508 return outputStream.toByteArray(); 509 } 510 511 private NetworkSelectionStatus deserializeNetworkSelectionStatus(byte[] data) 512 throws IOException, XmlPullParserException { 513 final XmlPullParser in = Xml.newPullParser(); 514 ByteArrayInputStream inputStream = new ByteArrayInputStream(data); 515 in.setInput(inputStream, StandardCharsets.UTF_8.name()); 516 XmlUtil.gotoDocumentStart(in, mXmlDocHeader); 517 return NetworkSelectionStatusXmlUtil.parseFromXml(in, in.getDepth()); 518 } 519 520 private void serializeDeserializeNetworkSelectionStatus(NetworkSelectionStatus status) 521 throws IOException, XmlPullParserException { 522 // Serialize the status object. 523 byte[] data = serializeNetworkSelectionStatus(status); 524 // Deserialize the status object. 525 NetworkSelectionStatus retrievedStatus = deserializeNetworkSelectionStatus(data); 526 527 WifiConfigurationTestUtil.assertNetworkSelectionStatusEqualForConfigStore( 528 status, retrievedStatus); 529 } 530 531 private byte[] serializeWifiEnterpriseConfig(WifiEnterpriseConfig config) 532 throws IOException, XmlPullParserException { 533 final XmlSerializer out = new FastXmlSerializer(); 534 final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 535 out.setOutput(outputStream, StandardCharsets.UTF_8.name()); 536 XmlUtil.writeDocumentStart(out, mXmlDocHeader); 537 WifiEnterpriseConfigXmlUtil.writeToXml(out, config); 538 XmlUtil.writeDocumentEnd(out, mXmlDocHeader); 539 return outputStream.toByteArray(); 540 } 541 542 private WifiEnterpriseConfig deserializeWifiEnterpriseConfig(byte[] data) 543 throws IOException, XmlPullParserException { 544 final XmlPullParser in = Xml.newPullParser(); 545 ByteArrayInputStream inputStream = new ByteArrayInputStream(data); 546 in.setInput(inputStream, StandardCharsets.UTF_8.name()); 547 XmlUtil.gotoDocumentStart(in, mXmlDocHeader); 548 return WifiEnterpriseConfigXmlUtil.parseFromXml(in, in.getDepth()); 549 } 550 551 private void serializeDeserializeWifiEnterpriseConfig(WifiEnterpriseConfig config) 552 throws IOException, XmlPullParserException { 553 WifiEnterpriseConfig retrievedConfig = 554 deserializeWifiEnterpriseConfig(serializeWifiEnterpriseConfig(config)); 555 WifiConfigurationTestUtil.assertWifiEnterpriseConfigEqualForConfigStore( 556 config, retrievedConfig); 557 } 558} 559