package org.uic.barcode.ticket.api.test; import static org.junit.Assert.assertEquals; import java.util.logging.Level; import org.junit.Test; import org.uic.barcode.asn1.datatypes.Asn1Optional; import org.uic.barcode.asn1.datatypes.Sequence; import org.uic.barcode.asn1.uper.UperEncoder; import org.uic.barcode.ticket.api.asn.omv1.ExtensionData; import org.uic.barcode.ticket.api.asn.omv1.SequenceOfExtensionData; public class UperEncodeUICTicketExtensionTest { /** * Example from the Standard on UPER.
World-Schema DEFINITIONS AUTOMATIC TAGS ::= BEGIN TestRecord ::= [APPLICATION 0] IMPLICIT SEQUENCE { extensionList SEQUENCE OF ExtensionData OPTIONAL } ExtensionData ::= SEQUENCE { extensionId IA5String, extensionData OCTET STRING } END value TestRecord ::= { extensionList { { extensionId "1", extensionData '82DA'H } ,{ extensionId "2", extensionData '83DA'H } } } Encoding to the file 'data.uper' using PER UNALIGNED encoding rule... TestRecord SEQUENCE [fieldcount (not encoded) = 1] extensionList SEQUENCE OF [count = 2] ExtensionData SEQUENCE [fieldcount (not encoded) = 2] extensionId IA5String [length = 1.0] "1" extensionData OCTET STRING [length = 2.0] 0x82da ExtensionData SEQUENCE [fieldcount (not encoded) = 2] extensionId IA5String [length = 1.0] "2" extensionData OCTET STRING [length = 2.0] 0x83da Total encoded length = 10.7 Encoded successfully in 11 bytes: 8100B102 82DA0164 0507B4*/ @Sequence public static class TestRecord { @Asn1Optional public SequenceOfExtensionData extension; public TestRecord() {} public void setExtensionList(SequenceOfExtensionData sd){ this.extension = sd; } } @Test public void testEncodeTicket() throws IllegalArgumentException, IllegalAccessException { TestRecord ticket = new TestRecord(); populateTicket(ticket); byte[] encoded = UperEncoder.encode(ticket); String hex = UperEncoder.hexStringFromBytes(encoded); UperEncoder.logger.log(Level.FINEST,String.format("data hex: %s", hex)); String expectedHex = "8100B10282DA01640507B4"; UperEncoder.logger.debug(String.format("first diference at index: %d",hex.compareTo(expectedHex))); assertEquals(hex,expectedHex); } @Test public void testDecodeTicket() throws IllegalArgumentException, IllegalAccessException { TestRecord ticket = new TestRecord(); populateTicket(ticket); byte[] encoded = UperEncoder.encode(ticket); String hex = UperEncoder.hexStringFromBytes(encoded); UperEncoder.logger.log(Level.FINEST,String.format("data hex: %s", hex)); String expectedHex = "8100B10282DA01640507B4"; TestRecord decodedTicket = UperEncoder.decode(encoded, TestRecord.class); assert(decodedTicket != null); assertEquals(hex,expectedHex); } private void populateTicket(TestRecord ticket) { SequenceOfExtensionData ed = new SequenceOfExtensionData(); populateExtensionSequence(ed); ticket.setExtensionList(ed); } /* ,extension { { extensionId "1", extensionData '82DA'H } ,{ extensionId "2", extensionData '83DA'H } } */ private void populateExtensionSequence(SequenceOfExtensionData ed) { ExtensionData ed1 = new ExtensionData(); ed1.setExtensionId("1"); byte[] ba1 = { (byte) 0x82, (byte) 0xDA }; ed1.setExtensionData(ba1); ExtensionData ed2 = new ExtensionData(); ed2.setExtensionId("2"); byte[] ba2 = { (byte) 0x83, (byte) 0xDA }; ed2.setExtensionData(ba2); ed.add(ed1); ed.add(ed2); } }