Skip to content

Commit 5d16381

Browse files
authored
Add GCloud container implementations under org.testcontainers.gcloud (#11081)
1 parent 915760f commit 5d16381

19 files changed

+378
-27
lines changed

docs/modules/gcloud.md

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -23,131 +23,131 @@ PubSubEmulatorContainer | [gcr.io/google.com/cloudsdktool/google-cloud-cli:emula
2323
Start BigQuery Emulator during a test:
2424

2525
<!--codeinclude-->
26-
[Starting a BigQuery Emulator container](../../modules/gcloud/src/test/java/org/testcontainers/containers/BigQueryEmulatorContainerTest.java) inside_block:emulatorContainer
26+
[Starting a BigQuery Emulator container](../../modules/gcloud/src/test/java/org/testcontainers/gcloud/BigQueryEmulatorContainerTest.java) inside_block:emulatorContainer
2727
<!--/codeinclude-->
2828

2929
<!--codeinclude-->
30-
[Creating BigQuery Client](../../modules/gcloud/src/test/java/org/testcontainers/containers/BigQueryEmulatorContainerTest.java) inside_block:bigQueryClient
30+
[Creating BigQuery Client](../../modules/gcloud/src/test/java/org/testcontainers/gcloud/BigQueryEmulatorContainerTest.java) inside_block:bigQueryClient
3131
<!--/codeinclude-->
3232

3333
### Bigtable
3434

3535
Start Bigtable Emulator during a test:
3636

3737
<!--codeinclude-->
38-
[Starting a Bigtable Emulator container](../../modules/gcloud/src/test/java/org/testcontainers/containers/BigtableEmulatorContainerTest.java) inside_block:emulatorContainer
38+
[Starting a Bigtable Emulator container](../../modules/gcloud/src/test/java/org/testcontainers/gcloud/BigtableEmulatorContainerTest.java) inside_block:emulatorContainer
3939
<!--/codeinclude-->
4040

4141
Create a test Bigtable table in the Emulator:
4242

4343
<!--codeinclude-->
44-
[Create a test table](../../modules/gcloud/src/test/java/org/testcontainers/containers/BigtableEmulatorContainerTest.java) inside_block:createTable
44+
[Create a test table](../../modules/gcloud/src/test/java/org/testcontainers/gcloud/BigtableEmulatorContainerTest.java) inside_block:createTable
4545
<!--/codeinclude-->
4646

4747
Test against the Emulator:
4848

4949
<!--codeinclude-->
50-
[Testing with a Bigtable Emulator container](../../modules/gcloud/src/test/java/org/testcontainers/containers/BigtableEmulatorContainerTest.java) inside_block:testWithEmulatorContainer
50+
[Testing with a Bigtable Emulator container](../../modules/gcloud/src/test/java/org/testcontainers/gcloud/BigtableEmulatorContainerTest.java) inside_block:testWithEmulatorContainer
5151
<!--/codeinclude-->
5252

5353
### Datastore
5454

5555
Start Datastore Emulator during a test:
5656

5757
<!--codeinclude-->
58-
[Starting a Datastore Emulator container](../../modules/gcloud/src/test/java/org/testcontainers/containers/DatastoreEmulatorContainerTest.java) inside_block:creatingDatastoreEmulatorContainer
58+
[Starting a Datastore Emulator container](../../modules/gcloud/src/test/java/org/testcontainers/gcloud/DatastoreEmulatorContainerTest.java) inside_block:creatingDatastoreEmulatorContainer
5959
<!--/codeinclude-->
6060

6161
And test against the Emulator:
6262

6363
<!--codeinclude-->
64-
[Testing with a Datastore Emulator container](../../modules/gcloud/src/test/java/org/testcontainers/containers/DatastoreEmulatorContainerTest.java) inside_block:startingDatastoreEmulatorContainer
64+
[Testing with a Datastore Emulator container](../../modules/gcloud/src/test/java/org/testcontainers/gcloud/DatastoreEmulatorContainerTest.java) inside_block:startingDatastoreEmulatorContainer
6565
<!--/codeinclude-->
6666

6767
See more examples:
6868

69-
* [Full sample code](https://github.com/testcontainers/testcontainers-java/tree/main/modules/gcloud/src/test/java/org/testcontainers/containers/DatastoreEmulatorContainerTest.java)
69+
* [Full sample code](https://github.com/testcontainers/testcontainers-java/tree/main/modules/gcloud/src/test/java/org/testcontainers/gcloud/DatastoreEmulatorContainerTest.java)
7070
* [With Spring Boot](https://github.com/saturnism/testcontainers-gcloud-examples/tree/main/springboot/datastore-example/src/test/java/com/example/springboot/datastore)
7171

7272
### Firestore
7373

7474
Start Firestore Emulator during a test:
7575

7676
<!--codeinclude-->
77-
[Starting a Firestore Emulator container](../../modules/gcloud/src/test/java/org/testcontainers/containers/FirestoreEmulatorContainerTest.java) inside_block:emulatorContainer
77+
[Starting a Firestore Emulator container](../../modules/gcloud/src/test/java/org/testcontainers/gcloud/FirestoreEmulatorContainerTest.java) inside_block:emulatorContainer
7878
<!--/codeinclude-->
7979

8080
And test against the Emulator:
8181

8282
<!--codeinclude-->
83-
[Testing with a Firestore Emulator container](../../modules/gcloud/src/test/java/org/testcontainers/containers/FirestoreEmulatorContainerTest.java) inside_block:testWithEmulatorContainer
83+
[Testing with a Firestore Emulator container](../../modules/gcloud/src/test/java/org/testcontainers/gcloud/FirestoreEmulatorContainerTest.java) inside_block:testWithEmulatorContainer
8484
<!--/codeinclude-->
8585

8686
See more examples:
8787

88-
* [Full sample code](https://github.com/testcontainers/testcontainers-java/tree/main/modules/gcloud/src/test/java/org/testcontainers/containers/FirestoreEmulatorContainerTest.java)
88+
* [Full sample code](https://github.com/testcontainers/testcontainers-java/tree/main/modules/gcloud/src/test/java/org/testcontainers/gcloud/FirestoreEmulatorContainerTest.java)
8989
* [With Spring Boot](https://github.com/saturnism/testcontainers-gcloud-examples/tree/main/springboot/firestore-example/src/test/java/com/example/springboot/firestore/FirestoreIntegrationTests.java)
9090

9191
### Spanner
9292

9393
Start Spanner Emulator during a test:
9494

9595
<!--codeinclude-->
96-
[Starting a Spanner Emulator container](../../modules/gcloud/src/test/java/org/testcontainers/containers/SpannerEmulatorContainerTest.java) inside_block:emulatorContainer
96+
[Starting a Spanner Emulator container](../../modules/gcloud/src/test/java/org/testcontainers/gcloud/SpannerEmulatorContainerTest.java) inside_block:emulatorContainer
9797
<!--/codeinclude-->
9898

9999
Create a test Spanner Instance in the Emulator:
100100

101101
<!--codeinclude-->
102-
[Create a test Spanner instance](../../modules/gcloud/src/test/java/org/testcontainers/containers/SpannerEmulatorContainerTest.java) inside_block:createInstance
102+
[Create a test Spanner instance](../../modules/gcloud/src/test/java/org/testcontainers/gcloud/SpannerEmulatorContainerTest.java) inside_block:createInstance
103103
<!--/codeinclude-->
104104

105105
Create a test Database in the Emulator:
106106

107107
<!--codeinclude-->
108-
[Creating a test Spanner database](../../modules/gcloud/src/test/java/org/testcontainers/containers/SpannerEmulatorContainerTest.java) inside_block:createDatabase
108+
[Creating a test Spanner database](../../modules/gcloud/src/test/java/org/testcontainers/gcloud/SpannerEmulatorContainerTest.java) inside_block:createDatabase
109109
<!--/codeinclude-->
110110

111111
And test against the Emulator:
112112

113113
<!--codeinclude-->
114-
[Testing with a Spanner Emulator container](../../modules/gcloud/src/test/java/org/testcontainers/containers/SpannerEmulatorContainerTest.java) inside_block:testWithEmulatorContainer
114+
[Testing with a Spanner Emulator container](../../modules/gcloud/src/test/java/org/testcontainers/gcloud/SpannerEmulatorContainerTest.java) inside_block:testWithEmulatorContainer
115115
<!--/codeinclude-->
116116

117117
See more examples:
118118

119-
* [Full sample code](https://github.com/testcontainers/testcontainers-java/tree/main/modules/gcloud/src/test/java/org/testcontainers/containers/SpannerEmulatorContainerTest.java)
119+
* [Full sample code](https://github.com/testcontainers/testcontainers-java/tree/main/modules/gcloud/src/test/java/org/testcontainers/gcloud/SpannerEmulatorContainerTest.java)
120120
* [With Spring Boot](https://github.com/saturnism/testcontainers-gcloud-examples/tree/main/springboot/spanner-example/src/test/java/com/example/springboot/spanner/SpannerIntegrationTests.java)
121121

122122
### Pub/Sub
123123

124124
Start Pub/Sub Emulator during a test:
125125

126126
<!--codeinclude-->
127-
[Starting a Pub/Sub Emulator container](../../modules/gcloud/src/test/java/org/testcontainers/containers/PubSubEmulatorContainerTest.java) inside_block:emulatorContainer
127+
[Starting a Pub/Sub Emulator container](../../modules/gcloud/src/test/java/org/testcontainers/gcloud/PubSubEmulatorContainerTest.java) inside_block:emulatorContainer
128128
<!--/codeinclude-->
129129

130130
Create a test Pub/Sub topic in the Emulator:
131131

132132
<!--codeinclude-->
133-
[Create a test topic](../../modules/gcloud/src/test/java/org/testcontainers/containers/PubSubEmulatorContainerTest.java) inside_block:createTopic
133+
[Create a test topic](../../modules/gcloud/src/test/java/org/testcontainers/gcloud/PubSubEmulatorContainerTest.java) inside_block:createTopic
134134
<!--/codeinclude-->
135135

136136
Create a test Pub/Sub subscription in the Emulator:
137137

138138
<!--codeinclude-->
139-
[Create a test subscription](../../modules/gcloud/src/test/java/org/testcontainers/containers/PubSubEmulatorContainerTest.java) inside_block:createSubscription
139+
[Create a test subscription](../../modules/gcloud/src/test/java/org/testcontainers/gcloud/PubSubEmulatorContainerTest.java) inside_block:createSubscription
140140
<!--/codeinclude-->
141141

142142
And test against the Emulator:
143143

144144
<!--codeinclude-->
145-
[Testing with a Pub/Sub Emulator container](../../modules/gcloud/src/test/java/org/testcontainers/containers/PubSubEmulatorContainerTest.java) inside_block:testWithEmulatorContainer
145+
[Testing with a Pub/Sub Emulator container](../../modules/gcloud/src/test/java/org/testcontainers/gcloud/PubSubEmulatorContainerTest.java) inside_block:testWithEmulatorContainer
146146
<!--/codeinclude-->
147147

148148
See more examples:
149149

150-
* [Full sample code](https://github.com/testcontainers/testcontainers-java/tree/main/modules/gcloud/src/test/java/org/testcontainers/containers/PubSubEmulatorContainerTest.java)
150+
* [Full sample code](https://github.com/testcontainers/testcontainers-java/tree/main/modules/gcloud/src/test/java/org/testcontainers/gcloud/PubSubEmulatorContainerTest.java)
151151
* [With Spring Boot](https://github.com/saturnism/testcontainers-gcloud-examples/tree/main/springboot/pubsub-example/src/test/java/com/example/springboot/pubsub/PubSubIntegrationTests.java)
152152

153153
## Adding this module to your project dependencies

modules/gcloud/src/main/java/org/testcontainers/containers/BigQueryEmulatorContainer.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@
77
* <p>
88
* Supported image: {@code ghcr.io/goccy/bigquery-emulator}
99
* <p>
10+
*
11+
* @deprecated use {@link org.testcontainers.gcloud.BigQueryEmulatorContainer} instead.
1012
*/
13+
@Deprecated
1114
public class BigQueryEmulatorContainer extends GenericContainer<BigQueryEmulatorContainer> {
1215

1316
private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse("ghcr.io/goccy/bigquery-emulator");

modules/gcloud/src/main/java/org/testcontainers/containers/BigtableEmulatorContainer.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@
99
* Supported images: {@code gcr.io/google.com/cloudsdktool/google-cloud-cli}, {@code gcr.io/google.com/cloudsdktool/cloud-sdk}
1010
* <p>
1111
* Default port is 9000.
12+
*
13+
* @deprecated use {@link org.testcontainers.gcloud.BigtableEmulatorContainer} instead.
1214
*/
15+
@Deprecated
1316
public class BigtableEmulatorContainer extends GenericContainer<BigtableEmulatorContainer> {
1417

1518
private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse(

modules/gcloud/src/main/java/org/testcontainers/containers/DatastoreEmulatorContainer.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@
99
* Supported images: {@code gcr.io/google.com/cloudsdktool/google-cloud-cli}, {@code gcr.io/google.com/cloudsdktool/cloud-sdk}
1010
* <p>
1111
* Default port is 8081.
12+
*
13+
* @deprecated use {@link org.testcontainers.gcloud.DatastoreEmulatorContainer} instead.
1214
*/
15+
@Deprecated
1316
public class DatastoreEmulatorContainer extends GenericContainer<DatastoreEmulatorContainer> {
1417

1518
private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse(

modules/gcloud/src/main/java/org/testcontainers/containers/FirestoreEmulatorContainer.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@
99
* Supported images: {@code gcr.io/google.com/cloudsdktool/google-cloud-cli}, {@code gcr.io/google.com/cloudsdktool/cloud-sdk}
1010
* <p>
1111
* Default port is 8080.
12+
*
13+
* @deprecated use {@link org.testcontainers.gcloud.FirestoreEmulatorContainer} instead.
1214
*/
15+
@Deprecated
1316
public class FirestoreEmulatorContainer extends GenericContainer<FirestoreEmulatorContainer> {
1417

1518
private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse(

modules/gcloud/src/main/java/org/testcontainers/containers/PubSubEmulatorContainer.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@
99
* Supported images: {@code gcr.io/google.com/cloudsdktool/google-cloud-cli}, {@code gcr.io/google.com/cloudsdktool/cloud-sdk}
1010
* <p>
1111
* Default port is 8085.
12+
*
13+
* @deprecated use {@link org.testcontainers.gcloud.PubSubEmulatorContainer} instead.
1214
*/
15+
@Deprecated
1316
public class PubSubEmulatorContainer extends GenericContainer<PubSubEmulatorContainer> {
1417

1518
private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse(

modules/gcloud/src/main/java/org/testcontainers/containers/SpannerEmulatorContainer.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,10 @@
77
* A Spanner container. Default ports: 9010 for GRPC and 9020 for HTTP.
88
* <p>
99
* Supported image: {@code gcr.io/cloud-spanner-emulator/emulator}
10+
*
11+
* @deprecated use {@link org.testcontainers.gcloud.SpannerEmulatorContainer} instead.
1012
*/
13+
@Deprecated
1114
public class SpannerEmulatorContainer extends GenericContainer<SpannerEmulatorContainer> {
1215

1316
private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse(
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package org.testcontainers.gcloud;
2+
3+
import org.testcontainers.containers.GenericContainer;
4+
import org.testcontainers.utility.DockerImageName;
5+
6+
/**
7+
* Testcontainers implementation for BigQuery.
8+
* <p>
9+
* Supported image: {@code ghcr.io/goccy/bigquery-emulator}
10+
* <p>
11+
*/
12+
public class BigQueryEmulatorContainer extends GenericContainer<BigQueryEmulatorContainer> {
13+
14+
private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse("ghcr.io/goccy/bigquery-emulator");
15+
16+
private static final int HTTP_PORT = 9050;
17+
18+
private static final int GRPC_PORT = 9060;
19+
20+
private static final String PROJECT_ID = "test-project";
21+
22+
public BigQueryEmulatorContainer(String image) {
23+
this(DockerImageName.parse(image));
24+
}
25+
26+
public BigQueryEmulatorContainer(DockerImageName dockerImageName) {
27+
super(dockerImageName);
28+
dockerImageName.assertCompatibleWith(DEFAULT_IMAGE_NAME);
29+
addExposedPorts(HTTP_PORT, GRPC_PORT);
30+
withCommand("--project", PROJECT_ID);
31+
}
32+
33+
public String getEmulatorHttpEndpoint() {
34+
return String.format("http://%s:%d", getHost(), getMappedPort(HTTP_PORT));
35+
}
36+
37+
public Integer getEmulatorGrpcPort() {
38+
return getMappedPort(GRPC_PORT);
39+
}
40+
41+
public String getProjectId() {
42+
return PROJECT_ID;
43+
}
44+
}
Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,53 @@
1+
package org.testcontainers.gcloud;
2+
3+
import org.testcontainers.containers.GenericContainer;
4+
import org.testcontainers.containers.wait.strategy.Wait;
5+
import org.testcontainers.utility.DockerImageName;
6+
7+
/**
8+
* A Bigtable container that relies in google cloud sdk.
9+
* <p>
10+
* Supported images: {@code gcr.io/google.com/cloudsdktool/google-cloud-cli}, {@code gcr.io/google.com/cloudsdktool/cloud-sdk}
11+
* <p>
12+
* Default port is 9000.
13+
*/
14+
public class BigtableEmulatorContainer extends GenericContainer<BigtableEmulatorContainer> {
15+
16+
private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse(
17+
"gcr.io/google.com/cloudsdktool/google-cloud-cli"
18+
);
19+
20+
private static final DockerImageName CLOUD_SDK_IMAGE_NAME = DockerImageName.parse(
21+
"gcr.io/google.com/cloudsdktool/cloud-sdk"
22+
);
23+
24+
private static final String CMD = "gcloud beta emulators bigtable start --host-port 0.0.0.0:9000";
25+
26+
private static final int PORT = 9000;
27+
28+
public BigtableEmulatorContainer(String image) {
29+
this(DockerImageName.parse(image));
30+
}
31+
32+
public BigtableEmulatorContainer(final DockerImageName dockerImageName) {
33+
super(dockerImageName);
34+
dockerImageName.assertCompatibleWith(DEFAULT_IMAGE_NAME, CLOUD_SDK_IMAGE_NAME);
35+
36+
withExposedPorts(PORT);
37+
setWaitStrategy(Wait.forLogMessage(".*running.*$", 1));
38+
withCommand("/bin/sh", "-c", CMD);
39+
}
40+
41+
/**
42+
* @return a <code>host:port</code> pair corresponding to the address on which the emulator is
43+
* reachable from the test host machine. Directly usable as a parameter to the
44+
* com.google.cloud.ServiceOptions.Builder#setHost(java.lang.String) method.
45+
*/
46+
public String getEmulatorEndpoint() {
47+
return getHost() + ":" + getEmulatorPort();
48+
}
49+
50+
public int getEmulatorPort() {
51+
return getMappedPort(PORT);
52+
}
53+
}
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
package org.testcontainers.gcloud;
2+
3+
import org.testcontainers.containers.GenericContainer;
4+
import org.testcontainers.containers.wait.strategy.Wait;
5+
import org.testcontainers.utility.DockerImageName;
6+
7+
/**
8+
* A Datastore container that relies in google cloud sdk.
9+
* <p>
10+
* Supported images: {@code gcr.io/google.com/cloudsdktool/google-cloud-cli}, {@code gcr.io/google.com/cloudsdktool/cloud-sdk}
11+
* <p>
12+
* Default port is 8081.
13+
*/
14+
public class DatastoreEmulatorContainer extends GenericContainer<DatastoreEmulatorContainer> {
15+
16+
private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse(
17+
"gcr.io/google.com/cloudsdktool/google-cloud-cli"
18+
);
19+
20+
private static final DockerImageName CLOUD_SDK_IMAGE_NAME = DockerImageName.parse(
21+
"gcr.io/google.com/cloudsdktool/cloud-sdk"
22+
);
23+
24+
private static final String PROJECT_ID = "test-project";
25+
26+
private static final String CMD = String.format(
27+
"gcloud beta emulators datastore start --project %s --host-port 0.0.0.0:8081",
28+
PROJECT_ID
29+
);
30+
31+
private static final int HTTP_PORT = 8081;
32+
33+
private String flags;
34+
35+
public DatastoreEmulatorContainer(final String image) {
36+
this(DockerImageName.parse(image));
37+
}
38+
39+
public DatastoreEmulatorContainer(final DockerImageName dockerImageName) {
40+
super(dockerImageName);
41+
dockerImageName.assertCompatibleWith(DEFAULT_IMAGE_NAME, CLOUD_SDK_IMAGE_NAME);
42+
43+
withExposedPorts(HTTP_PORT);
44+
setWaitStrategy(Wait.forHttp("/").forStatusCode(200));
45+
}
46+
47+
@Override
48+
protected void configure() {
49+
String command = CMD;
50+
if (this.flags != null && !this.flags.isEmpty()) {
51+
command += " " + this.flags;
52+
}
53+
withCommand("/bin/sh", "-c", command);
54+
}
55+
56+
public DatastoreEmulatorContainer withFlags(String flags) {
57+
this.flags = flags;
58+
return this;
59+
}
60+
61+
/**
62+
* @return a <code>host:port</code> pair corresponding to the address on which the emulator is
63+
* reachable from the test host machine. Directly usable as a parameter to the
64+
* com.google.cloud.ServiceOptions.Builder#setHost(java.lang.String) method.
65+
*/
66+
public String getEmulatorEndpoint() {
67+
return getHost() + ":" + getMappedPort(HTTP_PORT);
68+
}
69+
70+
public String getProjectId() {
71+
return PROJECT_ID;
72+
}
73+
}

0 commit comments

Comments
 (0)