mirror of https://github.com/apache/kafka.git
KAFKA-7776: Tests for ISO8601 in Connect value parsing (#18374)
Reviewers: Andrew Schofield <aschofield@confluent.io>
This commit is contained in:
parent
bf760d4ebe
commit
42fd4d1d11
|
@ -29,6 +29,14 @@ import java.math.BigInteger;
|
||||||
import java.nio.ByteBuffer;
|
import java.nio.ByteBuffer;
|
||||||
import java.nio.charset.StandardCharsets;
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
|
import java.time.Instant;
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.LocalTime;
|
||||||
|
import java.time.ZoneId;
|
||||||
|
import java.time.ZoneOffset;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.time.temporal.ChronoUnit;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
@ -849,7 +857,10 @@ public class ValuesTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void shouldConvertTimeValues() {
|
public void shouldConvertTimeValues() {
|
||||||
java.util.Date current = new java.util.Date();
|
LocalDateTime localTime = LocalDateTime.now();
|
||||||
|
LocalTime localTimeTruncated = localTime.toLocalTime().truncatedTo(ChronoUnit.MILLIS);
|
||||||
|
ZoneOffset zoneOffset = ZoneId.systemDefault().getRules().getOffset(localTime);
|
||||||
|
java.util.Date current = new java.util.Date(localTime.toEpochSecond(zoneOffset) * 1000);
|
||||||
long currentMillis = current.getTime() % MILLIS_PER_DAY;
|
long currentMillis = current.getTime() % MILLIS_PER_DAY;
|
||||||
|
|
||||||
// java.util.Date - just copy
|
// java.util.Date - just copy
|
||||||
|
@ -857,18 +868,21 @@ public class ValuesTest {
|
||||||
assertEquals(current, t1);
|
assertEquals(current, t1);
|
||||||
|
|
||||||
// java.util.Date as a Timestamp - discard the date and keep just day's milliseconds
|
// java.util.Date as a Timestamp - discard the date and keep just day's milliseconds
|
||||||
t1 = Values.convertToTime(Timestamp.SCHEMA, current);
|
java.util.Date t2 = Values.convertToTime(Timestamp.SCHEMA, current);
|
||||||
assertEquals(new java.util.Date(currentMillis), t1);
|
assertEquals(new java.util.Date(currentMillis), t2);
|
||||||
|
|
||||||
// ISO8601 strings - currently broken because tokenization breaks at colon
|
// ISO8601 strings - accept a string matching pattern "HH:mm:ss.SSS'Z'"
|
||||||
|
java.util.Date t3 = Values.convertToTime(Time.SCHEMA, localTime.format(DateTimeFormatter.ofPattern(Values.ISO_8601_TIME_FORMAT_PATTERN)));
|
||||||
|
LocalTime time3 = LocalDateTime.ofInstant(Instant.ofEpochMilli(t3.getTime()), ZoneId.systemDefault()).toLocalTime();
|
||||||
|
assertEquals(localTimeTruncated, time3);
|
||||||
|
|
||||||
// Millis as string
|
// Millis as string
|
||||||
java.util.Date t3 = Values.convertToTime(Time.SCHEMA, Long.toString(currentMillis));
|
java.util.Date t4 = Values.convertToTime(Time.SCHEMA, Long.toString(currentMillis));
|
||||||
assertEquals(currentMillis, t3.getTime());
|
assertEquals(currentMillis, t4.getTime());
|
||||||
|
|
||||||
// Millis as long
|
// Millis as long
|
||||||
java.util.Date t4 = Values.convertToTime(Time.SCHEMA, currentMillis);
|
java.util.Date t5 = Values.convertToTime(Time.SCHEMA, currentMillis);
|
||||||
assertEquals(currentMillis, t4.getTime());
|
assertEquals(currentMillis, t5.getTime());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -883,23 +897,28 @@ public class ValuesTest {
|
||||||
|
|
||||||
// java.util.Date as a Timestamp - discard the day's milliseconds and keep the date
|
// java.util.Date as a Timestamp - discard the day's milliseconds and keep the date
|
||||||
java.util.Date currentDate = new java.util.Date(current.getTime() - currentMillis);
|
java.util.Date currentDate = new java.util.Date(current.getTime() - currentMillis);
|
||||||
d1 = Values.convertToDate(Timestamp.SCHEMA, currentDate);
|
java.util.Date d2 = Values.convertToDate(Timestamp.SCHEMA, currentDate);
|
||||||
assertEquals(currentDate, d1);
|
assertEquals(currentDate, d2);
|
||||||
|
|
||||||
// ISO8601 strings - currently broken because tokenization breaks at colon
|
// ISO8601 strings - accept a string matching pattern "yyyy-MM-dd"
|
||||||
|
java.util.Date d3 = Values.convertToDate(Date.SCHEMA, LocalDate.ofEpochDay(days).format(DateTimeFormatter.ISO_LOCAL_DATE));
|
||||||
// Days as string
|
|
||||||
java.util.Date d3 = Values.convertToDate(Date.SCHEMA, Long.toString(days));
|
|
||||||
assertEquals(currentDate, d3);
|
assertEquals(currentDate, d3);
|
||||||
|
|
||||||
// Days as long
|
// Days as string
|
||||||
java.util.Date d4 = Values.convertToDate(Date.SCHEMA, days);
|
java.util.Date d4 = Values.convertToDate(Date.SCHEMA, Long.toString(days));
|
||||||
assertEquals(currentDate, d4);
|
assertEquals(currentDate, d4);
|
||||||
|
|
||||||
|
// Days as long
|
||||||
|
java.util.Date d5 = Values.convertToDate(Date.SCHEMA, days);
|
||||||
|
assertEquals(currentDate, d5);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void shouldConvertTimestampValues() {
|
public void shouldConvertTimestampValues() {
|
||||||
java.util.Date current = new java.util.Date();
|
LocalDateTime localTime = LocalDateTime.now();
|
||||||
|
LocalDateTime localTimeTruncated = localTime.truncatedTo(ChronoUnit.MILLIS);
|
||||||
|
ZoneOffset zoneOffset = ZoneId.systemDefault().getRules().getOffset(localTime);
|
||||||
|
java.util.Date current = new java.util.Date(localTime.toEpochSecond(zoneOffset) * 1000);
|
||||||
long currentMillis = current.getTime() % MILLIS_PER_DAY;
|
long currentMillis = current.getTime() % MILLIS_PER_DAY;
|
||||||
|
|
||||||
// java.util.Date - just copy
|
// java.util.Date - just copy
|
||||||
|
@ -912,18 +931,21 @@ public class ValuesTest {
|
||||||
assertEquals(currentDate, ts1);
|
assertEquals(currentDate, ts1);
|
||||||
|
|
||||||
// java.util.Date as a Time - discard the date and keep the day's milliseconds
|
// java.util.Date as a Time - discard the date and keep the day's milliseconds
|
||||||
ts1 = Values.convertToTimestamp(Time.SCHEMA, currentMillis);
|
java.util.Date ts2 = Values.convertToTimestamp(Time.SCHEMA, currentMillis);
|
||||||
assertEquals(new java.util.Date(currentMillis), ts1);
|
assertEquals(new java.util.Date(currentMillis), ts2);
|
||||||
|
|
||||||
// ISO8601 strings - currently broken because tokenization breaks at colon
|
// ISO8601 strings - accept a string matching pattern "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
|
||||||
|
java.util.Date ts3 = Values.convertToTime(Time.SCHEMA, localTime.format(DateTimeFormatter.ofPattern(Values.ISO_8601_TIMESTAMP_FORMAT_PATTERN)));
|
||||||
|
LocalDateTime time3 = LocalDateTime.ofInstant(Instant.ofEpochMilli(ts3.getTime()), ZoneId.systemDefault());
|
||||||
|
assertEquals(localTimeTruncated, time3);
|
||||||
|
|
||||||
// Millis as string
|
// Millis as string
|
||||||
java.util.Date ts3 = Values.convertToTimestamp(Timestamp.SCHEMA, Long.toString(current.getTime()));
|
java.util.Date ts4 = Values.convertToTimestamp(Timestamp.SCHEMA, Long.toString(current.getTime()));
|
||||||
assertEquals(current, ts3);
|
assertEquals(current, ts4);
|
||||||
|
|
||||||
// Millis as long
|
// Millis as long
|
||||||
java.util.Date ts4 = Values.convertToTimestamp(Timestamp.SCHEMA, current.getTime());
|
java.util.Date ts5 = Values.convertToTimestamp(Timestamp.SCHEMA, current.getTime());
|
||||||
assertEquals(current, ts4);
|
assertEquals(current, ts5);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
Loading…
Reference in New Issue