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)); } }