-
Notifications
You must be signed in to change notification settings - Fork 19
Closed
Description
Hi there,
when comparing timestamps of a row with some given value within a specific tolerance sometimes it happens that the assertions fails although the current timestamp is within the tolerance. Problem is caused when the expected value is on the edge of a minute shift like 09:24:58 and the current value is after that value like 09:25:00. When comparing these two values with a tolerance of 10 seconds the corresponding method returns false.
Sample code to reproduce the problem:
public static void main(String[] args) throws IllegalAccessException, InstantiationException, InvocationTargetException {
// current value: 2019-12-03 09:25:00.345
Instant instant = Instant.parse("2019-12-03T09:25:00.34Z");
Timestamp timestamp = Timestamp.from(instant);
Value currentValue = createValue("blub", timestamp, LetterCase.COLUMN_DEFAULT);
// expected: 2019-12-03T09:24:58.000000000
Instant expectedInstant = Instant.parse("2019-12-03T09:24:58.00Z");
DateTimeValue expectedDateTime = DateTimeValue.from(Timestamp.from(expectedInstant));
boolean areClose = Values.areClose(currentValue, expectedDateTime, new TimeValue(0, 0, 10));
System.out.println("Values are close: " + areClose);
}
private static Value createValue(String columnName, Object actualObject, LetterCase letterCase)
throws IllegalAccessException, InvocationTargetException, InstantiationException {
Class<Value> valueClass = Value.class;
Constructor<?>[] constructors = valueClass.getDeclaredConstructors();
Constructor<?> singleConstructor = constructors[0];
singleConstructor.setAccessible(true);
return (Value) singleConstructor.newInstance(columnName, actualObject, letterCase);
}