Skip to content

Commit

Permalink
Add support for flags in DatastoreEmulatorContainer (#5993)
Browse files Browse the repository at this point in the history
Datastore can start with additional flags such as `--consistency 1.0`
which is recommended for testing.
  • Loading branch information
eddumelendez committed Oct 24, 2022
1 parent 263282b commit 77f71b8
Show file tree
Hide file tree
Showing 2 changed files with 53 additions and 2 deletions.
Expand Up @@ -21,13 +21,32 @@ public class DatastoreEmulatorContainer extends GenericContainer<DatastoreEmulat

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));
withCommand("/bin/sh", "-c", CMD);
}

@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;
}

/**
Expand All @@ -36,6 +55,6 @@ public DatastoreEmulatorContainer(final DockerImageName dockerImageName) {
* com.google.cloud.ServiceOptions.Builder#setHost(java.lang.String) method.
*/
public String getEmulatorEndpoint() {
return getHost() + ":" + getMappedPort(8081);
return getHost() + ":" + getMappedPort(HTTP_PORT);
}
}
Expand Up @@ -10,6 +10,8 @@
import org.junit.Test;
import org.testcontainers.utility.DockerImageName;

import java.io.IOException;

import static org.assertj.core.api.Assertions.assertThat;

public class DatastoreEmulatorContainerTest {
Expand Down Expand Up @@ -40,6 +42,36 @@ public void testSimple() {

assertThat(datastore.get(key).getString("description")).isEqualTo("my description");
}

// }

@Test
public void testWithFlags() throws IOException, InterruptedException {
try (
DatastoreEmulatorContainer emulator = new DatastoreEmulatorContainer(
"gcr.io/google.com/cloudsdktool/cloud-sdk:367.0.0-emulators"
)
.withFlags("--consistency 1.0")
) {
emulator.start();

assertThat(emulator.getContainerInfo().getConfig().getCmd()).anyMatch(e -> e.contains("--consistency 1.0"));
assertThat(emulator.execInContainer("ls", "/root/.config/").getStdout()).contains("gcloud");
}
}

@Test
public void testWithMultipleFlags() throws IOException, InterruptedException {
try (
DatastoreEmulatorContainer emulator = new DatastoreEmulatorContainer(
"gcr.io/google.com/cloudsdktool/cloud-sdk:367.0.0-emulators"
)
.withFlags("--consistency 1.0 --data-dir /root/.config/test-gcloud")
) {
emulator.start();

assertThat(emulator.getContainerInfo().getConfig().getCmd()).anyMatch(e -> e.contains("--consistency 1.0"));
assertThat(emulator.execInContainer("ls", "/root/.config/").getStdout()).contains("test-gcloud");
}
}
}

0 comments on commit 77f71b8

Please sign in to comment.