Skip to content

Commit c94ee32

Browse files
authored
test: Refactor tests to extract common setup logic (googleapis#457)
* test: Refactor tests to extract common setup logic * test: Refactor tests to extract common setup logic * test: Refactor tests to extract common setup logic
1 parent b1ff3dc commit c94ee32

6 files changed

Lines changed: 92 additions & 76 deletions

File tree

java-bigtable/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/BigtableDataClientFactoryTest.java

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,9 @@
2828
import com.google.cloud.bigtable.data.v2.internal.NameUtil;
2929
import com.google.cloud.bigtable.data.v2.models.RowMutation;
3030
import com.google.common.base.Preconditions;
31-
import io.grpc.Server;
32-
import io.grpc.ServerBuilder;
3331
import io.grpc.stub.StreamObserver;
3432
import java.io.IOException;
3533
import java.lang.reflect.Method;
36-
import java.net.ServerSocket;
3734
import org.junit.After;
3835
import org.junit.Before;
3936
import org.junit.Rule;
@@ -54,7 +51,7 @@ public class BigtableDataClientFactoryTest {
5451
private static final String DEFAULT_INSTANCE_ID = "fake-instance";
5552
private static final String DEFAULT_APP_PROFILE_ID = "fake-app-profile";
5653

57-
private Server fakeServer;
54+
private FakeServiceHelper serviceHelper;
5855
private FakeBigtableService service;
5956

6057
private TransportChannelProvider transportChannelProvider;
@@ -68,16 +65,11 @@ public class BigtableDataClientFactoryTest {
6865
public void setUp() throws IOException {
6966
service = new FakeBigtableService();
7067

71-
// Create a fake server for the client to connect to
72-
final int port;
73-
try (ServerSocket ss = new ServerSocket(0)) {
74-
port = ss.getLocalPort();
75-
}
76-
fakeServer = ServerBuilder.forPort(port).addService(service).build();
77-
fakeServer.start();
68+
serviceHelper = new FakeServiceHelper(service);
69+
serviceHelper.start();
7870

7971
BigtableDataSettings.Builder builder =
80-
BigtableDataSettings.newBuilderForEmulator(port)
72+
BigtableDataSettings.newBuilderForEmulator(serviceHelper.getPort())
8173
.setProjectId(DEFAULT_PROJECT_ID)
8274
.setInstanceId(DEFAULT_INSTANCE_ID)
8375
.setAppProfileId(DEFAULT_APP_PROFILE_ID);
@@ -122,9 +114,7 @@ public void setUp() throws IOException {
122114

123115
@After
124116
public void tearDown() {
125-
if (fakeServer != null) {
126-
fakeServer.shutdownNow();
127-
}
117+
serviceHelper.shutdown();
128118
}
129119

130120
@Test
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
/*
2+
* Copyright 2020 Google LLC
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package com.google.cloud.bigtable.data.v2;
17+
18+
import io.grpc.BindableService;
19+
import io.grpc.Server;
20+
import io.grpc.ServerBuilder;
21+
import io.grpc.ServerInterceptor;
22+
import java.io.IOException;
23+
import java.net.ServerSocket;
24+
25+
/** Utility class to setup a fake grpc server on a random port. */
26+
public class FakeServiceHelper {
27+
private final int port;
28+
private final Server server;
29+
30+
public FakeServiceHelper(BindableService... services) throws IOException {
31+
this(null, services);
32+
}
33+
34+
public FakeServiceHelper(ServerInterceptor interceptor, BindableService... services)
35+
throws IOException {
36+
try (ServerSocket ss = new ServerSocket(0)) {
37+
port = ss.getLocalPort();
38+
}
39+
ServerBuilder builder = ServerBuilder.forPort(port);
40+
if (interceptor != null) {
41+
builder = builder.intercept(interceptor);
42+
}
43+
for (BindableService service : services) {
44+
builder = builder.addService(service);
45+
}
46+
server = builder.build();
47+
}
48+
49+
public int getPort() {
50+
return port;
51+
}
52+
53+
public void start() throws IOException {
54+
server.start();
55+
}
56+
57+
public void shutdown() {
58+
server.shutdown();
59+
}
60+
}

java-bigtable/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/BigtableChannelPrimerTest.java

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,11 @@
2525
import com.google.bigtable.v2.ReadRowsResponse;
2626
import com.google.bigtable.v2.RowFilter;
2727
import com.google.bigtable.v2.RowSet;
28+
import com.google.cloud.bigtable.data.v2.FakeServiceHelper;
2829
import com.google.common.collect.ImmutableList;
2930
import io.grpc.ManagedChannel;
3031
import io.grpc.ManagedChannelBuilder;
3132
import io.grpc.Metadata;
32-
import io.grpc.Server;
33-
import io.grpc.ServerBuilder;
3433
import io.grpc.ServerCall;
3534
import io.grpc.ServerCall.Listener;
3635
import io.grpc.ServerCallHandler;
@@ -39,7 +38,6 @@
3938
import io.grpc.StatusRuntimeException;
4039
import io.grpc.stub.StreamObserver;
4140
import java.io.IOException;
42-
import java.net.ServerSocket;
4341
import java.util.Queue;
4442
import java.util.concurrent.ConcurrentLinkedQueue;
4543
import java.util.logging.Handler;
@@ -57,28 +55,20 @@
5755
public class BigtableChannelPrimerTest {
5856
private static final String TOKEN_VALUE = "fake-token";
5957

60-
int port;
61-
Server server;
6258
FakeService fakeService;
6359
MetadataInterceptor metadataInterceptor;
6460
BigtableChannelPrimer primer;
6561
ManagedChannel channel;
6662
private LogHandler logHandler;
63+
private FakeServiceHelper serviceHelper;
6764

6865
@Before
6966
public void setup() throws IOException {
70-
try (ServerSocket ss = new ServerSocket(0)) {
71-
port = ss.getLocalPort();
72-
} catch (IOException e) {
73-
e.printStackTrace();
74-
}
75-
7667
fakeService = new FakeService();
7768
metadataInterceptor = new MetadataInterceptor();
78-
server =
79-
ServerBuilder.forPort(port).intercept(metadataInterceptor).addService(fakeService).build();
80-
server.start();
8169

70+
serviceHelper = new FakeServiceHelper(metadataInterceptor, fakeService);
71+
serviceHelper.start();
8272
primer =
8373
BigtableChannelPrimer.create(
8474
OAuth2Credentials.create(new AccessToken(TOKEN_VALUE, null)),
@@ -87,8 +77,10 @@ public void setup() throws IOException {
8777
"fake-app-profile",
8878
ImmutableList.of("table1", "table2"));
8979

90-
channel = ManagedChannelBuilder.forAddress("localhost", port).usePlaintext().build();
91-
80+
channel =
81+
ManagedChannelBuilder.forAddress("localhost", serviceHelper.getPort())
82+
.usePlaintext()
83+
.build();
9284
logHandler = new LogHandler();
9385
Logger.getLogger(BigtableChannelPrimer.class.toString()).addHandler(logHandler);
9486
}
@@ -97,7 +89,7 @@ public void setup() throws IOException {
9789
public void teardown() {
9890
Logger.getLogger(BigtableChannelPrimer.class.toString()).removeHandler(logHandler);
9991
channel.shutdown();
100-
server.shutdown();
92+
serviceHelper.shutdown();
10193
}
10294

10395
@Test

java-bigtable/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/EnhancedBigtableStubTest.java

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import com.google.bigtable.v2.RowSet;
2626
import com.google.cloud.bigtable.admin.v2.internal.NameUtil;
2727
import com.google.cloud.bigtable.data.v2.BigtableDataSettings;
28+
import com.google.cloud.bigtable.data.v2.FakeServiceHelper;
2829
import com.google.cloud.bigtable.data.v2.internal.RequestContext;
2930
import com.google.cloud.bigtable.data.v2.models.DefaultRowAdapter;
3031
import com.google.cloud.bigtable.data.v2.models.Query;
@@ -34,15 +35,12 @@
3435
import com.google.protobuf.BytesValue;
3536
import com.google.protobuf.StringValue;
3637
import io.grpc.Metadata;
37-
import io.grpc.Server;
38-
import io.grpc.ServerBuilder;
3938
import io.grpc.ServerCall;
4039
import io.grpc.ServerCall.Listener;
4140
import io.grpc.ServerCallHandler;
4241
import io.grpc.ServerInterceptor;
4342
import io.grpc.stub.StreamObserver;
4443
import java.io.IOException;
45-
import java.net.ServerSocket;
4644
import java.util.concurrent.BlockingQueue;
4745
import java.util.concurrent.TimeUnit;
4846
import org.junit.After;
@@ -60,29 +58,21 @@ public class EnhancedBigtableStubTest {
6058
NameUtil.formatTableName(PROJECT_ID, INSTANCE_ID, "fake-table");
6159
private static final String APP_PROFILE_ID = "app-profile-id";
6260

63-
private Server server;
61+
FakeServiceHelper serviceHelper;
6462
private MetadataInterceptor metadataInterceptor;
6563
private FakeDataService fakeDataService;
6664
private EnhancedBigtableStubSettings defaultSettings;
6765
private EnhancedBigtableStub enhancedBigtableStub;
6866

6967
@Before
7068
public void setUp() throws IOException, IllegalAccessException, InstantiationException {
71-
int port;
72-
try (ServerSocket ss = new ServerSocket(0)) {
73-
port = ss.getLocalPort();
74-
}
7569
metadataInterceptor = new MetadataInterceptor();
7670
fakeDataService = new FakeDataService();
77-
server =
78-
ServerBuilder.forPort(port)
79-
.intercept(metadataInterceptor)
80-
.addService(fakeDataService)
81-
.build();
82-
server.start();
71+
serviceHelper = new FakeServiceHelper(metadataInterceptor, fakeDataService);
72+
serviceHelper.start();
8373

8474
defaultSettings =
85-
BigtableDataSettings.newBuilderForEmulator(port)
75+
BigtableDataSettings.newBuilderForEmulator(serviceHelper.getPort())
8676
.setProjectId(PROJECT_ID)
8777
.setInstanceId(INSTANCE_ID)
8878
.setAppProfileId(APP_PROFILE_ID)
@@ -95,7 +85,7 @@ public void setUp() throws IOException, IllegalAccessException, InstantiationExc
9585

9686
@After
9787
public void tearDown() {
98-
server.shutdown();
88+
serviceHelper.shutdown();
9989
}
10090

10191
@Test

java-bigtable/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/HeadersTest.java

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -35,18 +35,16 @@
3535
import com.google.bigtable.v2.SampleRowKeysResponse;
3636
import com.google.cloud.bigtable.data.v2.BigtableDataClient;
3737
import com.google.cloud.bigtable.data.v2.BigtableDataSettings;
38+
import com.google.cloud.bigtable.data.v2.FakeServiceHelper;
3839
import com.google.cloud.bigtable.data.v2.internal.NameUtil;
3940
import com.google.cloud.bigtable.data.v2.models.*;
4041
import com.google.cloud.bigtable.data.v2.models.Mutation;
4142
import com.google.rpc.Status;
4243
import io.grpc.Metadata;
43-
import io.grpc.Server;
44-
import io.grpc.ServerBuilder;
4544
import io.grpc.ServerCall;
4645
import io.grpc.ServerCallHandler;
4746
import io.grpc.ServerInterceptor;
4847
import io.grpc.stub.StreamObserver;
49-
import java.net.ServerSocket;
5048
import java.util.concurrent.ArrayBlockingQueue;
5149
import java.util.concurrent.BlockingQueue;
5250
import org.junit.After;
@@ -72,26 +70,18 @@ public class HeadersTest {
7270
private static final Metadata.Key<String> TEST_FIXED_HEADER =
7371
Metadata.Key.of(TEST_FIXED_HEADER_STRING, Metadata.ASCII_STRING_MARSHALLER);
7472

75-
private Server server;
73+
FakeServiceHelper serviceHelper;
7674
private BlockingQueue<Metadata> sentMetadata = new ArrayBlockingQueue<>(10);
7775

7876
private BigtableDataClient client;
7977

8078
@Before
8179
public void setUp() throws Exception {
82-
int port;
83-
try (ServerSocket ss = new ServerSocket(0)) {
84-
port = ss.getLocalPort();
85-
}
86-
server =
87-
ServerBuilder.forPort(port)
88-
.addService(new FakeBigtableService())
89-
.intercept(new MetadataInterceptor())
90-
.build();
91-
server.start();
80+
serviceHelper = new FakeServiceHelper(new MetadataInterceptor(), new FakeBigtableService());
81+
serviceHelper.start();
9282

9383
BigtableDataSettings.Builder settings =
94-
BigtableDataSettings.newBuilderForEmulator(port)
84+
BigtableDataSettings.newBuilderForEmulator(serviceHelper.getPort())
9585
.setProjectId(PROJECT_ID)
9686
.setInstanceId(INSTANCE_ID)
9787
.setAppProfileId(APP_PROFILE_ID);
@@ -119,7 +109,7 @@ public void setUp() throws Exception {
119109
@After
120110
public void tearDown() throws Exception {
121111
client.close();
122-
server.shutdown();
112+
serviceHelper.shutdown();
123113
}
124114

125115
@Test

java-bigtable/google-cloud-bigtable/src/test/java/com/google/cloud/bigtable/data/v2/stub/metrics/MetricsTracerTest.java

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import com.google.bigtable.v2.ReadRowsResponse;
2626
import com.google.bigtable.v2.ReadRowsResponse.CellChunk;
2727
import com.google.cloud.bigtable.data.v2.BigtableDataSettings;
28+
import com.google.cloud.bigtable.data.v2.FakeServiceHelper;
2829
import com.google.cloud.bigtable.data.v2.models.Query;
2930
import com.google.cloud.bigtable.data.v2.stub.EnhancedBigtableStub;
3031
import com.google.cloud.bigtable.data.v2.stub.EnhancedBigtableStubSettings;
@@ -35,8 +36,6 @@
3536
import com.google.protobuf.ByteString;
3637
import com.google.protobuf.BytesValue;
3738
import com.google.protobuf.StringValue;
38-
import io.grpc.Server;
39-
import io.grpc.ServerBuilder;
4039
import io.grpc.Status;
4140
import io.grpc.StatusRuntimeException;
4241
import io.grpc.stub.StreamObserver;
@@ -54,7 +53,6 @@
5453
import io.opencensus.tags.TagKey;
5554
import io.opencensus.tags.TagValue;
5655
import io.opencensus.tags.Tags;
57-
import java.net.ServerSocket;
5856
import java.util.ArrayList;
5957
import java.util.List;
6058
import java.util.Map;
@@ -95,7 +93,7 @@ public class MetricsTracerTest {
9593

9694
@Rule public final MockitoRule mockitoRule = MockitoJUnit.rule();
9795

98-
private Server server;
96+
FakeServiceHelper serviceHelper;
9997

10098
@Mock(answer = Answers.CALLS_REAL_METHODS)
10199
private BigtableGrpc.BigtableImplBase mockService;
@@ -105,17 +103,13 @@ public class MetricsTracerTest {
105103

106104
@Before
107105
public void setUp() throws Exception {
108-
int port;
109-
try (ServerSocket ss = new ServerSocket(0)) {
110-
port = ss.getLocalPort();
111-
}
112-
server = ServerBuilder.forPort(port).addService(mockService).build();
113-
server.start();
106+
serviceHelper = new FakeServiceHelper(mockService);
107+
serviceHelper.start();
114108

115109
RpcViews.registerBigtableClientViews(localStats.getViewManager());
116110

117111
BigtableDataSettings settings =
118-
BigtableDataSettings.newBuilderForEmulator(port)
112+
BigtableDataSettings.newBuilderForEmulator(serviceHelper.getPort())
119113
.setProjectId(PROJECT_ID)
120114
.setInstanceId(INSTANCE_ID)
121115
.setAppProfileId(APP_PROFILE_ID)
@@ -130,7 +124,7 @@ public void setUp() throws Exception {
130124
@After
131125
public void tearDown() {
132126
stub.close();
133-
server.shutdown();
127+
serviceHelper.shutdown();
134128
}
135129

136130
@Test

0 commit comments

Comments
 (0)