Skip to content

Commit 1bc16bb

Browse files
authored
test(spanner): apply withoutAnnotations to all GAX mocks for Java 8 compatibility (#13820)
Apply Mockito's withSettings().withoutAnnotations() to all mocks of GAX interfaces and classes across google-cloud-spanner tests to prevent Java 8 ArrayStoreException during reflection over JSpecify type-use annotations.
1 parent 9517313 commit 1bc16bb

10 files changed

Lines changed: 83 additions & 47 deletions

java-spanner/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AbstractReadContextTest.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import static org.junit.Assert.assertTrue;
2323
import static org.mockito.Mockito.mock;
2424
import static org.mockito.Mockito.when;
25+
import static org.mockito.Mockito.withSettings;
2526

2627
import com.google.api.gax.core.ExecutorProvider;
2728
import com.google.cloud.spanner.Options.RpcPriority;
@@ -148,7 +149,7 @@ public void setup() {
148149
.setSession(session)
149150
.setRpc(mock(SpannerRpc.class))
150151
.setDefaultQueryOptions(defaultQueryOptions)
151-
.setExecutorProvider(mock(ExecutorProvider.class))
152+
.setExecutorProvider(mock(ExecutorProvider.class, withSettings().withoutAnnotations()))
152153
.build();
153154
}
154155

@@ -361,7 +362,7 @@ public void executeSqlRequestBuilderWithRequestOptionsWithTxnTag() {
361362
.setSession(session)
362363
.setRpc(mock(SpannerRpc.class))
363364
.setDefaultQueryOptions(defaultQueryOptions)
364-
.setExecutorProvider(mock(ExecutorProvider.class))
365+
.setExecutorProvider(mock(ExecutorProvider.class, withSettings().withoutAnnotations()))
365366
.build();
366367

367368
ExecuteSqlRequest request =

java-spanner/google-cloud-spanner/src/test/java/com/google/cloud/spanner/AsyncResultSetImplTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import static org.mockito.Mockito.mock;
2727
import static org.mockito.Mockito.times;
2828
import static org.mockito.Mockito.when;
29+
import static org.mockito.Mockito.withSettings;
2930

3031
import com.google.api.core.ApiFuture;
3132
import com.google.api.gax.core.ExecutorProvider;
@@ -64,7 +65,7 @@ public class AsyncResultSetImplTest {
6465

6566
@Before
6667
public void setup() {
67-
mockedProvider = mock(ExecutorProvider.class);
68+
mockedProvider = mock(ExecutorProvider.class, withSettings().withoutAnnotations());
6869
when(mockedProvider.getExecutor()).thenReturn(mock(ScheduledExecutorService.class));
6970
simpleProvider = SpannerOptions.createAsyncExecutorProvider(1, 1L, TimeUnit.SECONDS);
7071
}

java-spanner/google-cloud-spanner/src/test/java/com/google/cloud/spanner/CompositeTracerTest.java

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import static org.mockito.Mockito.times;
2121
import static org.mockito.Mockito.verify;
2222
import static org.mockito.Mockito.when;
23+
import static org.mockito.Mockito.withSettings;
2324

2425
import com.google.api.gax.tracing.ApiTracer;
2526
import com.google.api.gax.tracing.ApiTracer.Scope;
@@ -46,30 +47,33 @@
4647
public class CompositeTracerTest {
4748
@Rule public final MockitoRule mockitoRule = MockitoJUnit.rule();
4849

49-
@Mock private ApiTracer child1;
50-
@Mock private ApiTracer child2;
50+
private ApiTracer child1;
51+
private ApiTracer child2;
5152
@Mock private OpenTelemetryApiTracer child3;
52-
@Mock private MetricsTracer child4;
53+
private MetricsTracer child4;
5354

5455
private CompositeTracer compositeTracer;
5556

5657
@Before
5758
public void setup() {
59+
child1 = mock(ApiTracer.class, withSettings().withoutAnnotations());
60+
child2 = mock(ApiTracer.class, withSettings().withoutAnnotations());
61+
child4 = mock(MetricsTracer.class, withSettings().withoutAnnotations());
5862
compositeTracer = new CompositeTracer(ImmutableList.of(child1, child2, child3, child4));
5963
}
6064

6165
@Test
6266
public void testInScope() {
63-
Scope scope1 = mock(Scope.class);
67+
Scope scope1 = mock(Scope.class, withSettings().withoutAnnotations());
6468
when(child1.inScope()).thenReturn(scope1);
6569

66-
Scope scope2 = mock(Scope.class);
70+
Scope scope2 = mock(Scope.class, withSettings().withoutAnnotations());
6771
when(child2.inScope()).thenReturn(scope2);
6872

69-
Scope scope3 = mock(Scope.class);
73+
Scope scope3 = mock(Scope.class, withSettings().withoutAnnotations());
7074
when(child3.inScope()).thenReturn(scope3);
7175

72-
Scope scope4 = mock(Scope.class);
76+
Scope scope4 = mock(Scope.class, withSettings().withoutAnnotations());
7377
when(child4.inScope()).thenReturn(scope4);
7478

7579
Scope parentScope = compositeTracer.inScope();

java-spanner/google-cloud-spanner/src/test/java/com/google/cloud/spanner/PartitionedDmlTransactionTest.java

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import static org.mockito.Mockito.times;
2727
import static org.mockito.Mockito.verify;
2828
import static org.mockito.Mockito.when;
29+
import static org.mockito.Mockito.withSettings;
2930

3031
import com.google.api.gax.grpc.GrpcStatusCode;
3132
import com.google.api.gax.rpc.AbortedException;
@@ -117,7 +118,8 @@ public void testExecuteStreamingPartitionedUpdate() {
117118
ResultSetStats stats = ResultSetStats.newBuilder().setRowCountLowerBound(1000L).build();
118119
PartialResultSet p1 = PartialResultSet.newBuilder().setResumeToken(resumeToken).build();
119120
PartialResultSet p2 = PartialResultSet.newBuilder().setStats(stats).build();
120-
ServerStream<PartialResultSet> stream = mock(ServerStream.class);
121+
ServerStream<PartialResultSet> stream =
122+
mock(ServerStream.class, withSettings().withoutAnnotations());
121123
when(stream.iterator()).thenReturn(ImmutableList.of(p1, p2).iterator());
122124
when(rpc.executeStreamingPartitionedDml(
123125
Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(), any(Duration.class)))
@@ -137,7 +139,8 @@ public void testExecuteStreamingPartitionedUpdateWithUpdateOptions() {
137139
ResultSetStats stats = ResultSetStats.newBuilder().setRowCountLowerBound(1000L).build();
138140
PartialResultSet p1 = PartialResultSet.newBuilder().setResumeToken(resumeToken).build();
139141
PartialResultSet p2 = PartialResultSet.newBuilder().setStats(stats).build();
140-
ServerStream<PartialResultSet> stream = mock(ServerStream.class);
142+
ServerStream<PartialResultSet> stream =
143+
mock(ServerStream.class, withSettings().withoutAnnotations());
141144
when(stream.iterator()).thenReturn(ImmutableList.of(p1, p2).iterator());
142145
when(rpc.executeStreamingPartitionedDml(
143146
Mockito.eq(executeRequestWithRequestOptions), anyMap(), any(), any(Duration.class)))
@@ -159,7 +162,8 @@ public void testExecuteStreamingPartitionedUpdateAborted() {
159162
ResultSetStats stats = ResultSetStats.newBuilder().setRowCountLowerBound(1000L).build();
160163
PartialResultSet p1 = PartialResultSet.newBuilder().setResumeToken(resumeToken).build();
161164
PartialResultSet p2 = PartialResultSet.newBuilder().setStats(stats).build();
162-
ServerStream<PartialResultSet> stream1 = mock(ServerStream.class);
165+
ServerStream<PartialResultSet> stream1 =
166+
mock(ServerStream.class, withSettings().withoutAnnotations());
163167
Iterator<PartialResultSet> iterator = mock(Iterator.class);
164168
when(iterator.hasNext()).thenReturn(true, true, false);
165169
when(iterator.next())
@@ -168,7 +172,8 @@ public void testExecuteStreamingPartitionedUpdateAborted() {
168172
new AbortedException(
169173
"transaction aborted", null, GrpcStatusCode.of(Code.ABORTED), true));
170174
when(stream1.iterator()).thenReturn(iterator);
171-
ServerStream<PartialResultSet> stream2 = mock(ServerStream.class);
175+
ServerStream<PartialResultSet> stream2 =
176+
mock(ServerStream.class, withSettings().withoutAnnotations());
172177
when(stream2.iterator()).thenReturn(ImmutableList.of(p1, p2).iterator());
173178
when(rpc.executeStreamingPartitionedDml(
174179
any(ExecuteSqlRequest.class), anyMap(), any(), any(Duration.class)))
@@ -188,7 +193,8 @@ public void testExecuteStreamingPartitionedUpdateUnavailable() {
188193
ResultSetStats stats = ResultSetStats.newBuilder().setRowCountLowerBound(1000L).build();
189194
PartialResultSet p1 = PartialResultSet.newBuilder().setResumeToken(resumeToken).build();
190195
PartialResultSet p2 = PartialResultSet.newBuilder().setStats(stats).build();
191-
ServerStream<PartialResultSet> stream1 = mock(ServerStream.class);
196+
ServerStream<PartialResultSet> stream1 =
197+
mock(ServerStream.class, withSettings().withoutAnnotations());
192198
Iterator<PartialResultSet> iterator = mock(Iterator.class);
193199
when(iterator.hasNext()).thenReturn(true, true, false);
194200
when(iterator.next())
@@ -197,7 +203,8 @@ public void testExecuteStreamingPartitionedUpdateUnavailable() {
197203
new UnavailableException(
198204
"temporary unavailable", null, GrpcStatusCode.of(Code.UNAVAILABLE), true));
199205
when(stream1.iterator()).thenReturn(iterator);
200-
ServerStream<PartialResultSet> stream2 = mock(ServerStream.class);
206+
ServerStream<PartialResultSet> stream2 =
207+
mock(ServerStream.class, withSettings().withoutAnnotations());
201208
when(stream2.iterator()).thenReturn(ImmutableList.of(p1, p2).iterator());
202209
when(rpc.executeStreamingPartitionedDml(
203210
Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(), any(Duration.class)))
@@ -221,7 +228,8 @@ public void testExecuteStreamingPartitionedUpdateUnavailable() {
221228
@Test
222229
public void testExecuteStreamingPartitionedUpdateUnavailableAndThenDeadlineExceeded() {
223230
PartialResultSet p1 = PartialResultSet.newBuilder().setResumeToken(resumeToken).build();
224-
ServerStream<PartialResultSet> stream1 = mock(ServerStream.class);
231+
ServerStream<PartialResultSet> stream1 =
232+
mock(ServerStream.class, withSettings().withoutAnnotations());
225233
Iterator<PartialResultSet> iterator = mock(Iterator.class);
226234
when(iterator.hasNext()).thenReturn(true, true, false);
227235
when(iterator.next())
@@ -249,7 +257,8 @@ public void testExecuteStreamingPartitionedUpdateUnavailableAndThenDeadlineExcee
249257
@Test
250258
public void testExecuteStreamingPartitionedUpdateAbortedAndThenDeadlineExceeded() {
251259
PartialResultSet p1 = PartialResultSet.newBuilder().setResumeToken(resumeToken).build();
252-
ServerStream<PartialResultSet> stream1 = mock(ServerStream.class);
260+
ServerStream<PartialResultSet> stream1 =
261+
mock(ServerStream.class, withSettings().withoutAnnotations());
253262
Iterator<PartialResultSet> iterator = mock(Iterator.class);
254263
when(iterator.hasNext()).thenReturn(true, true, false);
255264
when(iterator.next())
@@ -277,7 +286,8 @@ public void testExecuteStreamingPartitionedUpdateAbortedAndThenDeadlineExceeded(
277286
@Test
278287
public void testExecuteStreamingPartitionedUpdateMultipleAbortsUntilDeadlineExceeded() {
279288
PartialResultSet p1 = PartialResultSet.newBuilder().setResumeToken(resumeToken).build();
280-
ServerStream<PartialResultSet> stream1 = mock(ServerStream.class);
289+
ServerStream<PartialResultSet> stream1 =
290+
mock(ServerStream.class, withSettings().withoutAnnotations());
281291
Iterator<PartialResultSet> iterator = mock(Iterator.class);
282292
when(iterator.hasNext()).thenReturn(true);
283293
when(iterator.next())
@@ -319,7 +329,8 @@ public void testExecuteStreamingPartitionedUpdateUnexpectedEOS() {
319329
ResultSetStats stats = ResultSetStats.newBuilder().setRowCountLowerBound(1000L).build();
320330
PartialResultSet p1 = PartialResultSet.newBuilder().setResumeToken(resumeToken).build();
321331
PartialResultSet p2 = PartialResultSet.newBuilder().setStats(stats).build();
322-
ServerStream<PartialResultSet> stream1 = mock(ServerStream.class);
332+
ServerStream<PartialResultSet> stream1 =
333+
mock(ServerStream.class, withSettings().withoutAnnotations());
323334
Iterator<PartialResultSet> iterator = mock(Iterator.class);
324335
when(iterator.hasNext()).thenReturn(true, true, false);
325336
when(iterator.next())
@@ -331,7 +342,8 @@ public void testExecuteStreamingPartitionedUpdateUnexpectedEOS() {
331342
GrpcStatusCode.of(Code.INTERNAL),
332343
true));
333344
when(stream1.iterator()).thenReturn(iterator);
334-
ServerStream<PartialResultSet> stream2 = mock(ServerStream.class);
345+
ServerStream<PartialResultSet> stream2 =
346+
mock(ServerStream.class, withSettings().withoutAnnotations());
335347
when(stream2.iterator()).thenReturn(ImmutableList.of(p1, p2).iterator());
336348
when(rpc.executeStreamingPartitionedDml(
337349
Mockito.eq(executeRequestWithoutResumeToken), anyMap(), any(), any(Duration.class)))

java-spanner/google-cloud-spanner/src/test/java/com/google/cloud/spanner/SpannerCloudMonitoringExporterTest.java

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import static org.junit.Assert.assertEquals;
3636
import static org.mockito.Mockito.mock;
3737
import static org.mockito.Mockito.when;
38+
import static org.mockito.Mockito.withSettings;
3839

3940
import com.google.api.Distribution;
4041
import com.google.api.core.ApiFuture;
@@ -139,7 +140,8 @@ public void testExportingSumData() {
139140
ArgumentCaptor<CreateTimeSeriesRequest> argumentCaptor =
140141
ArgumentCaptor.forClass(CreateTimeSeriesRequest.class);
141142

142-
UnaryCallable<CreateTimeSeriesRequest, Empty> mockCallable = Mockito.mock(UnaryCallable.class);
143+
UnaryCallable<CreateTimeSeriesRequest, Empty> mockCallable =
144+
Mockito.mock(UnaryCallable.class, withSettings().withoutAnnotations());
143145
Mockito.when(mockMetricServiceStub.createServiceTimeSeriesCallable()).thenReturn(mockCallable);
144146
ApiFuture<Empty> future = ApiFutures.immediateFuture(Empty.getDefaultInstance());
145147
Mockito.when(mockCallable.futureCall(argumentCaptor.capture())).thenReturn(future);
@@ -203,7 +205,8 @@ public void testExportingUsesPointProjectOverResourceProject() {
203205
ArgumentCaptor<CreateTimeSeriesRequest> argumentCaptor =
204206
ArgumentCaptor.forClass(CreateTimeSeriesRequest.class);
205207

206-
UnaryCallable<CreateTimeSeriesRequest, Empty> mockCallable = Mockito.mock(UnaryCallable.class);
208+
UnaryCallable<CreateTimeSeriesRequest, Empty> mockCallable =
209+
Mockito.mock(UnaryCallable.class, withSettings().withoutAnnotations());
207210
Mockito.when(mockMetricServiceStub.createServiceTimeSeriesCallable()).thenReturn(mockCallable);
208211
ApiFuture<Empty> future = ApiFutures.immediateFuture(Empty.getDefaultInstance());
209212
Mockito.when(mockCallable.futureCall(argumentCaptor.capture())).thenReturn(future);
@@ -271,7 +274,8 @@ public void testExportingUsesFallbackProjectForMetricsWithUndefinedPointProject(
271274
ArgumentCaptor<CreateTimeSeriesRequest> argumentCaptor =
272275
ArgumentCaptor.forClass(CreateTimeSeriesRequest.class);
273276

274-
UnaryCallable<CreateTimeSeriesRequest, Empty> mockCallable = mock(UnaryCallable.class);
277+
UnaryCallable<CreateTimeSeriesRequest, Empty> mockCallable =
278+
mock(UnaryCallable.class, withSettings().withoutAnnotations());
275279
when(mockMetricServiceStub.createServiceTimeSeriesCallable()).thenReturn(mockCallable);
276280
ApiFuture<Empty> future = ApiFutures.immediateFuture(Empty.getDefaultInstance());
277281
when(mockCallable.futureCall(argumentCaptor.capture())).thenReturn(future);
@@ -311,7 +315,8 @@ public void testExportingRoutesPointProjectAndFallbackProject() {
311315
ArgumentCaptor<CreateTimeSeriesRequest> argumentCaptor =
312316
ArgumentCaptor.forClass(CreateTimeSeriesRequest.class);
313317

314-
UnaryCallable<CreateTimeSeriesRequest, Empty> mockCallable = mock(UnaryCallable.class);
318+
UnaryCallable<CreateTimeSeriesRequest, Empty> mockCallable =
319+
mock(UnaryCallable.class, withSettings().withoutAnnotations());
315320
when(mockMetricServiceStub.createServiceTimeSeriesCallable()).thenReturn(mockCallable);
316321
ApiFuture<Empty> future = ApiFutures.immediateFuture(Empty.getDefaultInstance());
317322
when(mockCallable.futureCall(argumentCaptor.capture())).thenReturn(future);
@@ -355,7 +360,8 @@ public void testExportingRoutesMultipleProjects() {
355360
ArgumentCaptor<CreateTimeSeriesRequest> argumentCaptor =
356361
ArgumentCaptor.forClass(CreateTimeSeriesRequest.class);
357362

358-
UnaryCallable<CreateTimeSeriesRequest, Empty> mockCallable = mock(UnaryCallable.class);
363+
UnaryCallable<CreateTimeSeriesRequest, Empty> mockCallable =
364+
mock(UnaryCallable.class, withSettings().withoutAnnotations());
359365
when(mockMetricServiceStub.createServiceTimeSeriesCallable()).thenReturn(mockCallable);
360366
ApiFuture<Empty> future = ApiFutures.immediateFuture(Empty.getDefaultInstance());
361367
when(mockCallable.futureCall(argumentCaptor.capture())).thenReturn(future);
@@ -404,7 +410,8 @@ public void testExportingHistogramData() {
404410
ArgumentCaptor<CreateTimeSeriesRequest> argumentCaptor =
405411
ArgumentCaptor.forClass(CreateTimeSeriesRequest.class);
406412

407-
UnaryCallable<CreateTimeSeriesRequest, Empty> mockCallable = mock(UnaryCallable.class);
413+
UnaryCallable<CreateTimeSeriesRequest, Empty> mockCallable =
414+
mock(UnaryCallable.class, withSettings().withoutAnnotations());
408415
when(mockMetricServiceStub.createServiceTimeSeriesCallable()).thenReturn(mockCallable);
409416
ApiFuture<Empty> future = ApiFutures.immediateFuture(Empty.getDefaultInstance());
410417
when(mockCallable.futureCall(argumentCaptor.capture())).thenReturn(future);
@@ -476,7 +483,8 @@ public void testExportingSumDataInBatches() {
476483
ArgumentCaptor<CreateTimeSeriesRequest> argumentCaptor =
477484
ArgumentCaptor.forClass(CreateTimeSeriesRequest.class);
478485

479-
UnaryCallable<CreateTimeSeriesRequest, Empty> mockCallable = mock(UnaryCallable.class);
486+
UnaryCallable<CreateTimeSeriesRequest, Empty> mockCallable =
487+
mock(UnaryCallable.class, withSettings().withoutAnnotations());
480488
when(mockMetricServiceStub.createServiceTimeSeriesCallable()).thenReturn(mockCallable);
481489
ApiFuture<Empty> future = ApiFutures.immediateFuture(Empty.getDefaultInstance());
482490
when(mockCallable.futureCall(argumentCaptor.capture())).thenReturn(future);
@@ -552,7 +560,8 @@ public void testExportingHistogramDataWithExemplars() {
552560
ArgumentCaptor<CreateTimeSeriesRequest> argumentCaptor =
553561
ArgumentCaptor.forClass(CreateTimeSeriesRequest.class);
554562

555-
UnaryCallable<CreateTimeSeriesRequest, Empty> mockCallable = mock(UnaryCallable.class);
563+
UnaryCallable<CreateTimeSeriesRequest, Empty> mockCallable =
564+
mock(UnaryCallable.class, withSettings().withoutAnnotations());
556565
when(mockMetricServiceStub.createServiceTimeSeriesCallable()).thenReturn(mockCallable);
557566
ApiFuture<Empty> future = ApiFutures.immediateFuture(Empty.getDefaultInstance());
558567
when(mockCallable.futureCall(argumentCaptor.capture())).thenReturn(future);

java-spanner/google-cloud-spanner/src/test/java/com/google/cloud/spanner/connection/ConnectionImplTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import static org.mockito.Mockito.mock;
4141
import static org.mockito.Mockito.verify;
4242
import static org.mockito.Mockito.when;
43+
import static org.mockito.Mockito.withSettings;
4344

4445
import com.google.api.core.ApiFuture;
4546
import com.google.api.core.ApiFutures;
@@ -228,7 +229,7 @@ private static DdlClient createDefaultMockDdlClient() {
228229
DdlClient ddlClient = mock(DdlClient.class);
229230
@SuppressWarnings("unchecked")
230231
final OperationFuture<Void, UpdateDatabaseDdlMetadata> operation =
231-
mock(OperationFuture.class);
232+
mock(OperationFuture.class, withSettings().withoutAnnotations());
232233
when(operation.get()).thenReturn(null);
233234
UpdateDatabaseDdlMetadata metadata = UpdateDatabaseDdlMetadata.getDefaultInstance();
234235
ApiFuture<UpdateDatabaseDdlMetadata> futureMetadata = ApiFutures.immediateFuture(metadata);

0 commit comments

Comments
 (0)