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