diff --git a/google-cloud-clients/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITWriteTest.java b/google-cloud-clients/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITWriteTest.java index aff50e7cc059..fed755c588aa 100644 --- a/google-cloud-clients/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITWriteTest.java +++ b/google-cloud-clients/google-cloud-spanner/src/test/java/com/google/cloud/spanner/it/ITWriteTest.java @@ -18,6 +18,7 @@ import static com.google.cloud.spanner.SpannerMatchers.isSpannerException; import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.fail; import com.google.cloud.ByteArray; import com.google.cloud.Date; @@ -127,6 +128,38 @@ public void writeAtLeastOnce() { assertThat(row.getString(0)).isEqualTo("v1"); } + @Test + public void writeAlreadyExists() { + client.write( + Arrays.asList( + Mutation.newInsertBuilder("T") + .set("K") + .to(lastKey = "key1") + .set("StringValue") + .to("v1") + .build())); + Struct row = readLastRow("StringValue"); + assertThat(row.isNull(0)).isFalse(); + assertThat(row.getString(0)).isEqualTo("v1"); + + try { + client.write( + Arrays.asList( + Mutation.newInsertBuilder("T") + .set("K") + .to(lastKey) + .set("StringValue") + .to("v2") + .build())); + fail("missing expected ALREADY_EXISTS exception"); + } catch (SpannerException e) { + assertThat(e.getErrorCode()).isEqualTo(ErrorCode.ALREADY_EXISTS); + } + row = readLastRow("StringValue"); + assertThat(row.isNull(0)).isFalse(); + assertThat(row.getString(0)).isEqualTo("v1"); + } + @Ignore // TODO(user): Fix this - backend currently accepts empty mutation. @Test public void emptyWrite() {