1dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu/* 2dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu * Copyright (C) 2016 The Android Open Source Project 3dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu * 4dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu * Licensed under the Apache License, Version 2.0 (the "License"); 5dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu * you may not use this file except in compliance with the License. 6dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu * You may obtain a copy of the License at 7dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu * 8dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu * http://www.apache.org/licenses/LICENSE-2.0 9dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu * 10dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu * Unless required by applicable law or agreed to in writing, software 11dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu * distributed under the License is distributed on an "AS IS" BASIS, 12dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu * See the License for the specific language governing permissions and 14dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu * limitations under the License. 15dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu */ 16dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu 17dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiupackage com.android.server.wifi.hotspot2; 18dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu 1987c6f1b149804685e46c18d2ad11262f611c9255Peter Qiuimport static org.junit.Assert.assertEquals; 20dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiuimport static org.junit.Assert.assertFalse; 21dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiuimport static org.junit.Assert.assertTrue; 22ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiuimport static org.mockito.Mockito.verify; 23ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiuimport static org.mockito.Mockito.when; 24ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiuimport static org.mockito.MockitoAnnotations.initMocks; 25dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu 2687c6f1b149804685e46c18d2ad11262f611c9255Peter Qiuimport android.net.wifi.EAPConstants; 2779b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiuimport android.net.wifi.WifiConfiguration; 2879b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiuimport android.net.wifi.WifiEnterpriseConfig; 29dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiuimport android.net.wifi.hotspot2.PasspointConfiguration; 30ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiuimport android.net.wifi.hotspot2.pps.Credential; 31260f8f7ab5595c36ab5d130441cabe3dc944830cPeter Qiuimport android.net.wifi.hotspot2.pps.HomeSp; 327f2a1e30dd5d14320ffc7b185ac25fdb79fe52b0Etan Cohenimport android.support.test.filters.SmallTest; 3379b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiuimport android.util.Base64; 34dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu 35ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiuimport com.android.server.wifi.FakeKeys; 3687c6f1b149804685e46c18d2ad11262f611c9255Peter Qiuimport com.android.server.wifi.IMSIParameter; 3787c6f1b149804685e46c18d2ad11262f611c9255Peter Qiuimport com.android.server.wifi.SIMAccessor; 38ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiuimport com.android.server.wifi.WifiKeyStore; 3987c6f1b149804685e46c18d2ad11262f611c9255Peter Qiuimport com.android.server.wifi.hotspot2.anqp.ANQPElement; 4087c6f1b149804685e46c18d2ad11262f611c9255Peter Qiuimport com.android.server.wifi.hotspot2.anqp.CellularNetwork; 4187c6f1b149804685e46c18d2ad11262f611c9255Peter Qiuimport com.android.server.wifi.hotspot2.anqp.Constants.ANQPElementType; 4287c6f1b149804685e46c18d2ad11262f611c9255Peter Qiuimport com.android.server.wifi.hotspot2.anqp.DomainNameElement; 4387c6f1b149804685e46c18d2ad11262f611c9255Peter Qiuimport com.android.server.wifi.hotspot2.anqp.NAIRealmData; 4487c6f1b149804685e46c18d2ad11262f611c9255Peter Qiuimport com.android.server.wifi.hotspot2.anqp.NAIRealmElement; 4587c6f1b149804685e46c18d2ad11262f611c9255Peter Qiuimport com.android.server.wifi.hotspot2.anqp.RoamingConsortiumElement; 4687c6f1b149804685e46c18d2ad11262f611c9255Peter Qiuimport com.android.server.wifi.hotspot2.anqp.ThreeGPPNetworkElement; 4787c6f1b149804685e46c18d2ad11262f611c9255Peter Qiuimport com.android.server.wifi.hotspot2.anqp.eap.AuthParam; 4887c6f1b149804685e46c18d2ad11262f611c9255Peter Qiuimport com.android.server.wifi.hotspot2.anqp.eap.EAPMethod; 4987c6f1b149804685e46c18d2ad11262f611c9255Peter Qiuimport com.android.server.wifi.hotspot2.anqp.eap.NonEAPInnerAuth; 50ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu 512e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honmaimport com.android.server.wifi.util.InformationElementUtil.RoamingConsortium; 52ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiuimport org.junit.Before; 53dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiuimport org.junit.Test; 54ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiuimport org.mockito.Mock; 55ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu 5679b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiuimport java.nio.charset.StandardCharsets; 57ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiuimport java.security.MessageDigest; 58ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiuimport java.security.cert.X509Certificate; 5987c6f1b149804685e46c18d2ad11262f611c9255Peter Qiuimport java.util.Arrays; 6087c6f1b149804685e46c18d2ad11262f611c9255Peter Qiuimport java.util.HashMap; 6187c6f1b149804685e46c18d2ad11262f611c9255Peter Qiuimport java.util.HashSet; 6287c6f1b149804685e46c18d2ad11262f611c9255Peter Qiuimport java.util.Map; 6387c6f1b149804685e46c18d2ad11262f611c9255Peter Qiuimport java.util.Set; 64dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu 65dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu/** 66dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu * Unit tests for {@link com.android.server.wifi.hotspot2.PasspointProvider}. 67dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu */ 68dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu@SmallTest 69dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiupublic class PasspointProviderTest { 70ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu private static final long PROVIDER_ID = 12L; 7107816a4745b8030911869ceb58fa735e47834fe4Peter Qiu private static final int CREATOR_UID = 1234; 728c22a001ebe4537fe5c0da1112e256dbd9d55ae7Peter Qiu private static final String CA_CERTIFICATE_NAME = "CACERT_HS2_12"; 738c22a001ebe4537fe5c0da1112e256dbd9d55ae7Peter Qiu private static final String CLIENT_CERTIFICATE_NAME = "USRCERT_HS2_12"; 748c22a001ebe4537fe5c0da1112e256dbd9d55ae7Peter Qiu private static final String CLIENT_PRIVATE_KEY_NAME = "USRPKEY_HS2_12"; 758c22a001ebe4537fe5c0da1112e256dbd9d55ae7Peter Qiu private static final String CA_CERTIFICATE_ALIAS = "HS2_12"; 768c22a001ebe4537fe5c0da1112e256dbd9d55ae7Peter Qiu private static final String CLIENT_CERTIFICATE_ALIAS = "HS2_12"; 778c22a001ebe4537fe5c0da1112e256dbd9d55ae7Peter Qiu private static final String CLIENT_PRIVATE_KEY_ALIAS = "HS2_12"; 78ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu 79ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu @Mock WifiKeyStore mKeyStore; 8087c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu @Mock SIMAccessor mSimAccessor; 812e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma @Mock RoamingConsortium mRoamingConsortium; 82dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu PasspointProvider mProvider; 83dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu 84ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu /** Sets up test. */ 85ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu @Before 86ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu public void setUp() throws Exception { 87ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu initMocks(this); 882e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma when(mRoamingConsortium.getRoamingConsortiums()).thenReturn(null); 89ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu } 90ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu 91ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu /** 92ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu * Helper function for creating a provider instance for testing. 93ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu * 94ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu * @param config The configuration associated with the provider 95ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu * @return {@link com.android.server.wifi.hotspot2.PasspointProvider} 96ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu */ 97ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu private PasspointProvider createProvider(PasspointConfiguration config) { 9807816a4745b8030911869ceb58fa735e47834fe4Peter Qiu return new PasspointProvider(config, mKeyStore, mSimAccessor, PROVIDER_ID, CREATOR_UID); 99ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu } 100ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu 101dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu /** 102dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu * Verify that the configuration associated with the provider is the same or not the same 103dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu * as the expected configuration. 104dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu * 105dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu * @param expectedConfig The expected configuration 106dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu * @param equals Flag indicating equality or inequality check 107dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu */ 108dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu private void verifyInstalledConfig(PasspointConfiguration expectedConfig, boolean equals) { 109dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu PasspointConfiguration actualConfig = mProvider.getConfig(); 110dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu if (equals) { 111dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu assertTrue(actualConfig.equals(expectedConfig)); 112dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu } else { 113dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu assertFalse(actualConfig.equals(expectedConfig)); 114dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu } 115dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu } 116dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu 117dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu /** 11887c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * Helper function for creating a Domain Name ANQP element. 11987c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * 12087c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * @param domains List of domain names 12187c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * @return {@link DomainNameElement} 12287c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu */ 12387c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu private DomainNameElement createDomainNameElement(String[] domains) { 12487c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu return new DomainNameElement(Arrays.asList(domains)); 12587c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu } 12687c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 12787c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu /** 12887c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * Helper function for creating a NAI Realm ANQP element. 12987c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * 13087c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * @param realm The realm of the network 13187c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * @param eapMethodID EAP Method ID 13287c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * @param authParam Authentication parameter 13387c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * @return {@link NAIRealmElement} 13487c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu */ 13587c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu private NAIRealmElement createNAIRealmElement(String realm, int eapMethodID, 13687c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu AuthParam authParam) { 13787c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu Map<Integer, Set<AuthParam>> authParamMap = new HashMap<>(); 13887c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu if (authParam != null) { 13987c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu Set<AuthParam> authSet = new HashSet<>(); 14087c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu authSet.add(authParam); 14187c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu authParamMap.put(authParam.getAuthTypeID(), authSet); 14287c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu } 14387c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu EAPMethod eapMethod = new EAPMethod(eapMethodID, authParamMap); 14487c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu NAIRealmData realmData = new NAIRealmData(Arrays.asList(new String[] {realm}), 14587c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu Arrays.asList(new EAPMethod[] {eapMethod})); 14687c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu return new NAIRealmElement(Arrays.asList(new NAIRealmData[] {realmData})); 14787c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu } 14887c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 14987c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu /** 15087c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * Helper function for creating a Roaming Consortium ANQP element. 15187c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * 15287c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * @param rcOIs Roaming consortium OIs 15387c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * @return {@link RoamingConsortiumElement} 15487c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu */ 15587c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu private RoamingConsortiumElement createRoamingConsortiumElement(Long[] rcOIs) { 15687c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu return new RoamingConsortiumElement(Arrays.asList(rcOIs)); 15787c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu } 15887c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 15987c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu /** 16087c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * Helper function for creating a 3GPP Network ANQP element. 16187c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * 16287c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * @param imsiList List of IMSI to be included in a 3GPP Network 16387c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * @return {@link ThreeGPPNetworkElement} 16487c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu */ 16587c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu private ThreeGPPNetworkElement createThreeGPPNetworkElement(String[] imsiList) { 16687c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu CellularNetwork network = new CellularNetwork(Arrays.asList(imsiList)); 16787c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu return new ThreeGPPNetworkElement(Arrays.asList(new CellularNetwork[] {network})); 16887c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu } 16987c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 17087c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu /** 171dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu * Verify that modification to the configuration used for creating PasspointProvider 172dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu * will not change the configuration stored inside the PasspointProvider. 173dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu * 174dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu * @throws Exception 175dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu */ 176dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu @Test 177dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu public void verifyModifyOriginalConfig() throws Exception { 178dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu // Create a dummy PasspointConfiguration. 179dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu PasspointConfiguration config = new PasspointConfiguration(); 180260f8f7ab5595c36ab5d130441cabe3dc944830cPeter Qiu HomeSp homeSp = new HomeSp(); 1814f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu homeSp.setFqdn("test1"); 1824f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu config.setHomeSp(homeSp); 1834f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu Credential credential = new Credential(); 1844f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu credential.setUserCredential(new Credential.UserCredential()); 1854f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu config.setCredential(credential); 186ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu mProvider = createProvider(config); 187dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu verifyInstalledConfig(config, true); 188dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu 189dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu // Modify the original configuration, the configuration maintained by the provider 190dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu // should be unchanged. 1914f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu config.getHomeSp().setFqdn("test2"); 192dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu verifyInstalledConfig(config, false); 193dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu } 194dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu 195dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu /** 196dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu * Verify that modification to the configuration retrieved from the PasspointProvider 197dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu * will not change the configuration stored inside the PasspointProvider. 198dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu * 199dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu * @throws Exception 200dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu */ 201dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu @Test 202dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu public void verifyModifyRetrievedConfig() throws Exception { 203dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu // Create a dummy PasspointConfiguration. 204dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu PasspointConfiguration config = new PasspointConfiguration(); 205260f8f7ab5595c36ab5d130441cabe3dc944830cPeter Qiu HomeSp homeSp = new HomeSp(); 2064f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu homeSp.setFqdn("test1"); 2074f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu config.setHomeSp(homeSp); 2084f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu Credential credential = new Credential(); 2094f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu credential.setUserCredential(new Credential.UserCredential()); 2104f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu config.setCredential(credential); 211ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu mProvider = createProvider(config); 212dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu verifyInstalledConfig(config, true); 213dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu 214dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu // Modify the retrieved configuration, verify the configuration maintained by the 215dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu // provider should be unchanged. 216dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu PasspointConfiguration retrievedConfig = mProvider.getConfig(); 2174f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu retrievedConfig.getHomeSp().setFqdn("test2"); 218dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu verifyInstalledConfig(retrievedConfig, false); 219dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu } 220ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu 221ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu /** 222ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu * Verify a successful installation of certificates and key. 223ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu * 224ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu * @throws Exception 225ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu */ 226ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu @Test 227ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu public void installCertsAndKeysSuccess() throws Exception { 228ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu // Create a dummy configuration with certificate credential. 229ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu PasspointConfiguration config = new PasspointConfiguration(); 2304f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu Credential credential = new Credential(); 2314f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu Credential.CertificateCredential certCredential = new Credential.CertificateCredential(); 2324f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu certCredential.setCertSha256Fingerprint( 2334f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu MessageDigest.getInstance("SHA-256").digest(FakeKeys.CLIENT_CERT.getEncoded())); 2344f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu credential.setCertCredential(certCredential); 2354f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu credential.setCaCertificate(FakeKeys.CA_CERT0); 2364f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu credential.setClientPrivateKey(FakeKeys.RSA_KEY1); 2374f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu credential.setClientCertificateChain(new X509Certificate[] {FakeKeys.CLIENT_CERT}); 2384f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu config.setCredential(credential); 239ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu mProvider = createProvider(config); 240ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu 241ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu // Install client certificate and key to the keystore successfully. 2428c22a001ebe4537fe5c0da1112e256dbd9d55ae7Peter Qiu when(mKeyStore.putCertInKeyStore(CA_CERTIFICATE_NAME, FakeKeys.CA_CERT0)) 243ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu .thenReturn(true); 2448c22a001ebe4537fe5c0da1112e256dbd9d55ae7Peter Qiu when(mKeyStore.putKeyInKeyStore(CLIENT_PRIVATE_KEY_NAME, FakeKeys.RSA_KEY1)) 245ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu .thenReturn(true); 2468c22a001ebe4537fe5c0da1112e256dbd9d55ae7Peter Qiu when(mKeyStore.putCertInKeyStore(CLIENT_CERTIFICATE_NAME, FakeKeys.CLIENT_CERT)) 247ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu .thenReturn(true); 248ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu assertTrue(mProvider.installCertsAndKeys()); 249ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu 250ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu // Verify client certificate and key in the configuration gets cleared and aliases 251ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu // are set correctly. 252ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu PasspointConfiguration curConfig = mProvider.getConfig(); 2534f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu assertTrue(curConfig.getCredential().getCaCertificate() == null); 2544f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu assertTrue(curConfig.getCredential().getClientPrivateKey() == null); 2554f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu assertTrue(curConfig.getCredential().getClientCertificateChain() == null); 256ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu assertTrue(mProvider.getCaCertificateAlias().equals(CA_CERTIFICATE_ALIAS)); 257ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu assertTrue(mProvider.getClientPrivateKeyAlias().equals(CLIENT_PRIVATE_KEY_ALIAS)); 258ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu assertTrue(mProvider.getClientCertificateAlias().equals(CLIENT_CERTIFICATE_ALIAS)); 259ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu } 260ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu 261ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu /** 262ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu * Verify a failure installation of certificates and key. 263ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu * 264ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu * @throws Exception 265ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu */ 266ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu @Test 267ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu public void installCertsAndKeysFailure() throws Exception { 268ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu // Create a dummy configuration with certificate credential. 269ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu PasspointConfiguration config = new PasspointConfiguration(); 2704f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu Credential credential = new Credential(); 2714f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu Credential.CertificateCredential certCredential = new Credential.CertificateCredential(); 2724f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu certCredential.setCertSha256Fingerprint( 2734f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu MessageDigest.getInstance("SHA-256").digest(FakeKeys.CLIENT_CERT.getEncoded())); 2744f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu credential.setCertCredential(certCredential); 2754f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu credential.setCaCertificate(FakeKeys.CA_CERT0); 2764f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu credential.setClientPrivateKey(FakeKeys.RSA_KEY1); 2774f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu credential.setClientCertificateChain(new X509Certificate[] {FakeKeys.CLIENT_CERT}); 2784f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu config.setCredential(credential); 279ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu mProvider = createProvider(config); 280ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu 281ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu // Failed to install client certificate to the keystore. 2828c22a001ebe4537fe5c0da1112e256dbd9d55ae7Peter Qiu when(mKeyStore.putCertInKeyStore(CA_CERTIFICATE_NAME, FakeKeys.CA_CERT0)) 283ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu .thenReturn(true); 2848c22a001ebe4537fe5c0da1112e256dbd9d55ae7Peter Qiu when(mKeyStore.putKeyInKeyStore(CLIENT_PRIVATE_KEY_NAME, FakeKeys.RSA_KEY1)) 285ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu .thenReturn(true); 2868c22a001ebe4537fe5c0da1112e256dbd9d55ae7Peter Qiu when(mKeyStore.putCertInKeyStore(CLIENT_CERTIFICATE_NAME, FakeKeys.CLIENT_CERT)) 287ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu .thenReturn(false); 288ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu assertFalse(mProvider.installCertsAndKeys()); 289ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu 290ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu // Verify certificates and key in the configuration are not cleared and aliases 291ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu // are not set. 292ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu PasspointConfiguration curConfig = mProvider.getConfig(); 2934f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu assertTrue(curConfig.getCredential().getCaCertificate() != null); 2944f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu assertTrue(curConfig.getCredential().getClientCertificateChain() != null); 2954f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu assertTrue(curConfig.getCredential().getClientPrivateKey() != null); 296ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu assertTrue(mProvider.getCaCertificateAlias() == null); 297ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu assertTrue(mProvider.getClientPrivateKeyAlias() == null); 298ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu assertTrue(mProvider.getClientCertificateAlias() == null); 299ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu } 300ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu 301ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu /** 302ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu * Verify a successful uninstallation of certificates and key. 303ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu */ 304ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu @Test 305ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu public void uninstallCertsAndKeys() throws Exception { 306ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu // Create a dummy configuration with certificate credential. 307ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu PasspointConfiguration config = new PasspointConfiguration(); 3084f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu Credential credential = new Credential(); 3094f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu Credential.CertificateCredential certCredential = new Credential.CertificateCredential(); 3104f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu certCredential.setCertSha256Fingerprint( 3114f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu MessageDigest.getInstance("SHA-256").digest(FakeKeys.CLIENT_CERT.getEncoded())); 3124f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu credential.setCertCredential(certCredential); 3134f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu credential.setCaCertificate(FakeKeys.CA_CERT0); 3144f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu credential.setClientPrivateKey(FakeKeys.RSA_KEY1); 3154f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu credential.setClientCertificateChain(new X509Certificate[] {FakeKeys.CLIENT_CERT}); 3164f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu config.setCredential(credential); 317ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu mProvider = createProvider(config); 318ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu 319ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu // Install client certificate and key to the keystore successfully. 3208c22a001ebe4537fe5c0da1112e256dbd9d55ae7Peter Qiu when(mKeyStore.putCertInKeyStore(CA_CERTIFICATE_NAME, FakeKeys.CA_CERT0)) 321ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu .thenReturn(true); 3228c22a001ebe4537fe5c0da1112e256dbd9d55ae7Peter Qiu when(mKeyStore.putKeyInKeyStore(CLIENT_PRIVATE_KEY_NAME, FakeKeys.RSA_KEY1)) 323ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu .thenReturn(true); 3248c22a001ebe4537fe5c0da1112e256dbd9d55ae7Peter Qiu when(mKeyStore.putCertInKeyStore(CLIENT_CERTIFICATE_NAME, FakeKeys.CLIENT_CERT)) 325ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu .thenReturn(true); 326ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu assertTrue(mProvider.installCertsAndKeys()); 327ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu assertTrue(mProvider.getCaCertificateAlias().equals(CA_CERTIFICATE_ALIAS)); 328ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu assertTrue(mProvider.getClientPrivateKeyAlias().equals(CLIENT_PRIVATE_KEY_ALIAS)); 329ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu assertTrue(mProvider.getClientCertificateAlias().equals(CLIENT_CERTIFICATE_ALIAS)); 330ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu 331ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu // Uninstall certificates and key from the keystore. 332ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu mProvider.uninstallCertsAndKeys(); 3338c22a001ebe4537fe5c0da1112e256dbd9d55ae7Peter Qiu verify(mKeyStore).removeEntryFromKeyStore(CA_CERTIFICATE_NAME); 3348c22a001ebe4537fe5c0da1112e256dbd9d55ae7Peter Qiu verify(mKeyStore).removeEntryFromKeyStore(CLIENT_CERTIFICATE_NAME); 3358c22a001ebe4537fe5c0da1112e256dbd9d55ae7Peter Qiu verify(mKeyStore).removeEntryFromKeyStore(CLIENT_PRIVATE_KEY_NAME); 336ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu assertTrue(mProvider.getCaCertificateAlias() == null); 337ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu assertTrue(mProvider.getClientPrivateKeyAlias() == null); 338ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu assertTrue(mProvider.getClientCertificateAlias() == null); 339ae791278c9032a8b10cf818b98b571c0396add4aPeter Qiu } 34087c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 34187c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu /** 34287c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * Verify that a provider is a home provider when its FQDN matches a domain name in the 34387c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * Domain Name ANQP element and no NAI realm is provided. 34487c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * 34587c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * @throws Exception 34687c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu */ 34787c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu @Test 34887c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu public void matchFQDNWithoutNAIRealm() throws Exception { 34987c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu String testDomain = "test.com"; 35087c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 35187c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu // Setup test provider. 35287c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu PasspointConfiguration config = new PasspointConfiguration(); 353260f8f7ab5595c36ab5d130441cabe3dc944830cPeter Qiu HomeSp homeSp = new HomeSp(); 3544f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu homeSp.setFqdn(testDomain); 3554f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu config.setHomeSp(homeSp); 3564f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu Credential credential = new Credential(); 3574f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu Credential.UserCredential userCredential = new Credential.UserCredential(); 3585e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu userCredential.setNonEapInnerMethod(Credential.UserCredential.AUTH_METHOD_MSCHAPV2); 3594f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu credential.setUserCredential(userCredential); 3604f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu config.setCredential(credential); 36187c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu mProvider = createProvider(config); 36287c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 36387c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu // Setup ANQP elements. 36487c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu Map<ANQPElementType, ANQPElement> anqpElementMap = new HashMap<>(); 36587c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu anqpElementMap.put(ANQPElementType.ANQPDomName, 36687c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu createDomainNameElement(new String[] {testDomain})); 36787c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 3682e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma assertEquals(PasspointMatch.HomeProvider, 3692e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma mProvider.match(anqpElementMap, mRoamingConsortium)); 37087c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu } 37187c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 37287c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu /** 37387c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * Verify that a provider is a home provider when its FQDN matches a domain name in the 37487c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * Domain Name ANQP element and the provider's credential matches the NAI realm provided. 37587c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * 37687c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * @throws Exception 37787c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu */ 37887c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu @Test 37987c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu public void matchFQDNWithNAIRealmMatch() throws Exception { 38087c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu String testDomain = "test.com"; 38187c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu String testRealm = "realm.com"; 38287c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 38387c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu // Setup test provider. 38487c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu PasspointConfiguration config = new PasspointConfiguration(); 385260f8f7ab5595c36ab5d130441cabe3dc944830cPeter Qiu HomeSp homeSp = new HomeSp(); 3864f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu homeSp.setFqdn(testDomain); 3874f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu config.setHomeSp(homeSp); 3884f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu Credential credential = new Credential(); 3894f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu credential.setRealm(testRealm); 3904f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu Credential.UserCredential userCredential = new Credential.UserCredential(); 3915e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu userCredential.setNonEapInnerMethod(Credential.UserCredential.AUTH_METHOD_MSCHAPV2); 3924f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu credential.setUserCredential(userCredential); 3934f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu config.setCredential(credential); 39487c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu mProvider = createProvider(config); 39587c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 39687c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu // Setup Domain Name ANQP element. 39787c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu Map<ANQPElementType, ANQPElement> anqpElementMap = new HashMap<>(); 39887c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu anqpElementMap.put(ANQPElementType.ANQPDomName, 39987c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu createDomainNameElement(new String[] {testDomain})); 40087c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu anqpElementMap.put(ANQPElementType.ANQPNAIRealm, 40187c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu createNAIRealmElement(testRealm, EAPConstants.EAP_TTLS, 40287c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu new NonEAPInnerAuth(NonEAPInnerAuth.AUTH_TYPE_MSCHAPV2))); 40387c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 4042e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma assertEquals(PasspointMatch.HomeProvider, 4052e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma mProvider.match(anqpElementMap, mRoamingConsortium)); 40687c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu } 40787c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 40887c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu /** 40987c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * Verify that there is no match when the provider's FQDN matches a domain name in the 41087c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * Domain Name ANQP element but the provider's credential doesn't match the authentication 41187c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * method provided in the NAI realm. 41287c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * 41387c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * @throws Exception 41487c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu */ 41587c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu @Test 41687c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu public void matchFQDNWithNAIRealmMismatch() throws Exception { 41787c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu String testDomain = "test.com"; 41887c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu String testRealm = "realm.com"; 41987c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 42087c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu // Setup test provider. 42187c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu PasspointConfiguration config = new PasspointConfiguration(); 422260f8f7ab5595c36ab5d130441cabe3dc944830cPeter Qiu HomeSp homeSp = new HomeSp(); 4234f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu homeSp.setFqdn(testDomain); 4244f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu config.setHomeSp(homeSp); 4254f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu Credential credential = new Credential(); 4264f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu credential.setRealm(testRealm); 4274f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu Credential.UserCredential userCredential = new Credential.UserCredential(); 4285e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu userCredential.setNonEapInnerMethod(Credential.UserCredential.AUTH_METHOD_MSCHAPV2); 4294f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu credential.setUserCredential(userCredential); 4304f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu config.setCredential(credential); 43187c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu mProvider = createProvider(config); 43287c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 43387c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu // Setup Domain Name ANQP element. 43487c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu Map<ANQPElementType, ANQPElement> anqpElementMap = new HashMap<>(); 43587c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu anqpElementMap.put(ANQPElementType.ANQPDomName, 43687c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu createDomainNameElement(new String[] {testDomain})); 43787c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu anqpElementMap.put(ANQPElementType.ANQPNAIRealm, 43887c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu createNAIRealmElement(testRealm, EAPConstants.EAP_TLS, null)); 43987c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 4402e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma assertEquals(PasspointMatch.None, mProvider.match(anqpElementMap, mRoamingConsortium)); 44187c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu } 44287c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 44387c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu /** 44487c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * Verify that a provider is a home provider when its SIM credential matches an 3GPP network 44587c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * domain name in the Domain Name ANQP element. 44687c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * 44787c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * @throws Exception 44887c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu */ 44987c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu @Test 45087c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu public void match3GPPNetworkDomainName() throws Exception { 45187c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu String testImsi = "1234567890"; 45287c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 45387c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu // Setup test provider. 45487c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu PasspointConfiguration config = new PasspointConfiguration(); 455260f8f7ab5595c36ab5d130441cabe3dc944830cPeter Qiu config.setHomeSp(new HomeSp()); 4564f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu Credential credential = new Credential(); 4574f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu Credential.SimCredential simCredential = new Credential.SimCredential(); 4584f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu simCredential.setImsi(testImsi); 4594f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu credential.setSimCredential(simCredential); 4604f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu config.setCredential(credential); 46187c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu when(mSimAccessor.getMatchingImsis(new IMSIParameter(testImsi, false))) 46287c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu .thenReturn(Arrays.asList(new String[] {testImsi})); 46387c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu mProvider = createProvider(config); 46487c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 46587c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu // Setup Domain Name ANQP element. 46687c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu Map<ANQPElementType, ANQPElement> anqpElementMap = new HashMap<>(); 46787c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu anqpElementMap.put(ANQPElementType.ANQPDomName, 46887c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu createDomainNameElement(new String[] {"wlan.mnc456.mcc123.3gppnetwork.org"})); 46987c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 4702e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma assertEquals(PasspointMatch.HomeProvider, 4712e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma mProvider.match(anqpElementMap, mRoamingConsortium)); 47287c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu } 47387c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 47487c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu /** 47587c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * Verify that a provider is a roaming provider when a roaming consortium OI matches an OI 47687c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * in the roaming consortium ANQP element. 47787c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * 47887c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * @throws Exception 47987c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu */ 48087c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu @Test 48187c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu public void matchRoamingConsortium() throws Exception { 48287c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu long[] providerRCOIs = new long[] {0x1234L, 0x2345L}; 48387c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu Long[] anqpRCOIs = new Long[] {0x1234L, 0x2133L}; 48487c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 48587c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu // Setup test provider. 48687c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu PasspointConfiguration config = new PasspointConfiguration(); 487260f8f7ab5595c36ab5d130441cabe3dc944830cPeter Qiu HomeSp homeSp = new HomeSp(); 488260f8f7ab5595c36ab5d130441cabe3dc944830cPeter Qiu homeSp.setRoamingConsortiumOis(providerRCOIs); 4894f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu config.setHomeSp(homeSp); 4904f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu Credential credential = new Credential(); 4914f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu Credential.UserCredential userCredential = new Credential.UserCredential(); 4925e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu userCredential.setNonEapInnerMethod(Credential.UserCredential.AUTH_METHOD_MSCHAPV2); 4934f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu credential.setUserCredential(userCredential); 4944f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu config.setCredential(credential); 49587c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu mProvider = createProvider(config); 49687c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 49787c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu // Setup Roaming Consortium ANQP element. 49887c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu Map<ANQPElementType, ANQPElement> anqpElementMap = new HashMap<>(); 49987c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu anqpElementMap.put(ANQPElementType.ANQPRoamingConsortium, 50087c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu createRoamingConsortiumElement(anqpRCOIs)); 50187c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 5022e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma assertEquals(PasspointMatch.RoamingProvider, 5032e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma mProvider.match(anqpElementMap, mRoamingConsortium)); 5042e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma } 5052e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma 5062e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma /** 5072e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma * Verify that a provider is a roaming provider when a roaming consortium OI matches an OI 5082e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma * in the roaming consortium information element. 5092e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma * 5102e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma * @throws Exception 5112e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma */ 5122e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma @Test 5132e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma public void matchRoamingConsortiumIe() throws Exception { 5142e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma long[] providerRCOIs = new long[] {0x1234L, 0x2345L}; 5152e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma long[] ieRCOIs = new long[] {0x1234L, 0x2133L}; 5162e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma 5172e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma // Setup test provider. 5182e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma PasspointConfiguration config = new PasspointConfiguration(); 5192e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma HomeSp homeSp = new HomeSp(); 5202e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma homeSp.setRoamingConsortiumOis(providerRCOIs); 5212e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma config.setHomeSp(homeSp); 5222e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma Credential credential = new Credential(); 5232e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma Credential.UserCredential userCredential = new Credential.UserCredential(); 5242e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma userCredential.setNonEapInnerMethod(Credential.UserCredential.AUTH_METHOD_MSCHAPV2); 5252e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma credential.setUserCredential(userCredential); 5262e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma config.setCredential(credential); 5272e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma mProvider = createProvider(config); 5282e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma 5292e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma // Setup Roaming Consortium ANQP element. 5302e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma Map<ANQPElementType, ANQPElement> anqpElementMap = new HashMap<>(); 5312e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma 5322e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma // Setup Roaming Consortium Information element. 5332e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma when(mRoamingConsortium.getRoamingConsortiums()).thenReturn(ieRCOIs); 5342e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma 5352e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma assertEquals(PasspointMatch.RoamingProvider, 5362e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma mProvider.match(anqpElementMap, mRoamingConsortium)); 5372e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma } 5382e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma 5392e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma /** 5402e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma * Verify that none of matched providers are not found when a roaming consortium OI doesn't 5412e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma * matches an OI in the roaming consortium information element and 5422e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma * none of NAI realms match each other. 5432e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma * 5442e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma * @throws Exception 5452e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma */ 5462e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma @Test 5472e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma public void misMatchForRoamingConsortiumIeAndNAIRealm() throws Exception { 5482e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma long[] providerRCOIs = new long[] {0x1234L, 0x2345L}; 5492e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma long[] ieRCOIs = new long[] {0x2255L, 0x2133L}; 5502e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma 5512e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma // Setup test provider. 5522e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma PasspointConfiguration config = new PasspointConfiguration(); 5532e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma HomeSp homeSp = new HomeSp(); 5542e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma homeSp.setRoamingConsortiumOis(providerRCOIs); 5552e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma config.setHomeSp(homeSp); 5562e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma Credential credential = new Credential(); 5572e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma Credential.UserCredential userCredential = new Credential.UserCredential(); 5582e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma userCredential.setNonEapInnerMethod(Credential.UserCredential.AUTH_METHOD_MSCHAPV2); 5592e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma credential.setUserCredential(userCredential); 5602e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma config.setCredential(credential); 5612e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma mProvider = createProvider(config); 5622e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma 5632e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma // Setup Roaming Consortium ANQP element. 5642e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma Map<ANQPElementType, ANQPElement> anqpElementMap = new HashMap<>(); 5652e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma 5662e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma // Setup Roaming Consortium Information element. 5672e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma when(mRoamingConsortium.getRoamingConsortiums()).thenReturn(ieRCOIs); 5682e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma 5692e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma assertEquals(PasspointMatch.None, 5702e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma mProvider.match(anqpElementMap, mRoamingConsortium)); 57187c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu } 57287c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 57387c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu /** 57487c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * Verify that a provider is a roaming provider when the provider's IMSI parameter and an 57587c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * IMSI from the SIM card matches a MCC-MNC in the 3GPP Network ANQP element. 57687c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * 57787c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * @throws Exception 57887c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu */ 57987c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu @Test 58087c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu public void matchThreeGPPNetwork() throws Exception { 58187c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu String testImsi = "1234567890"; 58287c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 58387c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu // Setup test provider. 58487c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu PasspointConfiguration config = new PasspointConfiguration(); 585260f8f7ab5595c36ab5d130441cabe3dc944830cPeter Qiu config.setHomeSp(new HomeSp()); 5864f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu Credential credential = new Credential(); 5874f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu Credential.SimCredential simCredential = new Credential.SimCredential(); 5884f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu simCredential.setImsi(testImsi); 5894f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu credential.setSimCredential(simCredential); 5904f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu config.setCredential(credential); 59187c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu when(mSimAccessor.getMatchingImsis(new IMSIParameter(testImsi, false))) 59287c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu .thenReturn(Arrays.asList(new String[] {testImsi})); 59387c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu mProvider = createProvider(config); 59487c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 59587c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu // Setup 3GPP Network ANQP element. 59687c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu Map<ANQPElementType, ANQPElement> anqpElementMap = new HashMap<>(); 59787c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu anqpElementMap.put(ANQPElementType.ANQP3GPPNetwork, 59887c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu createThreeGPPNetworkElement(new String[] {"123456"})); 59987c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 6002e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma assertEquals(PasspointMatch.RoamingProvider, 6012e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma mProvider.match(anqpElementMap, mRoamingConsortium)); 60287c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu } 60387c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 60487c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu /** 60587c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * Verify that a provider is a roaming provider when its credential matches a NAI realm in 60687c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * the NAI Realm ANQP element. 60787c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * 60887c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * @throws Exception 60987c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu */ 61087c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu @Test 61187c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu public void matchNAIRealm() throws Exception { 61287c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu String testRealm = "realm.com"; 61387c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 61487c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu // Setup test provider. 61587c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu PasspointConfiguration config = new PasspointConfiguration(); 616260f8f7ab5595c36ab5d130441cabe3dc944830cPeter Qiu config.setHomeSp(new HomeSp()); 6174f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu Credential credential = new Credential(); 6184f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu credential.setRealm(testRealm); 6194f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu Credential.UserCredential userCredential = new Credential.UserCredential(); 6205e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu userCredential.setNonEapInnerMethod(Credential.UserCredential.AUTH_METHOD_MSCHAPV2); 6214f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu credential.setUserCredential(userCredential); 6224f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu config.setCredential(credential); 62387c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu mProvider = createProvider(config); 62487c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 62587c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu // Setup NAI Realm ANQP element. 62687c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu Map<ANQPElementType, ANQPElement> anqpElementMap = new HashMap<>(); 62787c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu anqpElementMap.put(ANQPElementType.ANQPNAIRealm, 62887c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu createNAIRealmElement(testRealm, EAPConstants.EAP_TTLS, 62987c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu new NonEAPInnerAuth(NonEAPInnerAuth.AUTH_TYPE_MSCHAPV2))); 63087c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 6312e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma assertEquals(PasspointMatch.RoamingProvider, 6322e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma mProvider.match(anqpElementMap, mRoamingConsortium)); 63387c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu } 63487c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 63587c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu /** 63687c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * Verify that a provider is a home provider when its FQDN, roaming consortium OI, and 63787c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * IMSI all matched against the ANQP elements, since we prefer matching home provider over 63887c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * roaming provider. 63987c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * 64087c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu * @throws Exception 64187c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu */ 64287c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu @Test 64387c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu public void matchHomeOverRoamingProvider() throws Exception { 64487c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu // Setup test data. 64587c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu String testDomain = "test.com"; 64687c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu String testImsi = "1234567890"; 64787c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu long[] providerRCOIs = new long[] {0x1234L, 0x2345L}; 64887c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu Long[] anqpRCOIs = new Long[] {0x1234L, 0x2133L}; 64987c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 65087c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu // Setup test provider. 65187c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu PasspointConfiguration config = new PasspointConfiguration(); 652260f8f7ab5595c36ab5d130441cabe3dc944830cPeter Qiu HomeSp homeSp = new HomeSp(); 6534f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu homeSp.setFqdn(testDomain); 654260f8f7ab5595c36ab5d130441cabe3dc944830cPeter Qiu homeSp.setRoamingConsortiumOis(providerRCOIs); 6554f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu config.setHomeSp(homeSp); 6564f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu Credential credential = new Credential(); 6574f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu Credential.SimCredential simCredential = new Credential.SimCredential(); 6584f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu simCredential.setImsi(testImsi); 6594f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu credential.setSimCredential(simCredential); 6604f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu config.setCredential(credential); 66187c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu when(mSimAccessor.getMatchingImsis(new IMSIParameter(testImsi, false))) 66287c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu .thenReturn(Arrays.asList(new String[] {testImsi})); 66387c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu mProvider = createProvider(config); 66487c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 66587c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu // Setup ANQP elements. 66687c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu Map<ANQPElementType, ANQPElement> anqpElementMap = new HashMap<>(); 66787c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu anqpElementMap.put(ANQPElementType.ANQPDomName, 66887c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu createDomainNameElement(new String[] {testDomain})); 66987c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu anqpElementMap.put(ANQPElementType.ANQPRoamingConsortium, 67087c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu createRoamingConsortiumElement(anqpRCOIs)); 67187c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu anqpElementMap.put(ANQPElementType.ANQP3GPPNetwork, 67287c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu createThreeGPPNetworkElement(new String[] {"123456"})); 67387c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu 6742e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma assertEquals(PasspointMatch.HomeProvider, 6752e889dc0b3f348f45cc5f5006d8784bed30583a9Masashi Honma mProvider.match(anqpElementMap, mRoamingConsortium)); 67687c6f1b149804685e46c18d2ad11262f611c9255Peter Qiu } 67779b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu 67879b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu /** 67979b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu * Verify that an expected WifiConfiguration will be returned for a Passpoint provider 68079b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu * with an user credential. 68179b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu * 68279b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu * @throws Exception 68379b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu */ 68479b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu @Test 68579b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu public void getWifiConfigWithUserCredential() throws Exception { 68679b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu // Test data. 68779b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu String fqdn = "test.com"; 68879b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu String friendlyName = "Friendly Name"; 68979b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu long[] rcOIs = new long[] {0x1234L, 0x2345L}; 69079b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu String realm = "realm.com"; 69179b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu String username = "username"; 69279b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu String password = "password"; 69379b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu byte[] base64EncodedPw = 69479b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu Base64.encode(password.getBytes(StandardCharsets.UTF_8), Base64.DEFAULT); 69579b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu String encodedPasswordStr = new String(base64EncodedPw, StandardCharsets.UTF_8); 69679b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu 69779b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu // Create provider. 69879b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu PasspointConfiguration config = new PasspointConfiguration(); 699260f8f7ab5595c36ab5d130441cabe3dc944830cPeter Qiu HomeSp homeSp = new HomeSp(); 7004f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu homeSp.setFqdn(fqdn); 7014f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu homeSp.setFriendlyName(friendlyName); 702260f8f7ab5595c36ab5d130441cabe3dc944830cPeter Qiu homeSp.setRoamingConsortiumOis(rcOIs); 7034f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu config.setHomeSp(homeSp); 7044f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu Credential credential = new Credential(); 7054f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu credential.setRealm(realm); 7064f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu Credential.UserCredential userCredential = new Credential.UserCredential(); 7074f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu userCredential.setUsername(username); 7084f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu userCredential.setPassword(encodedPasswordStr); 7095e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu userCredential.setNonEapInnerMethod(Credential.UserCredential.AUTH_METHOD_MSCHAPV2); 7104f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu credential.setUserCredential(userCredential); 7114f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu credential.setCaCertificate(FakeKeys.CA_CERT0); 7124f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu config.setCredential(credential); 71379b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu mProvider = createProvider(config); 71479b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu 71579b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu // Install certificate. 7168c22a001ebe4537fe5c0da1112e256dbd9d55ae7Peter Qiu when(mKeyStore.putCertInKeyStore(CA_CERTIFICATE_NAME, FakeKeys.CA_CERT0)) 71779b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu .thenReturn(true); 71879b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu assertTrue(mProvider.installCertsAndKeys()); 71979b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu 72079b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu // Retrieve the WifiConfiguration associated with the provider, and verify the content of 72179b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu // the configuration. Need to verify field by field since WifiConfiguration doesn't 72279b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu // override equals() function. 72379b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu WifiConfiguration wifiConfig = mProvider.getWifiConfig(); 72479b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu WifiEnterpriseConfig wifiEnterpriseConfig = wifiConfig.enterpriseConfig; 72579b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu assertEquals(fqdn, wifiConfig.FQDN); 72679b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu assertEquals(friendlyName, wifiConfig.providerFriendlyName); 72779b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu assertTrue(Arrays.equals(rcOIs, wifiConfig.roamingConsortiumIds)); 72879b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu assertTrue(wifiConfig.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.WPA_EAP)); 72979b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu assertTrue(wifiConfig.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.IEEE8021X)); 730773a24cc2db61d47cea3c86a3ca8276805536674Sohani Rao assertFalse(wifiConfig.shared); 73179b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu assertEquals(realm, wifiEnterpriseConfig.getRealm()); 7322aa7cc7c13207c3afa3ef428ec1c8cdc1893c50cPeter Qiu assertEquals(fqdn, wifiEnterpriseConfig.getDomainSuffixMatch()); 73379b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu assertEquals("anonymous@" + realm, wifiEnterpriseConfig.getAnonymousIdentity()); 73479b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu assertEquals(WifiEnterpriseConfig.Eap.TTLS, wifiEnterpriseConfig.getEapMethod()); 73579b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu assertEquals(WifiEnterpriseConfig.Phase2.MSCHAPV2, wifiEnterpriseConfig.getPhase2Method()); 73679b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu assertEquals(username, wifiEnterpriseConfig.getIdentity()); 73779b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu assertEquals(password, wifiEnterpriseConfig.getPassword()); 7388c22a001ebe4537fe5c0da1112e256dbd9d55ae7Peter Qiu assertEquals(CA_CERTIFICATE_ALIAS, wifiEnterpriseConfig.getCaCertificateAlias()); 73979b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu } 74079b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu 74179b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu /** 74279b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu * Verify that an expected WifiConfiguration will be returned for a Passpoint provider 74379b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu * with a certificate credential. 74479b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu * 74579b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu * @throws Exception 74679b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu */ 74779b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu @Test 74879b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu public void getWifiConfigWithCertCredential() throws Exception { 74979b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu // Test data. 75079b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu String fqdn = "test.com"; 75179b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu String friendlyName = "Friendly Name"; 75279b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu long[] rcOIs = new long[] {0x1234L, 0x2345L}; 75379b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu String realm = "realm.com"; 75479b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu 75579b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu // Create provider. 75679b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu PasspointConfiguration config = new PasspointConfiguration(); 757260f8f7ab5595c36ab5d130441cabe3dc944830cPeter Qiu HomeSp homeSp = new HomeSp(); 7584f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu homeSp.setFqdn(fqdn); 7594f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu homeSp.setFriendlyName(friendlyName); 760260f8f7ab5595c36ab5d130441cabe3dc944830cPeter Qiu homeSp.setRoamingConsortiumOis(rcOIs); 7614f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu config.setHomeSp(homeSp); 7624f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu Credential credential = new Credential(); 7634f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu credential.setRealm(realm); 7644f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu Credential.CertificateCredential certCredential = new Credential.CertificateCredential(); 7654f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu certCredential.setCertSha256Fingerprint( 7664f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu MessageDigest.getInstance("SHA-256").digest(FakeKeys.CLIENT_CERT.getEncoded())); 7674f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu credential.setCertCredential(certCredential); 7684f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu credential.setCaCertificate(FakeKeys.CA_CERT0); 7694f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu credential.setClientPrivateKey(FakeKeys.RSA_KEY1); 7704f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu credential.setClientCertificateChain(new X509Certificate[] {FakeKeys.CLIENT_CERT}); 7714f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu config.setCredential(credential); 77279b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu mProvider = createProvider(config); 77379b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu 77479b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu // Install certificate. 7758c22a001ebe4537fe5c0da1112e256dbd9d55ae7Peter Qiu when(mKeyStore.putCertInKeyStore(CA_CERTIFICATE_NAME, FakeKeys.CA_CERT0)) 77679b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu .thenReturn(true); 7778c22a001ebe4537fe5c0da1112e256dbd9d55ae7Peter Qiu when(mKeyStore.putKeyInKeyStore(CLIENT_PRIVATE_KEY_NAME, FakeKeys.RSA_KEY1)) 77879b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu .thenReturn(true); 7798c22a001ebe4537fe5c0da1112e256dbd9d55ae7Peter Qiu when(mKeyStore.putCertInKeyStore(CLIENT_CERTIFICATE_NAME, FakeKeys.CLIENT_CERT)) 78079b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu .thenReturn(true); 78179b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu assertTrue(mProvider.installCertsAndKeys()); 78279b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu 78379b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu // Retrieve the WifiConfiguration associated with the provider, and verify the content of 78479b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu // the configuration. Need to verify field by field since WifiConfiguration doesn't 78579b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu // override equals() function. 78679b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu WifiConfiguration wifiConfig = mProvider.getWifiConfig(); 78779b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu WifiEnterpriseConfig wifiEnterpriseConfig = wifiConfig.enterpriseConfig; 78879b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu assertEquals(fqdn, wifiConfig.FQDN); 78979b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu assertEquals(friendlyName, wifiConfig.providerFriendlyName); 79079b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu assertTrue(Arrays.equals(rcOIs, wifiConfig.roamingConsortiumIds)); 79179b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu assertTrue(wifiConfig.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.WPA_EAP)); 79279b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu assertTrue(wifiConfig.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.IEEE8021X)); 793773a24cc2db61d47cea3c86a3ca8276805536674Sohani Rao assertFalse(wifiConfig.shared); 79479b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu assertEquals(realm, wifiEnterpriseConfig.getRealm()); 7952aa7cc7c13207c3afa3ef428ec1c8cdc1893c50cPeter Qiu assertEquals(fqdn, wifiEnterpriseConfig.getDomainSuffixMatch()); 79679b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu assertEquals("anonymous@" + realm, wifiEnterpriseConfig.getAnonymousIdentity()); 79779b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu assertEquals(WifiEnterpriseConfig.Eap.TLS, wifiEnterpriseConfig.getEapMethod()); 7988c22a001ebe4537fe5c0da1112e256dbd9d55ae7Peter Qiu assertEquals(CLIENT_CERTIFICATE_ALIAS, wifiEnterpriseConfig.getClientCertificateAlias()); 7998c22a001ebe4537fe5c0da1112e256dbd9d55ae7Peter Qiu assertEquals(CA_CERTIFICATE_ALIAS, wifiEnterpriseConfig.getCaCertificateAlias()); 80079b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu } 80179b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu 80279b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu /** 80379b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu * Verify that an expected WifiConfiguration will be returned for a Passpoint provider 80479b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu * with a SIM credential. 80579b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu * 80679b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu * @throws Exception 80779b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu */ 80879b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu @Test 80979b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu public void getWifiConfigWithSimCredential() throws Exception { 81079b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu // Test data. 81179b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu String fqdn = "test.com"; 81279b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu String friendlyName = "Friendly Name"; 81379b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu long[] rcOIs = new long[] {0x1234L, 0x2345L}; 81479b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu String realm = "realm.com"; 81579b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu String imsi = "1234*"; 81679b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu 81779b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu // Create provider. 81879b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu PasspointConfiguration config = new PasspointConfiguration(); 819260f8f7ab5595c36ab5d130441cabe3dc944830cPeter Qiu HomeSp homeSp = new HomeSp(); 8204f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu homeSp.setFqdn(fqdn); 8214f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu homeSp.setFriendlyName(friendlyName); 822260f8f7ab5595c36ab5d130441cabe3dc944830cPeter Qiu homeSp.setRoamingConsortiumOis(rcOIs); 8234f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu config.setHomeSp(homeSp); 8244f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu Credential credential = new Credential(); 8254f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu credential.setRealm(realm); 8264f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu Credential.SimCredential simCredential = new Credential.SimCredential(); 8274f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu simCredential.setImsi(imsi); 8284f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu simCredential.setEapType(EAPConstants.EAP_SIM); 8294f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu credential.setSimCredential(simCredential); 8304f4d745ca28b915ea4a7c91ec5df3ea8a2db64adPeter Qiu config.setCredential(credential); 83179b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu mProvider = createProvider(config); 83279b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu 83379b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu // Retrieve the WifiConfiguration associated with the provider, and verify the content of 83479b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu // the configuration. Need to verify field by field since WifiConfiguration doesn't 83579b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu // override equals() function. 83679b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu WifiConfiguration wifiConfig = mProvider.getWifiConfig(); 83779b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu WifiEnterpriseConfig wifiEnterpriseConfig = wifiConfig.enterpriseConfig; 83879b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu assertEquals(fqdn, wifiConfig.FQDN); 83979b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu assertEquals(friendlyName, wifiConfig.providerFriendlyName); 84079b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu assertTrue(Arrays.equals(rcOIs, wifiConfig.roamingConsortiumIds)); 84179b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu assertTrue(wifiConfig.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.WPA_EAP)); 84279b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu assertTrue(wifiConfig.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.IEEE8021X)); 843773a24cc2db61d47cea3c86a3ca8276805536674Sohani Rao assertFalse(wifiConfig.shared); 84479b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu assertEquals(realm, wifiEnterpriseConfig.getRealm()); 8452aa7cc7c13207c3afa3ef428ec1c8cdc1893c50cPeter Qiu assertEquals(fqdn, wifiEnterpriseConfig.getDomainSuffixMatch()); 84679b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu assertEquals(WifiEnterpriseConfig.Eap.SIM, wifiEnterpriseConfig.getEapMethod()); 84779b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu assertEquals(imsi, wifiEnterpriseConfig.getPlmn()); 84879b81a96a2dd5ce45cb4b9206f04e4b37f7220f1Peter Qiu } 8495e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu 8505e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu /** 8515e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu * Verify that an expected {@link PasspointConfiguration} will be returned when converting 8525e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu * from a {@link WifiConfiguration} containing an user credential. 8535e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu * 8545e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu * @throws Exception 8555e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu */ 8565e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu @Test 8575e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu public void convertFromWifiConfigWithUserCredential() throws Exception { 8585e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu // Test data. 8595e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu String fqdn = "test.com"; 8605e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu String friendlyName = "Friendly Name"; 8615e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu long[] rcOIs = new long[] {0x1234L, 0x2345L}; 8625e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu String realm = "realm.com"; 8635e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu String username = "username"; 8645e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu String password = "password"; 8655e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu byte[] base64EncodedPw = 8665e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu Base64.encode(password.getBytes(StandardCharsets.UTF_8), Base64.DEFAULT); 8675e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu String encodedPasswordStr = new String(base64EncodedPw, StandardCharsets.UTF_8); 8685e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu 8695e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu // Setup WifiConfiguration for legacy Passpoint configuraiton. 8705e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu WifiConfiguration wifiConfig = new WifiConfiguration(); 8715e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu wifiConfig.FQDN = fqdn; 8725e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu wifiConfig.providerFriendlyName = friendlyName; 8735e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu wifiConfig.roamingConsortiumIds = rcOIs; 8745e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu wifiConfig.enterpriseConfig.setIdentity(username); 8755e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu wifiConfig.enterpriseConfig.setPassword(password); 8765e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu wifiConfig.enterpriseConfig.setRealm(realm); 8775e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu wifiConfig.enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.TTLS); 8785e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu wifiConfig.enterpriseConfig.setPhase2Method(WifiEnterpriseConfig.Phase2.PAP); 8795e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu 8805e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu // Setup expected {@link PasspointConfiguration} 8815e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu PasspointConfiguration passpointConfig = new PasspointConfiguration(); 8825e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu HomeSp homeSp = new HomeSp(); 8835e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu homeSp.setFqdn(fqdn); 8845e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu homeSp.setFriendlyName(friendlyName); 8855e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu homeSp.setRoamingConsortiumOis(rcOIs); 8865e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu passpointConfig.setHomeSp(homeSp); 8875e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu Credential credential = new Credential(); 8885e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu Credential.UserCredential userCredential = new Credential.UserCredential(); 8895e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu userCredential.setUsername(username); 8905e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu userCredential.setPassword(encodedPasswordStr); 8915e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu userCredential.setEapType(EAPConstants.EAP_TTLS); 8925e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu userCredential.setNonEapInnerMethod("PAP"); 8935e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu credential.setUserCredential(userCredential); 8945e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu credential.setRealm(realm); 8955e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu passpointConfig.setCredential(credential); 8965e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu 8975e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu assertEquals(passpointConfig, PasspointProvider.convertFromWifiConfig(wifiConfig)); 8985e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu } 8995e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu 9005e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu /** 9015e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu * Verify that an expected {@link PasspointConfiguration} will be returned when converting 9025e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu * from a {@link WifiConfiguration} containing a SIM credential. 9035e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu * 9045e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu * @throws Exception 9055e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu */ 9065e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu @Test 9075e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu public void convertFromWifiConfigWithSimCredential() throws Exception { 9085e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu // Test data. 9095e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu String fqdn = "test.com"; 9105e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu String friendlyName = "Friendly Name"; 9115e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu long[] rcOIs = new long[] {0x1234L, 0x2345L}; 9125e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu String realm = "realm.com"; 9135e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu String imsi = "1234"; 9145e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu 9155e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu // Setup WifiConfiguration for legacy Passpoint configuraiton. 9165e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu WifiConfiguration wifiConfig = new WifiConfiguration(); 9175e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu wifiConfig.FQDN = fqdn; 9185e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu wifiConfig.providerFriendlyName = friendlyName; 9195e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu wifiConfig.roamingConsortiumIds = rcOIs; 9205e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu wifiConfig.enterpriseConfig.setRealm(realm); 9215e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu wifiConfig.enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.SIM); 9225e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu wifiConfig.enterpriseConfig.setPlmn(imsi); 9235e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu 9245e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu // Setup expected {@link PasspointConfiguration} 9255e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu PasspointConfiguration passpointConfig = new PasspointConfiguration(); 9265e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu HomeSp homeSp = new HomeSp(); 9275e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu homeSp.setFqdn(fqdn); 9285e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu homeSp.setFriendlyName(friendlyName); 9295e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu homeSp.setRoamingConsortiumOis(rcOIs); 9305e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu passpointConfig.setHomeSp(homeSp); 9315e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu Credential credential = new Credential(); 9325e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu Credential.SimCredential simCredential = new Credential.SimCredential(); 9335e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu simCredential.setEapType(EAPConstants.EAP_SIM); 9345e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu simCredential.setImsi(imsi); 9355e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu credential.setSimCredential(simCredential); 9365e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu credential.setRealm(realm); 9375e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu passpointConfig.setCredential(credential); 9385e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu 9395e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu assertEquals(passpointConfig, PasspointProvider.convertFromWifiConfig(wifiConfig)); 9405e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu } 9415e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu 9425e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu /** 9435e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu * Verify that an expected {@link PasspointConfiguration} will be returned when converting 9445e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu * from a {@link WifiConfiguration} containing a certificate credential. 9455e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu * 9465e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu * @throws Exception 9475e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu */ 9485e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu @Test 9495e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu public void convertFromWifiConfigWithCertCredential() throws Exception { 9505e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu // Test data. 9515e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu String fqdn = "test.com"; 9525e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu String friendlyName = "Friendly Name"; 9535e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu long[] rcOIs = new long[] {0x1234L, 0x2345L}; 9545e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu String realm = "realm.com"; 9555e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu 9565e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu // Setup WifiConfiguration for legacy Passpoint configuraiton. 9575e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu WifiConfiguration wifiConfig = new WifiConfiguration(); 9585e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu wifiConfig.FQDN = fqdn; 9595e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu wifiConfig.providerFriendlyName = friendlyName; 9605e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu wifiConfig.roamingConsortiumIds = rcOIs; 9615e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu wifiConfig.enterpriseConfig.setRealm(realm); 9625e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu wifiConfig.enterpriseConfig.setEapMethod(WifiEnterpriseConfig.Eap.TLS); 9635e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu 9645e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu // Setup expected {@link PasspointConfiguration} 9655e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu PasspointConfiguration passpointConfig = new PasspointConfiguration(); 9665e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu HomeSp homeSp = new HomeSp(); 9675e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu homeSp.setFqdn(fqdn); 9685e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu homeSp.setFriendlyName(friendlyName); 9695e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu homeSp.setRoamingConsortiumOis(rcOIs); 9705e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu passpointConfig.setHomeSp(homeSp); 9715e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu Credential credential = new Credential(); 9725e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu Credential.CertificateCredential certCredential = new Credential.CertificateCredential(); 9735e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu certCredential.setCertType(Credential.CertificateCredential.CERT_TYPE_X509V3); 9745e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu credential.setCertCredential(certCredential); 9755e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu credential.setRealm(realm); 9765e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu passpointConfig.setCredential(credential); 9775e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu 9785e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu assertEquals(passpointConfig, PasspointProvider.convertFromWifiConfig(wifiConfig)); 9795e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu } 9805e4822d5dba15e45c5ff43dfba3ac7803b3f4e28Peter Qiu 981e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu /** 982e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu * Verify that {@link PasspointProvider#isSimCredential} will return true for provider that's 983e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu * backed by a SIM credential. 984e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu * 985e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu * @throws Exception 986e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu */ 987e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu @Test 988e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu public void providerBackedBySimCredential() throws Exception { 989e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu // Test data. 990e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu String fqdn = "test.com"; 991e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu String friendlyName = "Friendly Name"; 992e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu long[] rcOIs = new long[] {0x1234L, 0x2345L}; 993e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu String realm = "realm.com"; 994e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu String imsi = "1234*"; 995e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu 996e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu // Create provider with SIM credential. 997e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu PasspointConfiguration config = new PasspointConfiguration(); 998e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu HomeSp homeSp = new HomeSp(); 999e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu homeSp.setFqdn(fqdn); 1000e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu homeSp.setFriendlyName(friendlyName); 1001e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu homeSp.setRoamingConsortiumOis(rcOIs); 1002e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu config.setHomeSp(homeSp); 1003e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu Credential credential = new Credential(); 1004e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu credential.setRealm(realm); 1005e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu Credential.SimCredential simCredential = new Credential.SimCredential(); 1006e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu simCredential.setImsi(imsi); 1007e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu simCredential.setEapType(EAPConstants.EAP_SIM); 1008e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu credential.setSimCredential(simCredential); 1009e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu config.setCredential(credential); 1010e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu mProvider = createProvider(config); 1011e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu 1012e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu assertTrue(mProvider.isSimCredential()); 1013e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu } 1014e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu 1015e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu /** 1016e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu * Verify that {@link PasspointProvider#isSimCredential} will return false for provider that's 1017e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu * not backed by a SIM credential. 1018e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu * 1019e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu * @throws Exception 1020e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu */ 1021e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu @Test 1022e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu public void providerNotBackedBySimCredential() throws Exception { 1023e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu // Test data. 1024e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu String fqdn = "test.com"; 1025e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu String friendlyName = "Friendly Name"; 1026e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu long[] rcOIs = new long[] {0x1234L, 0x2345L}; 1027e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu String realm = "realm.com"; 1028e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu 1029e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu // Create provider with certificate credential. 1030e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu PasspointConfiguration config = new PasspointConfiguration(); 1031e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu HomeSp homeSp = new HomeSp(); 1032e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu homeSp.setFqdn(fqdn); 1033e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu homeSp.setFriendlyName(friendlyName); 1034e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu homeSp.setRoamingConsortiumOis(rcOIs); 1035e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu config.setHomeSp(homeSp); 1036e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu Credential credential = new Credential(); 1037e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu Credential.CertificateCredential certCredential = new Credential.CertificateCredential(); 1038e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu certCredential.setCertType(Credential.CertificateCredential.CERT_TYPE_X509V3); 1039e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu credential.setCertCredential(certCredential); 1040e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu credential.setRealm(realm); 1041e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu config.setCredential(credential); 1042e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu mProvider = createProvider(config); 1043e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu 1044e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu assertFalse(mProvider.isSimCredential()); 1045e7dfd69fbe21902b89124b99d914ed3c90ba8bafPeter Qiu } 104649357a30edf5786c8db4bad6f5dbe62545751cc6Peter Qiu 104749357a30edf5786c8db4bad6f5dbe62545751cc6Peter Qiu /** 104849357a30edf5786c8db4bad6f5dbe62545751cc6Peter Qiu * Verify that hasEverConnected flag is set correctly using 104949357a30edf5786c8db4bad6f5dbe62545751cc6Peter Qiu * {@link PasspointProvider#setHasEverConnected}. 105049357a30edf5786c8db4bad6f5dbe62545751cc6Peter Qiu * 105149357a30edf5786c8db4bad6f5dbe62545751cc6Peter Qiu * @throws Exception 105249357a30edf5786c8db4bad6f5dbe62545751cc6Peter Qiu */ 105349357a30edf5786c8db4bad6f5dbe62545751cc6Peter Qiu @Test 105449357a30edf5786c8db4bad6f5dbe62545751cc6Peter Qiu public void setHasEverConnected() throws Exception { 105549357a30edf5786c8db4bad6f5dbe62545751cc6Peter Qiu PasspointConfiguration config = new PasspointConfiguration(); 105649357a30edf5786c8db4bad6f5dbe62545751cc6Peter Qiu HomeSp homeSp = new HomeSp(); 105749357a30edf5786c8db4bad6f5dbe62545751cc6Peter Qiu homeSp.setFqdn("test1"); 105849357a30edf5786c8db4bad6f5dbe62545751cc6Peter Qiu config.setHomeSp(homeSp); 105949357a30edf5786c8db4bad6f5dbe62545751cc6Peter Qiu Credential credential = new Credential(); 106049357a30edf5786c8db4bad6f5dbe62545751cc6Peter Qiu credential.setUserCredential(new Credential.UserCredential()); 106149357a30edf5786c8db4bad6f5dbe62545751cc6Peter Qiu config.setCredential(credential); 106249357a30edf5786c8db4bad6f5dbe62545751cc6Peter Qiu mProvider = createProvider(config); 106349357a30edf5786c8db4bad6f5dbe62545751cc6Peter Qiu verifyInstalledConfig(config, true); 106449357a30edf5786c8db4bad6f5dbe62545751cc6Peter Qiu 106549357a30edf5786c8db4bad6f5dbe62545751cc6Peter Qiu assertFalse(mProvider.getHasEverConnected()); 106649357a30edf5786c8db4bad6f5dbe62545751cc6Peter Qiu mProvider.setHasEverConnected(true); 106749357a30edf5786c8db4bad6f5dbe62545751cc6Peter Qiu assertTrue(mProvider.getHasEverConnected()); 106849357a30edf5786c8db4bad6f5dbe62545751cc6Peter Qiu } 1069dc6361c58a4eb2e7dd931ffe1cc0fb5129f004c9Peter Qiu} 1070