Next Next commit
feat: expose leader options in instance config
Exposes the list of leader options for an instance from an instance
config.
  • Loading branch information
@thiagotnunes
thiagotnunes committedJul 6, 2021
commit 5d8c7ba5bb1ba04e144610f58fa9ea360a67a8b8
Original file line numberDiff line numberDiff line change
Expand Up@@ -16,6 +16,9 @@

package com.google.cloud.spanner;

import java.util.Collections;
import java.util.List;

/**
* Represents a Cloud Spanner instance config.{@code InstanceConfig} adds a layer of service related
* functionality over {@code InstanceConfigInfo}.
Expand All@@ -25,7 +28,15 @@ public class InstanceConfig extends InstanceConfigInfo {
private final InstanceAdminClient client;

public InstanceConfig(InstanceConfigId id, String displayName, InstanceAdminClient client) {
super(id, displayName);
this(id, displayName, Collections.emptyList(), client);
}

public InstanceConfig(
InstanceConfigId id,
String displayName,
List<String> leaderOptions,
InstanceAdminClient client) {
super(id, displayName, leaderOptions);
this.client = client;
}

Expand All@@ -36,6 +47,10 @@ public InstanceConfig reload() {

static InstanceConfig fromProto(
com.google.spanner.admin.instance.v1.InstanceConfig proto, InstanceAdminClient client) {
return new InstanceConfig(InstanceConfigId.of(proto.getName()), proto.getDisplayName(), client);
return new InstanceConfig(
InstanceConfigId.of(proto.getName()),
proto.getDisplayName(),
proto.getLeaderOptionsList(),
client);
}
}
Original file line numberDiff line numberDiff line change
Expand Up@@ -45,6 +45,7 @@
import io.grpc.inprocess.InProcessServerBuilder;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
Expand DownExpand Up@@ -353,8 +354,13 @@ public void getInstanceConfigTest() {
for (int i = 0; i < 2; i++) {
InstanceConfigName name2 = InstanceConfigName.of(PROJECT, "INSTANCE_CONFIG");
String displayName = "displayName1615086568";
List<String> leaderOptions = Arrays.asList("leader option 1", "leader option 2");
InstanceConfig expectedResponse =
InstanceConfig.newBuilder().setName(name2.toString()).setDisplayName(displayName).build();
InstanceConfig.newBuilder()
.setName(name2.toString())
.setDisplayName(displayName)
.addAllLeaderOptions(leaderOptions)
.build();
if (exceptionAtCall == 0) {
mockInstanceAdmin.addException(exception);
}
Expand All@@ -368,6 +374,7 @@ public void getInstanceConfigTest() {
client.getInstanceConfig(name.toString());

Assert.assertEquals(displayName, actualResponse.getDisplayName());
Assert.assertEquals(leaderOptions, actualResponse.getLeaderOptions());
List<AbstractMessage> actualRequests = mockInstanceAdmin.getRequests();
Assert.assertEquals(i + 1, actualRequests.size());
}
Expand Down
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
/*
* Copyright 2021 Google LLC
*
* 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 org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;

import java.util.Arrays;
import org.junit.Before;
import org.junit.Test;

public class InstanceConfigTest {

private InstanceAdminClient client;

@Before
public void setUp() {
client = mock(InstanceAdminClient.class);
}

@Test
public void testInstanceConfigFromProtoWithoutLeaderOptions() {
final InstanceConfig instanceConfig =
InstanceConfig.fromProto(
com.google.spanner.admin.instance.v1.InstanceConfig.newBuilder()
.setDisplayName("Display Name")
.setName("projects/my-project/instanceConfigs/my-instance-config")
.build(),
client);

assertEquals(
new InstanceConfig(
InstanceConfigId.of("my-project", "my-instance-config"), "Display Name", client),
instanceConfig);
}

@Test
public void testInstanceConfigFromProtoWithLeaderOptions() {
final InstanceConfig instanceConfig =
InstanceConfig.fromProto(
com.google.spanner.admin.instance.v1.InstanceConfig.newBuilder()
.setDisplayName("Display Name")
.setName("projects/my-project/instanceConfigs/my-instance-config")
.addAllLeaderOptions(Arrays.asList("Leader Option 1", "Leader Option 2"))
.build(),
client);

assertEquals(
new InstanceConfig(
InstanceConfigId.of("my-project", "my-instance-config"),
"Display Name",
Arrays.asList("Leader Option 1", "Leader Option 2"),
client),
instanceConfig);
}
}