1 /* 2 * Copyright (C) 2021 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.net.vcn.persistablebundleutils; 18 19 import static android.telephony.TelephonyManager.APPTYPE_USIM; 20 21 import static org.junit.Assert.assertEquals; 22 23 import android.net.eap.EapSessionConfig; 24 import android.os.PersistableBundle; 25 26 import androidx.test.InstrumentationRegistry; 27 import androidx.test.filters.SmallTest; 28 import androidx.test.runner.AndroidJUnit4; 29 30 import org.junit.Test; 31 import org.junit.runner.RunWith; 32 33 import java.io.InputStream; 34 import java.nio.charset.StandardCharsets; 35 import java.security.cert.CertificateFactory; 36 import java.security.cert.X509Certificate; 37 38 @RunWith(AndroidJUnit4.class) 39 @SmallTest 40 public class EapSessionConfigUtilsTest { 41 private static final byte[] EAP_ID = "test@android.net".getBytes(StandardCharsets.US_ASCII); 42 private static final String USERNAME = "username"; 43 private static final String PASSWORD = "password"; 44 private static final int SUB_ID = 1; 45 private static final String NETWORK_NAME = "android.net"; 46 private static final boolean ALLOW_MISMATCHED_NETWORK_NAMES = true; 47 createBuilderWithId()48 private EapSessionConfig.Builder createBuilderWithId() { 49 return new EapSessionConfig.Builder().setEapIdentity(EAP_ID); 50 } 51 verifyPersistableBundleEncodeDecodeIsLossless(EapSessionConfig config)52 private static void verifyPersistableBundleEncodeDecodeIsLossless(EapSessionConfig config) { 53 final PersistableBundle bundle = EapSessionConfigUtils.toPersistableBundle(config); 54 final EapSessionConfig resultConfig = EapSessionConfigUtils.fromPersistableBundle(bundle); 55 56 assertEquals(config, resultConfig); 57 } 58 59 @Test testSetEapMsChapV2EncodeDecodeIsLossless()60 public void testSetEapMsChapV2EncodeDecodeIsLossless() throws Exception { 61 final EapSessionConfig config = 62 createBuilderWithId().setEapMsChapV2Config(USERNAME, PASSWORD).build(); 63 64 verifyPersistableBundleEncodeDecodeIsLossless(config); 65 } 66 67 @Test testSetEapSimEncodeDecodeIsLossless()68 public void testSetEapSimEncodeDecodeIsLossless() throws Exception { 69 final EapSessionConfig config = 70 createBuilderWithId().setEapSimConfig(SUB_ID, APPTYPE_USIM).build(); 71 72 verifyPersistableBundleEncodeDecodeIsLossless(config); 73 } 74 75 @Test testSetEapAkaEncodeDecodeIsLossless()76 public void testSetEapAkaEncodeDecodeIsLossless() throws Exception { 77 final EapSessionConfig config = 78 createBuilderWithId().setEapAkaConfig(SUB_ID, APPTYPE_USIM).build(); 79 80 verifyPersistableBundleEncodeDecodeIsLossless(config); 81 } 82 83 @Test testSetEapAkaPrimeEncodeDecodeIsLossless()84 public void testSetEapAkaPrimeEncodeDecodeIsLossless() throws Exception { 85 final EapSessionConfig config = 86 createBuilderWithId() 87 .setEapAkaPrimeConfig( 88 SUB_ID, APPTYPE_USIM, NETWORK_NAME, ALLOW_MISMATCHED_NETWORK_NAMES) 89 .build(); 90 91 verifyPersistableBundleEncodeDecodeIsLossless(config); 92 } 93 94 @Test testSetEapTtlsEncodeDecodeIsLossless()95 public void testSetEapTtlsEncodeDecodeIsLossless() throws Exception { 96 final InputStream inputStream = 97 InstrumentationRegistry.getContext() 98 .getResources() 99 .getAssets() 100 .open("self-signed-ca.pem"); 101 final CertificateFactory factory = CertificateFactory.getInstance("X.509"); 102 final X509Certificate trustedCa = 103 (X509Certificate) factory.generateCertificate(inputStream); 104 105 final EapSessionConfig innerConfig = 106 new EapSessionConfig.Builder().setEapMsChapV2Config(USERNAME, PASSWORD).build(); 107 108 final EapSessionConfig config = 109 new EapSessionConfig.Builder().setEapTtlsConfig(trustedCa, innerConfig).build(); 110 111 verifyPersistableBundleEncodeDecodeIsLossless(config); 112 } 113 } 114