blob: 3122872dbc289ac4ea160debae8082f169881ecd [file] [log] [blame]
/*
* Copyright 2016, The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.managedprovisioning.task.wifi;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertTrue;
import android.net.IpConfiguration;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiEnterpriseConfig;
import androidx.test.filters.SmallTest;
import com.android.managedprovisioning.model.WifiInfo;
import org.junit.Test;
import java.security.cert.CertificateEncodingException;
import java.security.cert.X509Certificate;
import java.util.Base64;
/**
* Unit test for {@link WifiConfigurationProvider}.
*/
@SmallTest
public class WifiConfigurationProviderTest {
private static final String TEST_SSID = "test_ssid";
private static final boolean TEST_HIDDEN = true;
private static final String TEST_PAC_URL = "test.pac.url";
private static final String TEST_PROXY_BYPASS_HOST = "testProxyBypassHost";
private static final String TEST_PROXY_HOST = "TestProxyHost";
private static final int TEST_PROXY_PORT = 1234;
private static final String TEST_PASSWORD = "testPassword";
private static final String TEST_PASSWORD_WEP = "0123456789"; // length needs to be 10
/*
* Taken from:
* https://g3doc.corp.google.com/company/teams/clouddpc/documents/policy/sample_policy_jsons.md?cl=head#with-eap
*/
private static final String TEST_CA_CERT = "MIIDKDCCAhCgAwIBAgIJAOM5SzKO2pzCMA0GCSqGSIb3DQEBCwUAMBIxEDAOBgNVBAMTB0VBUCBDQTAwHhcNMTYwMTEyMDAxMDQ3WhcNMjYwMTA5MDAxMDQ3WjASMRAwDgYDVQQDEwdFQVAgQ0EwMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA89ug+IEKVQXnJGKg5g4uVHg6J/8iRUxR5k2eH5o03hrJNMfN2D+cBe/wCiZcnWbIGbGZACWm2nQth2wy9Zgm2LOd3b4ocrHYls3XLq6Qb5Dd7a0JKU7pdGufiNVEkrmFEB+N64wgwH4COTvCiN4erp5kyJwkfqAl2xLkZo0C464c9XoyQOXbmYD9A8v10wZujyNsEo7Nr2USyw+qhjWSbFbEirP77Tvx+7pJQJwdtk1V9Tn73T2dGF2WHYejei9SmcWpdIUqsu9etYH+zDmtu7I1xlkwiaVsNr2+D+qaCJyOYqrDTKVNK5nmbBPXDWZcNoDbTOoqquX7xONpq9M6jQIDAQABo4GAMH4wHQYDVR0OBBYEFAZ3A2S4qJZZwuNYwkJ6mAdc0gVdMEIGA1UdIwQ7MDmAFAZ3A2S4qJZZwuNYwkJ6mAdc0gVdoRakFDASMRAwDgYDVQQDEwdFQVAgQ0EwggkA4zlLMo7anMIwDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAQYwDQYJKoZIhvcNAQELBQADggEBAHmdMwEhtys4d0E+t7owBmoVR+lUhMCcRtWs8YKX5WIM2kTweT0h/O1xwE1mWmRv/IbDAEb8od4BjAQLhIcolStr2JaO9ZzyxjOnNzqeErh/1DHDbb/moPpqfeJ8YiEz7nH/YU56Q8iCPO7TsgS0sNNE7PfNIUsBW0yHRgpQ4OxWmiZG2YZWiECRzAC0ecPzo59N5iH4vLQIMTMYquiDeMPQnn1eNDGxG8gCtDKIaS6tMg3a28MvWB094pr2ETou8O1C8Ji0Y4hE8QJmSdT7I4+GZjgWg94DZ5RiL7sdp3vC48CXOmeT61YBIvhGUsE1rPhXqkpqQ3Z3C4TFF0jXZZc=";
private static final String TEST_USER_CERT_STRING_INPUT = "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";
private static final String TEST_USER_CERT_PRIVATE_KEY_OUTPUT = "MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCcU7DyIza/CXITb7twAM8IXoNGb8gkR0mBB71riLh6Kp9DWACndgoJEMrwwN2QecbZLBsytHfaSGeG+cROWFFHGVcAtwvyT+EBPdJl7cSWB8Sx5xK2JnsIPhYLdvkvjecJvwih3Ajciyr1PYdUG4iZIwk7Yhiq7S7E/dEZ0Rmjf5CAg3kcQCtfHkIzG75Jml1xVsgCNW9+K86/jC2TIwq7zboOZYjVUKGpBtsXL4BGMo1IdU79SXB1PuEEPy88oeARmcPXPbfcsQjhnB0jlM5TegMvVVF9ro+C7yu835CNOG1KoAhJt+7NGhmZC+3OzxcuVqbqqK+PimYEmuBgGCbvAgMBAAECggEAMltHOYicXwd05svsLhUkm8aONQdXClCoXdcXbmdZPYkzSmcztr3wV6FALjOCa8K+ikCJ9lhp7ze5maIlWTNb4zJHc2SDhaezjEnU156y371a4A/WWDSnFy2gvkqx1F66mMofxrvxYtG1odATIsXHx8Sgea+M0KqckTpNvCo+PwscoOjuNsasH+2x5mhUQmwXpoWZR+XrSWINqcpEl+ILGcUqeRNu4qh4oLQOegtxuhQxZI8XCbSFLr59vSx9OXapqX4+sUlGnus+58pXPxEw16MddaggSTH85xeNZlHC43RuJMq94sleaOPoCnFrKuvBL4SRUzYz9XI4bHDoWmR4cQKBgQDMSh4he7k41Yi+e2lQR6SYduRPgREHcC0rAsSH+NhU/rtcC0SUrMLCrskMXsqPFSXpbLlLw+nYj+vFZ7e1s2bq6MyTeO/bDJM+3m9L0/MNmd2g5xbW6JZXUgJOa49XkgkXD8fwoWFoDg3jL5RlkQ83xPf9cnxEs5/N+PA2vIjj2QKBgQDD5Z2Cm0QC0N12YJcmPytzuV+85CbUWgj7m2iuOQS3dnf+12oNUc3GCAuKnghS2eLMYCYM8JijHyKSfYsk6zNgjHgoEUcb+hZesYmML41hsVQ+L0sBjqb1OnBegGLSaeUXhYtDedSKkzgZR7nLorC/89TutrcIMOI9jO4KEHHMBwKBgQCpOLASzljUklUubC4FeQMH5Fwk22XOwoY3vZgshd41MbjjetX5Tc4a1Avn+lFSCpOX8x7ees+nOzhzEgIkOhKDfgmQEzqkOZtzFXAd4NjRqGXk1eeeZ5W5iU4txX08bdSnzMOzOQrl1dZ9HTmQlIOFj9xYjlAP3LcAODhLLws5qQKBgQCcq8FDOWY1UlIsYKfCAPeBgBpfeaDMaI2SnQIlhJiPGgJyIFpC+M+3t6tzW1yQ1o2aorML2khY/Yeq3Rkxl6Hpb66RbPAQIf1OEnNNWKKcJTSY3z3/qtVAf1JrYgam/eYo37c3afJgOcm9/i1L/XuaqSn9GMhdlqr6SwH9rpU0dQKBgQCVaTwnzQHIk6GtzY5M9WayUhR79mZ7f2PutOf2gVviptJA/RenqR+S3JvPny4zcOYS3YxF7jL8sbHyraxlcxUom3/njHSb+Z/BYqY3i7S/T8IwXzkHHxHlNT8HcvG4iNO89o38+Oh1efG40iREDTfKmuv/FvAA4Cfp2/sMAUxMFA==";
private static final String TEST_USER_CERT_CHAIN_OUTPUT = "MIIDMTCCAhmgAwIBAgIBAjANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDEwdFQVAgQ0EwMB4XDTE2MDIxNTE2NDUzNVoXDTI2MDIxMjE2NDUzNVowEDEOMAwGA1UEAxMFdXNlcjAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCcU7DyIza/CXITb7twAM8IXoNGb8gkR0mBB71riLh6Kp9DWACndgoJEMrwwN2QecbZLBsytHfaSGeG+cROWFFHGVcAtwvyT+EBPdJl7cSWB8Sx5xK2JnsIPhYLdvkvjecJvwih3Ajciyr1PYdUG4iZIwk7Yhiq7S7E/dEZ0Rmjf5CAg3kcQCtfHkIzG75Jml1xVsgCNW9+K86/jC2TIwq7zboOZYjVUKGpBtsXL4BGMo1IdU79SXB1PuEEPy88oeARmcPXPbfcsQjhnB0jlM5TegMvVVF9ro+C7yu835CNOG1KoAhJt+7NGhmZC+3OzxcuVqbqqK+PimYEmuBgGCbvAgMBAAGjgZMwgZAwCQYDVR0TBAIwADAdBgNVHQ4EFgQUq+JLbJFNWLo/CTOjSdzzj8NfeIcwQgYDVR0jBDswOYAUBncDZLiollnC41jCQnqYB1zSBV2hFqQUMBIxEDAOBgNVBAMTB0VBUCBDQTCCCQDjOUsyjtqcwjATBgNVHSUEDDAKBggrBgEFBQcDAjALBgNVHQ8EBAMCB4AwDQYJKoZIhvcNAQELBQADggEBAEjDSRnJptUoNZooQJfjaxEH5uv16SChU/0sgk4HfM0YAR/LTTO0XhHGvueMk72gVc3KARIv6m2cLYDhEJ7xvyb/b6PkMchHFzXqk2cxJw01OpwYmouR58MZqRAJm5xicriBtLy11Mx7YEeSSZGKLlDEAT7B1UXw7dodHS0AFZbLT2N8w31PpYMopAPkdc/4DGwDuDvK/QGQ9Xjebn+m0muOPRTgKEyS0/jfkoVEML1K+a2wQA4udk+Si1DEvZETXkEEYxX7l9auUUXmRec7WWO9BY2VDvHyproMDbQndXxy3EC/RH/noS39IItdBeame9CQ5yvlaDBaoqN6tScetUc=";
private static final String TEST_USER_CERT_NON_X509 = "/u3+7QAAAAIAAAABAAAAAQADYWJjAAABZjmySqMAAAK8MIICuDAOBgorBgEEASoCEQEBBQAEggKk9B93ViQJqk1DOwD/AFiljxR//AoKOEl0XPC6SFadj7x8j3M6FwbALo2lGWHMYnxHU7uVPJ8iSynGWiD+5WcaXA9+xlUmvpI7WgrQ7Dek+r8mLddkvGorqzI1CjJcDIHEmio3WhnM1X8MnBlrKggFP/FKsdE27oirq2YbcH7SEtvsAJNaqHZp7ZkG38AYcZH+V+4hhxDk/VJo3EZeJPcnLVASUyM69t6cTOo0wqOTZjeOytSAwVgKjM2FG/ZkqGgfmP2/BzPbUk0e7amTxCQDYRLsn/KkVdKOq8AoIESGGeaS7bt9p6/wRayp1t3ykAyQipIGlY7aiaMAsXxbdc//MTO4yrt45VEsLGzVaayRRzMD3pITvkz5ZWvuJGQLneKqCFdIzGJPC5tkWmiTWa9WA7+RKVmGgV1loqS86Uzur19N/wrLH56nVWlAVjKknBW8ly5xJF7AAgK3/u3bKSVA50XkO6i1lEsz9FCU4KU3Mx2MVv10NIysXcpecx8LpkZ2gLLm+2Y7exaIqUn239oLJEHhVGgmLAL2avQ3Vd+glKBfgyoScpbWqpFkWD1Qm4UeseZi+XG/77g0+dvniX5SXDbTdZH+uH/AcZnOVMxLGSY9+53jWsMXYvPsnlxEvMVRhsLgwsEdzrqI7uI2XFRj0wSDFthRO9zq0EU2K1BZtwvcILdmmwP2jCBoXDd8vm37K99oPSXjMwJC+XhkxY3K3BGyQp1vUNdtixma1m+ONApFwpgFkSr3vwJOfDlmN2heP4z9OeJWNp0KIBg/SbXeemiIYbzlWmVTmNIQBhzbWL7GQSVjQLmkcZ6oOL4eeBZIPvhfNqEHwEJYYzMf1GVMecJ8aQI5JQx2/ObZ7pUiJukW3PCBVfOzQ7CrpD6WXaLdwBlLmQAAAAEABHRlc3QAAAACAQILu3qeGs7aEjgBWSGbNW1kiGBc3g==";
private static final String TEST_IDENTITY = "TestUser";
private static final String TEST_ANONYMOUS_IDENTITY = "TestAUser";
private static final String TEST_DOMAIN = "google.com";
private static final String TEST_SECURITY_TYPE = "EAP";
private static final WifiInfo.Builder BASE_BUILDER = new WifiInfo.Builder()
.setSsid(TEST_SSID)
.setHidden(TEST_HIDDEN);
private static final WifiInfo WIFI_INFO_WPA = BASE_BUILDER
.setSecurityType(WifiConfigurationProvider.WPA)
.setPassword(TEST_PASSWORD)
.build();
private static final WifiInfo WIFI_INFO_WEP = BASE_BUILDER
.setSecurityType(WifiConfigurationProvider.WEP)
.setPassword(TEST_PASSWORD)
.build();
private static final WifiInfo WIFI_INFO_WEP_2 = BASE_BUILDER
.setSecurityType(WifiConfigurationProvider.WEP)
.setPassword(TEST_PASSWORD_WEP)
.build();
private static final WifiInfo WIFI_INFO_NONE = BASE_BUILDER
.setSecurityType(WifiConfigurationProvider.NONE)
.build();
private static final WifiInfo WIFI_INFO_NULL = BASE_BUILDER
.build();
private static final WifiInfo WIFI_INFO_PAC = BASE_BUILDER
.setPacUrl(TEST_PAC_URL)
.build();
private static final WifiInfo WIFI_INFO_PROXY = BASE_BUILDER
.setProxyBypassHosts(TEST_PROXY_BYPASS_HOST)
.setProxyHost(TEST_PROXY_HOST)
.setProxyPort(TEST_PROXY_PORT)
.build();
private static final WifiInfo.Builder BASE_EAP_BUILDER = new WifiInfo.Builder()
.setSsid(TEST_SSID)
.setHidden(TEST_HIDDEN)
.setSecurityType(TEST_SECURITY_TYPE);
private final WifiConfigurationProvider mProvider = new WifiConfigurationProvider();
@Test
public void testWpa() {
WifiConfiguration wifiConf = mProvider.generateWifiConfiguration(WIFI_INFO_WPA);
assertBase(wifiConf);
assertTrue(wifiConf.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.WPA_PSK));
assertTrue(wifiConf.allowedProtocols.get(WifiConfiguration.Protocol.WPA));
assertEquals("\"" + TEST_PASSWORD + "\"", wifiConf.preSharedKey);
assertEquals(IpConfiguration.ProxySettings.UNASSIGNED, wifiConf.getProxySettings());
}
@Test
public void testWep() {
WifiConfiguration wifiConf = mProvider.generateWifiConfiguration(WIFI_INFO_WEP);
assertBase(wifiConf);
assertTrue(wifiConf.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.NONE));
assertEquals("\"" + TEST_PASSWORD + "\"", wifiConf.wepKeys[0]);
assertEquals(IpConfiguration.ProxySettings.UNASSIGNED, wifiConf.getProxySettings());
}
@Test
public void testWep2() {
WifiConfiguration wifiConf = mProvider.generateWifiConfiguration(WIFI_INFO_WEP_2);
assertBase(wifiConf);
assertTrue(wifiConf.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.NONE));
assertEquals(TEST_PASSWORD_WEP, wifiConf.wepKeys[0]);
assertEquals(IpConfiguration.ProxySettings.UNASSIGNED, wifiConf.getProxySettings());
}
@Test
public void testNone() {
WifiConfiguration wifiConf = mProvider.generateWifiConfiguration(WIFI_INFO_NONE);
assertBase(wifiConf);
assertTrue(wifiConf.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.NONE));
assertTrue(wifiConf.allowedAuthAlgorithms.get(WifiConfiguration.AuthAlgorithm.OPEN));
assertEquals(IpConfiguration.ProxySettings.UNASSIGNED, wifiConf.getProxySettings());
}
@Test
public void testNull() {
WifiConfiguration wifiConf = mProvider.generateWifiConfiguration(WIFI_INFO_NULL);
assertBase(wifiConf);
assertTrue(wifiConf.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.NONE));
assertTrue(wifiConf.allowedAuthAlgorithms.get(WifiConfiguration.AuthAlgorithm.OPEN));
assertEquals(IpConfiguration.ProxySettings.UNASSIGNED, wifiConf.getProxySettings());
}
@Test
public void testPac() {
WifiConfiguration wifiConf = mProvider.generateWifiConfiguration(WIFI_INFO_PAC);
assertBase(wifiConf);
assertEquals(IpConfiguration.ProxySettings.PAC, wifiConf.getProxySettings());
}
@Test
public void testStaticProxy() {
WifiConfiguration wifiConf = mProvider.generateWifiConfiguration(WIFI_INFO_PROXY);
assertBase(wifiConf);
assertEquals(IpConfiguration.ProxySettings.STATIC, wifiConf.getProxySettings());
}
@Test
public void testEAP_returnsCorrectKeyManagement() {
WifiConfiguration wifiConf = mProvider.generateWifiConfiguration(
buildBaseTestWifiInfoForEAP());
assertEAPAllowedKeyManagement(wifiConf);
}
@Test
public void testEAP_returnsCorrectEnterpriseConfig() {
WifiConfiguration wifiConf = mProvider.generateWifiConfiguration(
buildTestWifiInfoForEAPWithCertificates(
TEST_PASSWORD, TEST_IDENTITY, TEST_ANONYMOUS_IDENTITY, TEST_DOMAIN,
TEST_CA_CERT, TEST_USER_CERT_STRING_INPUT));
assertEnterpriseConfig(
wifiConf, TEST_PASSWORD, TEST_IDENTITY, TEST_ANONYMOUS_IDENTITY, TEST_DOMAIN,
TEST_CA_CERT, TEST_USER_CERT_CHAIN_OUTPUT, TEST_USER_CERT_PRIVATE_KEY_OUTPUT);
}
@Test
public void testEAP_noCertificates_returnsCorrectEnterpriseConfig() {
WifiConfiguration wifiConf = mProvider.generateWifiConfiguration(
buildTestWifiInfoForEAPWithCertificates(
TEST_PASSWORD, TEST_IDENTITY, TEST_ANONYMOUS_IDENTITY, TEST_DOMAIN,
/* caCertificate= */null, /* userCertificate= */null));
assertEnterpriseConfigWithoutCertificates(
wifiConf, TEST_PASSWORD, TEST_IDENTITY, TEST_ANONYMOUS_IDENTITY, TEST_DOMAIN);
}
@Test
public void testEAP_invalidCACertificate() {
WifiConfiguration wifiConf = mProvider.generateWifiConfiguration(
buildTestWifiInfoForEAPWithCertificates(
TEST_PASSWORD, TEST_IDENTITY, TEST_ANONYMOUS_IDENTITY, TEST_DOMAIN,
/* caCertificate= */"random", /* userCertificate= */null));
assertEmptyEnterpriseConfig(wifiConf);
}
@Test
public void testEAP_invalidUserCertificate() {
WifiConfiguration wifiConf = mProvider.generateWifiConfiguration(
buildTestWifiInfoForEAPWithCertificates(
TEST_PASSWORD, TEST_IDENTITY, TEST_ANONYMOUS_IDENTITY, TEST_DOMAIN,
/* caCertificate= */null, /* userCertificate= */"random"));
assertEmptyEnterpriseConfig(wifiConf);
}
@Test
public void testEAP_nonX509Cert() {
WifiConfiguration wifiConf = mProvider.generateWifiConfiguration(
buildTestWifiInfoForEAPWithCertificates(
TEST_PASSWORD, TEST_IDENTITY, TEST_ANONYMOUS_IDENTITY, TEST_DOMAIN,
/* caCertificate= */null, TEST_USER_CERT_NON_X509));
assertEmptyEnterpriseConfig(wifiConf);
}
@Test
public void testEAP_PEAP_PAP() {
WifiConfiguration wifiConf = mProvider.generateWifiConfiguration(
buildTestWifiInfoForEAPJustAuthMethods("PEAP", "PAP"));
assertEAP_MethodAndPhase2Auth(
wifiConf, WifiEnterpriseConfig.Eap.PEAP, WifiEnterpriseConfig.Phase2.PAP);
}
@Test
public void testEAP_PEAP_NONE() {
WifiConfiguration wifiConf = mProvider.generateWifiConfiguration(
buildTestWifiInfoForEAPJustAuthMethods("PEAP", "NONE"));
assertEAP_MethodAndPhase2Auth(
wifiConf, WifiEnterpriseConfig.Eap.PEAP, WifiEnterpriseConfig.Phase2.NONE);
}
@Test
public void testEAP_Phase2_Empty() {
WifiConfiguration wifiConf = mProvider.generateWifiConfiguration(
buildTestWifiInfoForEAPJustAuthMethods("PEAP", ""));
assertEAP_MethodAndPhase2Auth(
wifiConf, WifiEnterpriseConfig.Eap.PEAP, WifiEnterpriseConfig.Phase2.NONE);
}
@Test
public void testEAP_Phase2_Null() {
WifiConfiguration wifiConf = mProvider.generateWifiConfiguration(
buildTestWifiInfoForEAPJustAuthMethods("PEAP", null));
assertEAP_MethodAndPhase2Auth(
wifiConf, WifiEnterpriseConfig.Eap.PEAP, WifiEnterpriseConfig.Phase2.NONE);
}
@Test
public void testEAP_TLS_MSCHAP() {
WifiConfiguration wifiConf = mProvider.generateWifiConfiguration(
buildTestWifiInfoForEAPJustAuthMethods("TLS", "MSCHAP"));
assertEAP_MethodAndPhase2Auth(
wifiConf, WifiEnterpriseConfig.Eap.TLS, WifiEnterpriseConfig.Phase2.MSCHAP);
}
@Test
public void testEAP_TTLS_MSCHAPV2() {
WifiConfiguration wifiConf = mProvider.generateWifiConfiguration(
buildTestWifiInfoForEAPJustAuthMethods("TTLS", "MSCHAPV2"));
assertEAP_MethodAndPhase2Auth(
wifiConf, WifiEnterpriseConfig.Eap.TTLS, WifiEnterpriseConfig.Phase2.MSCHAPV2);
}
@Test
public void testEAP_PWD_GTC() {
WifiConfiguration wifiConf = mProvider.generateWifiConfiguration(
buildTestWifiInfoForEAPJustAuthMethods("PWD", "GTC"));
assertEAP_MethodAndPhase2Auth(
wifiConf, WifiEnterpriseConfig.Eap.PWD, WifiEnterpriseConfig.Phase2.GTC);
}
@Test
public void testEAP_SIM_SIM() {
WifiConfiguration wifiConf = mProvider.generateWifiConfiguration(
buildTestWifiInfoForEAPJustAuthMethods("SIM", "SIM"));
assertEAP_MethodAndPhase2Auth(
wifiConf, WifiEnterpriseConfig.Eap.SIM, WifiEnterpriseConfig.Phase2.SIM);
}
@Test
public void testEAP_AKA_AKA() {
WifiConfiguration wifiConf = mProvider.generateWifiConfiguration(
buildTestWifiInfoForEAPJustAuthMethods("AKA", "AKA"));
assertEAP_MethodAndPhase2Auth(
wifiConf, WifiEnterpriseConfig.Eap.AKA, WifiEnterpriseConfig.Phase2.AKA);
}
@Test
public void testEAP_AKA_PRIME_AKA_PRIME() {
WifiConfiguration wifiConf = mProvider.generateWifiConfiguration(
buildTestWifiInfoForEAPJustAuthMethods("AKA_PRIME", "AKA_PRIME"));
assertEAP_MethodAndPhase2Auth(
wifiConf, WifiEnterpriseConfig.Eap.AKA_PRIME,
WifiEnterpriseConfig.Phase2.AKA_PRIME);
}
@Test
public void testEAPWithInvalidEAPMethod() {
WifiConfiguration wifiConf = mProvider.generateWifiConfiguration(
buildTestWifiInfoForEAPJustAuthMethods("ABC", "PAP"));
assertEAP_MethodAndPhase2Auth(wifiConf, WifiEnterpriseConfig.Eap.NONE,
WifiEnterpriseConfig.Phase2.NONE);
}
@Test
public void testEAPWithInvalidPhase2Auth() {
WifiConfiguration wifiConf = mProvider.generateWifiConfiguration(
buildTestWifiInfoForEAPJustAuthMethods("PEAP", "ABC"));
assertEAP_MethodAndPhase2Auth(wifiConf, WifiEnterpriseConfig.Eap.NONE,
WifiEnterpriseConfig.Phase2.NONE);
}
private WifiInfo buildBaseTestWifiInfoForEAP() {
return buildTestWifiInfoForEAPWithCertificates(
TEST_PASSWORD, TEST_IDENTITY, TEST_ANONYMOUS_IDENTITY, TEST_DOMAIN,
/* caCertificate= */null, /* userCertificate= */null);
}
private WifiInfo buildTestWifiInfoForEAPJustAuthMethods(String eapMethod, String phase2Auth) {
return BASE_EAP_BUILDER
.setEapMethod(eapMethod)
.setPhase2Auth(phase2Auth)
.setCaCertificate(null)
.setUserCertificate(null)
.build();
}
private WifiInfo buildTestWifiInfoForEAPWithCertificates(
String password, String identity, String anonymousIdentity, String domain,
String caCertificate, String userCertificate) {
return BASE_EAP_BUILDER
.setEapMethod("PEAP")
.setPhase2Auth("")
.setPassword(password)
.setIdentity(identity)
.setAnonymousIdentity(anonymousIdentity)
.setDomain(domain)
.setCaCertificate(caCertificate)
.setUserCertificate(userCertificate)
.build();
}
private void assertBase(WifiConfiguration wifiConf) {
assertEquals(TEST_SSID, wifiConf.SSID);
assertEquals(TEST_HIDDEN, wifiConf.hiddenSSID);
assertEquals(WifiConfiguration.Status.ENABLED, wifiConf.status);
assertEquals(WifiConfiguration.USER_APPROVED, wifiConf.userApproved);
}
private void assertEnterpriseConfig(WifiConfiguration wifiConf,
String password, String identity, String anonymousIdentity, String domain,
String caCertificate, String userCertificate, String privateKey) {
assertEnterpriseConfigBase(wifiConf, password, identity, anonymousIdentity, domain);
assertCertificateInformation(wifiConf, caCertificate, userCertificate, privateKey);
}
private void assertEnterpriseConfigWithoutCertificates(WifiConfiguration wifiConf,
String password, String identity, String anonymousIdentity, String domain) {
assertEnterpriseConfigBase(wifiConf, password, identity, anonymousIdentity, domain);
assertEmptyCertificates(wifiConf);
}
private void assertEnterpriseConfigBase(WifiConfiguration wifiConf, String password,
String identity, String anonymousIdentity, String domain) {
assertNotEquals(null, wifiConf.enterpriseConfig);
assertEquals(password, wifiConf.enterpriseConfig.getPassword());
assertEquals(identity, wifiConf.enterpriseConfig.getIdentity());
assertEquals(anonymousIdentity, wifiConf.enterpriseConfig.getAnonymousIdentity());
assertEquals(domain, wifiConf.enterpriseConfig.getDomainSuffixMatch());
}
private void assertCertificateInformation(
WifiConfiguration wifiConf, String caCertificate, String userCertificate,
String privateKey) {
try {
assertEquals(caCertificate, Base64.getEncoder()
.encodeToString(wifiConf.enterpriseConfig.getCaCertificate().getEncoded()));
assertEquals(userCertificate, buildEncodedCertificateChain(
wifiConf.enterpriseConfig.getClientCertificateChain()));
assertEquals(privateKey, Base64.getEncoder()
.encodeToString(wifiConf.enterpriseConfig.getClientPrivateKey().getEncoded()));
} catch (CertificateEncodingException e) {
throw new IllegalArgumentException("Certificate cannot be encoded!");
}
}
private void assertEmptyEnterpriseConfig(WifiConfiguration wifiConf) {
assertEnterpriseConfigBase(wifiConf, "", "", "", "");
assertEmptyCertificates(wifiConf);
}
private void assertEmptyCertificates(WifiConfiguration wifiConf) {
assertEquals(null, wifiConf.enterpriseConfig.getCaCertificate());
assertEquals(null, wifiConf.enterpriseConfig.getClientPrivateKey());
assertEquals(null, wifiConf.enterpriseConfig.getClientCertificateChain());
}
private String buildEncodedCertificateChain(X509Certificate[] clientCertificateChain)
throws CertificateEncodingException {
StringBuilder encodedCertChain = new StringBuilder();
for (X509Certificate certificate: clientCertificateChain) {
encodedCertChain.append(Base64.getEncoder().encodeToString(certificate.getEncoded()));
}
return encodedCertChain.toString();
}
private void assertEAP_MethodAndPhase2Auth(
WifiConfiguration wifiConf, int eapMethod, int phase2Auth) {
assertEquals(eapMethod, wifiConf.enterpriseConfig.getEapMethod());
assertEquals(phase2Auth, wifiConf.enterpriseConfig.getPhase2Method());
}
private void assertEAPAllowedKeyManagement(WifiConfiguration wifiConf) {
assertTrue(wifiConf.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.IEEE8021X));
assertTrue(wifiConf.allowedKeyManagement.get(WifiConfiguration.KeyMgmt.WPA_EAP));
}
}