blob: e7aeae81a619de320d2168ba2e74f8c839a5730a (
plain) (
tree)
|
|
package org.uic.barcode.ticket.api.test;
import java.io.IOException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.uic.barcode.asn1.uper.UperEncoder;
import org.uic.barcode.ticket.EncodingFormatException;
import org.uic.barcode.ticket.api.asn.omv1.UicRailTicketData;
import org.uic.barcode.ticket.api.spec.IPass;
import org.uic.barcode.ticket.api.spec.IUicRailTicket;
import org.uic.barcode.ticket.api.test.testtickets.PassTimeZoneTestTicketCase1V1;
import org.uic.barcode.ticket.api.test.testtickets.PassTimeZoneTestTicketCase2V1;
import org.uic.barcode.ticket.api.test.testtickets.PassTimeZoneTestTicketCase3V1;
import org.uic.barcode.ticket.api.utils.Api2OpenAsnEncoder;
import org.uic.barcode.ticket.api.utils.OpenAsn2ApiDecoder;
/**
* The Class PassTimeZoneTestV1.
*
*
* test validity dates and activated days in different time zones
*
Case 1:
issue date: 04-03-2021 12:30 UTC
issuingYear: 2021
issuingDay: 63
issuingTime: 750
validFromDay: 10
activatedDays: [0]
utcOffset: 0
expected: activated for 04-03-2021 + 10 + 0 00:00 UTC --> 14-03-2021
Case 2:
issue date: 04-03-2021 00:30 UTC
issuingYear: 2021
issuingDay: 63
issuingTime: 30
validFromDay: 10
activatedDays: [0]
utcOffset: 0
expected: activated for 04-03-2021 + 10 + 0 00:00 UTC --> 14-03-2021
Case 3:
issue date: 03-03-2021 23:30 UTC
issuingYear: 2021
issuingDay: 62
issuingTime: 1410
validFromDay: 11
activatedDays: [0]
expected: activated for 03-03-2021 + 11 + 0 00:00 UTC --> 14-03-2021
*
* - Test tickets defined on the level of the asn.1 object model
* - set the local time zone
* - decoded to get an API ticket object
* - encode again to
*
*
*
*
*/
public class PassTimeZoneTestV1 {
/** The low level encoded test ticket test case 1 . */
private byte[] encoded1 = null;
/** The low level encoded test ticket test case 2 . */
private byte[] encoded2 = null;
/** The low level encoded test ticket test case 3 . */
private byte[] encoded3 = null;
/** The decoder. */
OpenAsn2ApiDecoder decoder = new OpenAsn2ApiDecoder();
/** The encoder. */
Api2OpenAsnEncoder encoder = new Api2OpenAsnEncoder();
/** The API ticket low level encoded for case 1. */
IUicRailTicket iTicketDecodedFromAsn1Case1 = null;
/** The API ticket low level encoded for case 2. */
IUicRailTicket iTicketDecodedFromAsn1Case2 = null;
/** The API ticket low level encoded for case 3. */
IUicRailTicket iTicketDecodedFromAsn1Case3 = null;
/** The ticket decoded 1. */
IUicRailTicket iTicketDecodedCase1 = null;
/** The i ticket decoded 2. */
IUicRailTicket iTicketDecodedCase2 = null;
/** The i ticket decoded 3. */
IUicRailTicket iTicketDecodedCase3 = null;
byte[] encodedInTimeZone1 = null;
byte[] encodedInTimeZone2 = null;
byte[] encodedInTimeZone3 = null;
String issuingDate1 = null;
String issuingDate2 = null;
String issuingDate3 = null;
String validFrom1 = null;
String validFrom2 = null;
String validFrom3 = null;
String validUntil1 = null;
String validUntil2 = null;
String validUntil3 = null;
String activationDate1 = null;
String activationDate2 = null;
String activationDate3 = null;
TimeZone defaulttimeZone = null;
/**
* Prepare tickets.
*/
@Before public void prepare() {
defaulttimeZone = TimeZone.getDefault();
UicRailTicketData ticket1 = PassTimeZoneTestTicketCase1V1.getUicTestTicket();
UicRailTicketData ticket2 = PassTimeZoneTestTicketCase2V1.getUicTestTicket();
UicRailTicketData ticket3 = PassTimeZoneTestTicketCase3V1.getUicTestTicket();
//encode in UTC time zone
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
encoded1 = UperEncoder.encode(ticket1);
encoded2 = UperEncoder.encode(ticket2);
encoded3 = UperEncoder.encode(ticket3);
}
/**
* clean up
*/
@After public void resetTimeZone() {
TimeZone.setDefault(defaulttimeZone);
}
/**
* Test decode test tickets in CET.
*
* @throws IllegalArgumentException the illegal argument exception
* @throws IllegalAccessException the illegal access exception
*/
@Test public void testCETdecodeOnly() throws IllegalArgumentException, IllegalAccessException {
encodedInTimeZone1 = encoded1;
encodedInTimeZone2 = encoded2;
encodedInTimeZone3 = encoded3;
decode("CET");
decodedDateToStrings();
assert(issuingDate1.equals("Thu Mar 04 13:30:00 CET 2021" ));
assert(issuingDate2.equals("Thu Mar 04 01:30:00 CET 2021" ));
assert(issuingDate3.equals("Thu Mar 04 00:30:00 CET 2021" ));
assert(validFrom1.equals("Sun Mar 14 00:00:00 CET 2021" ));
assert(validFrom2.equals("Sun Mar 14 00:00:00 CET 2021" ));
assert(validFrom3.equals("Sun Mar 14 00:00:00 CET 2021" ));
assert(validUntil1.equals("Wed Mar 24 23:59:00 CET 2021" ));
assert(validUntil2.equals("Wed Mar 24 23:59:00 CET 2021" ));
assert(validUntil3.equals("Wed Mar 24 23:59:00 CET 2021" ));
assert(activationDate1.equals("Sun Mar 14 00:00:00 CET 2021" ));
assert(activationDate2.equals("Sun Mar 14 00:00:00 CET 2021" ));
assert(activationDate3.equals("Sun Mar 14 00:00:00 CET 2021" ));
}
/**
* Test decode test tickets in GMT.
*
* @throws IllegalArgumentException the illegal argument exception
* @throws IllegalAccessException the illegal access exception
*/
@Test public void testGMTdecodeOnly() throws IllegalArgumentException, IllegalAccessException {
encodedInTimeZone1 = encoded1;
encodedInTimeZone2 = encoded2;
encodedInTimeZone3 = encoded3;
//test decoded ticket
decode("GMT");
decodedDateToStrings();
assert(issuingDate1.equals("Thu Mar 04 12:30:00 GMT 2021" ));
assert(issuingDate2.equals("Thu Mar 04 00:30:00 GMT 2021" ));
assert(issuingDate3.equals("Wed Mar 03 23:30:00 GMT 2021" ));
assert(validFrom1.equals("Sun Mar 14 00:00:00 GMT 2021" ));
assert(validFrom2.equals("Sun Mar 14 00:00:00 GMT 2021" ));
assert(validFrom3.equals("Sun Mar 14 00:00:00 GMT 2021" ));
assert(validUntil1.equals("Wed Mar 24 23:59:00 GMT 2021" ));
assert(validUntil2.equals("Wed Mar 24 23:59:00 GMT 2021" ));
assert(validUntil3.equals("Wed Mar 24 23:59:00 GMT 2021" ));
assert(activationDate1.equals("Sun Mar 14 00:00:00 GMT 2021" ));
assert(activationDate2.equals("Sun Mar 14 00:00:00 GMT 2021" ));
assert(activationDate3.equals("Sun Mar 14 00:00:00 GMT 2021" ));
}
/**
* Test encode test tickets in UTC and decode in CET.
*
* @throws IllegalArgumentException the illegal argument exception
* @throws IllegalAccessException the illegal access exception
* @throws ParseException
*/
@Test public void testCETCETencoding() throws IllegalArgumentException, IllegalAccessException, ParseException {
//get tickets
decodeTestTicketUTC();
//set the dates in the time zone CET
TimeZone.setDefault(TimeZone.getTimeZone("CET"));
iTicketDecodedFromAsn1Case1.getIssuerDetails().setIssuingDate(new SimpleDateFormat( "yyyy.MM.dd-HH:mm" ).parse( "2021.03.04-12:30" ));
iTicketDecodedFromAsn1Case2.getIssuerDetails().setIssuingDate(new SimpleDateFormat( "yyyy.MM.dd-HH:mm" ).parse( "2021.03.04-00:30" ));
iTicketDecodedFromAsn1Case3.getIssuerDetails().setIssuingDate(new SimpleDateFormat( "yyyy.MM.dd-HH:mm" ).parse( "2021.03.03-23:30" ));
setValidFromTo("2021.03.14-00:00");
setValidUntilTo("2021.03.24-23:59");
setActivatedDayTo("2021.03.14-00:00");
encode("CET");
decode("CET");
decodedDateToStrings();
assert(issuingDate1.equals("Thu Mar 04 13:30:00 CET 2021" ));
assert(issuingDate2.equals("Thu Mar 04 01:30:00 CET 2021" ));
assert(issuingDate3.equals("Thu Mar 04 00:30:00 CET 2021" ));
assert(validFrom1.equals("Sun Mar 14 00:00:00 CET 2021" ));
assert(validFrom2.equals("Sun Mar 14 00:00:00 CET 2021" ));
assert(validFrom3.equals("Sun Mar 14 00:00:00 CET 2021" ));
assert(validUntil1.equals("Wed Mar 24 23:59:00 CET 2021" ));
assert(validUntil2.equals("Wed Mar 24 23:59:00 CET 2021" ));
assert(validUntil3.equals("Wed Mar 24 23:59:00 CET 2021" ));
assert(activationDate1.equals("Sun Mar 14 00:00:00 CET 2021" ));
assert(activationDate2.equals("Sun Mar 14 00:00:00 CET 2021" ));
assert(activationDate3.equals("Sun Mar 14 00:00:00 CET 2021" ));
}
/**
* Test encode test tickets in UTC and decode in CET.
*
* @throws IllegalArgumentException the illegal argument exception
* @throws IllegalAccessException the illegal access exception
* @throws ParseException
*/
@Test public void testGMTCETencoding() throws IllegalArgumentException, IllegalAccessException, ParseException {
//get tickets
decodeTestTicketUTC();
//set the dates in the time zone GMT
TimeZone.setDefault(TimeZone.getTimeZone("GMT"));
iTicketDecodedFromAsn1Case1.getIssuerDetails().setIssuingDate(new SimpleDateFormat( "yyyy.MM.dd-HH:mm" ).parse( "2021.03.04-12:30" ));
iTicketDecodedFromAsn1Case2.getIssuerDetails().setIssuingDate(new SimpleDateFormat( "yyyy.MM.dd-HH:mm" ).parse( "2021.03.04-00:30" ));
iTicketDecodedFromAsn1Case3.getIssuerDetails().setIssuingDate(new SimpleDateFormat( "yyyy.MM.dd-HH:mm" ).parse( "2021.03.03-23:30" ));
setValidFromTo("2021.03.14-00:00");
setValidUntilTo("2021.03.24-23:59");
setActivatedDayTo("2021.03.14-00:00");
encode("GMT");
decode("CET");
decodedDateToStrings();
assert(issuingDate1.equals("Thu Mar 04 13:30:00 CET 2021" ));
assert(issuingDate2.equals("Thu Mar 04 01:30:00 CET 2021" ));
assert(issuingDate3.equals("Thu Mar 04 00:30:00 CET 2021" ));
assert(validFrom1.equals("Sun Mar 14 00:00:00 CET 2021" ));
assert(validFrom2.equals("Sun Mar 14 00:00:00 CET 2021" ));
assert(validFrom3.equals("Sun Mar 14 00:00:00 CET 2021" ));
assert(validUntil1.equals("Wed Mar 24 23:59:00 CET 2021" ));
assert(validUntil2.equals("Wed Mar 24 23:59:00 CET 2021" ));
assert(validUntil3.equals("Wed Mar 24 23:59:00 CET 2021" ));
assert(activationDate1.equals("Sun Mar 14 00:00:00 CET 2021" ));
assert(activationDate2.equals("Sun Mar 14 00:00:00 CET 2021" ));
assert(activationDate3.equals("Sun Mar 14 00:00:00 CET 2021" ));
}
/**
* Test encode test tickets in UTC and decode in CET.
*
* @throws IllegalArgumentException the illegal argument exception
* @throws IllegalAccessException the illegal access exception
* @throws ParseException
*/
@Test public void testCETGMTencoding() throws IllegalArgumentException, IllegalAccessException, ParseException {
//get tickets
decodeTestTicketUTC();
//set the dates in the time zone GMT
TimeZone.setDefault(TimeZone.getTimeZone("CET"));
iTicketDecodedFromAsn1Case1.getIssuerDetails().setIssuingDate(new SimpleDateFormat( "yyyy.MM.dd-HH:mm" ).parse( "2021.03.04-12:30" ));
iTicketDecodedFromAsn1Case2.getIssuerDetails().setIssuingDate(new SimpleDateFormat( "yyyy.MM.dd-HH:mm" ).parse( "2021.03.04-00:30" ));
iTicketDecodedFromAsn1Case3.getIssuerDetails().setIssuingDate(new SimpleDateFormat( "yyyy.MM.dd-HH:mm" ).parse( "2021.03.03-23:30" ));
setValidFromTo("2021.03.14-00:00");
setValidUntilTo("2021.03.24-23:59");
setActivatedDayTo("2021.03.14-00:00");
encode("CET");
decode("GMT");
decodedDateToStrings();
assert(issuingDate1.equals("Thu Mar 04 12:30:00 GMT 2021" ));
assert(issuingDate2.equals("Thu Mar 04 00:30:00 GMT 2021" ));
assert(issuingDate3.equals("Wed Mar 03 23:30:00 GMT 2021" ));
assert(validFrom1.equals("Sun Mar 14 00:00:00 GMT 2021" ));
assert(validFrom2.equals("Sun Mar 14 00:00:00 GMT 2021" ));
assert(validFrom3.equals("Sun Mar 14 00:00:00 GMT 2021" ));
assert(validUntil1.equals("Wed Mar 24 23:59:00 GMT 2021" ));
assert(validUntil2.equals("Wed Mar 24 23:59:00 GMT 2021" ));
assert(validUntil3.equals("Wed Mar 24 23:59:00 GMT 2021" ));
assert(activationDate1.equals("Sun Mar 14 00:00:00 GMT 2021" ));
assert(activationDate2.equals("Sun Mar 14 00:00:00 GMT 2021" ));
assert(activationDate3.equals("Sun Mar 14 00:00:00 GMT 2021" ));
}
private void decodedDateToStrings() {
issuingDate1 = iTicketDecodedCase1.getIssuerDetails().getIssuingDate().toString();
issuingDate2 = iTicketDecodedCase2.getIssuerDetails().getIssuingDate().toString();
issuingDate3 = iTicketDecodedCase3.getIssuerDetails().getIssuingDate().toString();
validFrom1 = ((IPass) iTicketDecodedCase1.getDocumentData().iterator().next()).getValidFrom().toString();
validFrom2 = ((IPass) iTicketDecodedCase2.getDocumentData().iterator().next()).getValidFrom().toString();
validFrom3 = ((IPass) iTicketDecodedCase3.getDocumentData().iterator().next()).getValidFrom().toString();
validUntil1 = ((IPass) iTicketDecodedCase1.getDocumentData().iterator().next()).getValidUntil().toString();
validUntil2 = ((IPass) iTicketDecodedCase2.getDocumentData().iterator().next()).getValidUntil().toString();
validUntil3 = ((IPass) iTicketDecodedCase3.getDocumentData().iterator().next()).getValidUntil().toString();
activationDate1 = ((IPass) iTicketDecodedCase1.getDocumentData().iterator().next()).getActivatedDays().iterator().next().toString();
activationDate2 = ((IPass) iTicketDecodedCase2.getDocumentData().iterator().next()).getActivatedDays().iterator().next().toString();
activationDate3 = ((IPass) iTicketDecodedCase3.getDocumentData().iterator().next()).getActivatedDays().iterator().next().toString();
}
private void setActivatedDayTo(String dateString) throws ParseException {
DateFormat dateFormat = new SimpleDateFormat( "yyyy.MM.dd-HH:mm" );
Date date = dateFormat.parse(dateString);
((IPass) iTicketDecodedFromAsn1Case1.getDocumentData().iterator().next()).getActivatedDays().clear();
((IPass) iTicketDecodedFromAsn1Case1.getDocumentData().iterator().next()).getActivatedDays().add(date);
((IPass) iTicketDecodedFromAsn1Case2.getDocumentData().iterator().next()).getActivatedDays().clear();
((IPass) iTicketDecodedFromAsn1Case2.getDocumentData().iterator().next()).getActivatedDays().add(date);
((IPass) iTicketDecodedFromAsn1Case3.getDocumentData().iterator().next()).getActivatedDays().clear();
((IPass) iTicketDecodedFromAsn1Case3.getDocumentData().iterator().next()).getActivatedDays().add(date);
}
private void setValidFromTo(String dateString) throws ParseException {
DateFormat dateFormat = new SimpleDateFormat( "yyyy.MM.dd-HH:mm" );
Date date = dateFormat.parse(dateString);
((IPass) iTicketDecodedFromAsn1Case1.getDocumentData().iterator().next()).setValidFrom(date);
((IPass) iTicketDecodedFromAsn1Case2.getDocumentData().iterator().next()).setValidFrom(date);
((IPass) iTicketDecodedFromAsn1Case3.getDocumentData().iterator().next()).setValidFrom(date);
}
private void setValidUntilTo(String dateString) throws ParseException {
DateFormat dateFormat = new SimpleDateFormat( "yyyy.MM.dd-HH:mm" );
Date date = dateFormat.parse(dateString);
((IPass) iTicketDecodedFromAsn1Case1.getDocumentData().iterator().next()).setValidUntil(date);
((IPass) iTicketDecodedFromAsn1Case2.getDocumentData().iterator().next()).setValidUntil(date);
((IPass) iTicketDecodedFromAsn1Case3.getDocumentData().iterator().next()).setValidUntil(date);
}
/**
* Encode in Time Zone
*/
private void encode(String timeZone) {
TimeZone.setDefault(TimeZone.getTimeZone(timeZone));
try {
encodedInTimeZone1 = encoder.encode(iTicketDecodedFromAsn1Case1);
encodedInTimeZone2 = encoder.encode(iTicketDecodedFromAsn1Case2);
encodedInTimeZone3 = encoder.encode(iTicketDecodedFromAsn1Case3);
} catch (EncodingFormatException e) {
e.printStackTrace();
}
}
/**
* Decode in Time Zone
*/
private void decode(String timeZone) {
TimeZone.setDefault(TimeZone.getTimeZone(timeZone));
try {
iTicketDecodedCase1 = decoder.decodeFromAsn(encodedInTimeZone1);
iTicketDecodedCase2 = decoder.decodeFromAsn(encodedInTimeZone2);
iTicketDecodedCase3 = decoder.decodeFromAsn(encodedInTimeZone3);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* Encode decode.
*/
private void decodeTestTicketUTC() {
TimeZone.setDefault(TimeZone.getTimeZone("UTC"));
try {
iTicketDecodedFromAsn1Case1 = decoder.decodeFromAsn(encoded1);
iTicketDecodedFromAsn1Case2 = decoder.decodeFromAsn(encoded2);
iTicketDecodedFromAsn1Case3 = decoder.decodeFromAsn(encoded3);
} catch (IOException e) {
e.printStackTrace();
}
}
}
|