diff options
author | Cody Kesting <ckesting@google.com> | 2019-10-24 09:47:13 -0700 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2019-10-24 09:47:13 -0700 |
commit | a9fb3ef4015a3aaabbe654dd123e219fcd75eb04 (patch) | |
tree | ab439ca6e84c2c6b42149d1620affc7cb99ab624 | |
parent | 754f956a926637cfd386411a17daca9cf453dd95 (diff) | |
parent | 556529a212dba110db5aca36c58892bfed3f73c0 (diff) | |
download | ike-a9fb3ef4015a3aaabbe654dd123e219fcd75eb04.tar.gz |
Add test for CreatedState for EAP-AKA'. am: 20950519b9 am: 734d4def6a
am: 556529a212
Change-Id: I663cf76b1955b7e20e3f123dd9a16248e0045814
9 files changed, 286 insertions, 66 deletions
diff --git a/src/java/com/android/ike/eap/message/simaka/EapAkaPrimeTypeData.java b/src/java/com/android/ike/eap/message/simaka/EapAkaPrimeTypeData.java index a2a4a436..7f06d683 100644 --- a/src/java/com/android/ike/eap/message/simaka/EapAkaPrimeTypeData.java +++ b/src/java/com/android/ike/eap/message/simaka/EapAkaPrimeTypeData.java @@ -57,7 +57,7 @@ public class EapAkaPrimeTypeData extends EapAkaTypeData { * EapAkaTypeDataDecoder will be used for decoding {@link EapAkaPrimeTypeData} objects. */ public static class EapAkaPrimeTypeDataDecoder - extends EapSimAkaTypeDataDecoder<EapAkaPrimeTypeData> { + extends EapSimAkaTypeDataDecoder<EapAkaTypeData> { private static final String TAG = EapAkaPrimeTypeDataDecoder.class.getSimpleName(); private static final String EAP_METHOD = "EAP-AKA'"; @@ -82,7 +82,7 @@ public class EapAkaPrimeTypeData extends EapAkaTypeData { * EapAkaPrimeTypeData instance representing the data stored in typeData. Otherwise, it * will contain the relevant AtClientErrorCode for the decoding error. */ - public DecodeResult<EapAkaPrimeTypeData> decode(@NonNull byte[] typeData) { + public DecodeResult<EapAkaTypeData> decode(@NonNull byte[] typeData) { return super.decode(typeData); } diff --git a/src/java/com/android/ike/eap/statemachine/EapAkaMethodStateMachine.java b/src/java/com/android/ike/eap/statemachine/EapAkaMethodStateMachine.java index 39328347..de536715 100644 --- a/src/java/com/android/ike/eap/statemachine/EapAkaMethodStateMachine.java +++ b/src/java/com/android/ike/eap/statemachine/EapAkaMethodStateMachine.java @@ -130,6 +130,10 @@ class EapAkaMethodStateMachine extends EapSimAkaMethodStateMachine { return EAP_TYPE_AKA; } + protected DecodeResult<EapAkaTypeData> decode(byte[] typeData) { + return mEapAkaTypeDataDecoder.decode(typeData); + } + protected class CreatedState extends EapMethodState { private final String mTAG = CreatedState.class.getSimpleName(); @@ -139,13 +143,11 @@ class EapAkaMethodStateMachine extends EapSimAkaMethodStateMachine { return result; } - DecodeResult<EapAkaTypeData> decodeResult = - mEapAkaTypeDataDecoder.decode(message.eapData.eapTypeData); + DecodeResult<? extends EapAkaTypeData> decodeResult = + decode(message.eapData.eapTypeData); if (!decodeResult.isSuccessfulDecode()) { return buildClientErrorResponse( - message.eapIdentifier, - EAP_TYPE_AKA, - decodeResult.atClientErrorCode); + message.eapIdentifier, getEapMethod(), decodeResult.atClientErrorCode); } EapAkaTypeData eapAkaTypeData = decodeResult.eapTypeData; @@ -163,7 +165,7 @@ class EapAkaMethodStateMachine extends EapSimAkaMethodStateMachine { default: return buildClientErrorResponse( message.eapIdentifier, - EAP_TYPE_AKA, + getEapMethod(), AtClientErrorCode.UNABLE_TO_PROCESS); } } @@ -180,8 +182,8 @@ class EapAkaMethodStateMachine extends EapSimAkaMethodStateMachine { return result; } - DecodeResult<EapAkaTypeData> decodeResult = - mEapAkaTypeDataDecoder.decode(message.eapData.eapTypeData); + DecodeResult<? extends EapAkaTypeData> decodeResult = + decode(message.eapData.eapTypeData); if (!decodeResult.isSuccessfulDecode()) { return buildClientErrorResponse( message.eapIdentifier, @@ -311,8 +313,8 @@ class EapAkaMethodStateMachine extends EapSimAkaMethodStateMachine { + ", received " + message.eapData.eapType)); } - DecodeResult<EapAkaTypeData> decodeResult = - mEapAkaTypeDataDecoder.decode(message.eapData.eapTypeData); + DecodeResult<? extends EapAkaTypeData> decodeResult = + decode(message.eapData.eapTypeData); if (!decodeResult.isSuccessfulDecode()) { return buildClientErrorResponse( message.eapIdentifier, diff --git a/src/java/com/android/ike/eap/statemachine/EapAkaPrimeMethodStateMachine.java b/src/java/com/android/ike/eap/statemachine/EapAkaPrimeMethodStateMachine.java index c9ef1f7c..7883d4d9 100644 --- a/src/java/com/android/ike/eap/statemachine/EapAkaPrimeMethodStateMachine.java +++ b/src/java/com/android/ike/eap/statemachine/EapAkaPrimeMethodStateMachine.java @@ -25,8 +25,10 @@ import com.android.ike.eap.EapSessionConfig.EapAkaPrimeConfig; import com.android.ike.eap.message.EapData.EapMethod; import com.android.ike.eap.message.simaka.EapAkaPrimeTypeData; import com.android.ike.eap.message.simaka.EapAkaPrimeTypeData.EapAkaPrimeTypeDataDecoder; +import com.android.ike.eap.message.simaka.EapAkaTypeData; import com.android.ike.eap.message.simaka.EapSimAkaAttribute; import com.android.ike.eap.message.simaka.EapSimAkaAttribute.AtClientErrorCode; +import com.android.ike.eap.message.simaka.EapSimAkaTypeData.DecodeResult; import com.android.internal.annotations.VisibleForTesting; import java.util.Arrays; @@ -83,6 +85,11 @@ public class EapAkaPrimeMethodStateMachine extends EapAkaMethodStateMachine { return EAP_TYPE_AKA_PRIME; } + @Override + protected DecodeResult<EapAkaTypeData> decode(byte[] typeData) { + return mEapAkaPrimeTypeDataDecoder.decode(typeData); + } + EapAkaPrimeTypeData getEapSimAkaTypeData(AtClientErrorCode clientErrorCode) { return new EapAkaPrimeTypeData(EAP_AKA_CLIENT_ERROR, Arrays.asList(clientErrorCode)); } diff --git a/tests/iketests/src/java/com/android/ike/eap/message/EapTestMessageDefinitions.java b/tests/iketests/src/java/com/android/ike/eap/message/EapTestMessageDefinitions.java index 0d9c7930..e0d4a519 100644 --- a/tests/iketests/src/java/com/android/ike/eap/message/EapTestMessageDefinitions.java +++ b/tests/iketests/src/java/com/android/ike/eap/message/EapTestMessageDefinitions.java @@ -310,4 +310,6 @@ public class EapTestMessageDefinitions { public static final byte[] EAP_AKA_PRIME_REQUEST = hexStringToByteArray("01" + ID + "000832050000"); + public static final byte[] EAP_AKA_PRIME_CLIENT_ERROR_UNABLE_TO_PROCESS = + hexStringToByteArray("02" + ID + "000C320E000016010000"); } diff --git a/tests/iketests/src/java/com/android/ike/eap/message/simaka/EapAkaPrimeTypeDataTest.java b/tests/iketests/src/java/com/android/ike/eap/message/simaka/EapAkaPrimeTypeDataTest.java index f392c6e7..36066f1e 100644 --- a/tests/iketests/src/java/com/android/ike/eap/message/simaka/EapAkaPrimeTypeDataTest.java +++ b/tests/iketests/src/java/com/android/ike/eap/message/simaka/EapAkaPrimeTypeDataTest.java @@ -83,11 +83,11 @@ public class EapAkaPrimeTypeDataTest { @Test public void testDecode() { - DecodeResult<EapAkaPrimeTypeData> result = + DecodeResult<EapAkaTypeData> result = mTypeDataDecoder.decode(EAP_AKA_PRIME_CHALLENGE_REQUEST); assertTrue(result.isSuccessfulDecode()); - EapAkaPrimeTypeData eapAkaPrimeTypeData = result.eapTypeData; + EapAkaPrimeTypeData eapAkaPrimeTypeData = (EapAkaPrimeTypeData) result.eapTypeData; assertEquals(EAP_AKA_CHALLENGE, eapAkaPrimeTypeData.eapSubtype); // also check Map entries (needs to match input order) @@ -118,7 +118,7 @@ public class EapAkaPrimeTypeDataTest { @Test public void testDecodeMultipleAtKdfAttributes() { - DecodeResult<EapAkaPrimeTypeData> result = + DecodeResult<EapAkaTypeData> result = mTypeDataDecoder.decode(EAP_AKA_PRIME_MULTIPLE_AT_KDF); assertFalse(result.isSuccessfulDecode()); diff --git a/tests/iketests/src/java/com/android/ike/eap/statemachine/EapAkaPrimeCreatedStateTest.java b/tests/iketests/src/java/com/android/ike/eap/statemachine/EapAkaPrimeCreatedStateTest.java new file mode 100644 index 00000000..769f2ed4 --- /dev/null +++ b/tests/iketests/src/java/com/android/ike/eap/statemachine/EapAkaPrimeCreatedStateTest.java @@ -0,0 +1,85 @@ +/* + * 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 com.android.ike.eap.statemachine; + +import static com.android.ike.eap.message.EapData.EAP_TYPE_AKA_PRIME; +import static com.android.ike.eap.message.EapMessage.EAP_CODE_REQUEST; +import static com.android.ike.eap.message.EapTestMessageDefinitions.ID_INT; +import static com.android.ike.eap.message.simaka.EapAkaTypeData.EAP_AKA_CHALLENGE; +import static com.android.ike.eap.message.simaka.EapAkaTypeData.EAP_AKA_IDENTITY; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; +import static org.mockito.Mockito.when; + +import com.android.ike.eap.message.EapData; +import com.android.ike.eap.message.EapMessage; +import com.android.ike.eap.message.simaka.EapAkaPrimeTypeData; +import com.android.ike.eap.message.simaka.EapAkaTypeData; +import com.android.ike.eap.message.simaka.EapSimAkaTypeData.DecodeResult; +import com.android.ike.eap.statemachine.EapAkaMethodStateMachine.ChallengeState; + +import org.junit.Test; + +import java.util.ArrayList; + +public class EapAkaPrimeCreatedStateTest extends EapAkaPrimeStateTest { + @Test + public void testProcessTransitionToIdentityState() throws Exception { + EapData eapData = new EapData(EAP_TYPE_AKA_PRIME, DUMMY_EAP_TYPE_DATA); + EapMessage eapMessage = new EapMessage(EAP_CODE_REQUEST, ID_INT, eapData); + + // Don't actually need any attributes in the attributeMap, since we only care about the + // state transition here. + DecodeResult<EapAkaTypeData> decodeResult = + new DecodeResult<>(new EapAkaPrimeTypeData(EAP_AKA_IDENTITY, new ArrayList<>())); + when(mMockTypeDataDecoder.decode(eq(DUMMY_EAP_TYPE_DATA))).thenReturn(decodeResult); + + mStateMachine.process(eapMessage); + + assertTrue(mStateMachine.getState() instanceof EapAkaMethodStateMachine.IdentityState); + + // decoded in CreatedState and IdentityState + verify(mMockTypeDataDecoder, times(2)).decode(eq(DUMMY_EAP_TYPE_DATA)); + verifyNoMoreInteractions(mMockTelephonyManager, mMockTypeDataDecoder); + } + + @Test + public void testProcessTransitionToChallengeState() throws Exception { + EapData eapData = new EapData(EAP_TYPE_AKA_PRIME, DUMMY_EAP_TYPE_DATA); + EapMessage eapMessage = new EapMessage(EAP_CODE_REQUEST, ID_INT, eapData); + + // Don't actually need any attributes in the attributeMap, since we only care about the + // state transition here. + DecodeResult<EapAkaTypeData> decodeResult = + new DecodeResult<>(new EapAkaPrimeTypeData(EAP_AKA_CHALLENGE, new ArrayList<>())); + when(mMockTypeDataDecoder.decode(eq(DUMMY_EAP_TYPE_DATA))).thenReturn(decodeResult); + + mStateMachine.process(eapMessage); + + ChallengeState challengeState = (ChallengeState) mStateMachine.getState(); + assertArrayEquals(EAP_IDENTITY_BYTES, challengeState.mIdentity); + + // decoded in CreatedState and ChallengeState + verify(mMockTypeDataDecoder, times(2)).decode(DUMMY_EAP_TYPE_DATA); + verifyNoMoreInteractions(mMockTelephonyManager, mMockTypeDataDecoder); + } +} diff --git a/tests/iketests/src/java/com/android/ike/eap/statemachine/EapAkaPrimeMethodStateMachineTest.java b/tests/iketests/src/java/com/android/ike/eap/statemachine/EapAkaPrimeMethodStateMachineTest.java index aa7b1987..c96f3fe2 100644 --- a/tests/iketests/src/java/com/android/ike/eap/statemachine/EapAkaPrimeMethodStateMachineTest.java +++ b/tests/iketests/src/java/com/android/ike/eap/statemachine/EapAkaPrimeMethodStateMachineTest.java @@ -16,63 +16,13 @@ package com.android.ike.eap.statemachine; -import static android.telephony.TelephonyManager.APPTYPE_USIM; - -import static com.android.ike.TestUtils.hexStringToByteArray; - import static org.junit.Assert.assertTrue; -import static org.mockito.ArgumentMatchers.eq; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import android.content.Context; -import android.telephony.TelephonyManager; -import com.android.ike.eap.EapSessionConfig.EapAkaPrimeConfig; -import com.android.ike.eap.message.simaka.EapAkaPrimeTypeData.EapAkaPrimeTypeDataDecoder; import com.android.ike.eap.statemachine.EapAkaMethodStateMachine.CreatedState; -import org.junit.Before; import org.junit.Test; -public class EapAkaPrimeMethodStateMachineTest { - private static final int SUB_ID = 1; - private static final String NETWORK_NAME = "android.net"; - private static final EapAkaPrimeConfig EAP_AKA_PRIME_CONFIG = - new EapAkaPrimeConfig(SUB_ID, APPTYPE_USIM, NETWORK_NAME); - - // EAP-Identity = hex("test@android.net") - protected static final byte[] EAP_IDENTITY_BYTES = - hexStringToByteArray("7465737440616E64726F69642E6E6574"); - - private Context mMockContext; - private TelephonyManager mMockTelephonyManager; - private EapAkaPrimeTypeDataDecoder mMockTypeDataDecoder; - private EapAkaPrimeMethodStateMachine mStateMachine; - - @Before - public void setUp() { - mMockContext = mock(Context.class); - mMockTelephonyManager = mock(TelephonyManager.class); - mMockTypeDataDecoder = mock(EapAkaPrimeTypeDataDecoder.class); - - when(mMockContext.getSystemService(eq(Context.TELEPHONY_SERVICE))) - .thenReturn(mMockTelephonyManager); - when(mMockTelephonyManager.createForSubscriptionId(SUB_ID)) - .thenReturn(mMockTelephonyManager); - - mStateMachine = - new EapAkaPrimeMethodStateMachine( - mMockContext, - EAP_IDENTITY_BYTES, - EAP_AKA_PRIME_CONFIG, - mMockTypeDataDecoder); - - verify(mMockContext).getSystemService(eq(Context.TELEPHONY_SERVICE)); - verify(mMockTelephonyManager).createForSubscriptionId(SUB_ID); - } - +public class EapAkaPrimeMethodStateMachineTest extends EapAkaPrimeTest { @Test public void testEapAkaPrimeMethodStateMachineStartState() { assertTrue(mStateMachine.getState() instanceof CreatedState); diff --git a/tests/iketests/src/java/com/android/ike/eap/statemachine/EapAkaPrimeStateTest.java b/tests/iketests/src/java/com/android/ike/eap/statemachine/EapAkaPrimeStateTest.java new file mode 100644 index 00000000..98d7bc38 --- /dev/null +++ b/tests/iketests/src/java/com/android/ike/eap/statemachine/EapAkaPrimeStateTest.java @@ -0,0 +1,100 @@ +/* + * 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 com.android.ike.eap.statemachine; + +import static com.android.ike.eap.message.EapData.EAP_NOTIFICATION; +import static com.android.ike.eap.message.EapData.EAP_TYPE_AKA_PRIME; +import static com.android.ike.eap.message.EapMessage.EAP_CODE_FAILURE; +import static com.android.ike.eap.message.EapMessage.EAP_CODE_REQUEST; +import static com.android.ike.eap.message.EapMessage.EAP_CODE_SUCCESS; +import static com.android.ike.eap.message.EapTestMessageDefinitions.EAP_AKA_PRIME_CLIENT_ERROR_UNABLE_TO_PROCESS; +import static com.android.ike.eap.message.EapTestMessageDefinitions.EAP_RESPONSE_NOTIFICATION_PACKET; +import static com.android.ike.eap.message.EapTestMessageDefinitions.ID_INT; + +import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.verifyNoMoreInteractions; +import static org.mockito.Mockito.when; + +import com.android.ike.eap.EapResult; +import com.android.ike.eap.EapResult.EapError; +import com.android.ike.eap.EapResult.EapFailure; +import com.android.ike.eap.EapResult.EapResponse; +import com.android.ike.eap.exceptions.EapInvalidRequestException; +import com.android.ike.eap.message.EapData; +import com.android.ike.eap.message.EapMessage; +import com.android.ike.eap.message.simaka.EapAkaTypeData; +import com.android.ike.eap.message.simaka.EapSimAkaAttribute.AtClientErrorCode; +import com.android.ike.eap.message.simaka.EapSimAkaTypeData.DecodeResult; +import com.android.ike.eap.statemachine.EapMethodStateMachine.EapMethodState; +import com.android.ike.eap.statemachine.EapMethodStateMachine.FinalState; + +import org.junit.Test; + +public class EapAkaPrimeStateTest extends EapAkaPrimeTest { + protected static final String NOTIFICATION_MESSAGE = "test"; + + @Test + public void testProcessNotification() throws Exception { + EapData eapData = new EapData(EAP_NOTIFICATION, NOTIFICATION_MESSAGE.getBytes()); + EapMessage notification = new EapMessage(EAP_CODE_REQUEST, ID_INT, eapData); + EapMethodState preNotification = (EapMethodState) mStateMachine.getState(); + + EapResult result = mStateMachine.process(notification); + assertEquals(preNotification, mStateMachine.getState()); + verifyNoMoreInteractions(mMockTelephonyManager, mMockTypeDataDecoder); + + EapResponse eapResponse = (EapResponse) result; + assertArrayEquals(EAP_RESPONSE_NOTIFICATION_PACKET, eapResponse.packet); + } + + @Test + public void testProcessInvalidDecodeResult() throws Exception { + EapData eapData = new EapData(EAP_TYPE_AKA_PRIME, DUMMY_EAP_TYPE_DATA); + EapMessage eapMessage = new EapMessage(EAP_CODE_REQUEST, ID_INT, eapData); + EapMethodState preProcess = (EapMethodState) mStateMachine.getState(); + + AtClientErrorCode atClientErrorCode = AtClientErrorCode.UNABLE_TO_PROCESS; + DecodeResult<EapAkaTypeData> decodeResult = new DecodeResult<>(atClientErrorCode); + when(mMockTypeDataDecoder.decode(eq(DUMMY_EAP_TYPE_DATA))).thenReturn(decodeResult); + + EapResult result = mStateMachine.process(eapMessage); + assertEquals(preProcess, mStateMachine.getState()); + verify(mMockTypeDataDecoder).decode(DUMMY_EAP_TYPE_DATA); + verifyNoMoreInteractions(mMockTelephonyManager, mMockTypeDataDecoder); + + EapResponse eapResponse = (EapResponse) result; + assertArrayEquals(EAP_AKA_PRIME_CLIENT_ERROR_UNABLE_TO_PROCESS, eapResponse.packet); + } + + @Test + public void testHandleEapFailure() throws Exception { + EapResult result = mStateMachine.process(new EapMessage(EAP_CODE_FAILURE, ID_INT, null)); + assertTrue(result instanceof EapFailure); + assertTrue(mStateMachine.getState() instanceof FinalState); + } + + @Test + public void testHandleEapSuccess() throws Exception { + EapResult result = mStateMachine.process(new EapMessage(EAP_CODE_SUCCESS, ID_INT, null)); + EapError eapError = (EapError) result; + assertTrue(eapError.cause instanceof EapInvalidRequestException); + } +} diff --git a/tests/iketests/src/java/com/android/ike/eap/statemachine/EapAkaPrimeTest.java b/tests/iketests/src/java/com/android/ike/eap/statemachine/EapAkaPrimeTest.java new file mode 100644 index 00000000..e2ad901d --- /dev/null +++ b/tests/iketests/src/java/com/android/ike/eap/statemachine/EapAkaPrimeTest.java @@ -0,0 +1,74 @@ +/* + * 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 com.android.ike.eap.statemachine; + +import static android.telephony.TelephonyManager.APPTYPE_USIM; + +import static com.android.ike.TestUtils.hexStringToByteArray; + +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import android.content.Context; +import android.telephony.TelephonyManager; + +import com.android.ike.eap.EapSessionConfig.EapAkaPrimeConfig; +import com.android.ike.eap.message.simaka.EapAkaPrimeTypeData; + +import org.junit.Before; + +public class EapAkaPrimeTest { + protected static final int SUB_ID = 1; + protected static final String NETWORK_NAME = "android.net"; + protected static final EapAkaPrimeConfig EAP_AKA_PRIME_CONFIG = + new EapAkaPrimeConfig(SUB_ID, APPTYPE_USIM, NETWORK_NAME); + protected static final byte[] DUMMY_EAP_TYPE_DATA = hexStringToByteArray("112233445566"); + + // EAP-Identity = hex("test@android.net") + protected static final byte[] EAP_IDENTITY_BYTES = + hexStringToByteArray("7465737440616E64726F69642E6E6574"); + + protected Context mMockContext; + protected TelephonyManager mMockTelephonyManager; + protected EapAkaPrimeTypeData.EapAkaPrimeTypeDataDecoder mMockTypeDataDecoder; + + protected EapAkaPrimeMethodStateMachine mStateMachine; + + @Before + public void setUp() { + mMockContext = mock(Context.class); + mMockTelephonyManager = mock(TelephonyManager.class); + mMockTypeDataDecoder = mock(EapAkaPrimeTypeData.EapAkaPrimeTypeDataDecoder.class); + + when(mMockContext.getSystemService(eq(Context.TELEPHONY_SERVICE))) + .thenReturn(mMockTelephonyManager); + when(mMockTelephonyManager.createForSubscriptionId(SUB_ID)) + .thenReturn(mMockTelephonyManager); + + mStateMachine = + new EapAkaPrimeMethodStateMachine( + mMockContext, + EAP_IDENTITY_BYTES, + EAP_AKA_PRIME_CONFIG, + mMockTypeDataDecoder); + + verify(mMockContext).getSystemService(eq(Context.TELEPHONY_SERVICE)); + verify(mMockTelephonyManager).createForSubscriptionId(SUB_ID); + } +} |