Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,10 @@ public String getEmulatorHttpEndpoint() {
return String.format("http://%s:%d", getHost(), getMappedPort(HTTP_PORT));
}

public Integer getEmulatorGrpcPort() {
return getMappedPort(GRPC_PORT);
}

public String getProjectId() {
return PROJECT_ID;
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,23 @@
package org.testcontainers.containers;

import com.google.api.gax.core.NoCredentialsProvider;
import com.google.api.gax.grpc.GrpcTransportChannel;
import com.google.api.gax.rpc.FixedTransportChannelProvider;
import com.google.cloud.NoCredentials;
import com.google.cloud.bigquery.BigQuery;
import com.google.cloud.bigquery.BigQueryOptions;
import com.google.cloud.bigquery.QueryJobConfiguration;
import com.google.cloud.bigquery.TableResult;
import com.google.cloud.bigquery.storage.v1.BigQueryWriteClient;
import com.google.cloud.bigquery.storage.v1.BigQueryWriteSettings;
import com.google.cloud.bigquery.storage.v1.CreateWriteStreamRequest;
import com.google.cloud.bigquery.storage.v1.TableName;
import com.google.cloud.bigquery.storage.v1.WriteStream;
import io.grpc.ManagedChannelBuilder;
import org.threeten.bp.Duration;
import org.junit.jupiter.api.Test;

import java.io.IOException;
import java.math.BigDecimal;
import java.util.List;
import java.util.stream.Collectors;
Expand All @@ -15,6 +26,51 @@

class BigQueryEmulatorContainerTest {

@Test
public void testGrcp() throws IOException {
// Shallow test, validate that connection can be set up, and attempt to create write stream fails.
// BigQueryWriteSettings requires a HTTP/2 connection, not provided by the originally exposed endpoint. A "not found" exceptionm
// indicates successful
try (BigQueryEmulatorContainer container = new BigQueryEmulatorContainer("ghcr.io/goccy/bigquery-emulator:0.6.5")) {
container.start();
BigQueryWriteSettings.Builder bigQueryWriteSettingsBuilder = BigQueryWriteSettings.newBuilder();

bigQueryWriteSettingsBuilder.createWriteStreamSettings()
.setRetrySettings(bigQueryWriteSettingsBuilder.createWriteStreamSettings()
.getRetrySettings()
.toBuilder()
.setTotalTimeout(Duration.ofSeconds(60))
.build());

BigQueryWriteClient bigQueryWriteClient = BigQueryWriteClient.create(
bigQueryWriteSettingsBuilder.setTransportChannelProvider(FixedTransportChannelProvider.create(GrpcTransportChannel.create(
ManagedChannelBuilder.forAddress(container.getHost(), container.getEmulatorGrpcPort()).usePlaintext().build())))
.setCredentialsProvider(NoCredentialsProvider.create())
.build()
);

TableName parentTable = TableName.of(container.getProjectId(), "dataset", "table");
CreateWriteStreamRequest createWriteStreamRequest = CreateWriteStreamRequest.newBuilder()
.setParent(parentTable.toString())
.setWriteStream(WriteStream.newBuilder().setType(WriteStream.Type.PENDING))
.build();

String message = null;
try {
// This will fail, extract error message to check that it fails in a "we reached the backend" way to ensure that setup was correct
WriteStream writeStream = bigQueryWriteClient.createWriteStream(createWriteStreamRequest);
// Example setting up StreamWriter. Note passing bigQueryWriteClient as parameter, this is needed to avoid using gcloud credentials:
/* StreamWriter writer = StreamWriter.newBuilder(writeStream.getName(), bigQueryWriteClient).setWriterSchema(schema).build(); */
} catch (RuntimeException e) {
message = e.getMessage();
}
assertThat(message).contains("dataset dataset is not found in project test-project");

bigQueryWriteClient.shutdown();
bigQueryWriteClient.close();
}
}

@Test
void test() throws Exception {
try (
Expand Down
Loading