Skip to content

Commit fdc50ef

Browse files
committed
Removed redundant date formattters
1 parent def03c5 commit fdc50ef

File tree

3 files changed

+45
-84
lines changed

3 files changed

+45
-84
lines changed

databricks-sdk-java/src/main/java/com/databricks/sdk/core/CliTokenSource.java

Lines changed: 5 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,8 @@
99
import java.io.IOException;
1010
import java.io.InputStream;
1111
import java.time.Instant;
12-
import java.time.LocalDateTime;
13-
import java.time.ZoneOffset;
14-
import java.time.format.DateTimeFormatter;
12+
import java.time.OffsetDateTime;
1513
import java.time.format.DateTimeParseException;
16-
import java.util.Arrays;
1714
import java.util.List;
1815
import org.apache.commons.io.IOUtils;
1916

@@ -39,44 +36,15 @@ public CliTokenSource(
3936
}
4037

4138
/**
42-
* Parses an expiry time string and returns the corresponding {@link Instant}.
39+
* Parses an expiry string in RFC 3339/ISO 8601 format (with or without offset) and returns the
40+
* corresponding {@link Instant}. Any specified time zone or offset is converted to UTC.
4341
*
44-
* <p>The expiry time string is always in UTC. Any time zone or offset information present in the
45-
* input is ignored.
46-
*
47-
* <p>The method attempts to parse the input using several common date-time formats, including
48-
* ISO-8601 and patterns with varying sub-second precision.
49-
*
50-
* @param expiry the expiry time string to parse, which must represent a UTC time
42+
* @param expiry expiry time string in RFC 3339/ISO 8601 format
5143
* @return the parsed {@link Instant}
5244
* @throws DateTimeParseException if the input string cannot be parsed
5345
*/
5446
static Instant parseExpiry(String expiry) {
55-
DateTimeParseException lastException = null;
56-
// Try to parse the expiry as an ISO-8601 string in UTC first
57-
try {
58-
return Instant.parse(expiry);
59-
} catch (DateTimeParseException e) {
60-
lastException = e;
61-
}
62-
63-
String multiplePrecisionPattern =
64-
"[SSSSSSSSS][SSSSSSSS][SSSSSSS][SSSSSS][SSSSS][SSSS][SSS][SS][S]";
65-
List<String> datePatterns =
66-
Arrays.asList(
67-
"yyyy-MM-dd HH:mm:ss",
68-
"yyyy-MM-dd HH:mm:ss." + multiplePrecisionPattern,
69-
"yyyy-MM-dd'T'HH:mm:ss." + multiplePrecisionPattern + "XXX");
70-
for (String pattern : datePatterns) {
71-
try {
72-
DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);
73-
LocalDateTime dateTime = LocalDateTime.parse(expiry, formatter);
74-
return dateTime.atZone(ZoneOffset.UTC).toInstant();
75-
} catch (DateTimeParseException e) {
76-
lastException = e;
77-
}
78-
}
79-
throw lastException;
47+
return OffsetDateTime.parse(expiry).toInstant();
8048
}
8149

8250
private String getProcessStream(InputStream stream) throws IOException {
Lines changed: 35 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,58 +1,49 @@
11
package com.databricks.sdk.core;
22

33
import static org.junit.jupiter.api.Assertions.assertEquals;
4+
import static org.junit.jupiter.api.Assertions.assertThrows;
45

56
import java.time.Instant;
67
import java.time.format.DateTimeParseException;
7-
import org.junit.jupiter.api.Test;
8+
import java.util.stream.Stream;
9+
import org.junit.jupiter.params.ParameterizedTest;
10+
import org.junit.jupiter.params.provider.Arguments;
11+
import org.junit.jupiter.params.provider.MethodSource;
812

913
public class CliTokenSourceTest {
1014

11-
@Test
12-
public void testParseExpiryWithoutTruncate() {
13-
Instant parsedInstant = CliTokenSource.parseExpiry("2023-07-17T09:02:22.330612218Z");
14-
assertEquals(Instant.parse("2023-07-17T09:02:22.330612218Z"), parsedInstant);
15+
private static Stream<Arguments> expiryProvider() {
16+
return Stream.of(
17+
Arguments.of(
18+
"2023-07-17T09:02:22.330612218Z", "2023-07-17T09:02:22.330612218Z", "9-digit nanos"),
19+
Arguments.of(
20+
"2023-07-17T09:02:22.33061221Z", "2023-07-17T09:02:22.330612210Z", "8-digit nanos"),
21+
Arguments.of(
22+
"2023-07-17T09:02:22.330612Z", "2023-07-17T09:02:22.330612000Z", "6-digit nanos"),
23+
Arguments.of(
24+
"2023-07-17T10:02:22.330612218+01:00",
25+
"2023-07-17T09:02:22.330612218Z",
26+
"+01:00 offset, 9-digit nanos"),
27+
Arguments.of(
28+
"2023-07-17T04:02:22.330612218-05:00",
29+
"2023-07-17T09:02:22.330612218Z",
30+
"-05:00 offset, 9-digit nanos"),
31+
Arguments.of(
32+
"2023-07-17T10:02:22.330612+01:00",
33+
"2023-07-17T09:02:22.330612000Z",
34+
"+01:00 offset, 6-digit nanos"),
35+
Arguments.of("2023-07-17T09:02:22.33061221987Z", null, "Invalid: >9 nanos"),
36+
Arguments.of("17-07-2023 09:02:22", null, "Invalid: non-ISO8601 format"));
1537
}
1638

17-
@Test
18-
public void testParseExpiryWithTruncate() {
19-
Instant parsedInstant = CliTokenSource.parseExpiry("2023-07-17T09:02:22.33061221Z");
20-
assertEquals(Instant.parse("2023-07-17T09:02:22.330612210Z"), parsedInstant);
21-
}
22-
23-
@Test
24-
public void testParseExpiryWithTruncateAndLessNanoSecondDigits() {
25-
Instant parsedInstant = CliTokenSource.parseExpiry("2023-07-17T09:02:22.330612Z");
26-
assertEquals(Instant.parse("2023-07-17T09:02:22.330612000Z"), parsedInstant);
27-
}
28-
29-
@Test
30-
public void testParseExpiryWithMoreThanNineNanoSecondDigits() {
31-
try {
32-
CliTokenSource.parseExpiry("2023-07-17T09:02:22.33061221987Z");
33-
} catch (DateTimeParseException e) {
34-
assert (e.getMessage().contains("could not be parsed"));
35-
}
36-
}
37-
38-
@Test
39-
public void testParseExpiryWithSpaceFormat() {
40-
Instant parsedInstant = CliTokenSource.parseExpiry("2023-07-17 09:02:22");
41-
assertEquals(Instant.parse("2023-07-17T09:02:22Z"), parsedInstant);
42-
}
43-
44-
@Test
45-
public void testParseExpiryWithSpaceFormatAndMillis() {
46-
Instant parsedInstant = CliTokenSource.parseExpiry("2023-07-17 09:02:22.123");
47-
assertEquals(Instant.parse("2023-07-17T09:02:22.123Z"), parsedInstant);
48-
}
49-
50-
@Test
51-
public void testParseExpiryWithInvalidFormat() {
52-
try {
53-
CliTokenSource.parseExpiry("17-07-2023 09:02:22");
54-
} catch (DateTimeParseException e) {
55-
assert (e.getMessage().contains("could not be parsed"));
39+
@ParameterizedTest(name = "{2}")
40+
@MethodSource("expiryProvider")
41+
public void testParseExpiry(String input, String expectedInstant, String description) {
42+
if (expectedInstant == null) {
43+
assertThrows(DateTimeParseException.class, () -> CliTokenSource.parseExpiry(input));
44+
} else {
45+
Instant parsedInstant = CliTokenSource.parseExpiry(input);
46+
assertEquals(Instant.parse(expectedInstant), parsedInstant);
5647
}
5748
}
5849
}

databricks-sdk-java/src/test/resources/testdata/az

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,14 +22,16 @@ for arg in "$@"; do
2222
fi
2323
done
2424

25-
# Macos
26-
EXP="$(/bin/date -v+${EXPIRE:=10S} +'%F %T' 2>/dev/null)"
25+
# MacOS
26+
EXP="$(/bin/date -v+${EXPIRE:=10S} +'%FT%T%z' 2>/dev/null)"
2727
if [ -z "${EXP}" ]; then
2828
# Linux
2929
EXPIRE=$(/bin/echo $EXPIRE | /bin/sed 's/S/seconds/')
3030
EXPIRE=$(/bin/echo $EXPIRE | /bin/sed 's/M/minutes/')
31-
EXP=$(/bin/date --date=+${EXPIRE:=10seconds} +'%F %T')
31+
EXP=$(/bin/date --date=+${EXPIRE:=10seconds} +'%FT%T%z')
3232
fi
33+
# Insert colon in timezone offset for ISO 8601 compliance
34+
EXP="${EXP:0:19}${EXP:19:3}:${EXP:22:2}"
3335

3436
if [ -z "${TF_AAD_TOKEN}" ]; then
3537
TF_AAD_TOKEN="..."

0 commit comments

Comments
 (0)