Skip to content

Commit eeadd4f

Browse files
committed
refactor: use parameterised test and create utiltiy class
1 parent f1f17b6 commit eeadd4f

3 files changed

Lines changed: 206 additions & 188 deletions

File tree

java-bigquery/google-cloud-bigquery-jdbc/src/test/java/com/google/cloud/bigquery/jdbc/BigQueryDatabaseMetaDataTest.java

Lines changed: 86 additions & 121 deletions
Original file line numberDiff line numberDiff line change
@@ -50,15 +50,21 @@
5050
import java.util.concurrent.Future;
5151
import java.util.concurrent.LinkedBlockingQueue;
5252
import java.util.regex.Pattern;
53+
import java.util.stream.Stream;
5354
import org.junit.jupiter.api.Assertions;
5455
import org.junit.jupiter.api.BeforeEach;
5556
import org.junit.jupiter.api.Test;
57+
import org.junit.jupiter.api.TestInstance;
5658
import org.junit.jupiter.api.extension.RegisterExtension;
59+
import org.junit.jupiter.params.ParameterizedTest;
60+
import org.junit.jupiter.params.provider.Arguments;
61+
import org.junit.jupiter.params.provider.MethodSource;
5762

63+
@TestInstance(TestInstance.Lifecycle.PER_CLASS)
5864
public class BigQueryDatabaseMetaDataTest {
5965

6066
@RegisterExtension
61-
static final OpenTelemetryExtension otelTesting = OpenTelemetryExtension.create();
67+
public static final OpenTelemetryExtension otelTesting = OpenTelemetryExtension.create();
6268

6369
private BigQueryConnection bigQueryConnection;
6470
private BigQueryDatabaseMetaData dbMetadata;
@@ -79,6 +85,15 @@ public void setUp() throws SQLException {
7985
.getOpenTelemetry()
8086
.getTracer(BigQueryJdbcOpenTelemetry.INSTRUMENTATION_SCOPE_NAME));
8187

88+
Page<Dataset> datasetPageMock = mock(Page.class);
89+
when(bigqueryClient.listDatasets(anyString(), any())).thenReturn(datasetPageMock);
90+
91+
Page<Table> tablePageMock = mock(Page.class);
92+
when(bigqueryClient.listTables(any(DatasetId.class), any())).thenReturn(tablePageMock);
93+
94+
Table mockTable = mock(Table.class);
95+
when(bigqueryClient.getTable(any(TableId.class))).thenReturn(mockTable);
96+
8297
dbMetadata = new BigQueryDatabaseMetaData(bigQueryConnection);
8398
}
8499

@@ -3223,145 +3238,95 @@ public void testGetSQLStateType() throws SQLException {
32233238
assertEquals(DatabaseMetaData.sqlStateSQL, dbMetadata.getSQLStateType());
32243239
}
32253240

3226-
@Test
3227-
public void testGetCatalogs_generatesSpan() throws SQLException {
3228-
try {
3229-
dbMetadata.getCatalogs();
3230-
} catch (NullPointerException e) {
3231-
// Expected
3232-
}
3241+
@ParameterizedTest
3242+
@MethodSource("metadataOperationProvider")
3243+
public void testMetadataOperation_generatesSpan(
3244+
MetadataOperation operation, String expectedSpanName) throws SQLException {
3245+
operation.run();
32333246

32343247
boolean found =
3235-
otelTesting.getSpans().stream()
3236-
.anyMatch(span -> span.getName().equals("BigQueryDatabaseMetaData.getCatalogs"));
3248+
otelTesting.getSpans().stream().anyMatch(span -> span.getName().equals(expectedSpanName));
32373249
assertTrue(found);
32383250
}
32393251

3240-
@Test
3241-
public void testGetSchemas_generatesSpan() throws SQLException {
3242-
try {
3243-
dbMetadata.getSchemas("catalog", "schema");
3244-
} catch (Exception e) {
3245-
// Expected
3246-
}
3247-
3248-
boolean found =
3249-
otelTesting.getSpans().stream()
3250-
.anyMatch(span -> span.getName().equals("BigQueryDatabaseMetaData.getSchemas"));
3251-
assertTrue(found);
3252-
}
3253-
3254-
@Test
3255-
public void testGetTables_generatesSpan() throws SQLException {
3256-
try {
3257-
dbMetadata.getTables("catalog", "schema", "table", new String[] {"TABLE"});
3258-
} catch (Exception e) {
3259-
// Expected
3260-
}
3261-
3262-
boolean found =
3263-
otelTesting.getSpans().stream()
3264-
.anyMatch(span -> span.getName().equals("BigQueryDatabaseMetaData.getTables"));
3265-
assertTrue(found);
3266-
}
3267-
3268-
@Test
3269-
public void testGetColumns_generatesSpan() throws SQLException {
3270-
try {
3271-
dbMetadata.getColumns("catalog", "schema", "table", "column");
3272-
} catch (Exception e) {
3273-
// Expected
3274-
}
3275-
3276-
boolean found =
3277-
otelTesting.getSpans().stream()
3278-
.anyMatch(span -> span.getName().equals("BigQueryDatabaseMetaData.getColumns"));
3279-
assertTrue(found);
3280-
}
3281-
3282-
@Test
3283-
public void testGetTables_createsDetachedLinkedSpan() throws Exception {
3252+
@FunctionalInterface
3253+
interface MetadataOperation {
3254+
void run() throws SQLException;
3255+
}
3256+
3257+
Stream<Arguments> metadataOperationProvider() {
3258+
return Stream.of(
3259+
Arguments.of(
3260+
(MetadataOperation) () -> dbMetadata.getCatalogs(),
3261+
"BigQueryDatabaseMetaData.getCatalogs"),
3262+
Arguments.of(
3263+
(MetadataOperation) () -> dbMetadata.getSchemas("catalog", "schema"),
3264+
"BigQueryDatabaseMetaData.getSchemas"),
3265+
Arguments.of(
3266+
(MetadataOperation)
3267+
() -> dbMetadata.getTables("catalog", "schema", "table", new String[] {"TABLE"}),
3268+
"BigQueryDatabaseMetaData.getTables"),
3269+
Arguments.of(
3270+
(MetadataOperation) () -> dbMetadata.getColumns("catalog", "schema", "table", "column"),
3271+
"BigQueryDatabaseMetaData.getColumns"));
3272+
}
3273+
3274+
@ParameterizedTest
3275+
@MethodSource("asyncMetadataOperationProvider")
3276+
public void testAsyncMetadataOperation_createsDetachedLinkedSpan(
3277+
AsyncMetadataOperation operation, String expectedSpanName) throws Exception {
32843278
BlockingQueue<BigQueryFieldValueListWrapper> queue = new LinkedBlockingQueue<>();
32853279

32863280
Tracer testTracer = otelTesting.getOpenTelemetry().getTracer("test");
32873281
Span parentSpan = testTracer.spanBuilder("parent-span").startSpan();
32883282

32893283
try (Scope scope = parentSpan.makeCurrent()) {
3290-
Thread workerThread =
3291-
dbMetadata.runGetTablesTaskAsync(
3292-
"catalog",
3293-
"schema",
3294-
"table",
3295-
new String[] {"TABLE"},
3296-
dbMetadata.defineGetTablesSchema(),
3297-
queue);
3284+
Thread workerThread = operation.run(queue);
32983285

32993286
Assertions.assertNotNull(workerThread, "Worker thread should not be null");
33003287
workerThread.join();
33013288

3302-
assertSpanLinkedToParent("BigQueryDatabaseMetaData.getTables.background", parentSpan);
3289+
OpenTelemetryTestUtility.assertSpanLinkedToParent(
3290+
otelTesting.getSpans(), expectedSpanName, parentSpan);
33033291
} finally {
33043292
parentSpan.end();
33053293
}
33063294
}
33073295

3308-
@Test
3309-
public void testGetColumns_createsDetachedLinkedSpan() throws Exception {
3310-
BlockingQueue<BigQueryFieldValueListWrapper> queue = new LinkedBlockingQueue<>();
3311-
3312-
Tracer testTracer = otelTesting.getOpenTelemetry().getTracer("test");
3313-
Span parentSpan = testTracer.spanBuilder("parent-span").startSpan();
3314-
3315-
try (Scope scope = parentSpan.makeCurrent()) {
3316-
Thread workerThread =
3317-
dbMetadata.runGetColumnsTaskAsync(
3318-
"catalog", "schema", "table", "column", dbMetadata.defineGetColumnsSchema(), queue);
3319-
3320-
Assertions.assertNotNull(workerThread, "Worker thread should not be null");
3321-
workerThread.join();
3322-
3323-
assertSpanLinkedToParent("BigQueryDatabaseMetaData.getColumns.background", parentSpan);
3324-
} finally {
3325-
parentSpan.end();
3326-
}
3327-
}
3328-
3329-
@Test
3330-
public void testGetSchemas_createsDetachedLinkedSpan() throws Exception {
3331-
BlockingQueue<BigQueryFieldValueListWrapper> queue = new LinkedBlockingQueue<>();
3332-
3333-
Tracer testTracer = otelTesting.getOpenTelemetry().getTracer("test");
3334-
Span parentSpan = testTracer.spanBuilder("parent-span").startSpan();
3335-
3336-
try (Scope scope = parentSpan.makeCurrent()) {
3337-
Thread workerThread =
3338-
dbMetadata.runGetSchemasTaskAsync(
3339-
"catalog", "schema", dbMetadata.defineGetSchemasSchema(), queue);
3340-
3341-
Assertions.assertNotNull(workerThread, "Worker thread should not be null");
3342-
workerThread.join();
3343-
3344-
assertSpanLinkedToParent("BigQueryDatabaseMetaData.getSchemas.background", parentSpan);
3345-
} finally {
3346-
parentSpan.end();
3347-
}
3348-
}
3349-
3350-
private void assertSpanLinkedToParent(String spanName, Span parentSpan) {
3351-
boolean found =
3352-
otelTesting.getSpans().stream()
3353-
.anyMatch(
3354-
span ->
3355-
span.getName().equals(spanName)
3356-
&& span.getLinks().stream()
3357-
.anyMatch(
3358-
link ->
3359-
link.getSpanContext()
3360-
.getTraceId()
3361-
.equals(parentSpan.getSpanContext().getTraceId())
3362-
&& link.getSpanContext()
3363-
.getSpanId()
3364-
.equals(parentSpan.getSpanContext().getSpanId())));
3365-
assertTrue(found, "Span " + spanName + " not found or not linked to parent");
3296+
@FunctionalInterface
3297+
interface AsyncMetadataOperation {
3298+
Thread run(BlockingQueue<BigQueryFieldValueListWrapper> queue) throws Exception;
3299+
}
3300+
3301+
Stream<Arguments> asyncMetadataOperationProvider() {
3302+
return Stream.of(
3303+
Arguments.of(
3304+
(AsyncMetadataOperation)
3305+
(q) ->
3306+
dbMetadata.runGetTablesTaskAsync(
3307+
"catalog",
3308+
"schema",
3309+
"table",
3310+
new String[] {"TABLE"},
3311+
dbMetadata.defineGetTablesSchema(),
3312+
q),
3313+
"BigQueryDatabaseMetaData.getTables.background"),
3314+
Arguments.of(
3315+
(AsyncMetadataOperation)
3316+
(q) ->
3317+
dbMetadata.runGetColumnsTaskAsync(
3318+
"catalog",
3319+
"schema",
3320+
"table",
3321+
"column",
3322+
dbMetadata.defineGetColumnsSchema(),
3323+
q),
3324+
"BigQueryDatabaseMetaData.getColumns.background"),
3325+
Arguments.of(
3326+
(AsyncMetadataOperation)
3327+
(q) ->
3328+
dbMetadata.runGetSchemasTaskAsync(
3329+
"catalog", "schema", dbMetadata.defineGetSchemasSchema(), q),
3330+
"BigQueryDatabaseMetaData.getSchemas.background"));
33663331
}
33673332
}

0 commit comments

Comments
 (0)