1d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu/* 2d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * Copyright (C) 2017 The Android Open Source Project 3d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * 4d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * Licensed under the Apache License, Version 2.0 (the "License"); 5d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * you may not use this file except in compliance with the License. 6d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * You may obtain a copy of the License at 7d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * 8d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * http://www.apache.org/licenses/LICENSE-2.0 9d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * 10d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * Unless required by applicable law or agreed to in writing, software 11d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * distributed under the License is distributed on an "AS IS" BASIS, 12d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * See the License for the specific language governing permissions and 14d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * limitations under the License. 15d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu */ 16d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu 17d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiupackage com.android.server.wifi.hotspot2; 18d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu 19d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiuimport static org.junit.Assert.*; 20d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiuimport static org.mockito.Mockito.*; 21d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu 22d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiuimport android.net.wifi.hotspot2.PasspointConfiguration; 23d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiuimport android.net.wifi.hotspot2.pps.Credential; 24d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiuimport android.net.wifi.hotspot2.pps.HomeSp; 25d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiuimport android.net.wifi.hotspot2.pps.Policy; 26d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiuimport android.net.wifi.hotspot2.pps.UpdateParameter; 27d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiuimport android.test.suitebuilder.annotation.SmallTest; 28d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiuimport android.util.Xml; 29d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu 30d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiuimport com.android.internal.util.FastXmlSerializer; 31d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu 32d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiuimport org.junit.Test; 33d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiuimport org.xmlpull.v1.XmlPullParser; 34d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiuimport org.xmlpull.v1.XmlPullParserException; 35d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiuimport org.xmlpull.v1.XmlSerializer; 36d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu 37d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiuimport java.io.ByteArrayInputStream; 38d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiuimport java.io.ByteArrayOutputStream; 39d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiuimport java.nio.charset.StandardCharsets; 40d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiuimport java.text.DateFormat; 41d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiuimport java.text.SimpleDateFormat; 42d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiuimport java.util.ArrayList; 43d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiuimport java.util.Arrays; 44d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiuimport java.util.HashMap; 45d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiuimport java.util.List; 46d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiuimport java.util.Map; 47d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu 48d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu/** 49d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * Unit tests for {@link com.android.server.wifi.hotspot2.PasspointXmlUtilsTest}. 50d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu */ 51d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu@SmallTest 52d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiupublic class PasspointXmlUtilsTest { 53d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu 54d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu /** 55d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * Helper function for generating a {@link PasspointConfiguration} for testing the XML 56d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * serialization/deserialization logic. 57d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * 58d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * @return {@link PasspointConfiguration} 59d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * @throws Exception 60d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu */ 61d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu private PasspointConfiguration createFullPasspointConfiguration() throws Exception { 62d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu DateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); 63d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu byte[] certFingerprint = new byte[32]; 64d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu Arrays.fill(certFingerprint, (byte) 0x1f); 65d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu 66d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu PasspointConfiguration config = new PasspointConfiguration(); 67d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu config.setUpdateIdentifier(12); 68d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu config.setCredentialPriority(99); 69d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu 70d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu // AAA Server trust root. 71d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu Map<String, byte[]> trustRootCertList = new HashMap<>(); 72d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu trustRootCertList.put("server1.trust.root.com", certFingerprint); 73d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu config.setTrustRootCertList(trustRootCertList); 74d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu 75d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu // Subscription update. 76d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu UpdateParameter subscriptionUpdate = new UpdateParameter(); 77d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu subscriptionUpdate.setUpdateIntervalInMinutes(120); 78d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu subscriptionUpdate.setUpdateMethod(UpdateParameter.UPDATE_METHOD_SSP); 79d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu subscriptionUpdate.setRestriction(UpdateParameter.UPDATE_RESTRICTION_ROAMING_PARTNER); 80d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu subscriptionUpdate.setServerUri("subscription.update.com"); 81d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu subscriptionUpdate.setUsername("subscriptionUser"); 82d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu subscriptionUpdate.setBase64EncodedPassword("subscriptionPass"); 83d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu subscriptionUpdate.setTrustRootCertUrl("subscription.update.cert.com"); 84d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu subscriptionUpdate.setTrustRootCertSha256Fingerprint(certFingerprint); 85d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu config.setSubscriptionUpdate(subscriptionUpdate); 86d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu 87d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu // Subscription parameters. 888f4f48b96b690aa099f85aad7a361cf39e431f42Peter Qiu config.setSubscriptionCreationTimeInMillis(format.parse("2016-02-01T10:00:00Z").getTime()); 898f4f48b96b690aa099f85aad7a361cf39e431f42Peter Qiu config.setSubscriptionExpirationTimeInMillis( 908f4f48b96b690aa099f85aad7a361cf39e431f42Peter Qiu format.parse("2016-03-01T10:00:00Z").getTime()); 91d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu config.setSubscriptionType("Gold"); 92d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu config.setUsageLimitDataLimit(921890); 938f4f48b96b690aa099f85aad7a361cf39e431f42Peter Qiu config.setUsageLimitStartTimeInMillis(format.parse("2016-12-01T10:00:00Z").getTime()); 94d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu config.setUsageLimitTimeLimitInMinutes(120); 95d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu config.setUsageLimitUsageTimePeriodInMinutes(99910); 96d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu 97d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu // HomeSP configuration. 98d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu HomeSp homeSp = new HomeSp(); 99d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu homeSp.setFriendlyName("Century House"); 100d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu homeSp.setFqdn("mi6.co.uk"); 101d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu homeSp.setRoamingConsortiumOis(new long[] {0x112233L, 0x445566L}); 102d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu homeSp.setIconUrl("icon.test.com"); 103d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu Map<String, Long> homeNetworkIds = new HashMap<>(); 104d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu homeNetworkIds.put("TestSSID", 0x12345678L); 105d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu homeNetworkIds.put("NullHESSID", null); 106d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu homeSp.setHomeNetworkIds(homeNetworkIds); 107d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu homeSp.setMatchAllOis(new long[] {0x11223344}); 108d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu homeSp.setMatchAnyOis(new long[] {0x55667788}); 109d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu homeSp.setOtherHomePartners(new String[] {"other.fqdn.com"}); 110d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu config.setHomeSp(homeSp); 111d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu 112d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu // Credential configuration. 113d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu Credential credential = new Credential(); 1148f4f48b96b690aa099f85aad7a361cf39e431f42Peter Qiu credential.setCreationTimeInMillis(format.parse("2016-01-01T10:00:00Z").getTime()); 1158f4f48b96b690aa099f85aad7a361cf39e431f42Peter Qiu credential.setExpirationTimeInMillis(format.parse("2016-02-01T10:00:00Z").getTime()); 116d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu credential.setRealm("shaken.stirred.com"); 117d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu credential.setCheckAaaServerCertStatus(true); 118d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu Credential.UserCredential userCredential = new Credential.UserCredential(); 119d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu userCredential.setUsername("james"); 120d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu userCredential.setPassword("Ym9uZDAwNw=="); 121d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu userCredential.setMachineManaged(true); 122d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu userCredential.setSoftTokenApp("TestApp"); 123d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu userCredential.setAbleToShare(true); 124d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu userCredential.setEapType(21); 125d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu userCredential.setNonEapInnerMethod("MS-CHAP-V2"); 126d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu credential.setUserCredential(userCredential); 127d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu Credential.CertificateCredential certCredential = new Credential.CertificateCredential(); 128d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu certCredential.setCertType("x509v3"); 129d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu certCredential.setCertSha256Fingerprint(certFingerprint); 130d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu credential.setCertCredential(certCredential); 131d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu Credential.SimCredential simCredential = new Credential.SimCredential(); 132d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu simCredential.setImsi("imsi"); 133d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu simCredential.setEapType(24); 134d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu credential.setSimCredential(simCredential); 135d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu config.setCredential(credential); 136d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu 137d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu // Policy configuration. 138d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu Policy policy = new Policy(); 139d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu List<Policy.RoamingPartner> preferredRoamingPartnerList = new ArrayList<>(); 140d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu Policy.RoamingPartner partner1 = new Policy.RoamingPartner(); 141d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu partner1.setFqdn("test1.fqdn.com"); 142d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu partner1.setFqdnExactMatch(true); 143d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu partner1.setPriority(127); 144d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu partner1.setCountries("us,fr"); 145d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu Policy.RoamingPartner partner2 = new Policy.RoamingPartner(); 146d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu partner2.setFqdn("test2.fqdn.com"); 147d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu partner2.setFqdnExactMatch(false); 148d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu partner2.setPriority(200); 149d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu partner2.setCountries("*"); 150d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu preferredRoamingPartnerList.add(partner1); 151d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu preferredRoamingPartnerList.add(partner2); 152d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu policy.setPreferredRoamingPartnerList(preferredRoamingPartnerList); 153d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu policy.setMinHomeDownlinkBandwidth(23412); 154d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu policy.setMinHomeUplinkBandwidth(9823); 155d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu policy.setMinRoamingDownlinkBandwidth(9271); 156d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu policy.setMinRoamingUplinkBandwidth(2315); 157d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu policy.setExcludedSsidList(new String[] {"excludeSSID"}); 158d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu Map<Integer, String> requiredProtoPortMap = new HashMap<>(); 159d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu requiredProtoPortMap.put(12, "34,92,234"); 160d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu policy.setRequiredProtoPortMap(requiredProtoPortMap); 161d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu policy.setMaximumBssLoadValue(23); 162d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu UpdateParameter policyUpdate = new UpdateParameter(); 163d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu policyUpdate.setUpdateIntervalInMinutes(120); 164d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu policyUpdate.setUpdateMethod(UpdateParameter.UPDATE_METHOD_OMADM); 165d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu policyUpdate.setRestriction(UpdateParameter.UPDATE_RESTRICTION_HOMESP); 166d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu policyUpdate.setServerUri("policy.update.com"); 167d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu policyUpdate.setUsername("updateUser"); 168d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu policyUpdate.setBase64EncodedPassword("updatePass"); 169d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu policyUpdate.setTrustRootCertUrl("update.cert.com"); 170d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu policyUpdate.setTrustRootCertSha256Fingerprint(certFingerprint); 171d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu policy.setPolicyUpdate(policyUpdate); 172d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu config.setPolicy(policy); 173d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu return config; 174d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu } 175d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu 176d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu /** 177d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * Verify the serialization and deserialization logic of a {@link PasspointConfiguration}. 178d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * 179d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * 1. Serialize the test config to a XML block 180d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * 2. Deserialize the XML block to a {@link PasspointConfiguration} 181d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * 3. Verify that the deserialized config is the same as the test config 182d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * 183d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * @param testConfig The configuration to used for testing 184d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * @throws Exception 185d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu */ 186d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu private void serializeAndDeserializePasspointConfiguration(PasspointConfiguration testConfig) 187d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu throws Exception { 188d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu final XmlSerializer out = new FastXmlSerializer(); 189d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); 190d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu out.setOutput(outputStream, StandardCharsets.UTF_8.name()); 191d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu PasspointXmlUtils.serializePasspointConfiguration(out, testConfig); 192d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu out.flush(); 193d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu 194d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu final XmlPullParser in = Xml.newPullParser(); 195d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu final ByteArrayInputStream inputStream = 196d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu new ByteArrayInputStream(outputStream.toByteArray()); 197d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu in.setInput(inputStream, StandardCharsets.UTF_8.name()); 198d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu 199d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu PasspointConfiguration deserializedConfig = 200d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu PasspointXmlUtils.deserializePasspointConfiguration(in, in.getDepth()); 201d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu assertEquals(testConfig, deserializedConfig); 202d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu } 203d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu 204d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu /** 205d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * Verify that the serialization and deserialization logic for a full 206d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * {@link PasspointConfiguration} (all fields are set) works as expected. 207d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * 208d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * @throws Exception 209d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu */ 210d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu @Test 211d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu public void serializeAndDeserializeFullPasspointConfiguration() throws Exception { 212d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu serializeAndDeserializePasspointConfiguration(createFullPasspointConfiguration()); 213d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu } 214d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu 215d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu /** 216d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * Verify that the serialization and deserialization logic for an empty 217d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * {@link PasspointConfiguration} works as expected. 218d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * 219d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * @throws Exception 220d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu */ 221d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu @Test 222d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu public void serializeAndDeserializeEmptyPasspointConfiguration() throws Exception { 223d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu serializeAndDeserializePasspointConfiguration(new PasspointConfiguration()); 224d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu } 225d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu 226d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu /** 227d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * Verify that a XmlPullParserException will be thrown when deserialize a XML block 228d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * for a PasspointConfiguraiton containing an unknown tag. 229d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * 230d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu * @throws Exception 231d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu */ 232d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu @Test(expected = XmlPullParserException.class) 233d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu public void deserializePasspointConfigurationWithUnknownTag() throws Exception { 234d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu String xmlStr = "<UnknownTag>\n" 235d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu + "</UnknownTag>\n"; 236d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu final XmlPullParser in = Xml.newPullParser(); 237d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu final ByteArrayInputStream inputStream = 238d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu new ByteArrayInputStream(xmlStr.getBytes(StandardCharsets.UTF_8)); 239d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu in.setInput(inputStream, StandardCharsets.UTF_8.name()); 240d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu PasspointXmlUtils.deserializePasspointConfiguration(in, in.getDepth()); 241d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu } 242d501fd07f0e2ab6a320a1570e426926838a1b316Peter Qiu} 243