From 64de23a95736ffaaae7a05e0fd2c6f5f8c5c3665 Mon Sep 17 00:00:00 2001 From: shollyman Date: Thu, 9 Jul 2020 19:29:31 -0700 Subject: [PATCH] fix: handle malformed backend responses. (#522) When you delete a policy tag from a column in BigQuery, rather than eliding the policyTag message entirely, it will return an empty message (with no name field). This change treats such responses as equivalent to no PolicyTag message being present. --- .../main/java/com/google/cloud/bigquery/PolicyTags.java | 6 +++++- .../java/com/google/cloud/bigquery/PolicyTagsTest.java | 8 ++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/PolicyTags.java b/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/PolicyTags.java index a78fa92fb..a66be88e1 100644 --- a/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/PolicyTags.java +++ b/google-cloud-bigquery/src/main/java/com/google/cloud/bigquery/PolicyTags.java @@ -60,6 +60,10 @@ com.google.api.services.bigquery.model.TableFieldSchema.PolicyTags toPb() { static PolicyTags fromPb( com.google.api.services.bigquery.model.TableFieldSchema.PolicyTags tagPb) { - return newBuilder().setNames(tagPb.getNames()).build(); + // Treat a PolicyTag message without a Names subfield as invalid. + if (tagPb.getNames() != null) { + return newBuilder().setNames(tagPb.getNames()).build(); + } + return null; } } diff --git a/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/PolicyTagsTest.java b/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/PolicyTagsTest.java index 2136b2dab..f23cb36c2 100644 --- a/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/PolicyTagsTest.java +++ b/google-cloud-bigquery/src/test/java/com/google/cloud/bigquery/PolicyTagsTest.java @@ -18,6 +18,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; +import static org.junit.Assert.assertNull; import com.google.common.collect.ImmutableList; import java.util.List; @@ -46,6 +47,13 @@ public void testBuilder() { assertNotEquals(POLICY_TAGS, POLICIES); } + @Test + public void testWithoutNames() { + com.google.api.services.bigquery.model.TableFieldSchema.PolicyTags PARTIALTAG = + new com.google.api.services.bigquery.model.TableFieldSchema.PolicyTags(); + assertNull(PolicyTags.fromPb(PARTIALTAG)); + } + @Test public void testFromAndPb() { assertEquals(POLICY_TAGS, PolicyTags.fromPb(POLICY_TAGS.toPb()));