Skip to content

Commit 85994fe

Browse files
committed
AWS spec requires Instant to be serialized as a Unix timestamp
1 parent 8134b59 commit 85994fe

File tree

3 files changed

+18
-3
lines changed

3 files changed

+18
-3
lines changed

trino-aws-proxy-glue/src/main/java/io/trino/aws/proxy/glue/rest/GlueSerializer.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,9 @@
1919
import software.amazon.awssdk.core.SdkField;
2020

2121
import java.io.IOException;
22+
import java.time.Instant;
23+
24+
import static software.amazon.awssdk.utils.DateUtils.formatUnixTimestampInstant;
2225

2326
class GlueSerializer<T>
2427
extends JsonSerializer<T>
@@ -38,8 +41,10 @@ public void serialize(T value, JsonGenerator generator, SerializerProvider seria
3841

3942
for (SdkField<?> sdkField : serializerCommon.sdkFields()) {
4043
Object fieldValue = sdkField.getValueOrDefault(value);
41-
if (fieldValue != null) {
42-
generator.writePOJOField(sdkField.memberName(), fieldValue);
44+
switch (fieldValue) {
45+
case Instant instant -> generator.writePOJOField(sdkField.memberName(), formatUnixTimestampInstant(instant)); // per AWS spec
46+
case null -> {} // do nothing
47+
default -> generator.writePOJOField(sdkField.memberName(), fieldValue);
4348
}
4449
}
4550

trino-aws-proxy-glue/src/test/java/io/trino/aws/proxy/glue/TestGlueBase.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,18 @@
4646
import software.amazon.awssdk.services.glue.model.TableInput;
4747

4848
import java.net.URI;
49+
import java.time.temporal.ChronoUnit;
4950
import java.util.Map;
5051

5152
import static io.trino.aws.proxy.glue.TestingGlueRequestHandler.DATABASE_1;
5253
import static io.trino.aws.proxy.glue.TestingGlueRequestHandler.DATABASE_2;
54+
import static io.trino.aws.proxy.glue.TestingGlueRequestHandler.NOW;
5355
import static io.trino.aws.proxy.glue.TestingGlueRequestHandler.POLICY_A;
5456
import static io.trino.aws.proxy.glue.TestingGlueRequestHandler.POLICY_B;
5557
import static java.util.Objects.requireNonNull;
5658
import static org.assertj.core.api.Assertions.assertThat;
5759
import static org.assertj.core.api.Assertions.assertThatThrownBy;
60+
import static org.assertj.core.api.Assertions.within;
5861

5962
public abstract class TestGlueBase<T extends TestingGlueContext>
6063
{
@@ -93,6 +96,8 @@ public void testRequests()
9396
assertThat(databases.databaseList())
9497
.extracting(Database::name)
9598
.containsExactlyInAnyOrder(DATABASE_1, DATABASE_2);
99+
assertThat(databases.databaseList().getFirst().createTime())
100+
.isCloseTo(NOW, within(1, ChronoUnit.SECONDS));
96101

97102
GetResourcePoliciesResponse resourcePolicies = glueClient.getResourcePolicies(GetResourcePoliciesRequest.builder().build());
98103
assertThat(resourcePolicies.getResourcePoliciesResponseList())

trino-aws-proxy-glue/src/test/java/io/trino/aws/proxy/glue/TestingGlueRequestHandler.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import software.amazon.awssdk.services.glue.model.GluePolicy;
3333
import software.amazon.awssdk.services.glue.model.GlueResponse;
3434

35+
import java.time.Instant;
3536
import java.util.Collection;
3637
import java.util.Map;
3738

@@ -76,12 +77,16 @@ public class TestingGlueRequestHandler
7677
public static final String DATABASE_1 = "db1";
7778
public static final String DATABASE_2 = "db2";
7879

80+
public static final Instant NOW = Instant.now();
81+
7982
@Override
8083
public GlueResponse handleRequest(ParsedGlueRequest request, SigningMetadata signingMetadata, RequestLoggingSession requestLoggingSession)
8184
{
8285
return switch (request.glueRequest()) {
8386
case GetDatabasesRequest _ -> GetDatabasesResponse.builder()
84-
.databaseList(Database.builder().name(DATABASE_1).build(), Database.builder().name(DATABASE_2).build())
87+
.databaseList(
88+
Database.builder().createTime(NOW).name(DATABASE_1).build(),
89+
Database.builder().createTime(NOW).name(DATABASE_2).build())
8590
.build();
8691

8792
// TODO: add more cases

0 commit comments

Comments
 (0)