/************************************************************************* * * * CESeCore: CE Security Core * * * * This software is free software; you can redistribute it and/or * * modify it under the terms of the GNU Lesser General Public * * License as published by the Free Software Foundation; either * * version 2.1 of the License, or any later version. * * * * See terms of license at gnu.org. * * * *************************************************************************/ package org.cesecore.certificates.util; import java.text.ParseException; import java.util.Date; import java.util.TimeZone; import org.apache.commons.lang.time.FastDateFormat; import org.apache.log4j.Logger; import org.cesecore.util.ValidityDate; import org.junit.Assert; import org.junit.Test; /** * @version $Id: ValidityDateTest.java 24602 2016-10-31 13:26:34Z anatom $ */ public class ValidityDateTest { private static final Logger LOG = Logger.getLogger(ValidityDateTest.class); private static final String RELATIVE = "relative"; private static final String ABSOLUTE = "absolute"; /** Since the test will run in different time zones we will test combined operations. */ @Test public void testParseFormat() throws ParseException { LOG.trace(">testParseFormat"); final Date nowWithOutMillis = new Date((new Date().getTime()/1000)*1000); // We will loose the millis in the conversion Assert.assertEquals(nowWithOutMillis, ValidityDate.parseAsIso8601(ValidityDate.formatAsISO8601(nowWithOutMillis, ValidityDate.TIMEZONE_SERVER))); final Date zero = new Date(0); Assert.assertEquals(zero, ValidityDate.parseAsIso8601(ValidityDate.formatAsISO8601(zero, ValidityDate.TIMEZONE_SERVER))); LOG.trace("testEncodeRelativeBeforePostUpdateOfVersion661"); final long ERROR_CODE = -1; encodeBeforePostUpdateOfVersion661(RELATIVE, "0", ERROR_CODE); encodeBeforePostUpdateOfVersion661(RELATIVE, "0d", ERROR_CODE); encodeBeforePostUpdateOfVersion661(RELATIVE, "-1d", ERROR_CODE); encodeBeforePostUpdateOfVersion661(RELATIVE, "1d", 1); encodeBeforePostUpdateOfVersion661(RELATIVE, "1d1h1m", ERROR_CODE); encodeBeforePostUpdateOfVersion661(RELATIVE, "0y0m1d", ERROR_CODE); encodeBeforePostUpdateOfVersion661(RELATIVE, "0y0mo1d", 1); encodeBeforePostUpdateOfVersion661(RELATIVE, "1d0y0mo", 1); encodeBeforePostUpdateOfVersion661(RELATIVE, "+0y-0mo+1d", 1); encodeBeforePostUpdateOfVersion661(RELATIVE, "ii +0y-0mo+1d", ERROR_CODE); encodeBeforePostUpdateOfVersion661(RELATIVE, "+0y-ii0mo+1d", ERROR_CODE); encodeBeforePostUpdateOfVersion661(RELATIVE, "+0y-0mo+1d ii", ERROR_CODE); LOG.trace("testEncodeAbsoluteBeforePostUpdateOfVersion661"); final long ERROR_CODE = -1; encodeBeforePostUpdateOfVersion661(ABSOLUTE, "yyyy-MM-dd HH:mm:ssZZ", ERROR_CODE); encodeBeforePostUpdateOfVersion661(ABSOLUTE, "2011-05-09T16:58:00+00:00", ERROR_CODE); encodeBeforePostUpdateOfVersion661(ABSOLUTE, "2011-05-09 16:58:00+00:00", 1304960280000L); LOG.trace("testGetStringBeforeVersion661"); // Test relative times (Integer.MAX_VALUE) getStringInternalAbsBeforeVersion661(Long.valueOf(Integer.MAX_VALUE)+1, "1970-01-25 20:31:23+00:00"); getStringInternalAbsBeforeVersion661(1304960280000L, "2011-05-09 16:58:00+00:00"); LOG.trace("testGetDateBeforeVersion661"); final Date now = new Date(); // Test errors (no error handling available in this method) //testGetDateInternal(0, null, null); //testGetDateInternal(-1, now, null); // Test relative times (Integer.MAX_VALUE) getDateInternalBeforeVersion661(Long.valueOf(Integer.MAX_VALUE)+1, now, new Date(Long.valueOf(Integer.MAX_VALUE)+1)); LOG.trace("testGetEncodeBeforeVersion661"); // Test relative times (Integer.MAX_VALUE) final long nowWithOutSeconds = (new Date().getTime()/60000)*60000; Assert.assertEquals("", nowWithOutSeconds, ValidityDate.encodeBeforeVersion661(ValidityDate.getStringBeforeVersion661(nowWithOutSeconds))); LOG.trace("testEncodeGetBeforeVersion661"); Assert.assertEquals("", ValidityDate.parseAsIso8601("2011-05-09 16:58:00+00:00"), ValidityDate.parseAsIso8601(ValidityDate.getStringBeforeVersion661(ValidityDate.encodeBeforeVersion661("2011-05-09 16:58:00+00:00")))); Assert.assertEquals("", ValidityDate.parseAsIso8601("1970-01-25 20:32:00+00:00"), ValidityDate.parseAsIso8601(ValidityDate.getStringBeforeVersion661(ValidityDate.encodeBeforeVersion661("1970-01-25 20:32:00+00:00")))); Assert.assertEquals("", ValidityDate.parseAsIso8601("2011-05-09 16:58:12"), ValidityDate.parseAsIso8601(ValidityDate.getStringBeforeVersion661(ValidityDate.encodeBeforeVersion661("2011-05-09 16:58:12")))); Assert.assertEquals("", ValidityDate.parseAsIso8601("2011-05-09 16:58"), ValidityDate.parseAsIso8601(ValidityDate.getStringBeforeVersion661(ValidityDate.encodeBeforeVersion661("2011-05-09 16:58")))); Assert.assertEquals("", ValidityDate.parseAsIso8601("2012-02-29"), ValidityDate.parseAsIso8601(ValidityDate.getStringBeforeVersion661(ValidityDate.encodeBeforeVersion661("2012-02-29")))); Assert.assertEquals("", ValidityDate.parseAsIso8601("2012-02-29").getTime(), ValidityDate.encodeBeforeVersion661("2012-02-29 00:00:00+00:00")); LOG.trace("testParseCaLatestValidDateTime"); final String bug2038Hex = "80000000"; LOG.info("bug2038Hex: " + bug2038Hex); final String bug2038Iso = FastDateFormat.getInstance("yyyy-MM-dd HH:mm:ssZZ", TimeZone.getTimeZone("UTC")).format(Long.parseLong("80000000", 16)*1000); LOG.info("bug2038Iso: " + bug2038Iso); final Date bug2038HexDate = ValidityDate.parseCaLatestValidDateTime(bug2038Hex); LOG.info("bug2038HexDate: " + bug2038HexDate); final Date bug2038IsoDate = ValidityDate.parseCaLatestValidDateTime(bug2038Iso); LOG.info("bug2038IsoDate: " + bug2038IsoDate); Assert.assertEquals("The two date formats should yield the same Date!", bug2038HexDate, bug2038IsoDate); // Test now also final Date now = new Date(); LOG.info("now: " + now); final String nowIso = FastDateFormat.getInstance(ValidityDate.ISO8601_DATE_FORMAT, TimeZone.getTimeZone("UTC")).format(now); LOG.info("nowIso: " + nowIso); final Date nowIsoDate = ValidityDate.parseCaLatestValidDateTime(nowIso); LOG.info("nowIsoDate: " + nowIsoDate); // Compare as strings since we will loose milliseconds in the conversion to ISO8601 format Assert.assertEquals("Unable to parse current time correctly!", now.toString(), nowIsoDate.toString()); // Test unhappy path (return of default value) final Date defaultIsoDate = ValidityDate.parseCaLatestValidDateTime("COFFEE"); Assert.assertEquals("Default value not returned when invalid date-time specified!", new Date(Long.MAX_VALUE).toString(), defaultIsoDate.toString()); LOG.trace("