summaryrefslogtreecommitdiffstats
path: root/src/org/uic/ticket
diff options
context:
space:
mode:
authorCGantert345 <57003061+CGantert345@users.noreply.github.com>2020-01-03 10:48:10 +0100
committerGitHub <noreply@github.com>2020-01-03 10:48:10 +0100
commit0484f4ee6d789019d288550289e588cd9fb914dd (patch)
tree7adc7db8764ef466c56ff9ae6ed815607a60701a /src/org/uic/ticket
parentapi implementation (diff)
downloadUIC-barcode-0484f4ee6d789019d288550289e588cd9fb914dd.tar
UIC-barcode-0484f4ee6d789019d288550289e588cd9fb914dd.tar.gz
UIC-barcode-0484f4ee6d789019d288550289e588cd9fb914dd.tar.bz2
UIC-barcode-0484f4ee6d789019d288550289e588cd9fb914dd.tar.lz
UIC-barcode-0484f4ee6d789019d288550289e588cd9fb914dd.tar.xz
UIC-barcode-0484f4ee6d789019d288550289e588cd9fb914dd.tar.zst
UIC-barcode-0484f4ee6d789019d288550289e588cd9fb914dd.zip
Diffstat (limited to 'src/org/uic/ticket')
-rw-r--r--src/org/uic/ticket/api/test/DateTimeUtilsTest.java45
-rw-r--r--src/org/uic/ticket/api/test/UperEncodeTicketTestV1.java450
-rw-r--r--src/org/uic/ticket/api/test/UperEncodeUICTicketExtensionTest.java127
3 files changed, 622 insertions, 0 deletions
diff --git a/src/org/uic/ticket/api/test/DateTimeUtilsTest.java b/src/org/uic/ticket/api/test/DateTimeUtilsTest.java
new file mode 100644
index 0000000..1b809dd
--- /dev/null
+++ b/src/org/uic/ticket/api/test/DateTimeUtilsTest.java
@@ -0,0 +1,45 @@
+package org.uic.ticket.api.test;
+
+import java.util.Calendar;
+import java.util.TimeZone;
+import org.junit.Test;
+import org.uic.ticket.api.asn.omv1.DateTimeUtils;
+
+
+public class DateTimeUtilsTest{
+
+
+
+ @Test public void testDateDiff1() throws IllegalArgumentException, IllegalAccessException {
+
+ Calendar issuing = Calendar.getInstance();
+ issuing.setTimeZone(TimeZone.getTimeZone("UTC"));
+ issuing.set(Calendar.YEAR,2017);
+ issuing.set(Calendar.DAY_OF_MONTH, 31);
+ issuing.set(Calendar.MONTH, 12);
+ issuing.set(Calendar.HOUR_OF_DAY, 23);
+ issuing.set(Calendar.MINUTE, 5);
+
+ Calendar local = Calendar.getInstance();
+ local.set(Calendar.YEAR,2018);
+ local.set(Calendar.DAY_OF_MONTH, 1);
+ local.set(Calendar.MONTH, 1);
+ issuing.set(Calendar.HOUR_OF_DAY, 0);
+ issuing.set(Calendar.MINUTE, 5);
+
+ Long diff = DateTimeUtils.getDateDifference(issuing.getTime(), local.getTime());
+
+
+ assert(diff.intValue() == 1);
+ }
+
+
+
+
+
+
+
+
+
+
+}
diff --git a/src/org/uic/ticket/api/test/UperEncodeTicketTestV1.java b/src/org/uic/ticket/api/test/UperEncodeTicketTestV1.java
new file mode 100644
index 0000000..9fed854
--- /dev/null
+++ b/src/org/uic/ticket/api/test/UperEncodeTicketTestV1.java
@@ -0,0 +1,450 @@
+package org.uic.ticket.api.test;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.logging.Level;
+
+import net.gcdc.asn1.datatypesimpl.SequenceOfStringUTF8;
+import net.gcdc.asn1.uper.UperEncoder;
+
+import org.junit.Test;
+import org.uic.ticket.api.asn.omv1.CardReferenceType;
+import org.uic.ticket.api.asn.omv1.ControlData;
+import org.uic.ticket.api.asn.omv1.CustomerStatusType;
+import org.uic.ticket.api.asn.omv1.DocumentData;
+import org.uic.ticket.api.asn.omv1.ExtensionData;
+import org.uic.ticket.api.asn.omv1.IssuingData;
+import org.uic.ticket.api.asn.omv1.OpenTicketData;
+import org.uic.ticket.api.asn.omv1.SequenceOfCardReferenceType;
+import org.uic.ticket.api.asn.omv1.SequenceOfCustomerStatusType;
+import org.uic.ticket.api.asn.omv1.SequenceOfDocumentData;
+import org.uic.ticket.api.asn.omv1.SequenceOfExtensionData;
+import org.uic.ticket.api.asn.omv1.SequenceOfTicketLinkType;
+import org.uic.ticket.api.asn.omv1.SequenceOfTravelerType;
+import org.uic.ticket.api.asn.omv1.StationPassageData;
+import org.uic.ticket.api.asn.omv1.TicketDetailData;
+import org.uic.ticket.api.asn.omv1.TicketLinkType;
+import org.uic.ticket.api.asn.omv1.TokenType;
+import org.uic.ticket.api.asn.omv1.TravelerData;
+import org.uic.ticket.api.asn.omv1.TravelerType;
+import org.uic.ticket.api.asn.omv1.UicRailTicketData;
+
+
+public class UperEncodeTicketTestV1 {
+
+ /**
+ * Example from the Standard on UPER.
+ <pre>
+ value UicRailTicketData ::= {
+ issuingDetail {
+ issuingYear 2018
+ issuingDay 1
+ specimen TRUE,
+ securePaperTicket FALSE,
+ activated TRUE,
+ issuerPNR "issuerTestPNR",
+ issuedOnLine 12
+ }
+ ,travelerDetail{
+ traveler {
+ {
+ firstName "John"
+ ,secondName "Dow"
+ ,idCard "12345"
+ ,ticketHolder TRUE
+ ,status {{customerStatusDescr "senior" }}
+ }
+ }
+ ,groupName "myGroup"
+ }
+ ,transportDocument {
+ {
+ token {tokenProviderIA5 "VDV", token '82DA'H }
+ ,ticket openTicket : {
+ returnIncluded FALSE
+ infoText "openTicketInfo"
+ }
+ }
+ ,{
+ ticket stationPassage : {
+ productName "passage"
+ ,stationNameUTF8 { "Amsterdam" }
+ ,validFromDay 0
+ ,numberOfDaysValid 123
+ }
+ }
+ }
+ ,controlDetail {
+ identificationByCardReference {
+ { trailingCardIdNum 100 }
+ }
+ ,identificationByIdCard FALSE
+ ,identificationByPassportId FALSE
+ ,passportValidationRequired FALSE
+ ,onlineValidationRequired FALSE
+ ,ageCheckRequired FALSE
+ ,reductionCardCheckRequired FALSE
+ ,infoText "cd"
+ ,includedTickets {
+ { productOwnerIA5 "test" }
+ }
+ }
+ ,extension {
+ { extensionId "1", extensionData '82DA'H }
+ ,{ extensionId "2", extensionData '83DA'H }
+ }
+ }
+
+
+ Encoding to the file 'data.uper' using PER UNALIGNED encoding rule...
+UicRailTicketData SEQUENCE [root fieldcount (not encoded) = 5]
+ issuingDetail IssuingData SEQUENCE [root fieldcount (not encoded) = 7]
+ issuingYear INTEGER [length (not encoded) = 1.0]
+ 2018
+ issuingDay INTEGER [length (not encoded) = 1.1]
+ 1
+ specimen BOOLEAN [length (not encoded) = 0.1]
+ TRUE
+ securePaperTicket BOOLEAN [length (not encoded) = 0.1]
+ FALSE
+ activated BOOLEAN [length (not encoded) = 0.1]
+ TRUE
+ issuerPNR IA5String [length = 13.0]
+ "issuerTestPNR"
+ issuedOnLine INTEGER [length = 1.0]
+ 12
+ travelerDetail TravelerData SEQUENCE [root fieldcount (not encoded) = 2]
+ traveler SEQUENCE OF [count = 1]
+ TravelerType SEQUENCE [root fieldcount (not encoded) = 5]
+ firstName UTF8String [length = 4.0]
+ 0x4a6f686e
+ secondName UTF8String [length = 3.0]
+ 0x446f77
+ idCard IA5String [length = 5.0]
+ "12345"
+ ticketHolder BOOLEAN [length (not encoded) = 0.1]
+ TRUE
+ status SEQUENCE OF [count = 1]
+ CustomerStatusType SEQUENCE [fieldcount (not encoded) = 1]
+ customerStatusDescr IA5String [length = 6.0]
+ "senior"
+ groupName UTF8String [length = 7.0]
+ 0x6d7947726f7570
+ transportDocument SEQUENCE OF [count = 2]
+ DocumentData SEQUENCE [root fieldcount (not encoded) = 2]
+ token TokenType SEQUENCE [fieldcount (not encoded) = 2]
+ tokenProviderIA5 IA5String [length = 3.0]
+ "VDV"
+ token OCTET STRING [length = 2.0]
+ 0x82da
+ ticket CHOICE [index = 2]
+ openTicket OpenTicketData SEQUENCE [root fieldcount (not encoded) = 2]
+ returnIncluded BOOLEAN [length (not encoded) = 0.1]
+ FALSE
+ infoText UTF8String [length = 14.0]
+ 0x6f70656e5469636b6574496e666f
+ DocumentData SEQUENCE [root fieldcount (not encoded) = 1]
+ ticket CHOICE [index = 9]
+ stationPassage StationPassageData SEQUENCE [root fieldcount (not encoded) = 4]
+ productName UTF8String [length = 7.0]
+ 0x70617373616765
+ stationNameUTF8 SEQUENCE OF [count = 1]
+ UTF8String [length = 9.0]
+ 0x416d7374657264616d
+ validFromDay INTEGER [length (not encoded) = 1.2]
+ 0
+ numberOfDaysValid INTEGER [length = 1.0]
+ 123
+ controlDetail ControlData SEQUENCE [root fieldcount (not encoded) = 9]
+ identificationByCardReference SEQUENCE OF [count = 1]
+ CardReferenceType SEQUENCE [root fieldcount (not encoded) = 1]
+ trailingCardIdNum INTEGER [length = 1.0]
+ 100
+ identificationByIdCard BOOLEAN [length (not encoded) = 0.1]
+ FALSE
+ identificationByPassportId BOOLEAN [length (not encoded) = 0.1]
+ FALSE
+ passportValidationRequired BOOLEAN [length (not encoded) = 0.1]
+ FALSE
+ onlineValidationRequired BOOLEAN [length (not encoded) = 0.1]
+ FALSE
+ ageCheckRequired BOOLEAN [length (not encoded) = 0.1]
+ FALSE
+ reductionCardCheckRequired BOOLEAN [length (not encoded) = 0.1]
+ FALSE
+ infoText UTF8String [length = 2.0]
+ 0x6364
+ includedTickets SEQUENCE OF [count = 1]
+ TicketLinkType SEQUENCE [root fieldcount (not encoded) = 1]
+ productOwnerIA5 IA5String [length = 4.0]
+ "test"
+ extension 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 = 133.7
+Encoded successfully in 134 bytes:
+78022020 050DD3CF 9F5CBCAA 65E7D284 EA40218A 02D00082 2537B437 01A237BB
+82B164CD A3580883 73CBBB4E FE40EDAF 28EE4DEE AE004A03 AD12B014 16D08000
+0000100E 6F70656E 5469636B 6574496E 666F1202 2040EE0C 2E6E6C2C ECA02128
+2DAE6E8C AE4C8C2D A0080BDA 60100402 C800131B 20082027 4CBCFA01 00B10282
+DA016405 07B4
+
+
+
+ </pre>
+ */
+
+
+
+ @Test public void testEncodeTicket() throws IllegalArgumentException, IllegalAccessException {
+ UicRailTicketData ticket = new UicRailTicketData();
+ 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 = "78022020050DD3CF9F5CBCAA65E7D284EA40218A02D000822537B43701A237BB82B164CDA358088373CBBB4EFE40EDAF28EE4DEEAE004A03AD12B01416D080000000100E6F70656E5469636B6574496E666F12022040EE0C2E6E6C2CECA021282DAE6E8CAE4C8C2DA0080BDA60100402C800131B200820274CBCFA0100B10282DA01640507B4";
+ UperEncoder.logger.debug(String.format("first difference at index: %d",hex.compareTo(expectedHex)));
+ UperEncoder.logger.debug(String.format("data returned: %s",hex));
+ UperEncoder.logger.debug(String.format("data expected: %s",expectedHex));
+ assertEquals(hex,expectedHex);
+ }
+
+ @Test public void testDecodeTicket() throws IllegalArgumentException, IllegalAccessException {
+ UicRailTicketData ticket = new UicRailTicketData();
+ 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 = "78022020050DD3CF9F5CBCAA65E7D284EA40218A02D000822537B43701A237BB82B164CDA358088373CBBB4EFE40EDAF28EE4DEEAE004A03AD12B01416D080000000100E6F70656E5469636B6574496E666F12022040EE0C2E6E6C2CECA021282DAE6E8CAE4C8C2DA0080BDA60100402C800131B200820274CBCFA0100B10282DA01640507B4";
+ assertEquals(hex,expectedHex);
+ UicRailTicketData decodedTicket = UperEncoder.decode(encoded, UicRailTicketData.class);
+ assert(decodedTicket != null);
+ assertEquals(decodedTicket.controlDetail.ageCheckRequired , false );
+ assertEquals(decodedTicket.controlDetail.getInfoText() , "cd" );
+ assertEquals(decodedTicket.controlDetail.getIncludedTickets().get(0).getProductOwnerIA5() , "test" );
+ assert(decodedTicket.controlDetail.getIdentificationByCardReference().get(0).getTrailingCardIdNum() == 100L );
+ }
+
+ private void populateTicket(UicRailTicketData ticket) {
+
+ ticket.setControlDetail(new ControlData());
+ populate(ticket.getControlDetail());
+
+
+ ticket.setIssuingDetail(new IssuingData());
+ populateIssuingData(ticket.getIssuingDetail());
+
+ TravelerData td = new TravelerData();
+ populateTravelerData(td);
+ ticket.setTravelerDetail(td);
+
+ SequenceOfDocumentData ds = new SequenceOfDocumentData();
+
+
+ //OpenTicket
+ DocumentData do1 = new DocumentData();
+ addOpenTicketData(do1);
+ ds.add(do1);
+
+ //StationPassage
+ DocumentData do2 = new DocumentData();
+ addStationPassage(do2);
+ ds.add(do2);
+
+ ticket.setTransportDocument(ds);
+
+ SequenceOfExtensionData ed = new SequenceOfExtensionData();
+ populateExtensionSequence(ed);
+ ticket.setExtension(ed);
+
+ }
+
+ /*
+ ticket stationPassage : {
+ productName "passage"
+ ,stationNameUTF8 { "Amsterdam" }
+ ,validFromDay 0
+ ,numberOfDaysValid 123
+ }
+ */
+ private void addStationPassage(DocumentData dd) {
+ TicketDetailData tdd = new TicketDetailData();
+ StationPassageData sp = new StationPassageData();
+ sp.setProductName("passage");
+ sp.setValidFromDay(0L);
+ sp.setNumberOfDaysValid(123L);
+ SequenceOfStringUTF8 ss = new SequenceOfStringUTF8();
+ ss.add("Amsterdam");
+ sp.setStationNameUTF8(ss);
+ tdd.setStationPassage(sp);
+ dd.setTicket(tdd);
+ }
+
+ /*
+ {
+ token {tokenProviderIA5 "VDV", token '82DA'H }
+ ,ticket openTicket : {
+ returnIncluded FALSE
+ infoText "openTicketInfo"
+ }
+ }
+ */
+
+ private void addOpenTicketData(DocumentData dd) {
+ TokenType to = new TokenType();
+ to.setTokenProviderIA5("VDV");
+ byte[] ba = { (byte) 0x82, (byte) 0xDA };
+ to.setToken(ba);
+ dd.setToken(to);
+
+ TicketDetailData tdd = new TicketDetailData();
+ OpenTicketData otd = new OpenTicketData();
+ otd.setInfoText("openTicketInfo");
+ otd.setReturnIncluded(false);
+ tdd.setOpenTicket(otd);
+ dd.setTicket(tdd);
+ }
+
+
+ /*
+ ,travelerDetail{
+ traveler {
+ {
+ firstName "John"
+ ,secondName "Dow"
+ ,idCard "12345"
+ ,ticketHolder TRUE
+ ,status {{customerStatusDescr "senior" }}
+ }
+ }
+ ,groupName "myGroup"
+ }
+ */
+
+ private void populateTravelerData(TravelerData td) {
+ td.setGroupName("myGroup");
+ SequenceOfTravelerType trs = new SequenceOfTravelerType();
+ TravelerType tr = new TravelerType();
+ tr.setIdCard("12345");
+ tr.setFirstName("John");
+ tr.setSecondName("Dow");
+ tr.setTicketHolder(true);
+ SequenceOfCustomerStatusType ts = new SequenceOfCustomerStatusType();
+ CustomerStatusType cst = new CustomerStatusType();
+ cst.setCustomerStatusDescr("senior");
+ ts.add(cst);
+ tr.setStatus(ts);
+ trs.add(tr);
+ td.setTraveler(trs);
+ }
+
+ /*
+ ,issuingDetail {
+ issuingYear 2018
+ issuingDay 1
+ specimen TRUE,
+ securePaperTicket FALSE,
+ activated TRUE,
+ issuerPNR "issuerTestPNR",
+ issuedOnLine 12
+ }
+ */
+ private void populateIssuingData(IssuingData issuingDetail) {
+ issuingDetail.setIssuingYear(2018L);
+ issuingDetail.setIssuingDay(1L);
+ issuingDetail.setIssuerPNR("issuerTestPNR");
+ issuingDetail.setSpecimen(true);
+ issuingDetail.setSecurePaperTicket(false);
+ issuingDetail.setActivated(true);
+ issuingDetail.setIssuedOnLine(12L);
+ }
+
+ /*
+ ,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);
+ }
+
+ /*
+ ,controlDetail {
+ identificationByCardReference {
+ { trailingCardIdNum 100 }
+ }
+ ,identificationByIdCard FALSE
+ ,identificationByPassportId FALSE
+ ,passportValidationRequired FALSE
+ ,onlineValidationRequired FALSE
+ ,ageCheckRequired FALSE
+ ,reductionCardCheckRequired FALSE
+ ,infoText "cd"
+ ,includedTickets {
+ { productOwnerIA5 "test" }
+ }
+ }
+ */
+ private void populate(ControlData controlDetail) {
+ controlDetail.infoText = "cd";
+ controlDetail.setAgeCheckRequired(false);
+ controlDetail.setIdentificationByIdCard(false);
+ controlDetail.setIdentificationByPassportId(false);
+ controlDetail.setOnlineValidationRequired(false);
+ controlDetail.setPassportValidationRequired(false);
+ controlDetail.setReductionCardCheckRequired(false);
+ controlDetail.setIdentificationByCardReference(new SequenceOfCardReferenceType());
+ controlDetail.getIdentificationByCardReference().add(populateCardRefrence());
+ SequenceOfTicketLinkType sit = new SequenceOfTicketLinkType();
+ populateIncludedTickets(sit);
+ controlDetail.setIncludedTickets(sit);
+ }
+
+
+ /*
+ *
+ */
+ private void populateIncludedTickets(SequenceOfTicketLinkType sequenceOfTicketLinkType) {
+ TicketLinkType tlt = new TicketLinkType();
+ tlt.productOwnerIA5="test";
+ sequenceOfTicketLinkType.add(tlt);
+ }
+
+ /*
+ {
+ trailingCardIdNum 100
+ }
+ */
+ private CardReferenceType populateCardRefrence() {
+ CardReferenceType cr = new CardReferenceType();
+ cr.setTrailingCardIdNum(100L);
+ return cr;
+ }
+
+
+
+
+
+
+
+
+}
diff --git a/src/org/uic/ticket/api/test/UperEncodeUICTicketExtensionTest.java b/src/org/uic/ticket/api/test/UperEncodeUICTicketExtensionTest.java
new file mode 100644
index 0000000..3874b4e
--- /dev/null
+++ b/src/org/uic/ticket/api/test/UperEncodeUICTicketExtensionTest.java
@@ -0,0 +1,127 @@
+package org.uic.ticket.api.test;
+
+import static org.junit.Assert.assertEquals;
+
+import java.util.logging.Level;
+
+import net.gcdc.asn1.datatypes.Asn1Optional;
+import net.gcdc.asn1.datatypes.Sequence;
+import net.gcdc.asn1.uper.UperEncoder;
+
+import org.junit.Test;
+import org.uic.ticket.api.asn.omv1.ExtensionData;
+import org.uic.ticket.api.asn.omv1.SequenceOfExtensionData;
+
+
+public class UperEncodeUICTicketExtensionTest {
+
+ /**
+ * Example from the Standard on UPER.
+ <pre>
+ 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
+ </pre>
+ */
+
+
+ @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);
+ }
+
+
+
+
+
+}