summaryrefslogtreecommitdiffstats
path: root/src/test
diff options
context:
space:
mode:
Diffstat (limited to 'src/test')
-rw-r--r--src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestGroup.java220
-rw-r--r--src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestNonUic.java207
-rw-r--r--src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestNrt.java214
-rw-r--r--src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestPass.java215
-rw-r--r--src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestReservation.java222
-rw-r--r--src/test/java/org/uic/barcode/test/utils/SsbTicketFactory.java193
6 files changed, 1271 insertions, 0 deletions
diff --git a/src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestGroup.java b/src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestGroup.java
new file mode 100644
index 0000000..f6ec58b
--- /dev/null
+++ b/src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestGroup.java
@@ -0,0 +1,220 @@
+package org.uic.barcode.test;
+
+import java.io.IOException;
+import java.security.InvalidAlgorithmParameterException;
+import java.security.InvalidKeyException;
+import java.security.KeyPair;
+import java.security.KeyPairGenerator;
+import java.security.NoSuchAlgorithmException;
+import java.security.NoSuchProviderException;
+import java.security.SecureRandom;
+import java.security.Security;
+import java.security.SignatureException;
+import java.util.zip.DataFormatException;
+
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.junit.Before;
+import org.junit.Test;
+import org.uic.barcode.Decoder;
+import org.uic.barcode.Encoder;
+import org.uic.barcode.dynamicFrame.Constants;
+import org.uic.barcode.logger.LoggerFactory;
+import org.uic.barcode.ssbFrame.SsbFrame;
+import org.uic.barcode.test.utils.SsbTicketFactory;
+import org.uic.barcode.ticket.EncodingFormatException;
+
+/**
+ * The Class StaticFrameBarcodeTest.
+ */
+public class SsbFrameBarcodeTestGroup {
+
+ /** The algorithm OID. */
+ public String algorithmOID = Constants.DSA_SHA224;
+
+ public int keySize = 2048;
+
+ /** The key pair. */
+ public KeyPair keyPair = null;
+
+
+ public SsbFrame ssbFrame = null;
+
+
+ /**
+ * Initialize.
+ *
+ * set the signature algorithm
+ * generate a key pair
+ * set the test content
+ * for ticket and layout
+ */
+ @Before public void initialize() {
+
+ LoggerFactory.setActivateConsoleLog(true);
+
+ algorithmOID = Constants.DSA_SHA224;
+ keySize = 1024;
+
+ Security.addProvider(new BouncyCastleProvider());
+
+ try {
+ keyPair = generateDSAKeys(keySize);
+ } catch (NoSuchAlgorithmException | NoSuchProviderException | InvalidAlgorithmParameterException e) {
+ e.printStackTrace();
+ }
+
+ assert(keyPair != null);
+
+ }
+
+
+
+
+
+ /**
+ * Test ssb pass encoding.
+ */
+ @Test public void testSsbEncoding() {
+
+
+ Encoder enc = null;
+
+ try {
+ enc = new Encoder(null, null, Encoder.UIC_BARCODE_TYPE_SSB, 0, 0);
+ } catch (IOException | EncodingFormatException e1) {
+ assert(false);
+ }
+
+ enc.setSsbFrame(SsbTicketFactory.getSsbGroup());
+
+ assert(enc != null);
+
+ try {
+ enc.signLevel1("1080", keyPair.getPrivate(), algorithmOID, "1");
+ } catch (Exception e) {
+ assert(false);
+ }
+
+ byte[] encoded = null;
+ try {
+ encoded = enc.encode();
+ } catch (Exception e) {
+ assert(false);
+ }
+
+ assert(encoded != null);
+
+ assert(encoded.length == 114);
+
+ }
+
+ /**
+ * Test ssb barcode decoding.
+ */
+ @Test public void testSsbDecoding() {
+
+
+
+
+ Encoder enc = null;
+
+ try {
+ enc = new Encoder(null, null, Encoder.UIC_BARCODE_TYPE_SSB, 1, 0);
+ } catch (IOException | EncodingFormatException e1) {
+ assert(false);
+ }
+
+ enc.setSsbFrame( SsbTicketFactory.getSsbGroup());
+
+ assert(enc != null);
+
+ try {
+ enc.signLevel1("4711", keyPair.getPrivate(), algorithmOID, "1");
+ } catch (Exception e) {
+ assert(false);
+ }
+
+
+ byte[] encoded = null;
+ try {
+ encoded = enc.encode();
+ } catch (Exception e) {
+ assert(false);
+ }
+
+ assert(encoded != null);
+
+ Decoder dec = null;
+ try {
+ dec = new Decoder(encoded);
+ } catch (IOException e) {
+ assert(false);
+ } catch (EncodingFormatException e) {
+ assert(false);
+ } catch (DataFormatException e) {
+ assert(false);
+ }
+ assert(dec != null);
+
+ int signatureCheck = 0;
+ try {
+ signatureCheck = dec.validateLevel1(keyPair.getPublic(),algorithmOID);
+ } catch (InvalidKeyException | NoSuchAlgorithmException | SignatureException | IllegalArgumentException
+ | UnsupportedOperationException | IOException | EncodingFormatException e) {
+ assert(false);
+ }
+
+ assert(signatureCheck == Constants.LEVEL1_VALIDATION_OK);
+
+ assert(dec.getSsbFrame() != null);
+
+ assert(dec.getSsbFrame().getHeader() != null);
+
+ SsbFrame ref = SsbTicketFactory.getSsbGroup();
+
+ assert(dec.getSsbFrame().getHeader().getKeyId() == 1);
+ assert(dec.getSsbFrame().getHeader().getIssuer() == 4711);
+ assert(dec.getSsbFrame().getHeader().getTicketType().equals(ref.getHeader().getTicketType()));
+ assert(dec.getSsbFrame().getHeader().getVersion() == 1);
+
+ assert(dec.getSsbFrame().getGroupData() != null);
+
+ assert(dec.getSsbFrame().getGroupData().getClassCode().equals(ref.getGroupData().getClassCode()));
+ assert(dec.getSsbFrame().getGroupData().isSpecimen() == ref.getGroupData().isSpecimen());
+ assert(dec.getSsbFrame().getGroupData().getFirstDayOfValidity() == ref.getGroupData().getFirstDayOfValidity());
+ assert(dec.getSsbFrame().getGroupData().getLastDayOfValidity() == ref.getGroupData().getLastDayOfValidity());
+
+
+ assert(dec.getSsbFrame().getGroupData().getStations() != null);
+
+ SsbTicketFactory.compareStations(dec.getSsbFrame().getGroupData().getStations(), ref.getGroupData().getStations());
+
+ SsbTicketFactory.compareCommonTicketPart(dec.getSsbFrame().getGroupData(), ref.getGroupData());
+
+
+ assert(dec.getSsbFrame().getGroupData().getFirstDayOfValidity() == ref.getGroupData().getFirstDayOfValidity());
+ assert(dec.getSsbFrame().getGroupData().getLastDayOfValidity() == ref.getGroupData().getLastDayOfValidity());
+
+ assert(dec.getSsbFrame().getGroupData().getInfoCode() == ref.getGroupData().getInfoCode());
+ assert(dec.getSsbFrame().getGroupData().getText().equalsIgnoreCase(ref.getGroupData().getText()));
+
+ assert(dec.getSsbFrame().getGroupData().getCounterMarkNumber() == ref.getGroupData().getCounterMarkNumber());
+ assert(dec.getSsbFrame().getGroupData().getGroupName().equalsIgnoreCase(ref.getGroupData().getGroupName()));
+
+ }
+
+ /**
+ * Generate DSA keys.
+ *
+ * @return the key pair
+ * @throws NoSuchAlgorithmException the no such algorithm exception
+ * @throws NoSuchProviderException the no such provider exception
+ * @throws InvalidAlgorithmParameterException the invalid algorithm parameter exception
+ */
+ public KeyPair generateDSAKeys(int keySize) throws NoSuchAlgorithmException, NoSuchProviderException, InvalidAlgorithmParameterException{
+ KeyPairGenerator g = KeyPairGenerator.getInstance("DSA", "BC");
+ g.initialize(keySize, new SecureRandom());
+ return g.generateKeyPair();
+ }
+
+}
diff --git a/src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestNonUic.java b/src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestNonUic.java
new file mode 100644
index 0000000..2a28d80
--- /dev/null
+++ b/src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestNonUic.java
@@ -0,0 +1,207 @@
+package org.uic.barcode.test;
+
+import java.io.IOException;
+import java.security.InvalidAlgorithmParameterException;
+import java.security.InvalidKeyException;
+import java.security.KeyPair;
+import java.security.KeyPairGenerator;
+import java.security.NoSuchAlgorithmException;
+import java.security.NoSuchProviderException;
+import java.security.SecureRandom;
+import java.security.Security;
+import java.security.SignatureException;
+import java.util.zip.DataFormatException;
+
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.junit.Before;
+import org.junit.Test;
+import org.uic.barcode.Decoder;
+import org.uic.barcode.Encoder;
+import org.uic.barcode.dynamicFrame.Constants;
+import org.uic.barcode.logger.LoggerFactory;
+import org.uic.barcode.ssbFrame.SsbFrame;
+import org.uic.barcode.test.utils.SsbTicketFactory;
+import org.uic.barcode.ticket.EncodingFormatException;
+
+/**
+ * The Class StaticFrameBarcodeTest.
+ */
+public class SsbFrameBarcodeTestNonUic {
+
+ /** The algorithm OID. */
+ public String algorithmOID = Constants.DSA_SHA224;
+
+ public int keySize = 2048;
+
+ /** The key pair. */
+ public KeyPair keyPair = null;
+
+
+ public SsbFrame ssbFrame = null;
+
+
+ /**
+ * Initialize.
+ *
+ * set the signature algorithm
+ * generate a key pair
+ * set the test content
+ * for ticket and layout
+ */
+ @Before public void initialize() {
+
+ LoggerFactory.setActivateConsoleLog(true);
+
+ algorithmOID = Constants.DSA_SHA224;
+ keySize = 1024;
+
+ Security.addProvider(new BouncyCastleProvider());
+
+ try {
+ keyPair = generateDSAKeys(keySize);
+ } catch (NoSuchAlgorithmException | NoSuchProviderException | InvalidAlgorithmParameterException e) {
+ e.printStackTrace();
+ }
+
+ assert(keyPair != null);
+
+ }
+
+
+
+
+
+ /**
+ * Test ssb pass encoding.
+ */
+ @Test public void testSsbEncoding() {
+
+
+ Encoder enc = null;
+
+ try {
+ enc = new Encoder(null, null, Encoder.UIC_BARCODE_TYPE_SSB, 0, 0);
+ } catch (IOException | EncodingFormatException e1) {
+ assert(false);
+ }
+
+ enc.setSsbFrame(SsbTicketFactory.getSsbNonUic());
+
+ assert(enc != null);
+
+ try {
+ enc.signLevel1("1080", keyPair.getPrivate(), algorithmOID, "1");
+ } catch (Exception e) {
+ assert(false);
+ }
+
+ byte[] encoded = null;
+ try {
+ encoded = enc.encode();
+ } catch (Exception e) {
+ assert(false);
+ }
+
+ assert(encoded != null);
+
+ assert(encoded.length == 114);
+
+ }
+
+ /**
+ * Test dynamic header barcode decoding.
+ */
+ @Test public void testSsbDecoding() {
+
+
+
+
+ Encoder enc = null;
+
+ try {
+ enc = new Encoder(null, null, Encoder.UIC_BARCODE_TYPE_SSB, 1, 0);
+ } catch (IOException | EncodingFormatException e1) {
+ assert(false);
+ }
+
+ enc.setSsbFrame( SsbTicketFactory.getSsbNonUic());
+
+ assert(enc != null);
+
+ try {
+ enc.signLevel1("4711", keyPair.getPrivate(), algorithmOID, "1");
+ } catch (Exception e) {
+ assert(false);
+ }
+
+
+ byte[] encoded = null;
+ try {
+ encoded = enc.encode();
+ } catch (Exception e) {
+ assert(false);
+ }
+
+ assert(encoded != null);
+
+ Decoder dec = null;
+ try {
+ dec = new Decoder(encoded);
+ } catch (IOException e) {
+ assert(false);
+ } catch (EncodingFormatException e) {
+ assert(false);
+ } catch (DataFormatException e) {
+ assert(false);
+ }
+ assert(dec != null);
+
+ int signatureCheck = 0;
+ try {
+ signatureCheck = dec.validateLevel1(keyPair.getPublic(),algorithmOID);
+ } catch (InvalidKeyException | NoSuchAlgorithmException | SignatureException | IllegalArgumentException
+ | UnsupportedOperationException | IOException | EncodingFormatException e) {
+ assert(false);
+ }
+
+ assert(signatureCheck == Constants.LEVEL1_VALIDATION_OK);
+
+ assert(dec.getSsbFrame() != null);
+
+ assert(dec.getSsbFrame().getHeader() != null);
+
+ SsbFrame ref = SsbTicketFactory.getSsbNonUic();
+
+ assert(dec.getSsbFrame().getHeader().getKeyId() == 1);
+ assert(dec.getSsbFrame().getHeader().getIssuer() == 4711);
+ assert(dec.getSsbFrame().getHeader().getTicketType().equals(ref.getHeader().getTicketType()));
+ assert(dec.getSsbFrame().getHeader().getVersion() == 1);
+
+ assert(dec.getSsbFrame().getNonUicData() != null);
+
+ assert(dec.getSsbFrame().getNonUicData().getOpenData() != null);
+
+
+
+ for (int i = 0; i < ref.getNonUicData().getOpenData().length; i++) {
+ assert (dec.getSsbFrame().getNonUicData().getOpenData()[i] == (ref.getNonUicData().getOpenData())[i] );
+ }
+
+
+ }
+
+ /**
+ * Generate DSA keys.
+ *
+ * @return the key pair
+ * @throws NoSuchAlgorithmException the no such algorithm exception
+ * @throws NoSuchProviderException the no such provider exception
+ * @throws InvalidAlgorithmParameterException the invalid algorithm parameter exception
+ */
+ public KeyPair generateDSAKeys(int keySize) throws NoSuchAlgorithmException, NoSuchProviderException, InvalidAlgorithmParameterException{
+ KeyPairGenerator g = KeyPairGenerator.getInstance("DSA", "BC");
+ g.initialize(keySize, new SecureRandom());
+ return g.generateKeyPair();
+ }
+
+}
diff --git a/src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestNrt.java b/src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestNrt.java
new file mode 100644
index 0000000..2000ee1
--- /dev/null
+++ b/src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestNrt.java
@@ -0,0 +1,214 @@
+package org.uic.barcode.test;
+
+import java.io.IOException;
+import java.security.InvalidAlgorithmParameterException;
+import java.security.InvalidKeyException;
+import java.security.KeyPair;
+import java.security.KeyPairGenerator;
+import java.security.NoSuchAlgorithmException;
+import java.security.NoSuchProviderException;
+import java.security.SecureRandom;
+import java.security.Security;
+import java.security.SignatureException;
+import java.util.zip.DataFormatException;
+
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.junit.Before;
+import org.junit.Test;
+import org.uic.barcode.Decoder;
+import org.uic.barcode.Encoder;
+import org.uic.barcode.dynamicFrame.Constants;
+import org.uic.barcode.logger.LoggerFactory;
+import org.uic.barcode.ssbFrame.SsbFrame;
+import org.uic.barcode.test.utils.SsbTicketFactory;
+import org.uic.barcode.ticket.EncodingFormatException;
+
+/**
+ * The Class StaticFrameBarcodeTest.
+ */
+public class SsbFrameBarcodeTestNrt {
+
+ /** The algorithm OID. */
+ public String algorithmOID = Constants.DSA_SHA224;
+
+ public int keySize = 1024;
+
+ /** The key pair. */
+ public KeyPair keyPair = null;
+
+
+ public SsbFrame ssbFrame = null;
+
+
+ /**
+ * Initialize.
+ *
+ * set the signature algorithm
+ * generate a key pair
+ * set the test content
+ * for ticket and layout
+ */
+ @Before public void initialize() {
+
+ LoggerFactory.setActivateConsoleLog(true);
+
+ algorithmOID = Constants.DSA_SHA224;
+ keySize = 1024;
+
+ Security.addProvider(new BouncyCastleProvider());
+
+ try {
+ keyPair = generateDSAKeys(keySize);
+ } catch (NoSuchAlgorithmException | NoSuchProviderException | InvalidAlgorithmParameterException e) {
+ e.printStackTrace();
+ }
+
+ assert(keyPair != null);
+
+ }
+
+
+
+
+
+ /**
+ * Test ssb pass encoding.
+ */
+ @Test public void testSsbEncoding() {
+
+
+ Encoder enc = null;
+
+ try {
+ enc = new Encoder(null, null, Encoder.UIC_BARCODE_TYPE_SSB, 0, 0);
+ } catch (IOException | EncodingFormatException e1) {
+ assert(false);
+ }
+
+ enc.setSsbFrame(SsbTicketFactory.getSsbNonReservation());
+
+ assert(enc != null);
+
+ try {
+ enc.signLevel1("1080", keyPair.getPrivate(), algorithmOID, "1");
+ } catch (Exception e) {
+ assert(false);
+ }
+
+ byte[] encoded = null;
+ try {
+ encoded = enc.encode();
+ } catch (Exception e) {
+ assert(false);
+ }
+
+ assert(encoded != null);
+
+ assert(encoded.length == 114);
+
+ }
+
+ /**
+ * Test dynamic header barcode decoding.
+ */
+ @Test public void testSsbDecoding() {
+
+
+
+
+ Encoder enc = null;
+
+ try {
+ enc = new Encoder(null, null, Encoder.UIC_BARCODE_TYPE_SSB, 1, 0);
+ } catch (IOException | EncodingFormatException e1) {
+ assert(false);
+ }
+
+ enc.setSsbFrame( SsbTicketFactory.getSsbNonReservation());
+
+ assert(enc != null);
+
+ try {
+ enc.signLevel1("4711", keyPair.getPrivate(), algorithmOID, "1");
+ } catch (Exception e) {
+ assert(false);
+ }
+
+
+ byte[] encoded = null;
+ try {
+ encoded = enc.encode();
+ } catch (Exception e) {
+ assert(false);
+ }
+
+ assert(encoded != null);
+
+ Decoder dec = null;
+ try {
+ dec = new Decoder(encoded);
+ } catch (IOException e) {
+ assert(false);
+ } catch (EncodingFormatException e) {
+ assert(false);
+ } catch (DataFormatException e) {
+ assert(false);
+ }
+ assert(dec != null);
+
+ int signatureCheck = 0;
+ try {
+ signatureCheck = dec.validateLevel1(keyPair.getPublic(),algorithmOID);
+ } catch (InvalidKeyException | NoSuchAlgorithmException | SignatureException | IllegalArgumentException
+ | UnsupportedOperationException | IOException | EncodingFormatException e) {
+ assert(false);
+ }
+
+ assert(signatureCheck == Constants.LEVEL1_VALIDATION_OK);
+
+ assert(dec.getSsbFrame() != null);
+
+ assert(dec.getSsbFrame().getHeader() != null);
+
+ SsbFrame ref = SsbTicketFactory.getSsbNonReservation();
+
+ assert(dec.getSsbFrame().getHeader().getKeyId() == 1);
+ assert(dec.getSsbFrame().getHeader().getIssuer() == 4711);
+ assert(dec.getSsbFrame().getHeader().getTicketType().equals(ref.getHeader().getTicketType()));
+ assert(dec.getSsbFrame().getHeader().getVersion() == 1);
+
+ assert(dec.getSsbFrame().getNonReservationData() != null);
+
+ assert(dec.getSsbFrame().getNonReservationData().getClassCode().equals(ref.getNonReservationData().getClassCode()));
+ assert(dec.getSsbFrame().getNonReservationData().isSpecimen() == ref.getNonReservationData().isSpecimen());
+ assert(dec.getSsbFrame().getNonReservationData().getFirstDayOfValidity() == ref.getNonReservationData().getFirstDayOfValidity());
+ assert(dec.getSsbFrame().getNonReservationData().getLastDayOfValidity() == ref.getNonReservationData().getLastDayOfValidity());
+
+
+ assert(dec.getSsbFrame().getNonReservationData().getStations() != null);
+
+ SsbTicketFactory.compareStations(dec.getSsbFrame().getNonReservationData().getStations(), ref.getNonReservationData().getStations());
+
+ SsbTicketFactory.compareCommonTicketPart(dec.getSsbFrame().getNonReservationData(), ref.getNonReservationData());
+
+
+ assert(dec.getSsbFrame().getNonReservationData().getInfoCode() == ref.getNonReservationData().getInfoCode());
+ assert(dec.getSsbFrame().getNonReservationData().getText().equalsIgnoreCase(ref.getNonReservationData().getText()));
+
+ }
+
+ /**
+ * Generate DSA keys.
+ *
+ * @return the key pair
+ * @throws NoSuchAlgorithmException the no such algorithm exception
+ * @throws NoSuchProviderException the no such provider exception
+ * @throws InvalidAlgorithmParameterException the invalid algorithm parameter exception
+ */
+ public KeyPair generateDSAKeys(int keySize) throws NoSuchAlgorithmException, NoSuchProviderException, InvalidAlgorithmParameterException{
+ KeyPairGenerator g = KeyPairGenerator.getInstance("DSA", "BC");
+ g.initialize(keySize, new SecureRandom());
+ return g.generateKeyPair();
+ }
+
+}
diff --git a/src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestPass.java b/src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestPass.java
new file mode 100644
index 0000000..dd2101a
--- /dev/null
+++ b/src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestPass.java
@@ -0,0 +1,215 @@
+package org.uic.barcode.test;
+
+import java.io.IOException;
+import java.security.InvalidAlgorithmParameterException;
+import java.security.InvalidKeyException;
+import java.security.KeyPair;
+import java.security.KeyPairGenerator;
+import java.security.NoSuchAlgorithmException;
+import java.security.NoSuchProviderException;
+import java.security.SecureRandom;
+import java.security.Security;
+import java.security.SignatureException;
+import java.util.zip.DataFormatException;
+
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.junit.Before;
+import org.junit.Test;
+import org.uic.barcode.Decoder;
+import org.uic.barcode.Encoder;
+import org.uic.barcode.dynamicFrame.Constants;
+import org.uic.barcode.logger.LoggerFactory;
+import org.uic.barcode.ssbFrame.SsbFrame;
+import org.uic.barcode.test.utils.SsbTicketFactory;
+import org.uic.barcode.ticket.EncodingFormatException;
+
+/**
+ * The Class StaticFrameBarcodeTest.
+ */
+public class SsbFrameBarcodeTestPass {
+
+ /** The algorithm OID. */
+ public String algorithmOID = Constants.DSA_SHA224;
+
+ public int keySize = 1024;
+
+ /** The key pair. */
+ public KeyPair keyPair = null;
+
+
+ public SsbFrame ssbFrame = null;
+
+
+ /**
+ * Initialize.
+ *
+ * set the signature algorithm
+ * generate a key pair
+ * set the test content
+ * for ticket and layout
+ */
+ @Before public void initialize() {
+
+ LoggerFactory.setActivateConsoleLog(true);
+
+ algorithmOID = Constants.DSA_SHA224;
+ keySize = 1024;
+
+ Security.addProvider(new BouncyCastleProvider());
+
+ try {
+ keyPair = generateDSAKeys(keySize);
+ } catch (NoSuchAlgorithmException | NoSuchProviderException | InvalidAlgorithmParameterException e) {
+ e.printStackTrace();
+ }
+
+ assert(keyPair != null);
+
+ }
+
+
+
+
+
+ /**
+ * Test ssb pass encoding.
+ */
+ @Test public void testSsbPassEncoding() {
+
+
+ Encoder enc = null;
+
+ try {
+ enc = new Encoder(null, null, Encoder.UIC_BARCODE_TYPE_SSB, 0, 0);
+ } catch (IOException | EncodingFormatException e1) {
+ assert(false);
+ }
+
+ enc.setSsbFrame(SsbTicketFactory.getSsbPass());
+
+ assert(enc != null);
+
+ try {
+ enc.signLevel1("1080", keyPair.getPrivate(), algorithmOID, "1");
+ } catch (Exception e) {
+ assert(false);
+ }
+
+ byte[] encoded = null;
+ try {
+ encoded = enc.encode();
+ } catch (Exception e) {
+ assert(false);
+ }
+
+ assert(encoded != null);
+
+ assert(encoded.length == 114);
+
+ }
+
+ /**
+ * Test dynamic header barcode decoding.
+ */
+ @Test public void testSsbPassDecoding() {
+
+
+
+
+ Encoder enc = null;
+
+ try {
+ enc = new Encoder(null, null, Encoder.UIC_BARCODE_TYPE_SSB, 1, 0);
+ } catch (IOException | EncodingFormatException e1) {
+ assert(false);
+ }
+
+ enc.setSsbFrame( SsbTicketFactory.getSsbPass());
+
+ assert(enc != null);
+
+ try {
+ enc.signLevel1("4711", keyPair.getPrivate(), algorithmOID, "1");
+ } catch (Exception e) {
+ assert(false);
+ }
+
+
+ byte[] encoded = null;
+ try {
+ encoded = enc.encode();
+ } catch (Exception e) {
+ assert(false);
+ }
+
+ assert(encoded != null);
+
+ Decoder dec = null;
+ try {
+ dec = new Decoder(encoded);
+ } catch (IOException e) {
+ assert(false);
+ } catch (EncodingFormatException e) {
+ assert(false);
+ } catch (DataFormatException e) {
+ assert(false);
+ }
+ assert(dec != null);
+
+ int signatureCheck = 0;
+ try {
+ signatureCheck = dec.validateLevel1(keyPair.getPublic(),algorithmOID);
+ } catch (InvalidKeyException | NoSuchAlgorithmException | SignatureException | IllegalArgumentException
+ | UnsupportedOperationException | IOException | EncodingFormatException e) {
+ assert(false);
+ }
+
+ assert(signatureCheck == Constants.LEVEL1_VALIDATION_OK);
+
+ assert(dec.getSsbFrame() != null);
+
+ assert(dec.getSsbFrame().getHeader() != null);
+
+ SsbFrame ref = SsbTicketFactory.getSsbPass();
+
+ assert(dec.getSsbFrame().getHeader().getKeyId() == 1);
+ assert(dec.getSsbFrame().getHeader().getIssuer() == 4711);
+ assert(dec.getSsbFrame().getHeader().getTicketType().equals(ref.getHeader().getTicketType()));
+ assert(dec.getSsbFrame().getHeader().getVersion() == 1);
+
+ assert(dec.getSsbFrame().getPassData() != null);
+ assert(dec.getSsbFrame().getPassData().getClassCode().equals(ref.getPassData().getClassCode()));
+ assert(dec.getSsbFrame().getPassData().isSpecimen() == ref.getPassData().isSpecimen());
+ assert(dec.getSsbFrame().getPassData().isHasSecondPage() == ref.getPassData().isHasSecondPage());
+ assert(dec.getSsbFrame().getPassData().getCountry_1() == ref.getPassData().getCountry_1());
+ assert(dec.getSsbFrame().getPassData().getCountry_2() == ref.getPassData().getCountry_2());
+ assert(dec.getSsbFrame().getPassData().getCountry_3() == ref.getPassData().getCountry_3());
+ assert(dec.getSsbFrame().getPassData().getCountry_4() == ref.getPassData().getCountry_4());
+ assert(dec.getSsbFrame().getPassData().getCountry_5() == ref.getPassData().getCountry_5());
+ assert(dec.getSsbFrame().getPassData().getDay() == ref.getPassData().getDay());
+ assert(dec.getSsbFrame().getPassData().getFirstDayOfValidity() == ref.getPassData().getFirstDayOfValidity());
+ assert(dec.getSsbFrame().getPassData().getInfoCode() == ref.getPassData().getInfoCode());
+ assert(dec.getSsbFrame().getPassData().getMaximumValidityDuration() == ref.getPassData().getMaximumValidityDuration());
+ assert(dec.getSsbFrame().getPassData().getNumberOfAdults() == ref.getPassData().getNumberOfAdults());
+ assert(dec.getSsbFrame().getPassData().getNumberOfChildren() == ref.getPassData().getNumberOfChildren());
+ assert(dec.getSsbFrame().getPassData().getNumberOfTravels() == ref.getPassData().getNumberOfTravels());
+ assert(dec.getSsbFrame().getPassData().getText().equalsIgnoreCase(ref.getPassData().getText()));
+ assert(dec.getSsbFrame().getPassData().getTicketNumber().equals(ref.getPassData().getTicketNumber()));
+ assert(dec.getSsbFrame().getPassData().getYear() == ref.getPassData().getYear());
+ }
+
+ /**
+ * Generate DSA keys.
+ *
+ * @return the key pair
+ * @throws NoSuchAlgorithmException the no such algorithm exception
+ * @throws NoSuchProviderException the no such provider exception
+ * @throws InvalidAlgorithmParameterException the invalid algorithm parameter exception
+ */
+ public KeyPair generateDSAKeys(int keySize) throws NoSuchAlgorithmException, NoSuchProviderException, InvalidAlgorithmParameterException{
+ KeyPairGenerator g = KeyPairGenerator.getInstance("DSA", "BC");
+ g.initialize(keySize, new SecureRandom());
+ return g.generateKeyPair();
+ }
+
+}
diff --git a/src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestReservation.java b/src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestReservation.java
new file mode 100644
index 0000000..5f9e11e
--- /dev/null
+++ b/src/test/java/org/uic/barcode/test/SsbFrameBarcodeTestReservation.java
@@ -0,0 +1,222 @@
+package org.uic.barcode.test;
+
+import java.io.IOException;
+import java.security.InvalidAlgorithmParameterException;
+import java.security.InvalidKeyException;
+import java.security.KeyPair;
+import java.security.KeyPairGenerator;
+import java.security.NoSuchAlgorithmException;
+import java.security.NoSuchProviderException;
+import java.security.SecureRandom;
+import java.security.Security;
+import java.security.SignatureException;
+import java.util.zip.DataFormatException;
+
+import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.junit.Before;
+import org.junit.Test;
+import org.uic.barcode.Decoder;
+import org.uic.barcode.Encoder;
+import org.uic.barcode.dynamicFrame.Constants;
+import org.uic.barcode.logger.LoggerFactory;
+import org.uic.barcode.ssbFrame.SsbFrame;
+import org.uic.barcode.test.utils.SsbTicketFactory;
+import org.uic.barcode.ticket.EncodingFormatException;
+
+/**
+ * The Class StaticFrameBarcodeTest.
+ */
+public class SsbFrameBarcodeTestReservation {
+
+ /** The algorithm OID. */
+ public String algorithmOID = Constants.DSA_SHA224;
+
+ public int keySize = 1024;
+
+ /** The key pair. */
+ public KeyPair keyPair = null;
+
+
+ public SsbFrame ssbFrame = null;
+
+
+ /**
+ * Initialize.
+ *
+ * set the signature algorithm
+ * generate a key pair
+ * set the test content
+ * for ticket and layout
+ */
+ @Before public void initialize() {
+
+ LoggerFactory.setActivateConsoleLog(true);
+
+ algorithmOID = Constants.DSA_SHA224;
+ keySize = 1024;
+
+ Security.addProvider(new BouncyCastleProvider());
+
+ try {
+ keyPair = generateDSAKeys(keySize);
+ } catch (NoSuchAlgorithmException | NoSuchProviderException | InvalidAlgorithmParameterException e) {
+ e.printStackTrace();
+ }
+
+ assert(keyPair != null);
+
+ }
+
+
+
+
+
+ /**
+ * Test ssb pass encoding.
+ */
+ @Test public void testSsbEncoding() {
+
+
+ Encoder enc = null;
+
+ try {
+ enc = new Encoder(null, null, Encoder.UIC_BARCODE_TYPE_SSB, 0, 0);
+ } catch (IOException | EncodingFormatException e1) {
+ assert(false);
+ }
+
+ enc.setSsbFrame(SsbTicketFactory.getSsbReservation());
+
+ assert(enc != null);
+
+ try {
+ enc.signLevel1("1080", keyPair.getPrivate(), algorithmOID, "1");
+ } catch (Exception e) {
+ assert(false);
+ }
+
+ byte[] encoded = null;
+ try {
+ encoded = enc.encode();
+ } catch (Exception e) {
+ assert(false);
+ }
+
+ assert(encoded != null);
+
+ assert(encoded.length == 114);
+
+ }
+
+ /**
+ * Test dynamic header barcode decoding.
+ */
+ @Test public void testSsbDecoding() {
+
+
+
+
+ Encoder enc = null;
+
+ try {
+ enc = new Encoder(null, null, Encoder.UIC_BARCODE_TYPE_SSB, 1, 0);
+ } catch (IOException | EncodingFormatException e1) {
+ assert(false);
+ }
+
+ enc.setSsbFrame( SsbTicketFactory.getSsbReservation());
+
+ assert(enc != null);
+
+ try {
+ enc.signLevel1("4711", keyPair.getPrivate(), algorithmOID, "1");
+ } catch (Exception e) {
+ assert(false);
+ }
+
+
+ byte[] encoded = null;
+ try {
+ encoded = enc.encode();
+ } catch (Exception e) {
+ assert(false);
+ }
+
+ assert(encoded != null);
+
+ Decoder dec = null;
+ try {
+ dec = new Decoder(encoded);
+ } catch (IOException e) {
+ assert(false);
+ } catch (EncodingFormatException e) {
+ assert(false);
+ } catch (DataFormatException e) {
+ assert(false);
+ }
+ assert(dec != null);
+
+ int signatureCheck = 0;
+ try {
+ signatureCheck = dec.validateLevel1(keyPair.getPublic(),algorithmOID);
+ } catch (InvalidKeyException | NoSuchAlgorithmException | SignatureException | IllegalArgumentException
+ | UnsupportedOperationException | IOException | EncodingFormatException e) {
+ assert(false);
+ }
+
+ assert(signatureCheck == Constants.LEVEL1_VALIDATION_OK);
+
+ assert(dec.getSsbFrame() != null);
+
+ assert(dec.getSsbFrame().getHeader() != null);
+
+ SsbFrame ref = SsbTicketFactory.getSsbReservation();
+
+ assert(dec.getSsbFrame().getHeader().getKeyId() == 1);
+ assert(dec.getSsbFrame().getHeader().getIssuer() == 4711);
+ assert(dec.getSsbFrame().getHeader().getTicketType().equals(ref.getHeader().getTicketType()));
+ assert(dec.getSsbFrame().getHeader().getVersion() == 1);
+
+ assert(dec.getSsbFrame().getReservationData() != null);
+
+ assert(dec.getSsbFrame().getReservationData().getClassCode().equals(ref.getReservationData().getClassCode()));
+ assert(dec.getSsbFrame().getReservationData().isSpecimen() == ref.getReservationData().isSpecimen());
+ assert(dec.getSsbFrame().getReservationData().getCoach() == ref.getReservationData().getCoach());
+ assert(dec.getSsbFrame().getReservationData().getDepartureDate() == ref.getReservationData().getDepartureDate());
+ assert(dec.getSsbFrame().getReservationData().getDepartureTime() == ref.getReservationData().getDepartureTime());
+
+
+ assert(dec.getSsbFrame().getReservationData().getStations() != null);
+
+ SsbTicketFactory.compareStations(dec.getSsbFrame().getReservationData().getStations(), ref.getReservationData().getStations());
+
+ SsbTicketFactory.compareCommonTicketPart(dec.getSsbFrame().getReservationData(), ref.getReservationData());
+
+
+ assert(dec.getSsbFrame().getReservationData().getPlace().equals(ref.getReservationData().getPlace()));
+ assert(dec.getSsbFrame().getReservationData().getTicketSubType() == ref.getReservationData().getTicketSubType());
+ assert(dec.getSsbFrame().getReservationData().getTrain().equals(ref.getReservationData().getTrain()));
+ assert(dec.getSsbFrame().getReservationData().isOverbooking() == ref.getReservationData().isOverbooking());
+
+ assert(dec.getSsbFrame().getReservationData().getInfoCode() == ref.getReservationData().getInfoCode());
+ assert(dec.getSsbFrame().getReservationData().getText().equalsIgnoreCase(ref.getReservationData().getText()));
+
+
+
+ }
+
+ /**
+ * Generate DSA keys.
+ *
+ * @return the key pair
+ * @throws NoSuchAlgorithmException the no such algorithm exception
+ * @throws NoSuchProviderException the no such provider exception
+ * @throws InvalidAlgorithmParameterException the invalid algorithm parameter exception
+ */
+ public KeyPair generateDSAKeys(int keySize) throws NoSuchAlgorithmException, NoSuchProviderException, InvalidAlgorithmParameterException{
+ KeyPairGenerator g = KeyPairGenerator.getInstance("DSA", "BC");
+ g.initialize(keySize, new SecureRandom());
+ return g.generateKeyPair();
+ }
+
+}
diff --git a/src/test/java/org/uic/barcode/test/utils/SsbTicketFactory.java b/src/test/java/org/uic/barcode/test/utils/SsbTicketFactory.java
new file mode 100644
index 0000000..539fced
--- /dev/null
+++ b/src/test/java/org/uic/barcode/test/utils/SsbTicketFactory.java
@@ -0,0 +1,193 @@
+package org.uic.barcode.test.utils;
+
+import org.uic.barcode.ssbFrame.SsbClass;
+import org.uic.barcode.ssbFrame.SsbCommonTicketPart;
+import org.uic.barcode.ssbFrame.SsbFrame;
+import org.uic.barcode.ssbFrame.SsbGroup;
+import org.uic.barcode.ssbFrame.SsbHeader;
+import org.uic.barcode.ssbFrame.SsbNonReservation;
+import org.uic.barcode.ssbFrame.SsbNonUic;
+import org.uic.barcode.ssbFrame.SsbPass;
+import org.uic.barcode.ssbFrame.SsbReservation;
+import org.uic.barcode.ssbFrame.SsbStationCodeTable;
+import org.uic.barcode.ssbFrame.SsbStations;
+import org.uic.barcode.ssbFrame.SsbTicketType;
+
+public class SsbTicketFactory {
+
+ public static SsbFrame getSsbPass() {
+
+ SsbFrame ssbPass = new SsbFrame();
+
+ ssbPass.setHeader(new SsbHeader());
+ ssbPass.getHeader().setIssuer(4711);
+ ssbPass.getHeader().setTicketType(SsbTicketType.UIC_4_RPT);
+ ssbPass.getHeader().setVersion(1);
+
+
+ ssbPass.setPassData(new SsbPass());
+ ssbPass.getPassData().setClassCode(SsbClass.FIRST);
+ ssbPass.getPassData().setCountry_1(10);
+ ssbPass.getPassData().setCountry_2(12);
+ ssbPass.getPassData().setDay(1);
+ ssbPass.getPassData().setFirstDayOfValidity(120);
+ ssbPass.getPassData().setHasSecondPage(false);
+ ssbPass.getPassData().setInfoCode(12);
+ ssbPass.getPassData().setMaximumValidityDuration(2);
+ ssbPass.getPassData().setNumberOfAdults(2);
+ ssbPass.getPassData().setNumberOfChildren(3);
+ ssbPass.getPassData().setNumberOfTravels(3);
+ ssbPass.getPassData().setPassSubType(1);
+ ssbPass.getPassData().setSpecimen(true);
+ ssbPass.getPassData().setText("Test");
+ ssbPass.getPassData().setTicketNumber("SKCTS86");
+ ssbPass.getPassData().setYear(3);
+
+ return ssbPass;
+ }
+
+ public static SsbFrame getSsbGroup() {
+
+ SsbFrame ssb = new SsbFrame();
+
+ ssb.setHeader(new SsbHeader());
+ ssb.getHeader().setIssuer(4711);
+ ssb.getHeader().setTicketType(SsbTicketType.UIC_3_GRP);
+ ssb.getHeader().setVersion(1);
+
+
+ ssb.setGroupData(new SsbGroup());
+ ssb.getGroupData().setClassCode(SsbClass.FIRST);
+ ssb.getGroupData().setCounterMarkNumber(1);
+ ssb.getGroupData().setDay(1);
+ ssb.getGroupData().setFirstDayOfValidity(10);
+ ssb.getGroupData().setFirstDayOfValidity(120);
+ ssb.getGroupData().setGroupName("GroupName");
+ ssb.getGroupData().setInfoCode(12);
+ ssb.getGroupData().setLastDayOfValidity(3);
+ ssb.getGroupData().setNumberOfAdults(2);
+ ssb.getGroupData().setNumberOfChildren(3);
+ ssb.getGroupData().setReturnJourney(false);
+ ssb.getGroupData().setSpecimen(true);
+ ssb.getGroupData().setText("Test");
+ ssb.getGroupData().setTicketNumber("SKCTS86");
+ ssb.getGroupData().setYear(3);
+
+ ssb.getGroupData().getStations().setArrivalStationCode("8012345");
+ ssb.getGroupData().getStations().setDepartureStationCode("8054321");
+ ssb.getGroupData().getStations().setCodeTable(SsbStationCodeTable.NRT);
+
+ return ssb;
+ }
+
+ public static SsbFrame getSsbNonReservation() {
+
+ SsbFrame ssb = new SsbFrame();
+
+ ssb.setHeader(new SsbHeader());
+ ssb.getHeader().setIssuer(4711);
+ ssb.getHeader().setTicketType(SsbTicketType.UIC_2_NRT);
+ ssb.getHeader().setVersion(1);
+
+
+ ssb.setNonReservationData(new SsbNonReservation());
+ ssb.getNonReservationData().setClassCode(SsbClass.FIRST);
+ ssb.getNonReservationData().setDay(1);
+ ssb.getNonReservationData().setFirstDayOfValidity(10);
+ ssb.getNonReservationData().setFirstDayOfValidity(120);
+ ssb.getNonReservationData().setInfoCode(12);
+ ssb.getNonReservationData().setLastDayOfValidity(3);
+ ssb.getNonReservationData().setNumberOfAdults(2);
+ ssb.getNonReservationData().setNumberOfChildren(3);
+ ssb.getNonReservationData().setReturnJourney(false);
+ ssb.getNonReservationData().setSpecimen(true);
+ ssb.getNonReservationData().setText("Test");
+ ssb.getNonReservationData().setTicketNumber("SKCTS86");
+ ssb.getNonReservationData().setYear(3);
+
+
+ ssb.getNonReservationData().getStations().setArrivalStationCode("8012345");
+ ssb.getNonReservationData().getStations().setDepartureStationCode("8054321");
+ ssb.getNonReservationData().getStations().setCodeTable(SsbStationCodeTable.NRT);
+
+ return ssb;
+ }
+
+ public static SsbFrame getSsbReservation() {
+
+ SsbFrame ssb = new SsbFrame();
+
+ ssb.setHeader(new SsbHeader());
+ ssb.getHeader().setIssuer(4711);
+ ssb.getHeader().setTicketType(SsbTicketType.UIC_1_IRT_RES_BOA);
+ ssb.getHeader().setVersion(1);
+
+
+ ssb.setReservationData(new SsbReservation());
+ ssb.getReservationData().setClassCode(SsbClass.FIRST);
+ ssb.getReservationData().setDay(1);
+ ssb.getReservationData().setCoach(123);
+ ssb.getReservationData().setDepartureDate(120);
+ ssb.getReservationData().setDepartureTime(500);
+ ssb.getReservationData().setOverbooking(false);
+ ssb.getReservationData().setNumberOfAdults(2);
+ ssb.getReservationData().setNumberOfChildren(3);
+ ssb.getReservationData().setPlace("05B");
+ ssb.getReservationData().setTicketSubType(2);
+ ssb.getReservationData().setTrain("1234B");
+
+ ssb.getReservationData().setSpecimen(true);
+ ssb.getReservationData().setText("Test");
+ ssb.getReservationData().setTicketNumber("SKCTS86");
+ ssb.getReservationData().setYear(3);
+
+
+ ssb.getReservationData().getStations().setArrivalStationCode("8012345");
+ ssb.getReservationData().getStations().setDepartureStationCode("8054321");
+ ssb.getReservationData().getStations().setCodeTable(SsbStationCodeTable.NRT);
+
+ return ssb;
+ }
+
+ public static SsbFrame getSsbNonUic() {
+
+ SsbFrame ssb = new SsbFrame();
+
+ ssb.setHeader(new SsbHeader());
+ ssb.getHeader().setIssuer(4711);
+ ssb.getHeader().setTicketType(SsbTicketType.NONUIC_23_BILATERAL);
+ ssb.getHeader().setVersion(1);
+
+
+ ssb.setNonUicData(new SsbNonUic());
+ ssb.getNonUicData().setOpenData("TestData".getBytes());
+
+
+ return ssb;
+ }
+
+ public static void compareStations(SsbStations stations, SsbStations stations2) {
+
+ assert (stations.getCodeTable().equals(stations2.getCodeTable()));
+
+ assert (stations.getArrivalStationCode().equals(stations2.getArrivalStationCode()));
+
+ assert (stations.getDepartureStationCode().equals(stations2.getDepartureStationCode()));
+
+ }
+
+ public static void compareCommonTicketPart(SsbCommonTicketPart part, SsbCommonTicketPart part2) {
+
+ assert(part.isSpecimen() == part2.isSpecimen());
+ assert(part.getDay() == part2.getDay());
+ assert(part.getNumberOfAdults() == part2.getNumberOfAdults());
+ assert(part.getNumberOfChildren() == part2.getNumberOfChildren());
+ assert(part.getTicketNumber().equals(part2.getTicketNumber()));
+ assert(part.getYear() == part2.getYear());
+
+ }
+
+
+
+
+}