178463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu/*
278463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu * Copyright (C) 2016 The Android Open Source Project
378463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu *
478463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu * Licensed under the Apache License, Version 2.0 (the "License");
578463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu * you may not use this file except in compliance with the License.
678463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu * You may obtain a copy of the License at
778463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu *
878463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu *      http://www.apache.org/licenses/LICENSE-2.0
978463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu *
1078463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu * Unless required by applicable law or agreed to in writing, software
1178463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu * distributed under the License is distributed on an "AS IS" BASIS,
1278463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1378463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu * See the License for the specific language governing permissions and
1478463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu * limitations under the License
1578463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu */
1678463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu
1778463be32c01259841f4c0b670b742c3c2040cf3Rubin Xupackage android.net.wifi;
1878463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu
1978463be32c01259841f4c0b670b742c3c2040cf3Rubin Xuimport static org.junit.Assert.assertEquals;
208f86598c612698b39cad15b4a0f03619d05fd7d6Paul Stewartimport static org.junit.Assert.assertFalse;
2178463be32c01259841f4c0b670b742c3c2040cf3Rubin Xuimport static org.junit.Assert.assertTrue;
2278463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu
230fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewartimport android.net.wifi.WifiEnterpriseConfig.Eap;
240fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewartimport android.net.wifi.WifiEnterpriseConfig.Phase2;
250fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewartimport android.os.Parcel;
2678463be32c01259841f4c0b670b742c3c2040cf3Rubin Xuimport android.security.Credentials;
2778463be32c01259841f4c0b670b742c3c2040cf3Rubin Xuimport android.test.suitebuilder.annotation.SmallTest;
2878463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu
2978463be32c01259841f4c0b670b742c3c2040cf3Rubin Xuimport org.junit.Before;
3078463be32c01259841f4c0b670b742c3c2040cf3Rubin Xuimport org.junit.Test;
3178463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu
3278463be32c01259841f4c0b670b742c3c2040cf3Rubin Xuimport java.security.cert.X509Certificate;
3378463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu
3478463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu
3578463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu/**
3678463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu * Unit tests for {@link android.net.wifi.WifiEnterpriseConfig}.
3778463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu */
3878463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu@SmallTest
3978463be32c01259841f4c0b670b742c3c2040cf3Rubin Xupublic class WifiEnterpriseConfigTest {
4078463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu    // Maintain a ground truth of the keystore uri prefix which is expected by wpa_supplicant.
4178463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu    public static final String KEYSTORE_URI = "keystore://";
4278463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu    public static final String CA_CERT_PREFIX = KEYSTORE_URI + Credentials.CA_CERTIFICATE;
4378463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu    public static final String KEYSTORES_URI = "keystores://";
4478463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu
4578463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu    private WifiEnterpriseConfig mEnterpriseConfig;
4678463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu
4778463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu    @Before
4878463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu    public void setUp() throws Exception {
4978463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu        mEnterpriseConfig = new WifiEnterpriseConfig();
5078463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu    }
5178463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu
5278463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu    @Test
5378463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu    public void testSetGetSingleCaCertificate() {
5478463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu        X509Certificate cert0 = FakeKeys.CA_CERT0;
5578463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu        mEnterpriseConfig.setCaCertificate(cert0);
5678463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu        assertEquals(mEnterpriseConfig.getCaCertificate(), cert0);
5778463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu    }
5878463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu
5978463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu    @Test
6078463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu    public void testSetGetMultipleCaCertificates() {
6178463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu        X509Certificate cert0 = FakeKeys.CA_CERT0;
6278463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu        X509Certificate cert1 = FakeKeys.CA_CERT1;
6378463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu        mEnterpriseConfig.setCaCertificates(new X509Certificate[] {cert0, cert1});
6478463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu        X509Certificate[] result = mEnterpriseConfig.getCaCertificates();
6578463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu        assertEquals(result.length, 2);
6678463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu        assertTrue(result[0] == cert0 && result[1] == cert1);
6778463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu    }
6878463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu
6978463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu    @Test
7078463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu    public void testSaveSingleCaCertificateAlias() {
7178463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu        final String alias = "single_alias 0";
7278463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu        mEnterpriseConfig.setCaCertificateAliases(new String[] {alias});
7378463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu        assertEquals(getCaCertField(), CA_CERT_PREFIX + alias);
7478463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu    }
7578463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu
7678463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu    @Test
7778463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu    public void testLoadSingleCaCertificateAlias() {
7878463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu        final String alias = "single_alias 1";
7978463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu        setCaCertField(CA_CERT_PREFIX + alias);
8078463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu        String[] aliases = mEnterpriseConfig.getCaCertificateAliases();
8178463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu        assertEquals(aliases.length, 1);
8278463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu        assertEquals(aliases[0], alias);
8378463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu    }
8478463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu
8578463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu    @Test
8678463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu    public void testSaveMultipleCaCertificates() {
8778463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu        final String alias0 = "single_alias 0";
8878463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu        final String alias1 = "single_alias 1";
8978463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu        mEnterpriseConfig.setCaCertificateAliases(new String[] {alias0, alias1});
9078463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu        assertEquals(getCaCertField(), String.format("%s%s %s",
9178463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu                KEYSTORES_URI,
9278463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu                WifiEnterpriseConfig.encodeCaCertificateAlias(Credentials.CA_CERTIFICATE + alias0),
9378463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu                WifiEnterpriseConfig.encodeCaCertificateAlias(Credentials.CA_CERTIFICATE + alias1)));
9478463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu    }
9578463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu
9678463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu    @Test
9778463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu    public void testLoadMultipleCaCertificates() {
9878463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu        final String alias0 = "single_alias 0";
9978463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu        final String alias1 = "single_alias 1";
10078463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu        setCaCertField(String.format("%s%s %s",
10178463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu                KEYSTORES_URI,
10278463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu                WifiEnterpriseConfig.encodeCaCertificateAlias(Credentials.CA_CERTIFICATE + alias0),
10378463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu                WifiEnterpriseConfig.encodeCaCertificateAlias(Credentials.CA_CERTIFICATE + alias1)));
10478463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu        String[] aliases = mEnterpriseConfig.getCaCertificateAliases();
10578463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu        assertEquals(aliases.length, 2);
10678463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu        assertEquals(aliases[0], alias0);
10778463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu        assertEquals(aliases[1], alias1);
10878463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu    }
10978463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu
11078463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu    private String getCaCertField() {
11178463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu        return mEnterpriseConfig.getFieldValue(WifiEnterpriseConfig.CA_CERT_KEY, "");
11278463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu    }
11378463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu
11478463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu    private void setCaCertField(String value) {
11578463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu        mEnterpriseConfig.setFieldValue(WifiEnterpriseConfig.CA_CERT_KEY, value);
11678463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu    }
1170fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart
1180fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    // Retrieves the value for a specific key supplied to wpa_supplicant.
1190fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    private class SupplicantConfigExtractor implements WifiEnterpriseConfig.SupplicantSaver {
1200fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        private String mValue = null;
1210fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        private String mKey;
1220fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart
1230fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        SupplicantConfigExtractor(String key) {
1240fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart            mKey = key;
1250fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        }
1260fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart
1270fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        @Override
1280fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        public boolean saveValue(String key, String value) {
129dad21481f7856586e17c01b391a0329a11eab722Paul Stewart            if (key.equals(mKey)) {
1300fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart                mValue = value;
1310fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart            }
1320fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart            return true;
1330fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        }
1340fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart
1350fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        public String getValue() {
1360fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart            return mValue;
1370fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        }
1380fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    }
1390fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart
1400fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    private String getSupplicantEapMethod() {
1410fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        SupplicantConfigExtractor entryExtractor = new SupplicantConfigExtractor(
1420fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart                WifiEnterpriseConfig.EAP_KEY);
1430fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        mEnterpriseConfig.saveToSupplicant(entryExtractor);
1440fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        return entryExtractor.getValue();
1450fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    }
1460fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart
1470fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    private String getSupplicantPhase2Method() {
1480fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        SupplicantConfigExtractor entryExtractor = new SupplicantConfigExtractor(
1490fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart                WifiEnterpriseConfig.PHASE2_KEY);
1500fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        mEnterpriseConfig.saveToSupplicant(entryExtractor);
1510fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        return entryExtractor.getValue();
1520fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    }
1530fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart
1540fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    /** Verifies the default value for EAP outer and inner methods */
1550fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    @Test
1560fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    public void eapInnerDefault() {
1570fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        assertEquals(null, getSupplicantEapMethod());
1580fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        assertEquals(null, getSupplicantPhase2Method());
1590fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    }
1600fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart
1610fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    /** Verifies that the EAP inner method is reset when we switch to TLS */
1620fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    @Test
1630fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    public void eapPhase2MethodForTls() {
1640fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        // Initially select an EAP method that supports an phase2.
1650fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        mEnterpriseConfig.setEapMethod(Eap.PEAP);
1660fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        mEnterpriseConfig.setPhase2Method(Phase2.MSCHAPV2);
1670fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        assertEquals("PEAP", getSupplicantEapMethod());
1680fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        assertEquals("\"auth=MSCHAPV2\"", getSupplicantPhase2Method());
1690fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart
1700fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        // Change the EAP method to another type which supports a phase2.
1710fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        mEnterpriseConfig.setEapMethod(Eap.TTLS);
1720fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        assertEquals("TTLS", getSupplicantEapMethod());
1730fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        assertEquals("\"auth=MSCHAPV2\"", getSupplicantPhase2Method());
1740fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart
1750fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        // Change the EAP method to TLS which does not support a phase2.
1760fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        mEnterpriseConfig.setEapMethod(Eap.TLS);
1770fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        assertEquals(null, getSupplicantPhase2Method());
1780fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    }
1790fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart
1800fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    /** Verfies that the EAP inner method is reset when we switch phase2 to NONE */
1810fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    @Test
1820fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    public void eapPhase2None() {
1830fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        // Initially select an EAP method that supports an phase2.
1840fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        mEnterpriseConfig.setEapMethod(Eap.PEAP);
1850fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        mEnterpriseConfig.setPhase2Method(Phase2.MSCHAPV2);
1860fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        assertEquals("PEAP", getSupplicantEapMethod());
1870fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        assertEquals("\"auth=MSCHAPV2\"", getSupplicantPhase2Method());
1880fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart
1890fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        // Change the phase2 method to NONE and ensure the value is cleared.
1900fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        mEnterpriseConfig.setPhase2Method(Phase2.NONE);
1910fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        assertEquals(null, getSupplicantPhase2Method());
1920fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    }
1930fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart
1940fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    /** Verfies that the correct "autheap" parameter is supplied for TTLS/GTC. */
1950fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    @Test
1960fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    public void peapGtcToTtls() {
1970fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        mEnterpriseConfig.setEapMethod(Eap.PEAP);
1980fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        mEnterpriseConfig.setPhase2Method(Phase2.GTC);
1990fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        assertEquals("PEAP", getSupplicantEapMethod());
2000fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        assertEquals("\"auth=GTC\"", getSupplicantPhase2Method());
2010fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart
2020fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        mEnterpriseConfig.setEapMethod(Eap.TTLS);
2030fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        assertEquals("TTLS", getSupplicantEapMethod());
2040fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        assertEquals("\"autheap=GTC\"", getSupplicantPhase2Method());
2050fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    }
2060fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart
2070fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    /** Verfies that the correct "auth" parameter is supplied for PEAP/GTC. */
2080fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    @Test
2090fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    public void ttlsGtcToPeap() {
2100fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        mEnterpriseConfig.setEapMethod(Eap.TTLS);
2110fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        mEnterpriseConfig.setPhase2Method(Phase2.GTC);
2120fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        assertEquals("TTLS", getSupplicantEapMethod());
2130fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        assertEquals("\"autheap=GTC\"", getSupplicantPhase2Method());
2140fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart
2150fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        mEnterpriseConfig.setEapMethod(Eap.PEAP);
2160fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        assertEquals("PEAP", getSupplicantEapMethod());
2170fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        assertEquals("\"auth=GTC\"", getSupplicantPhase2Method());
2180fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    }
2190fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart
2200fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    /** Verfies that the copy constructor preseves the inner method information. */
2210fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    @Test
2220fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    public void copyConstructor() {
2230fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        WifiEnterpriseConfig enterpriseConfig = new WifiEnterpriseConfig();
2240fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        enterpriseConfig.setEapMethod(Eap.TTLS);
2250fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        enterpriseConfig.setPhase2Method(Phase2.GTC);
2260fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        mEnterpriseConfig = new WifiEnterpriseConfig(enterpriseConfig);
2270fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        assertEquals("TTLS", getSupplicantEapMethod());
2280fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        assertEquals("\"autheap=GTC\"", getSupplicantPhase2Method());
2290fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    }
2300fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart
2310fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    /** Verfies that parceling a WifiEnterpriseConfig preseves method information. */
2320fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    @Test
2330fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    public void parcelConstructor() {
2340fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        WifiEnterpriseConfig enterpriseConfig = new WifiEnterpriseConfig();
2350fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        enterpriseConfig.setEapMethod(Eap.TTLS);
2360fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        enterpriseConfig.setPhase2Method(Phase2.GTC);
2370fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        Parcel parcel = Parcel.obtain();
2380fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        enterpriseConfig.writeToParcel(parcel, 0);
2390fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        parcel.setDataPosition(0);  // Allow parcel to be read from the beginning.
2400fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        mEnterpriseConfig = WifiEnterpriseConfig.CREATOR.createFromParcel(parcel);
2410fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        assertEquals("TTLS", getSupplicantEapMethod());
2420fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        assertEquals("\"autheap=GTC\"", getSupplicantPhase2Method());
2430fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    }
2440fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart
2450fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    /** Verifies proper operation of the getKeyId() method. */
2460fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    @Test
2470fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    public void getKeyId() {
2480fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        assertEquals("NULL", mEnterpriseConfig.getKeyId(null));
2490fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        WifiEnterpriseConfig enterpriseConfig = new WifiEnterpriseConfig();
2500fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        enterpriseConfig.setEapMethod(Eap.TTLS);
2510fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        enterpriseConfig.setPhase2Method(Phase2.GTC);
2520fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        assertEquals("TTLS_GTC", mEnterpriseConfig.getKeyId(enterpriseConfig));
2530fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        mEnterpriseConfig.setEapMethod(Eap.PEAP);
2540fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        mEnterpriseConfig.setPhase2Method(Phase2.MSCHAPV2);
2550fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart        assertEquals("PEAP_MSCHAPV2", mEnterpriseConfig.getKeyId(enterpriseConfig));
2560fa719c7706dc6e447d16543518d4ecb269b91d0Paul Stewart    }
2578f86598c612698b39cad15b4a0f03619d05fd7d6Paul Stewart
2588f86598c612698b39cad15b4a0f03619d05fd7d6Paul Stewart    /** Verifies that passwords are not displayed in toString. */
2598f86598c612698b39cad15b4a0f03619d05fd7d6Paul Stewart    @Test
2608f86598c612698b39cad15b4a0f03619d05fd7d6Paul Stewart    public void passwordNotInToString() {
2618f86598c612698b39cad15b4a0f03619d05fd7d6Paul Stewart        String password = "supersecret";
2628f86598c612698b39cad15b4a0f03619d05fd7d6Paul Stewart        mEnterpriseConfig.setPassword(password);
2638f86598c612698b39cad15b4a0f03619d05fd7d6Paul Stewart        assertFalse(mEnterpriseConfig.toString().contains(password));
2648f86598c612698b39cad15b4a0f03619d05fd7d6Paul Stewart    }
26578463be32c01259841f4c0b670b742c3c2040cf3Rubin Xu}
266