kbendick commented on code in PR #4716:
URL: https://github.com/apache/iceberg/pull/4716#discussion_r876267361
##########
core/src/test/java/org/apache/iceberg/TestMetadataUpdateParser.java:
##########
@@ -251,11 +274,138 @@ public void testAddSortOrderFromJson() {
assertEquals(action, expected, MetadataUpdateParser.fromJson(json));
}
+ @Test
+ public void testSetDefaultSortOrderToJson() {
+ String action = MetadataUpdateParser.SET_DEFAULT_SORT_ORDER;
+ int sortOrderId = 2;
+ String expected =
String.format("{\"action\":\"%s\",\"sort-order-id\":%d}", action, sortOrderId);
+ MetadataUpdate update = new
MetadataUpdate.SetDefaultSortOrder(sortOrderId);
+ String actual = MetadataUpdateParser.toJson(update);
+ Assert.assertEquals("Set default sort order should serialize to the
correct JSON value", expected, actual);
+ }
+
+ @Test
+ public void testSetDefaultSortOrderFromJson() {
+ String action = MetadataUpdateParser.SET_DEFAULT_SORT_ORDER;
+ int sortOrderId = 2;
+ String json = String.format("{\"action\":\"%s\",\"sort-order-id\":%d}",
action, sortOrderId);
+ MetadataUpdate expected = new
MetadataUpdate.SetDefaultSortOrder(sortOrderId);
+ assertEquals(action, expected, MetadataUpdateParser.fromJson(json));
+ }
+
+ // TODO - AddSnapshot tests.
+
+ // TODO - Tests that handle multiple snapshot ids.
+ @Test
+ public void testRemoveSnapshotsFromJson() {
+ String action = MetadataUpdateParser.REMOVE_SNAPSHOTS;
+ long snapshotId = 2L;
+ String json = String.format("{\"action\":\"%s\",\"snapshot-ids\":[2]}",
action);
+ MetadataUpdate expected = new MetadataUpdate.RemoveSnapshot(snapshotId);
+ assertEquals(action, expected, MetadataUpdateParser.fromJson(json));
+ }
+
+ // TODO - Tests that handle multiple snapshot ids.
+ @Test
+ public void testRemoveSnapshotsToJson() {
+ String action = MetadataUpdateParser.REMOVE_SNAPSHOTS;
+ long snapshotId = 2L;
+ String expected =
String.format("{\"action\":\"%s\",\"snapshot-ids\":[2]}", action);
+ MetadataUpdate update = new MetadataUpdate.RemoveSnapshot(snapshotId);
+ String actual = MetadataUpdateParser.toJson(update);
+ Assert.assertEquals("Remove snapshots should serialize to the correct JSON
value", expected, actual);
+ }
+
+
+ // TODO - SetSnapshotRef tests.
+
+ @Test
+ public void testSetPropertiesFromJson() {
+ String action = MetadataUpdateParser.SET_PROPERTIES;
+ Map<String, String> props = ImmutableMap.of(
+ "prop1", "val1",
+ "prop2", "val2"
+ );
+ String propsMap = "{\"prop1\":\"val1\",\"prop2\":\"val2\"}";
+ String json = String.format("{\"action\":\"%s\",\"updated\":%s}", action,
propsMap);
+ MetadataUpdate expected = new MetadataUpdate.SetProperties(props);
+ assertEquals(action, expected, MetadataUpdateParser.fromJson(json));
+ }
+
+ @Test
+ public void testSetPropertiesFromJson_FailsDeserializingNullValue() {
+ String action = MetadataUpdateParser.SET_PROPERTIES;
+ Map<String, String> props = Maps.newHashMap();
+ props.put("prop1", "val1");
+ props.put("prop2", null);
+ String propsMap = "{\"prop1\":\"val1\",\"prop2\":null}";
+ String json = String.format("{\"action\":\"%s\",\"updated\":%s}", action,
propsMap);
+ AssertHelpers.assertThrows(
+ "Parsing updates from SetProperties with a property set to null should
throw",
+ IllegalArgumentException.class,
+ "Cannot parse prop2 to a string value: null",
Review Comment:
This is the error message thrown, although combined with the full stack
trace I think it should be clear as we'll have `MetadataUpdateParser.fromJson`
in it.
We might want to move some of the validation logic into
`MetadataUpdate.SetProperties` though, particularly when the Java object is
being created (so when the client would be sending the payload using `toJson`
instead).
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]