Skip to content

Commit

Permalink
Add tests
Browse files Browse the repository at this point in the history
  • Loading branch information
dxichen committed Dec 6, 2024
1 parent a450399 commit 3cae4ad
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
import org.mapstruct.Named;

@Mapper(componentModel = "spring")
public class PoliciesSpecMapper {
public class PoliciesSpecMapper {

/**
* Given an Iceberg {@link TableDto}, serialize to JsonString format.
Expand All @@ -30,9 +30,6 @@ public class PoliciesSpecMapper {
public String toPoliciesJsonString(TableDto tableDto) throws JsonParseException {
if (tableDto.getPolicies() != null) {
try {
Gson gson = new GsonBuilder().setPrettyPrinting()
.disableHtmlEscaping()
.create();
return gson.toJson(tableDto.getPolicies());
} catch (JsonParseException e) {
throw new JsonParseException("Malformed policies json");
Expand All @@ -47,11 +44,8 @@ public String toPoliciesJsonString(TableDto tableDto) throws JsonParseException
*/
@Named("toPoliciesObject")
public Policies toPoliciesObject(String policiesString) throws JsonParseException {
if (policiesString.length() != 0) {
if (!policiesString.isEmpty()) {
try {
Gson gson = new GsonBuilder().setPrettyPrinting()
.disableHtmlEscaping()
.create();
return gson.fromJson(policiesString, Policies.class);
} catch (JsonParseException e) {
throw new JsonParseException(
Expand Down Expand Up @@ -149,4 +143,6 @@ private Replication mapReplicationPolicies(Replication replicationPolicy) {
}
return replicationPolicy;
}

private static Gson gson = new GsonBuilder().setPrettyPrinting().disableHtmlEscaping().create();
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import static com.linkedin.openhouse.tables.model.TableModelConstants.*;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.jayway.jsonpath.JsonPath;
import com.linkedin.openhouse.tables.api.spec.v0.request.components.Policies;
import com.linkedin.openhouse.tables.dto.mapper.iceberg.PoliciesSpecMapper;
Expand Down Expand Up @@ -50,10 +50,36 @@ public void testFromPoliciesSpecJsonEscapedUnicode() {
.toBuilder()
.policies(TableModelConstants.TABLE_POLICIES_COMPLEX)
.build());

String policiesSpec = policiesMapper.toPoliciesJsonString(tableDto);
Assertions.assertEquals(
(String) JsonPath.read(policiesSpec, "$.retention.columnPattern.pattern"),
TableModelConstants.TABLE_POLICIES_COMPLEX.getRetention().getCount());
policiesSpec.toCharArray().length, TABLE_POLICIES_COMPLEX_STRING.toCharArray().length);
Assertions.assertArrayEquals(
policiesSpec.toCharArray(), TABLE_POLICIES_COMPLEX_STRING.toCharArray());

Policies policies = policiesMapper.toPoliciesObject(TABLE_POLICIES_COMPLEX_STRING);
Assertions.assertEquals(policies, TableModelConstants.TABLE_POLICIES_COMPLEX);
}

@Test
public void testToPolicyObjectFromJsonEscapedUnicode() {
Policies policies = policiesMapper.toPoliciesObject(TABLE_POLICIES_COMPLEX_STRING);
Assertions.assertEquals(policies, TableModelConstants.TABLE_POLICIES_COMPLEX);
Assertions.assertEquals(
policies.getRetention().getCount(),
GET_TABLE_RESPONSE_BODY.getPolicies().getRetention().getCount());

// Backwards compatibility, deserializing without the disableHtmlEscaping() gson option
String policyWithEscapedChars =
new GsonBuilder()
.setPrettyPrinting()
.create()
.toJson(TableModelConstants.TABLE_POLICIES_COMPLEX);
policies = policiesMapper.toPoliciesObject(policyWithEscapedChars);
Assertions.assertEquals(policies, TableModelConstants.TABLE_POLICIES_COMPLEX);
Assertions.assertEquals(
policies.getRetention().getCount(),
GET_TABLE_RESPONSE_BODY.getPolicies().getRetention().getCount());
}

@Test
Expand Down Expand Up @@ -89,9 +115,8 @@ public void testEmptyPoliciesJsonFromObjectWithNullPolicy() {

@Test
public void testToPolicyObjectFromJson() {
Policies policies =
policiesMapper.toPoliciesObject(new Gson().toJson(TableModelConstants.TABLE_POLICIES));
Assertions.assertEquals(policies, TableModelConstants.TABLE_POLICIES);
Policies policies = policiesMapper.toPoliciesObject(TABLE_POLICIES_COMPLEX_STRING);
Assertions.assertEquals(policies, TABLE_POLICIES_COMPLEX);
Assertions.assertEquals(
policies.getRetention().getCount(),
GET_TABLE_RESPONSE_BODY.getPolicies().getRetention().getCount());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -50,14 +50,15 @@ public final class TableModelConstants {
public static final Policies TABLE_POLICIES;

public static final Policies TABLE_POLICIES_COMPLEX;
public static final String TABLE_POLICIES_COMPLEX_STRING;
public static final Policies SHARED_TABLE_POLICIES;
public static final String TEST_USER;

public static final String TEST_USER_PRINCIPAL;
public static final String CLUSTER_NAME;

static {
COL_PAT = RetentionColumnPattern.builder().columnName("name").pattern("yyyy").build();
COL_PAT = RetentionColumnPattern.builder().columnName("name").pattern("'yyyy'").build();

RETENTION_POLICY =
Retention.builder().count(3).granularity(TimePartitionSpec.Granularity.HOUR).build();
Expand All @@ -81,6 +82,18 @@ public final class TableModelConstants {
TABLE_POLICIES =
Policies.builder().retention(RETENTION_POLICY).replication(REPLICATION_POLICY).build();
TABLE_POLICIES_COMPLEX = Policies.builder().retention(RETENTION_POLICY_WITH_PATTERN).build();
TABLE_POLICIES_COMPLEX_STRING =
"{\n"
+ " \"retention\": {\n"
+ " \"count\": 3,\n"
+ " \"granularity\": \"HOUR\",\n"
+ " \"columnPattern\": {\n"
+ " \"columnName\": \"name\",\n"
+ " \"pattern\": \"'yyyy'\"\n"
+ " }\n"
+ " },\n"
+ " \"sharingEnabled\": false\n"
+ "}";
SHARED_TABLE_POLICIES =
Policies.builder().retention(RETENTION_POLICY).sharingEnabled(true).build();
TABLE_POLICIES_WITH_EMPTY_PATTERN =
Expand Down

0 comments on commit 3cae4ad

Please sign in to comment.