diff --git a/google-cloud-clients/google-cloud-spanner/pom.xml b/google-cloud-clients/google-cloud-spanner/pom.xml index da79b31493e7..3e630d51ab3e 100644 --- a/google-cloud-clients/google-cloud-spanner/pom.xml +++ b/google-cloud-clients/google-cloud-spanner/pom.xml @@ -18,9 +18,29 @@ google-cloud-spanner + true + + org.jacoco + jacoco-maven-plugin + 0.8.2 + + + + prepare-agent + + + + report + prepare-package + + report + + + + org.apache.maven.plugins maven-surefire-plugin diff --git a/google-cloud-clients/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerImplTest.java b/google-cloud-clients/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerImplTest.java index 71b0a1569a2d..fe81f34fd0f6 100644 --- a/google-cloud-clients/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerImplTest.java +++ b/google-cloud-clients/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerImplTest.java @@ -17,9 +17,10 @@ package com.google.cloud.spanner; import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.fail; +import com.google.cloud.grpc.GrpcTransportOptions; import com.google.cloud.spanner.spi.v1.SpannerRpc; - import java.util.HashMap; import java.util.Map; import org.junit.Before; @@ -70,4 +71,49 @@ public void createAndCloseSession() { // The same channelHint is passed for deleteSession (contained in "options"). Mockito.verify(rpc).deleteSession(sessionName, options.getValue()); } + + @Test + public void getDbclientAgainGivesSame() { + Map labels = new HashMap<>(); + labels.put("env", "dev"); + Mockito.when(spannerOptions.getSessionLabels()).thenReturn(labels); + String dbName = "projects/p1/instances/i1/databases/d1"; + DatabaseId db = DatabaseId.of(dbName); + + Mockito.when(spannerOptions.getTransportOptions()) + .thenReturn(GrpcTransportOptions.newBuilder().build()); + Mockito.when(spannerOptions.getSessionPoolOptions()) + .thenReturn(SessionPoolOptions.newBuilder().build()); + + DatabaseClient databaseClient = impl.getDatabaseClient(db); + + // Get db client again + DatabaseClient databaseClient1 = impl.getDatabaseClient(db); + + assertThat(databaseClient1).isSameAs(databaseClient); + } + + @Test + public void getDbclientAfterCloseThrows() { + SpannerImpl imp = new SpannerImpl(rpc, 1, spannerOptions); + Map labels = new HashMap<>(); + labels.put("env", "dev"); + Mockito.when(spannerOptions.getSessionLabels()).thenReturn(labels); + String dbName = "projects/p1/instances/i1/databases/d1"; + DatabaseId db = DatabaseId.of(dbName); + + Mockito.when(spannerOptions.getTransportOptions()) + .thenReturn(GrpcTransportOptions.newBuilder().build()); + Mockito.when(spannerOptions.getSessionPoolOptions()) + .thenReturn(SessionPoolOptions.newBuilder().build()); + + imp.close(); + + try { + imp.getDatabaseClient(db); + fail("Expected exception"); + } catch (IllegalStateException e) { + assertThat(e.getMessage()).contains("Cloud Spanner client has been closed"); + } + } }