diff options
author | Cody Kesting <ckesting@google.com> | 2019-10-17 11:30:44 -0700 |
---|---|---|
committer | Cody Kesting <ckesting@google.com> | 2019-10-23 09:10:46 -0700 |
commit | 20950519b9b6e6941c290e199e4ba57762e01af4 (patch) | |
tree | ab439ca6e84c2c6b42149d1620affc7cb99ab624 /tests/iketests/src/java/com/android | |
parent | c941ee7fed0ec59099d511c3c8cb0bc930de8787 (diff) | |
download | ike-20950519b9b6e6941c290e199e4ba57762e01af4.tar.gz |
Add test for CreatedState for EAP-AKA'.
EAP-AKA' utilizes the CreatedState from EAP-AKA. Tests need to be added
to ensure that functionality for the CreatedState and its transitions to
the IdentityState and ChallengeState are preserved.
Bug: 142668075
Test: added EapAkaPrimteStateTest and EapAkaPrimeCreatedStateTest.
Test: atest FrameworksIkeTests
Change-Id: I5331ecff8dc29ebcbcc9b88e328cde4847aa416f
Diffstat (limited to 'tests/iketests/src/java/com/android')
6 files changed, 265 insertions, 54 deletions
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); + } +} |