-
-
Notifications
You must be signed in to change notification settings - Fork 1.6k
/
DatastoreEmulatorContainer.java
60 lines (48 loc) · 1.83 KB
/
DatastoreEmulatorContainer.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
package org.testcontainers.containers;
import org.testcontainers.containers.wait.strategy.Wait;
import org.testcontainers.utility.DockerImageName;
/**
* A Datastore container that relies in google cloud sdk.
*
* Default port is 8081.
*
* @author Eddú Meléndez
*/
public class DatastoreEmulatorContainer extends GenericContainer<DatastoreEmulatorContainer> {
private static final DockerImageName DEFAULT_IMAGE_NAME = DockerImageName.parse(
"gcr.io/google.com/cloudsdktool/cloud-sdk"
);
private static final String CMD =
"gcloud beta emulators datastore start --project test-project --host-port 0.0.0.0:8081";
private static final int HTTP_PORT = 8081;
private String flags;
public DatastoreEmulatorContainer(final String image) {
this(DockerImageName.parse(image));
}
public DatastoreEmulatorContainer(final DockerImageName dockerImageName) {
super(dockerImageName);
dockerImageName.assertCompatibleWith(DEFAULT_IMAGE_NAME);
withExposedPorts(HTTP_PORT);
setWaitStrategy(Wait.forHttp("/").forStatusCode(200));
}
@Override
protected void configure() {
String command = CMD;
if (this.flags != null && !this.flags.isEmpty()) {
command += " " + this.flags;
}
withCommand("/bin/sh", "-c", command);
}
public DatastoreEmulatorContainer withFlags(String flags) {
this.flags = flags;
return this;
}
/**
* @return a <code>host:port</code> pair corresponding to the address on which the emulator is
* reachable from the test host machine. Directly usable as a parameter to the
* com.google.cloud.ServiceOptions.Builder#setHost(java.lang.String) method.
*/
public String getEmulatorEndpoint() {
return getHost() + ":" + getMappedPort(HTTP_PORT);
}
}