/* * Copyright (C) 2019 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 android.net.eap; import static android.net.eap.EapSessionConfig.DEFAULT_IDENTITY; import static android.telephony.TelephonyManager.APPTYPE_USIM; import static com.android.internal.net.eap.message.EapData.EAP_TYPE_AKA; import static com.android.internal.net.eap.message.EapData.EAP_TYPE_AKA_PRIME; import static com.android.internal.net.eap.message.EapData.EAP_TYPE_MSCHAP_V2; import static com.android.internal.net.eap.message.EapData.EAP_TYPE_SIM; import static org.junit.Assert.assertArrayEquals; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import android.net.eap.EapSessionConfig.EapAkaConfig; import android.net.eap.EapSessionConfig.EapAkaPrimeConfig; import android.net.eap.EapSessionConfig.EapMethodConfig; import android.net.eap.EapSessionConfig.EapMsChapV2Config; import android.net.eap.EapSessionConfig.EapSimConfig; import org.junit.Test; import java.nio.charset.StandardCharsets; public class EapSessionConfigTest { private static final byte[] EAP_IDENTITY = "test@android.net".getBytes(StandardCharsets.US_ASCII); private static final int SUB_ID = 1; private static final String NETWORK_NAME = "android.net"; private static final boolean ALLOW_MISMATCHED_NETWORK_NAMES = true; private static final String USERNAME = "username"; private static final String PASSWORD = "password"; @Test public void testBuildEapSim() { EapSessionConfig result = new EapSessionConfig.Builder() .setEapIdentity(EAP_IDENTITY) .setEapSimConfig(SUB_ID, APPTYPE_USIM) .build(); assertArrayEquals(EAP_IDENTITY, result.eapIdentity); EapMethodConfig eapMethodConfig = result.eapConfigs.get(EAP_TYPE_SIM); assertEquals(EAP_TYPE_SIM, eapMethodConfig.methodType); EapSimConfig eapSimConfig = (EapSimConfig) eapMethodConfig; assertEquals(SUB_ID, eapSimConfig.subId); assertEquals(APPTYPE_USIM, eapSimConfig.apptype); } @Test public void testBuildEapAka() { EapSessionConfig result = new EapSessionConfig.Builder() .setEapAkaConfig(SUB_ID, APPTYPE_USIM) .build(); assertArrayEquals(DEFAULT_IDENTITY, result.eapIdentity); EapMethodConfig eapMethodConfig = result.eapConfigs.get(EAP_TYPE_AKA); EapAkaConfig eapAkaConfig = (EapAkaConfig) eapMethodConfig; assertEquals(SUB_ID, eapAkaConfig.subId); assertEquals(APPTYPE_USIM, eapAkaConfig.apptype); } @Test public void testBuildEapAkaPrime() { EapSessionConfig result = new EapSessionConfig.Builder() .setEapAkaPrimeConfig( SUB_ID, APPTYPE_USIM, NETWORK_NAME, ALLOW_MISMATCHED_NETWORK_NAMES) .build(); assertEquals(DEFAULT_IDENTITY, result.eapIdentity); EapMethodConfig eapMethodConfig = result.eapConfigs.get(EAP_TYPE_AKA_PRIME); EapAkaPrimeConfig eapAkaPrimeConfig = (EapAkaPrimeConfig) eapMethodConfig; assertEquals(SUB_ID, eapAkaPrimeConfig.subId); assertEquals(APPTYPE_USIM, eapAkaPrimeConfig.apptype); assertEquals(NETWORK_NAME, eapAkaPrimeConfig.networkName); assertTrue(eapAkaPrimeConfig.allowMismatchedNetworkNames); } @Test public void testBuildEapMsChapV2() { EapSessionConfig result = new EapSessionConfig.Builder().setEapMsChapV2Config(USERNAME, PASSWORD).build(); EapMsChapV2Config config = (EapMsChapV2Config) result.eapConfigs.get(EAP_TYPE_MSCHAP_V2); assertEquals(USERNAME, config.username); assertEquals(PASSWORD, config.password); } @Test public void testBuildWithoutConfigs() { try { new EapSessionConfig.Builder().build(); fail("build() should throw an IllegalStateException if no EAP methods are configured"); } catch (IllegalStateException expected) { } } }