blob: 45f1c64123e4a01f239a076518ab5c28c382a1be [file] [log] [blame]
/*
* 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.internal.net.eap.message.mschapv2;
import static com.android.internal.net.eap.message.mschapv2.EapMsChapV2PacketDefinitions.AUTH_BYTES;
import static com.android.internal.net.eap.message.mschapv2.EapMsChapV2PacketDefinitions.AUTH_STRING;
import static com.android.internal.net.eap.message.mschapv2.EapMsChapV2PacketDefinitions.EXTRA_M_MESSAGE;
import static com.android.internal.net.eap.message.mschapv2.EapMsChapV2PacketDefinitions.MESSAGE;
import static com.android.internal.net.eap.message.mschapv2.EapMsChapV2PacketDefinitions.MESSAGE_MISSING_TEXT;
import static com.android.internal.net.eap.message.mschapv2.EapMsChapV2PacketDefinitions.SUCCESS_REQUEST;
import static com.android.internal.net.eap.message.mschapv2.EapMsChapV2PacketDefinitions.SUCCESS_REQUEST_DUPLICATE_KEY;
import static com.android.internal.net.eap.message.mschapv2.EapMsChapV2PacketDefinitions.SUCCESS_REQUEST_EXTRA_M;
import static com.android.internal.net.eap.message.mschapv2.EapMsChapV2PacketDefinitions.SUCCESS_REQUEST_INVALID_FORMAT;
import static com.android.internal.net.eap.message.mschapv2.EapMsChapV2PacketDefinitions.SUCCESS_REQUEST_MISSING_M;
import static com.android.internal.net.eap.message.mschapv2.EapMsChapV2TypeData.EAP_MSCHAP_V2_CHALLENGE;
import static org.junit.Assert.assertArrayEquals;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import com.android.internal.net.eap.EapResult.EapError;
import com.android.internal.net.eap.exceptions.mschapv2.EapMsChapV2ParsingException;
import com.android.internal.net.eap.message.mschapv2.EapMsChapV2TypeData.EapMsChapV2TypeDataDecoder.DecodeResult;
import com.android.internal.net.eap.message.mschapv2.EapMsChapV2TypeData.EapMsChapV2VariableTypeData;
import org.junit.Test;
import java.util.HashMap;
import java.util.Map;
public class EapMsChapV2TypeDataTest {
private static final int INVALID_OPCODE = -1;
private static final int MSCHAP_V2_ID = 1;
private static final int MS_LENGTH = 32;
private static final String HEX_STRING_INVALID_LENGTH = "00112";
private static final String HEX_STRING_INVALID_CHARS = "001122z-+x";
@Test
public void testEapMsChapV2TypeDataConstructor() throws Exception {
EapMsChapV2TypeData typeData = new EapMsChapV2TypeData(EAP_MSCHAP_V2_CHALLENGE) {};
assertEquals(EAP_MSCHAP_V2_CHALLENGE, typeData.opCode);
try {
new EapMsChapV2TypeData(INVALID_OPCODE) {};
fail("ExpectedEapMsChapV2ParsingException for invalid OpCode");
} catch (EapMsChapV2ParsingException expected) {
}
}
@Test
public void testEapMsChapV2VariableTypeDataConstructor() throws Exception {
EapMsChapV2VariableTypeData typeData =
new EapMsChapV2VariableTypeData(
EAP_MSCHAP_V2_CHALLENGE, MSCHAP_V2_ID, MS_LENGTH) {};
assertEquals(EAP_MSCHAP_V2_CHALLENGE, typeData.opCode);
assertEquals(MSCHAP_V2_ID, typeData.msChapV2Id);
assertEquals(MS_LENGTH, typeData.msLength);
try {
new EapMsChapV2VariableTypeData(INVALID_OPCODE, MSCHAP_V2_ID, MS_LENGTH) {};
fail("ExpectedEapMsChapV2ParsingException for invalid OpCode");
} catch (EapMsChapV2ParsingException expected) {
}
}
@Test
public void testDecodeResultIsSuccessfulDecode() throws Exception {
DecodeResult<EapMsChapV2TypeData> result =
new DecodeResult(new EapMsChapV2TypeData(EAP_MSCHAP_V2_CHALLENGE) {});
assertTrue(result.isSuccessfulDecode());
result = new DecodeResult(new EapError(new Exception()));
assertFalse(result.isSuccessfulDecode());
}
@Test
public void testGetMessageMappings() throws Exception {
Map<String, String> expectedMappings = new HashMap<>();
expectedMappings.put("S", AUTH_STRING);
expectedMappings.put("M", MESSAGE);
assertEquals(expectedMappings, EapMsChapV2TypeData.getMessageMappings(SUCCESS_REQUEST));
expectedMappings = new HashMap<>();
expectedMappings.put("S", AUTH_STRING);
expectedMappings.put("M", EXTRA_M_MESSAGE);
assertEquals(
expectedMappings, EapMsChapV2TypeData.getMessageMappings(SUCCESS_REQUEST_EXTRA_M));
expectedMappings = new HashMap<>();
expectedMappings.put("S", AUTH_STRING);
expectedMappings.put("M", MESSAGE_MISSING_TEXT);
assertEquals(
expectedMappings,
EapMsChapV2TypeData.getMessageMappings(SUCCESS_REQUEST_MISSING_M));
}
@Test
public void testGetMessageMappingsInvalidFormat() {
try {
EapMsChapV2TypeData.getMessageMappings(SUCCESS_REQUEST_INVALID_FORMAT);
fail("Expected EapMsChapV2ParsingException for extra '='s in message");
} catch (EapMsChapV2ParsingException expected) {
}
}
@Test
public void testGetMessageMappingDuplicateKey() {
try {
EapMsChapV2TypeData.getMessageMappings(SUCCESS_REQUEST_DUPLICATE_KEY);
fail("Expected EapMsChapV2ParsingException for duplicate key in message");
} catch (EapMsChapV2ParsingException expected) {
}
}
@Test
public void testHexStringToByteArray() throws Exception {
byte[] result = EapMsChapV2TypeData.hexStringToByteArray(AUTH_STRING);
assertArrayEquals(AUTH_BYTES, result);
}
@Test
public void testHexStringToByteArrayInvalidLength() {
try {
EapMsChapV2TypeData.hexStringToByteArray(HEX_STRING_INVALID_LENGTH);
fail("Expected EapMsChapV2ParsingException for invalid hex string length");
} catch (EapMsChapV2ParsingException expected) {
}
}
@Test
public void testHexStringToByteArrayInvalidChars() throws Exception {
try {
EapMsChapV2TypeData.hexStringToByteArray(HEX_STRING_INVALID_CHARS);
fail("Expected NumberFormatException for invalid hex chars");
} catch (NumberFormatException expected) {
}
}
}