From 6dd686e666198f1003495617ed291cc4f3a2824e Mon Sep 17 00:00:00 2001 From: Vikas Kedia Date: Thu, 17 Aug 2017 16:12:16 -0700 Subject: [PATCH 1/4] Added more unit tests for cloud spanner --- .../com/google/cloud/spanner/ResultSets.java | 1 + .../com/google/cloud/spanner/SpannerImpl.java | 66 ++++--- .../spanner/DatabaseAdminClientImplTest.java | 163 +++++++++++++++++ .../spanner/InstanceAdminClientImplTest.java | 173 ++++++++++++++++++ .../google/cloud/spanner/ResultSetsTest.java | 90 +++++++++ 5 files changed, 465 insertions(+), 28 deletions(-) create mode 100644 google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseAdminClientImplTest.java create mode 100644 google-cloud-spanner/src/test/java/com/google/cloud/spanner/InstanceAdminClientImplTest.java create mode 100644 google-cloud-spanner/src/test/java/com/google/cloud/spanner/ResultSetsTest.java diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/ResultSets.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/ResultSets.java index e1f9bbde2b76..2605b9600df7 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/ResultSets.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/ResultSets.java @@ -64,6 +64,7 @@ public boolean next() throws SpannerException { @Override public Struct getCurrentRowAsStruct() { Preconditions.checkState(!closed, "ResultSet is closed"); + Preconditions.checkState(index >= 0, "Must be preceded by a next() call"); Preconditions.checkElementIndex(index, rows.size(), "All rows have been yielded"); return rows.get(index); } diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerImpl.java index 885723109ccd..c6e6a519055f 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerImpl.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerImpl.java @@ -122,8 +122,8 @@ class SpannerImpl extends BaseService implements Spanner { @GuardedBy("this") private final Map dbClients = new HashMap<>(); - private final DatabaseAdminClient dbAdminClient = new DatabaseAdminClientImpl(); - private final InstanceAdminClient instanceClient = new InstanceAdminClientImpl(dbAdminClient); + private final DatabaseAdminClient dbAdminClient; + private final InstanceAdminClient instanceClient; @GuardedBy("this") private boolean spannerIsClosed = false; @@ -132,6 +132,8 @@ class SpannerImpl extends BaseService implements Spanner { super(options); this.rpc = rpc; this.defaultPrefetchChunks = defaultPrefetchChunks; + this.dbAdminClient = new DatabaseAdminClientImpl(options.getProjectId(), rpc); + this.instanceClient = new InstanceAdminClientImpl(options.getProjectId(), rpc, dbAdminClient); } SpannerImpl(SpannerOptions options) { @@ -205,7 +207,8 @@ static T runWithRetries(Callable callable) { logger.log(Level.FINE, "Retryable exception, will sleep and retry", e); backoffSleep(context, backOff); } catch (Exception e) { - throw Throwables.propagate(e); + Throwables.throwIfUnchecked(e); + throw new RuntimeException(e); } } } @@ -323,19 +326,7 @@ Object value() { return ImmutableMap.copyOf(tmp); } - private String getProjectId() { - return getOptions().getProjectId(); - } - - private String getInstanceName(String instanceId) { - return new InstanceId(getProjectId(), instanceId).getName(); - } - - private String getDatabaseName(String instanceId, String databaseId) { - return new DatabaseId(new InstanceId(getProjectId(), instanceId), databaseId).getName(); - } - - private T unpack(Any response, Class clazz) throws SpannerException { + private static T unpack(Any response, Class clazz) throws SpannerException { try { return response.unpack(clazz); } catch (InvalidProtocolBufferException e) { @@ -344,7 +335,7 @@ private T unpack(Any response, Class clazz) throws Spanne } } - private abstract class PageFetcher implements NextPageFetcher { + private static abstract class PageFetcher implements NextPageFetcher { private String nextPageToken; @Override @@ -370,12 +361,21 @@ public Paginated call() { abstract S fromProto(T proto); } - private String randomOperationId() { + private static String randomOperationId() { UUID uuid = UUID.randomUUID(); return ("r" + uuid.toString()).replace("-", "_"); } - class DatabaseAdminClientImpl implements DatabaseAdminClient { + static class DatabaseAdminClientImpl implements DatabaseAdminClient { + + private final String projectId; + private final SpannerRpc rpc; + + DatabaseAdminClientImpl(String projectId, SpannerRpc rpc) { + this.projectId = projectId; + this.rpc = rpc; + } + @Override public Operation createDatabase( String instanceId, String databaseId, Iterable statements) throws SpannerException { @@ -436,7 +436,7 @@ public Operation call() { String opName = OP_NAME_TEMPLATE.instantiate( "project", - getProjectId(), + projectId, "instance", instanceId, "database", @@ -519,18 +519,30 @@ public Database fromProto(com.google.spanner.admin.database.v1.Database proto) { } return pageFetcher.getNextPage(); } + + private String getInstanceName(String instanceId) { + return new InstanceId(projectId, instanceId).getName(); + } + + private String getDatabaseName(String instanceId, String databaseId) { + return new DatabaseId(new InstanceId(projectId, instanceId), databaseId).getName(); + } } - class InstanceAdminClientImpl implements InstanceAdminClient { + static class InstanceAdminClientImpl implements InstanceAdminClient { final DatabaseAdminClient dbClient; + final String projectId; + final SpannerRpc rpc; - InstanceAdminClientImpl(DatabaseAdminClient dbClient) { + InstanceAdminClientImpl(String projectId, SpannerRpc rpc, DatabaseAdminClient dbClient) { + this.projectId = projectId; + this.rpc = rpc; this.dbClient = dbClient; } @Override public InstanceConfig getInstanceConfig(String configId) throws SpannerException { - final String instanceConfigName = new InstanceConfigId(getProjectId(), configId).getName(); + final String instanceConfigName = new InstanceConfigId(projectId, configId).getName(); return runWithRetries( new Callable() { @Override @@ -570,7 +582,7 @@ public InstanceConfig fromProto( @Override public Operation createInstance(InstanceInfo instance) throws SpannerException { - String projectName = PROJECT_NAME_TEMPLATE.instantiate("project", getProjectId()); + String projectName = PROJECT_NAME_TEMPLATE.instantiate("project", projectId); com.google.longrunning.Operation op = rpc.createInstance(projectName, instance.getId().getInstance(), instance.toProto()); return Operation.create( @@ -594,7 +606,7 @@ public CreateInstanceMetadata parseMetadata(Any metadata) { @Override public Instance getInstance(String instanceId) throws SpannerException { - final String instanceName = new InstanceId(getProjectId(), instanceId).getName(); + final String instanceName = new InstanceId(projectId, instanceId).getName(); return runWithRetries( new Callable() { @Override @@ -635,7 +647,7 @@ public void deleteInstance(final String instanceId) throws SpannerException { new Callable() { @Override public Void call() { - rpc.deleteInstance(new InstanceId(getProjectId(), instanceId).getName()); + rpc.deleteInstance(new InstanceId(projectId, instanceId).getName()); return null; } }); @@ -2006,7 +2018,6 @@ protected long[] getLongArrayInternal(int columnIndex) { } @Override - @SuppressWarnings("unchecked") // We know ARRAY produces an Int64Array. protected Int64Array getLongListInternal(int columnIndex) { return (Int64Array) rowData.get(columnIndex); } @@ -2017,7 +2028,6 @@ protected double[] getDoubleArrayInternal(int columnIndex) { } @Override - @SuppressWarnings("unchecked") // We know ARRAY produces a Float64Array. protected Float64Array getDoubleListInternal(int columnIndex) { return (Float64Array) rowData.get(columnIndex); } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseAdminClientImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseAdminClientImplTest.java new file mode 100644 index 000000000000..2f0ed21d292a --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseAdminClientImplTest.java @@ -0,0 +1,163 @@ +/* + * Copyright 2017 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner; + +import static com.google.common.truth.Truth.assertThat; +import static org.mockito.MockitoAnnotations.initMocks; + +import java.util.Collections; +import java.util.List; + +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; +import org.mockito.Mock; + +import com.google.cloud.spanner.spi.v1.SpannerRpc; +import com.google.cloud.spanner.spi.v1.SpannerRpc.Paginated; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Lists; +import com.google.protobuf.Any; +import com.google.protobuf.Message; +import com.google.spanner.admin.database.v1.CreateDatabaseMetadata; +import com.google.spanner.admin.database.v1.Database; +import com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata; + +/** + * Unit tests for {@link com.google.cloud.spanner.SpannerImpl.DatabaseAdminClientImpl}. + */ +@RunWith(JUnit4.class) +public class DatabaseAdminClientImplTest { + private static final String PROJECT_ID = "my-project"; + private static final String INSTANCE_ID = "my-instance"; + private static final String INSTANCE_NAME = "projects/my-project/instances/my-instance"; + private static final String DB_ID = "my-db"; + private static final String DB_NAME = "projects/my-project/instances/my-instance/databases/my-db"; + private static final String DB_NAME2 = "projects/my-project/instances/my-instance/databases/my-db2"; + + @Mock SpannerRpc rpc; + SpannerImpl.DatabaseAdminClientImpl client; + + @Before + public void setUp() { + initMocks(this); + client = new SpannerImpl.DatabaseAdminClientImpl(PROJECT_ID, rpc); + } + + private Database getDatabaseProto() { + return Database.newBuilder() + .setName(DB_NAME) + .setState(Database.State.READY) + .build(); + } + + private Database getAnotherDatabaseProto() { + return Database.newBuilder() + .setName(DB_NAME2) + .setState(Database.State.READY) + .build(); + } + + static Any toAny(Message message) { + return Any.newBuilder() + .setTypeUrl("type.googleapis.com/" + message.getDescriptorForType().getFullName()) + .setValue(message.toByteString()) + .build(); + } + + @Test + public void getDatabase() { + when(rpc.getDatabase(DB_NAME)).thenReturn(getDatabaseProto()); + com.google.cloud.spanner.Database db = client.getDatabase(INSTANCE_ID, DB_ID); + assertThat(db.getId().getName()).isEqualTo(DB_NAME); + assertThat(db.getState()).isEqualTo(DatabaseInfo.State.READY); + } + + @Test + public void createDatabase() { + when(rpc.createDatabase( + INSTANCE_NAME, "CREATE DATABASE `" + DB_ID + "`", Collections.emptyList())) + .thenReturn(com.google.longrunning.Operation.newBuilder() + .setDone(true) + .setName("my-op") + .setResponse(toAny(getDatabaseProto())) + .build()); + Operation op = client.createDatabase( + INSTANCE_ID, DB_ID, Collections.emptyList()); + assertThat(op.isDone()).isTrue(); + assertThat(op.getResult().getId().getName()).isEqualTo(DB_NAME); + } + + @Test + public void updateDatabaseDdl() { + String opName = DB_NAME + "/operations/myop"; + String opId = "myop"; + List ddl = ImmutableList.of(); + when(rpc.updateDatabaseDdl(DB_NAME, ddl, opId)).thenReturn(com.google.longrunning.Operation.newBuilder() + .setDone(true) + .setName(opName) + .build()); + Operation op = client.updateDatabaseDdl( + INSTANCE_ID, DB_ID, ddl, opId); + assertThat(op.isDone()); + assertThat(op.getName()).isEqualTo(opName); + } + + @Test + public void updateDatabaseDdlOpAlreadyExists() { + String opName = DB_NAME + "/operations/myop"; + String opId = "myop"; + List ddl = ImmutableList.of(); + when(rpc.updateDatabaseDdl(DB_NAME, ddl, opId)).thenThrow( + SpannerExceptionFactory.newSpannerException(ErrorCode.ALREADY_EXISTS, "")); + Operation op = client.updateDatabaseDdl( + INSTANCE_ID, DB_ID, ddl, opId); + assertThat(op.getName()).isEqualTo(opName); + } + + @Test + public void dropDatabase() { + client.dropDatabase(INSTANCE_ID, DB_ID); + verify(rpc).dropDatabase(DB_NAME); + } + + @Test + public void getDatabaseDdl() { + List ddl = ImmutableList.of("CREATE TABLE mytable()"); + when(rpc.getDatabaseDdl(DB_NAME)).thenReturn(ddl); + assertThat(client.getDatabaseDdl(INSTANCE_ID, DB_ID)).isEqualTo(ddl); + } + + @Test + public void listDatabases() { + String pageToken = "token"; + when(rpc.listDatabases(INSTANCE_NAME, 1, null)).thenReturn( + new Paginated<>(ImmutableList.of(getDatabaseProto()), pageToken)); + when(rpc.listDatabases(INSTANCE_NAME, 1, pageToken)).thenReturn( + new Paginated<>(ImmutableList.of(getAnotherDatabaseProto()), "")); + List dbs = Lists.newArrayList( + client.listDatabases(INSTANCE_ID, Options.pageSize(1)).iterateAll()); + assertThat(dbs.get(0).getId().getName()).isEqualTo(DB_NAME); + assertThat(dbs.get(1).getId().getName()).isEqualTo(DB_NAME2); + assertThat(dbs.size()).isEqualTo(2); + } + +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InstanceAdminClientImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InstanceAdminClientImplTest.java new file mode 100644 index 000000000000..e0ab3e74bd4d --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InstanceAdminClientImplTest.java @@ -0,0 +1,173 @@ +/* + * Copyright 2017 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner; + +import static com.google.common.truth.Truth.assertThat; +import static org.mockito.MockitoAnnotations.initMocks; + +import java.util.List; + +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; +import org.mockito.Mock; + +import com.google.cloud.spanner.spi.v1.SpannerRpc; +import com.google.cloud.spanner.spi.v1.SpannerRpc.Paginated; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.Lists; +import com.google.protobuf.FieldMask; +import com.google.spanner.admin.instance.v1.CreateInstanceMetadata; +import com.google.spanner.admin.instance.v1.InstanceConfig; +import com.google.spanner.admin.instance.v1.UpdateInstanceMetadata; + +/** + * Unit tests for {@link com.google.cloud.spanner.SpannerImpl.InstanceAdminClientImpl}. + */ +@RunWith(JUnit4.class) +public class InstanceAdminClientImplTest { + private static final String PROJECT_ID = "my-project"; + private static final String INSTANCE_ID = "my-instance"; + private static final String INSTANCE_NAME = "projects/my-project/instances/my-instance"; + private static final String INSTANCE_NAME2 = "projects/my-project/instances/my-instance2"; + private static final String CONFIG_ID = "my-config"; + private static final String CONFIG_NAME = "projects/my-project/instanceConfigs/my-config"; + private static final String CONFIG_NAME2 = "projects/my-project/instanceConfigs/my-config2"; + + @Mock SpannerRpc rpc; + @Mock DatabaseAdminClient dbClient; + SpannerImpl.InstanceAdminClientImpl client; + + @Before + public void setUp() { + initMocks(this); + client = new SpannerImpl.InstanceAdminClientImpl(PROJECT_ID, rpc, dbClient); + } + + @Test + public void getInstanceConfig() { + when(rpc.getInstanceConfig(CONFIG_NAME)).thenReturn( + InstanceConfig.newBuilder().setName(CONFIG_NAME).build()); + assertThat(client.getInstanceConfig(CONFIG_ID).getId().getName()).isEqualTo(CONFIG_NAME); + } + + @Test + public void listInstanceConfigs() { + String nextToken = "token"; + when(rpc.listInstanceConfigs(1, null)).thenReturn( + new Paginated( + ImmutableList.of(InstanceConfig.newBuilder().setName(CONFIG_NAME).build()), nextToken)); + when(rpc.listInstanceConfigs(1, nextToken)).thenReturn( + new Paginated( + ImmutableList.of(InstanceConfig.newBuilder().setName(CONFIG_NAME2).build()), "")); + List configs = Lists.newArrayList( + client.listInstanceConfigs(Options.pageSize(1)).iterateAll()); + assertThat(configs.get(0).getId().getName()).isEqualTo(CONFIG_NAME); + assertThat(configs.get(1).getId().getName()).isEqualTo(CONFIG_NAME2); + assertThat(configs.size()).isEqualTo(2); + } + + private com.google.spanner.admin.instance.v1.Instance getInstanceProto() { + return com.google.spanner.admin.instance.v1.Instance.newBuilder() + .setConfig(CONFIG_NAME) + .setName(INSTANCE_NAME) + .setNodeCount(1) + .build(); + } + + private com.google.spanner.admin.instance.v1.Instance getAnotherInstanceProto() { + return com.google.spanner.admin.instance.v1.Instance.newBuilder() + .setConfig(CONFIG_NAME) + .setName(INSTANCE_NAME2) + .setNodeCount(1) + .build(); + } + + @Test + public void createInstance() { + when(rpc.createInstance("projects/" + PROJECT_ID, INSTANCE_ID, getInstanceProto())).thenReturn( + com.google.longrunning.Operation.newBuilder() + .setDone(true) + .setName(INSTANCE_NAME + "/operations/op") + .setResponse(DatabaseAdminClientImplTest.toAny(getInstanceProto())) + .build()); + Operation op = client.createInstance( + InstanceInfo.newBuilder(InstanceId.of(PROJECT_ID, INSTANCE_ID)) + .setInstanceConfigId(InstanceConfigId.of(PROJECT_ID, CONFIG_ID)) + .setNodeCount(1) + .build()); + assertThat(op.isDone()).isTrue(); + assertThat(op.getResult().getId().getName()).isEqualTo(INSTANCE_NAME); + } + + @Test + public void getInstance() { + when(rpc.getInstance(INSTANCE_NAME)).thenReturn(getInstanceProto()); + assertThat(client.getInstance(INSTANCE_ID).getId().getName()).isEqualTo(INSTANCE_NAME); + } + + @Test + public void dropInstance() { + client.deleteInstance(INSTANCE_ID); + verify(rpc).deleteInstance(INSTANCE_NAME); + } + + @Test + public void updateInstanceMetadata() { + com.google.spanner.admin.instance.v1.Instance instance = com.google.spanner.admin.instance.v1.Instance.newBuilder() + .setName(INSTANCE_NAME) + .setConfig(CONFIG_NAME) + .setNodeCount(2) + .build(); + when(rpc.updateInstance(instance, FieldMask.newBuilder().addPaths("node_count").build())) + .thenReturn(com.google.longrunning.Operation.newBuilder() + .setDone(true) + .setName(INSTANCE_NAME + "/operations/op") + .setResponse(DatabaseAdminClientImplTest.toAny(instance)) + .build()); + InstanceInfo instanceInfo = InstanceInfo.newBuilder(InstanceId.of(INSTANCE_NAME)) + .setInstanceConfigId(InstanceConfigId.of(CONFIG_NAME)) + .setNodeCount(2) + .build(); + Operation op = client.updateInstance(instanceInfo, + InstanceInfo.InstanceField.NODE_COUNT); + assertThat(op.isDone()).isTrue(); + assertThat(op.getResult().getId().getName()).isEqualTo(INSTANCE_NAME); + } + + @Test + public void listInstances() { + String nextToken = "token"; + String filter = "env:dev"; + when(rpc.listInstances(1, null, filter)).thenReturn( + new Paginated( + ImmutableList.of(getInstanceProto()), nextToken)); + when(rpc.listInstances(1, nextToken, filter)).thenReturn( + new Paginated( + ImmutableList.of(getAnotherInstanceProto()), "")); + List instances = Lists.newArrayList( + client.listInstances(Options.pageSize(1), Options.filter(filter)).iterateAll()); + assertThat(instances.get(0).getId().getName()).isEqualTo(INSTANCE_NAME); + assertThat(instances.get(1).getId().getName()).isEqualTo(INSTANCE_NAME2); + assertThat(instances.size()).isEqualTo(2); + } + +} diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ResultSetsTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ResultSetsTest.java new file mode 100644 index 000000000000..cfad4d350b84 --- /dev/null +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ResultSetsTest.java @@ -0,0 +1,90 @@ +/* + * Copyright 2017 Google Inc. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.cloud.spanner; + +import static com.google.common.truth.Truth.assertThat; + +import java.util.Arrays; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +/** + * Unit tests for {@link ResultSets} + */ +@RunWith(JUnit4.class) +public class ResultSetsTest { + + @Rule + public ExpectedException expected = ExpectedException.none(); + + @Test + public void resultSetIteration() { + Type type = Type.struct( + Type.StructField.of("f1", Type.string()), + Type.StructField.of("f2", Type.int64()), + Type.StructField.of("f3", Type.bool())); + Struct struct1 = + Struct.newBuilder().set("f1").to("x").set("f2").to(2).add("f3", Value.bool(true)).build(); + Struct struct2 = + Struct.newBuilder().set("f1").to("y").set("f2").to(3).add("f3", Value.bool(null)).build(); + ResultSet rs = ResultSets.forRows(type, Arrays.asList(struct1, struct2)); + + assertThat(rs.next()).isTrue(); + assertThat(rs.getType()).isEqualTo(type); + assertThat(rs.getColumnCount()).isEqualTo(3); + assertThat(rs.getColumnIndex("f1")).isEqualTo(0); + assertThat(rs.getColumnType("f1")).isEqualTo(Type.string()); + assertThat(rs.getColumnType(0)).isEqualTo(Type.string()); + assertThat(rs.getColumnIndex("f2")).isEqualTo(1); + assertThat(rs.getColumnType("f2")).isEqualTo(Type.int64()); + assertThat(rs.getColumnType(1)).isEqualTo(Type.int64()); + assertThat(rs.getColumnIndex("f3")).isEqualTo(2); + assertThat(rs.getColumnType("f3")).isEqualTo(Type.bool()); + assertThat(rs.getColumnType(2)).isEqualTo(Type.bool()); + assertThat(rs.getCurrentRowAsStruct()).isEqualTo(struct1); + assertThat(rs.getString(0)).isEqualTo("x"); + assertThat(rs.getLong(1)).isEqualTo(2L); + assertThat(rs.getBoolean(2)).isTrue(); + assertThat(rs.next()).isTrue(); + assertThat(rs.getCurrentRowAsStruct()).isEqualTo(struct2); + assertThat(rs.getString(0)).isEqualTo("y"); + assertThat(rs.getLong(1)).isEqualTo(3L); + assertThat(rs.isNull(2)).isTrue(); + assertThat(rs.next()).isFalse(); + } + + @Test + public void closeResultSet() { + ResultSet rs = ResultSets.forRows(Type.struct(Type.StructField.of("f1", Type.string())), + Arrays.asList(Struct.newBuilder().set("f1").to("x").build())); + rs.close(); + expected.expect(IllegalStateException.class); + rs.getCurrentRowAsStruct(); + } + + @Test + public void exceptionIfNextIsNotCalled() { + ResultSet rs = ResultSets.forRows(Type.struct(Type.StructField.of("f1", Type.string())), + Arrays.asList(Struct.newBuilder().set("f1").to("x").build())); + expected.expect(IllegalStateException.class); + rs.getCurrentRowAsStruct(); + } +} From 3adac9e1635d9e207149490425f2d43b4e4d0695 Mon Sep 17 00:00:00 2001 From: Vikas Kedia Date: Thu, 17 Aug 2017 16:15:04 -0700 Subject: [PATCH 2/4] Formatting fixes --- .../spanner/DatabaseAdminClientImplTest.java | 107 ++++++------- .../spanner/InstanceAdminClientImplTest.java | 143 +++++++++--------- .../google/cloud/spanner/ResultSetsTest.java | 39 ++--- 3 files changed, 142 insertions(+), 147 deletions(-) diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseAdminClientImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseAdminClientImplTest.java index 2f0ed21d292a..fa8f5711e884 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseAdminClientImplTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/DatabaseAdminClientImplTest.java @@ -17,19 +17,9 @@ package com.google.cloud.spanner; import static com.google.common.truth.Truth.assertThat; -import static org.mockito.MockitoAnnotations.initMocks; - -import java.util.Collections; -import java.util.List; - import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.JUnit4; -import org.mockito.Mock; +import static org.mockito.MockitoAnnotations.initMocks; import com.google.cloud.spanner.spi.v1.SpannerRpc; import com.google.cloud.spanner.spi.v1.SpannerRpc.Paginated; @@ -40,10 +30,15 @@ import com.google.spanner.admin.database.v1.CreateDatabaseMetadata; import com.google.spanner.admin.database.v1.Database; import com.google.spanner.admin.database.v1.UpdateDatabaseDdlMetadata; +import java.util.Collections; +import java.util.List; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; +import org.mockito.Mock; -/** - * Unit tests for {@link com.google.cloud.spanner.SpannerImpl.DatabaseAdminClientImpl}. - */ +/** Unit tests for {@link com.google.cloud.spanner.SpannerImpl.DatabaseAdminClientImpl}. */ @RunWith(JUnit4.class) public class DatabaseAdminClientImplTest { private static final String PROJECT_ID = "my-project"; @@ -51,11 +46,12 @@ public class DatabaseAdminClientImplTest { private static final String INSTANCE_NAME = "projects/my-project/instances/my-instance"; private static final String DB_ID = "my-db"; private static final String DB_NAME = "projects/my-project/instances/my-instance/databases/my-db"; - private static final String DB_NAME2 = "projects/my-project/instances/my-instance/databases/my-db2"; - + private static final String DB_NAME2 = + "projects/my-project/instances/my-instance/databases/my-db2"; + @Mock SpannerRpc rpc; SpannerImpl.DatabaseAdminClientImpl client; - + @Before public void setUp() { initMocks(this); @@ -63,26 +59,20 @@ public void setUp() { } private Database getDatabaseProto() { - return Database.newBuilder() - .setName(DB_NAME) - .setState(Database.State.READY) - .build(); + return Database.newBuilder().setName(DB_NAME).setState(Database.State.READY).build(); } - + private Database getAnotherDatabaseProto() { - return Database.newBuilder() - .setName(DB_NAME2) - .setState(Database.State.READY) - .build(); + return Database.newBuilder().setName(DB_NAME2).setState(Database.State.READY).build(); } - + static Any toAny(Message message) { return Any.newBuilder() .setTypeUrl("type.googleapis.com/" + message.getDescriptorForType().getFullName()) .setValue(message.toByteString()) .build(); } - + @Test public void getDatabase() { when(rpc.getDatabase(DB_NAME)).thenReturn(getDatabaseProto()); @@ -90,74 +80,73 @@ public void getDatabase() { assertThat(db.getId().getName()).isEqualTo(DB_NAME); assertThat(db.getState()).isEqualTo(DatabaseInfo.State.READY); } - + @Test public void createDatabase() { when(rpc.createDatabase( - INSTANCE_NAME, "CREATE DATABASE `" + DB_ID + "`", Collections.emptyList())) - .thenReturn(com.google.longrunning.Operation.newBuilder() - .setDone(true) - .setName("my-op") - .setResponse(toAny(getDatabaseProto())) - .build()); - Operation op = client.createDatabase( - INSTANCE_ID, DB_ID, Collections.emptyList()); + INSTANCE_NAME, "CREATE DATABASE `" + DB_ID + "`", Collections.emptyList())) + .thenReturn( + com.google.longrunning.Operation.newBuilder() + .setDone(true) + .setName("my-op") + .setResponse(toAny(getDatabaseProto())) + .build()); + Operation op = + client.createDatabase(INSTANCE_ID, DB_ID, Collections.emptyList()); assertThat(op.isDone()).isTrue(); assertThat(op.getResult().getId().getName()).isEqualTo(DB_NAME); } - + @Test public void updateDatabaseDdl() { String opName = DB_NAME + "/operations/myop"; String opId = "myop"; List ddl = ImmutableList.of(); - when(rpc.updateDatabaseDdl(DB_NAME, ddl, opId)).thenReturn(com.google.longrunning.Operation.newBuilder() - .setDone(true) - .setName(opName) - .build()); - Operation op = client.updateDatabaseDdl( - INSTANCE_ID, DB_ID, ddl, opId); + when(rpc.updateDatabaseDdl(DB_NAME, ddl, opId)) + .thenReturn( + com.google.longrunning.Operation.newBuilder().setDone(true).setName(opName).build()); + Operation op = + client.updateDatabaseDdl(INSTANCE_ID, DB_ID, ddl, opId); assertThat(op.isDone()); assertThat(op.getName()).isEqualTo(opName); } - + @Test public void updateDatabaseDdlOpAlreadyExists() { String opName = DB_NAME + "/operations/myop"; String opId = "myop"; List ddl = ImmutableList.of(); - when(rpc.updateDatabaseDdl(DB_NAME, ddl, opId)).thenThrow( - SpannerExceptionFactory.newSpannerException(ErrorCode.ALREADY_EXISTS, "")); - Operation op = client.updateDatabaseDdl( - INSTANCE_ID, DB_ID, ddl, opId); + when(rpc.updateDatabaseDdl(DB_NAME, ddl, opId)) + .thenThrow(SpannerExceptionFactory.newSpannerException(ErrorCode.ALREADY_EXISTS, "")); + Operation op = + client.updateDatabaseDdl(INSTANCE_ID, DB_ID, ddl, opId); assertThat(op.getName()).isEqualTo(opName); } - + @Test public void dropDatabase() { client.dropDatabase(INSTANCE_ID, DB_ID); verify(rpc).dropDatabase(DB_NAME); } - + @Test public void getDatabaseDdl() { List ddl = ImmutableList.of("CREATE TABLE mytable()"); when(rpc.getDatabaseDdl(DB_NAME)).thenReturn(ddl); assertThat(client.getDatabaseDdl(INSTANCE_ID, DB_ID)).isEqualTo(ddl); } - + @Test public void listDatabases() { String pageToken = "token"; - when(rpc.listDatabases(INSTANCE_NAME, 1, null)).thenReturn( - new Paginated<>(ImmutableList.of(getDatabaseProto()), pageToken)); - when(rpc.listDatabases(INSTANCE_NAME, 1, pageToken)).thenReturn( - new Paginated<>(ImmutableList.of(getAnotherDatabaseProto()), "")); - List dbs = Lists.newArrayList( - client.listDatabases(INSTANCE_ID, Options.pageSize(1)).iterateAll()); + when(rpc.listDatabases(INSTANCE_NAME, 1, null)) + .thenReturn(new Paginated<>(ImmutableList.of(getDatabaseProto()), pageToken)); + when(rpc.listDatabases(INSTANCE_NAME, 1, pageToken)) + .thenReturn(new Paginated<>(ImmutableList.of(getAnotherDatabaseProto()), "")); + List dbs = + Lists.newArrayList(client.listDatabases(INSTANCE_ID, Options.pageSize(1)).iterateAll()); assertThat(dbs.get(0).getId().getName()).isEqualTo(DB_NAME); assertThat(dbs.get(1).getId().getName()).isEqualTo(DB_NAME2); assertThat(dbs.size()).isEqualTo(2); } - } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InstanceAdminClientImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InstanceAdminClientImplTest.java index e0ab3e74bd4d..2bedf160a03e 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InstanceAdminClientImplTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/InstanceAdminClientImplTest.java @@ -17,18 +17,9 @@ package com.google.cloud.spanner; import static com.google.common.truth.Truth.assertThat; -import static org.mockito.MockitoAnnotations.initMocks; - -import java.util.List; - import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; - -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.JUnit4; -import org.mockito.Mock; +import static org.mockito.MockitoAnnotations.initMocks; import com.google.cloud.spanner.spi.v1.SpannerRpc; import com.google.cloud.spanner.spi.v1.SpannerRpc.Paginated; @@ -38,10 +29,14 @@ import com.google.spanner.admin.instance.v1.CreateInstanceMetadata; import com.google.spanner.admin.instance.v1.InstanceConfig; import com.google.spanner.admin.instance.v1.UpdateInstanceMetadata; +import java.util.List; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; +import org.mockito.Mock; -/** - * Unit tests for {@link com.google.cloud.spanner.SpannerImpl.InstanceAdminClientImpl}. - */ +/** Unit tests for {@link com.google.cloud.spanner.SpannerImpl.InstanceAdminClientImpl}. */ @RunWith(JUnit4.class) public class InstanceAdminClientImplTest { private static final String PROJECT_ID = "my-project"; @@ -51,11 +46,11 @@ public class InstanceAdminClientImplTest { private static final String CONFIG_ID = "my-config"; private static final String CONFIG_NAME = "projects/my-project/instanceConfigs/my-config"; private static final String CONFIG_NAME2 = "projects/my-project/instanceConfigs/my-config2"; - + @Mock SpannerRpc rpc; @Mock DatabaseAdminClient dbClient; SpannerImpl.InstanceAdminClientImpl client; - + @Before public void setUp() { initMocks(this); @@ -64,27 +59,30 @@ public void setUp() { @Test public void getInstanceConfig() { - when(rpc.getInstanceConfig(CONFIG_NAME)).thenReturn( - InstanceConfig.newBuilder().setName(CONFIG_NAME).build()); + when(rpc.getInstanceConfig(CONFIG_NAME)) + .thenReturn(InstanceConfig.newBuilder().setName(CONFIG_NAME).build()); assertThat(client.getInstanceConfig(CONFIG_ID).getId().getName()).isEqualTo(CONFIG_NAME); } - + @Test public void listInstanceConfigs() { String nextToken = "token"; - when(rpc.listInstanceConfigs(1, null)).thenReturn( - new Paginated( - ImmutableList.of(InstanceConfig.newBuilder().setName(CONFIG_NAME).build()), nextToken)); - when(rpc.listInstanceConfigs(1, nextToken)).thenReturn( - new Paginated( - ImmutableList.of(InstanceConfig.newBuilder().setName(CONFIG_NAME2).build()), "")); - List configs = Lists.newArrayList( - client.listInstanceConfigs(Options.pageSize(1)).iterateAll()); + when(rpc.listInstanceConfigs(1, null)) + .thenReturn( + new Paginated( + ImmutableList.of(InstanceConfig.newBuilder().setName(CONFIG_NAME).build()), + nextToken)); + when(rpc.listInstanceConfigs(1, nextToken)) + .thenReturn( + new Paginated( + ImmutableList.of(InstanceConfig.newBuilder().setName(CONFIG_NAME2).build()), "")); + List configs = + Lists.newArrayList(client.listInstanceConfigs(Options.pageSize(1)).iterateAll()); assertThat(configs.get(0).getId().getName()).isEqualTo(CONFIG_NAME); assertThat(configs.get(1).getId().getName()).isEqualTo(CONFIG_NAME2); assertThat(configs.size()).isEqualTo(2); } - + private com.google.spanner.admin.instance.v1.Instance getInstanceProto() { return com.google.spanner.admin.instance.v1.Instance.newBuilder() .setConfig(CONFIG_NAME) @@ -92,7 +90,7 @@ private com.google.spanner.admin.instance.v1.Instance getInstanceProto() { .setNodeCount(1) .build(); } - + private com.google.spanner.admin.instance.v1.Instance getAnotherInstanceProto() { return com.google.spanner.admin.instance.v1.Instance.newBuilder() .setConfig(CONFIG_NAME) @@ -100,74 +98,81 @@ private com.google.spanner.admin.instance.v1.Instance getAnotherInstanceProto() .setNodeCount(1) .build(); } - + @Test public void createInstance() { - when(rpc.createInstance("projects/" + PROJECT_ID, INSTANCE_ID, getInstanceProto())).thenReturn( - com.google.longrunning.Operation.newBuilder() - .setDone(true) - .setName(INSTANCE_NAME + "/operations/op") - .setResponse(DatabaseAdminClientImplTest.toAny(getInstanceProto())) - .build()); - Operation op = client.createInstance( - InstanceInfo.newBuilder(InstanceId.of(PROJECT_ID, INSTANCE_ID)) - .setInstanceConfigId(InstanceConfigId.of(PROJECT_ID, CONFIG_ID)) - .setNodeCount(1) - .build()); + when(rpc.createInstance("projects/" + PROJECT_ID, INSTANCE_ID, getInstanceProto())) + .thenReturn( + com.google.longrunning.Operation.newBuilder() + .setDone(true) + .setName(INSTANCE_NAME + "/operations/op") + .setResponse(DatabaseAdminClientImplTest.toAny(getInstanceProto())) + .build()); + Operation op = + client.createInstance( + InstanceInfo.newBuilder(InstanceId.of(PROJECT_ID, INSTANCE_ID)) + .setInstanceConfigId(InstanceConfigId.of(PROJECT_ID, CONFIG_ID)) + .setNodeCount(1) + .build()); assertThat(op.isDone()).isTrue(); assertThat(op.getResult().getId().getName()).isEqualTo(INSTANCE_NAME); } - + @Test public void getInstance() { when(rpc.getInstance(INSTANCE_NAME)).thenReturn(getInstanceProto()); assertThat(client.getInstance(INSTANCE_ID).getId().getName()).isEqualTo(INSTANCE_NAME); } - + @Test public void dropInstance() { client.deleteInstance(INSTANCE_ID); verify(rpc).deleteInstance(INSTANCE_NAME); } - + @Test public void updateInstanceMetadata() { - com.google.spanner.admin.instance.v1.Instance instance = com.google.spanner.admin.instance.v1.Instance.newBuilder() - .setName(INSTANCE_NAME) - .setConfig(CONFIG_NAME) - .setNodeCount(2) - .build(); + com.google.spanner.admin.instance.v1.Instance instance = + com.google.spanner.admin.instance.v1.Instance.newBuilder() + .setName(INSTANCE_NAME) + .setConfig(CONFIG_NAME) + .setNodeCount(2) + .build(); when(rpc.updateInstance(instance, FieldMask.newBuilder().addPaths("node_count").build())) - .thenReturn(com.google.longrunning.Operation.newBuilder() - .setDone(true) - .setName(INSTANCE_NAME + "/operations/op") - .setResponse(DatabaseAdminClientImplTest.toAny(instance)) - .build()); - InstanceInfo instanceInfo = InstanceInfo.newBuilder(InstanceId.of(INSTANCE_NAME)) - .setInstanceConfigId(InstanceConfigId.of(CONFIG_NAME)) - .setNodeCount(2) - .build(); - Operation op = client.updateInstance(instanceInfo, - InstanceInfo.InstanceField.NODE_COUNT); + .thenReturn( + com.google.longrunning.Operation.newBuilder() + .setDone(true) + .setName(INSTANCE_NAME + "/operations/op") + .setResponse(DatabaseAdminClientImplTest.toAny(instance)) + .build()); + InstanceInfo instanceInfo = + InstanceInfo.newBuilder(InstanceId.of(INSTANCE_NAME)) + .setInstanceConfigId(InstanceConfigId.of(CONFIG_NAME)) + .setNodeCount(2) + .build(); + Operation op = + client.updateInstance(instanceInfo, InstanceInfo.InstanceField.NODE_COUNT); assertThat(op.isDone()).isTrue(); assertThat(op.getResult().getId().getName()).isEqualTo(INSTANCE_NAME); } - + @Test public void listInstances() { String nextToken = "token"; String filter = "env:dev"; - when(rpc.listInstances(1, null, filter)).thenReturn( - new Paginated( - ImmutableList.of(getInstanceProto()), nextToken)); - when(rpc.listInstances(1, nextToken, filter)).thenReturn( - new Paginated( - ImmutableList.of(getAnotherInstanceProto()), "")); - List instances = Lists.newArrayList( - client.listInstances(Options.pageSize(1), Options.filter(filter)).iterateAll()); + when(rpc.listInstances(1, null, filter)) + .thenReturn( + new Paginated( + ImmutableList.of(getInstanceProto()), nextToken)); + when(rpc.listInstances(1, nextToken, filter)) + .thenReturn( + new Paginated( + ImmutableList.of(getAnotherInstanceProto()), "")); + List instances = + Lists.newArrayList( + client.listInstances(Options.pageSize(1), Options.filter(filter)).iterateAll()); assertThat(instances.get(0).getId().getName()).isEqualTo(INSTANCE_NAME); assertThat(instances.get(1).getId().getName()).isEqualTo(INSTANCE_NAME2); assertThat(instances.size()).isEqualTo(2); } - } diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ResultSetsTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ResultSetsTest.java index cfad4d350b84..bcc62e06b4ae 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ResultSetsTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/ResultSetsTest.java @@ -19,34 +19,31 @@ import static com.google.common.truth.Truth.assertThat; import java.util.Arrays; - import org.junit.Rule; import org.junit.Test; import org.junit.rules.ExpectedException; import org.junit.runner.RunWith; import org.junit.runners.JUnit4; -/** - * Unit tests for {@link ResultSets} - */ +/** Unit tests for {@link ResultSets} */ @RunWith(JUnit4.class) public class ResultSetsTest { - - @Rule - public ExpectedException expected = ExpectedException.none(); - + + @Rule public ExpectedException expected = ExpectedException.none(); + @Test public void resultSetIteration() { - Type type = Type.struct( - Type.StructField.of("f1", Type.string()), - Type.StructField.of("f2", Type.int64()), - Type.StructField.of("f3", Type.bool())); + Type type = + Type.struct( + Type.StructField.of("f1", Type.string()), + Type.StructField.of("f2", Type.int64()), + Type.StructField.of("f3", Type.bool())); Struct struct1 = Struct.newBuilder().set("f1").to("x").set("f2").to(2).add("f3", Value.bool(true)).build(); Struct struct2 = Struct.newBuilder().set("f1").to("y").set("f2").to(3).add("f3", Value.bool(null)).build(); ResultSet rs = ResultSets.forRows(type, Arrays.asList(struct1, struct2)); - + assertThat(rs.next()).isTrue(); assertThat(rs.getType()).isEqualTo(type); assertThat(rs.getColumnCount()).isEqualTo(3); @@ -70,20 +67,24 @@ public void resultSetIteration() { assertThat(rs.isNull(2)).isTrue(); assertThat(rs.next()).isFalse(); } - + @Test public void closeResultSet() { - ResultSet rs = ResultSets.forRows(Type.struct(Type.StructField.of("f1", Type.string())), - Arrays.asList(Struct.newBuilder().set("f1").to("x").build())); + ResultSet rs = + ResultSets.forRows( + Type.struct(Type.StructField.of("f1", Type.string())), + Arrays.asList(Struct.newBuilder().set("f1").to("x").build())); rs.close(); expected.expect(IllegalStateException.class); rs.getCurrentRowAsStruct(); } - + @Test public void exceptionIfNextIsNotCalled() { - ResultSet rs = ResultSets.forRows(Type.struct(Type.StructField.of("f1", Type.string())), - Arrays.asList(Struct.newBuilder().set("f1").to("x").build())); + ResultSet rs = + ResultSets.forRows( + Type.struct(Type.StructField.of("f1", Type.string())), + Arrays.asList(Struct.newBuilder().set("f1").to("x").build())); expected.expect(IllegalStateException.class); rs.getCurrentRowAsStruct(); } From 102aad6860ae9f8482a81266b1937e0c6b421d9f Mon Sep 17 00:00:00 2001 From: Vikas Kedia Date: Thu, 17 Aug 2017 16:24:39 -0700 Subject: [PATCH 3/4] Fixed some tests --- .../test/java/com/google/cloud/spanner/SessionImplTest.java | 3 ++- .../test/java/com/google/cloud/spanner/SpannerImplTest.java | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionImplTest.java index e87983a4c3e8..d034c26fa2c4 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionImplTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SessionImplTest.java @@ -61,6 +61,7 @@ public class SessionImplTest { @Rule public ExpectedException expectedException = ExpectedException.none(); @Mock private SpannerRpc rpc; + @Mock private SpannerOptions spannerOptions; private com.google.cloud.spanner.Session session; @Captor private ArgumentCaptor> optionsCaptor; private Map options; @@ -68,7 +69,7 @@ public class SessionImplTest { @Before public void setUp() { MockitoAnnotations.initMocks(this); - SpannerImpl spanner = new SpannerImpl(rpc, 1, null); + SpannerImpl spanner = new SpannerImpl(rpc, 1, spannerOptions); String dbName = "projects/p1/instances/i1/databases/d1"; String sessionName = dbName + "/sessions/s1"; DatabaseId db = DatabaseId.of(dbName); diff --git a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerImplTest.java b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerImplTest.java index ca2f977dda30..26abbc356358 100644 --- a/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerImplTest.java +++ b/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerImplTest.java @@ -34,6 +34,7 @@ @RunWith(JUnit4.class) public class SpannerImplTest { @Mock private SpannerRpc rpc; + @Mock private SpannerOptions spannerOptions; private SpannerImpl impl; @Captor ArgumentCaptor> options; @@ -41,7 +42,7 @@ public class SpannerImplTest { @Before public void setUp() { MockitoAnnotations.initMocks(this); - impl = new SpannerImpl(rpc, 1, null); + impl = new SpannerImpl(rpc, 1, spannerOptions); } @Test From 9773c0c87747f6bff5a467e660021d02ce443324 Mon Sep 17 00:00:00 2001 From: Vikas Kedia Date: Tue, 22 Aug 2017 09:51:12 -0700 Subject: [PATCH 4/4] Changed an exception type --- .../src/main/java/com/google/cloud/spanner/SpannerImpl.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerImpl.java b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerImpl.java index c6e6a519055f..b9d0f5c72dbc 100644 --- a/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerImpl.java +++ b/google-cloud-spanner/src/main/java/com/google/cloud/spanner/SpannerImpl.java @@ -208,7 +208,7 @@ static T runWithRetries(Callable callable) { backoffSleep(context, backOff); } catch (Exception e) { Throwables.throwIfUnchecked(e); - throw new RuntimeException(e); + throw newSpannerException(ErrorCode.INTERNAL, "Unexpected exception thrown", e); } } }