/* See LICENSE for licensing and NOTICE for copyright. */
package org.ldaptive.ad.io;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.time.temporal.ChronoUnit;
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test;
/**
* Unit test for {@link FileTimeValueTranscoder}.
*
* @author Middleware Services
*/
public class FileTimeValueTranscoderTest
{
/** Transcoder to test. */
private final FileTimeValueTranscoder transcoder = new FileTimeValueTranscoder();
/**
* Time test data.
*
* @return time test data
*
* @throws Exception if test data cannot be generated
*/
@DataProvider(name = "times")
public Object[][] createDates()
throws Exception
{
return new Object[][] {
new Object[] {
createDateTime("Z", 2014, 1, 28, 21, 54, 27, 711),
"130354196677110000",
},
new Object[] {
createDateTime("Z", 2016, 2, 18, 15, 31, 32, 327),
"131002830923270000",
},
};
}
/**
* @param date to compare
* @param fileTime ldap attribute string value
*
* @throws Exception On test failure.
*/
@Test(groups = {"io"}, dataProvider = "times")
public void decodeStringValue(final ZonedDateTime date, final String fileTime)
throws Exception
{
Assert.assertEquals(transcoder.decodeStringValue(fileTime), date);
}
/**
* @param date to compare
* @param fileTime ldap attribute string value
*
* @throws Exception On test failure.
*/
@Test(groups = {"io"}, dataProvider = "times")
public void encodeStringValue(final ZonedDateTime date, final String fileTime)
throws Exception
{
Assert.assertEquals(transcoder.encodeStringValue(date), fileTime);
}
/**
* Creates a date time for testing.
*
* @param timezone of the date time
* @param values corresponding to date time fields
*
* @return date time
*/
protected ZonedDateTime createDateTime(final String timezone, final int... values)
{
return ZonedDateTime.of(
LocalDateTime.of(
values[0],
values[1],
values[2],
values[3],
values.length > 4 ? values[4] : 0,
values.length > 5 ? values[5] : 0).plus(values.length > 6 ? values[6] : 0, ChronoUnit.MILLIS),
ZoneId.of(timezone));
}
}