package model.asn1; import model.asn1.exceptions.ParseException; import model.asn1.parsing.BytesReader; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import java.nio.charset.StandardCharsets; import java.util.stream.Collectors; import java.util.stream.IntStream; import static org.junit.jupiter.api.Assertions.*; public class IA5StringTest { private String stringToTest = ""; @BeforeEach void setup() { stringToTest = IntStream.range(0, 127) .mapToObj(Character::toString) .collect(Collectors.joining()); } @Test void testAcceptedString() throws ParseException { assertEquals(stringToTest, new IA5String(IA5String.TAG, null, stringToTest) .getString()); } @Test void testIllegalStrings() { assertThrows(ParseException.class, () -> new IA5String(IA5String.TAG, null, stringToTest + new String(new byte[]{-128}, StandardCharsets.UTF_8))); assertThrows(ParseException.class, () -> new IA5String(IA5String.TAG, null, stringToTest + new String(new byte[]{-1}, StandardCharsets.UTF_8))); } @Test void testEncode() throws ParseException { assertArrayEquals( new Byte[]{0x00, 0x01, 0x02}, new IA5String(IA5String.TAG, null, new String(new byte[]{0, 1, 2}, StandardCharsets.UTF_8)) .encodeValueDER()); assertArrayEquals( new Byte[]{ 0x16, 0x02, // Tag - Length 0x68, 0x69 // Value }, new IA5String(IA5String.TAG, null, "hi").encodeDER()); assertArrayEquals( new Byte[]{ -85, 0x05, // Parent Tag - Length 0x16, 0x03, // Inner Tag - Length 0x68, 0x69, 0x69 // Value }, new IA5String(IA5String.TAG, new Tag(TagClass.CONTEXT_SPECIFIC, true, 11), "hii").encodeDER()); } @Test void testParse() throws ParseException { assertEquals("123", new IA5String(new BytesReader(new Byte[]{0x16, 3, '1', '2', '3'}), false) .getString()); assertEquals("", new IA5String(new BytesReader(new Byte[]{0x16, 0}), false) .getString()); } @Test void testParseFail() { assertThrows(ParseException.class, () -> new IA5String(new BytesReader(new Byte[]{0x16, 3, '1', '2'}), false)); assertThrows(ParseException.class, () -> new IA5String(new BytesReader(new Byte[]{0x16, 2, '1', -128}), false)); } }