From 8cd4425ce727c97b87439cf1b991edd92f4f3a2a Mon Sep 17 00:00:00 2001 From: Stanislav Bytsko Date: Fri, 15 Jun 2018 22:55:36 +0300 Subject: [PATCH 1/3] Fix for missing override compose files --- .../containers/DockerComposeContainer.java | 15 +++- .../junit/DockerComposeLocalOverrideTest.java | 70 +++++++++++++++++++ .../junit/DockerComposeOverrideTest.java | 2 +- 3 files changed, 83 insertions(+), 4 deletions(-) create mode 100644 core/src/test/java/org/testcontainers/junit/DockerComposeLocalOverrideTest.java diff --git a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java index a206652637e..c98d092029b 100644 --- a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java +++ b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java @@ -48,9 +48,11 @@ import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; +import static java.util.stream.Collectors.joining; import static java.util.stream.Collectors.toList; import static org.testcontainers.containers.BindMode.READ_ONLY; import static org.testcontainers.containers.BindMode.READ_WRITE; +import static org.testcontainers.containers.ContainerisedDockerCompose.UNIX_PATH_SEPERATOR; /** * Container which launches Docker Compose, for the purposes of launching a defined set of containers. @@ -623,9 +625,16 @@ public void invoke() { final Map environment = Maps.newHashMap(env); environment.put(ENV_PROJECT_NAME, identifier); - final File dockerComposeBaseFile = composeFiles.get(0); - final File pwd = dockerComposeBaseFile.getAbsoluteFile().getParentFile().getAbsoluteFile(); - environment.put(ENV_COMPOSE_FILE, new File(pwd, dockerComposeBaseFile.getAbsoluteFile().getName()).getAbsolutePath()); + + final List absoluteDockerComposeFiles = composeFiles.stream() + .map(File::getAbsolutePath) + .map(MountableFile::forHostPath) + .map(MountableFile::getFilesystemPath) + .collect(toList()); + final String composeFileEnvVariableValue = absoluteDockerComposeFiles.stream().collect(joining(UNIX_PATH_SEPERATOR + "")); // we always need the UNIX path separator + logger().debug("Set env COMPOSE_FILE={}", composeFileEnvVariableValue); + final File pwd = composeFiles.get(0).getAbsoluteFile().getParentFile().getAbsoluteFile(); + environment.put(ENV_COMPOSE_FILE, composeFileEnvVariableValue); logger().info("Local Docker Compose is running command: {}", cmd); diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeLocalOverrideTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeLocalOverrideTest.java new file mode 100644 index 00000000000..f30dd0e54cd --- /dev/null +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeLocalOverrideTest.java @@ -0,0 +1,70 @@ +package org.testcontainers.junit; + +import com.google.common.util.concurrent.Uninterruptibles; +import org.junit.Assume; +import org.junit.BeforeClass; +import org.junit.Rule; +import org.junit.Test; +import org.rnorth.ducttape.unreliables.Unreliables; +import org.testcontainers.containers.DockerComposeContainer; +import org.testcontainers.utility.TestEnvironment; + +import java.io.BufferedReader; +import java.io.File; +import java.io.InputStreamReader; +import java.net.Socket; +import java.util.concurrent.TimeUnit; + +import static org.rnorth.visibleassertions.VisibleAssertions.info; +import static org.rnorth.visibleassertions.VisibleAssertions.pass; +import static org.testcontainers.junit.DockerComposeDoNotOverrideTest.DOCKER_COMPOSE_OVERRIDE_TEST_BASE_YML; +import static org.testcontainers.junit.DockerComposeDoNotOverrideTest.DOCKER_COMPOSE_OVERRIDE_TEST_OVERRIDE_ENV; +import static org.testcontainers.junit.DockerComposeDoNotOverrideTest.DOCKER_COMPOSE_OVERRIDE_TEST_OVERRIDE_YML; + +/** + * Created by rnorth on 11/06/2016. + */ +public class DockerComposeLocalOverrideTest { + + private static final int SERVICE_PORT = 3000; + private static final String SERVICE_NAME = "alpine_1"; + + @Rule + public DockerComposeContainer compose = + new DockerComposeContainer( + new File(DOCKER_COMPOSE_OVERRIDE_TEST_BASE_YML), + new File(DOCKER_COMPOSE_OVERRIDE_TEST_OVERRIDE_YML)) + .withExposedService(SERVICE_NAME, SERVICE_PORT) + .withLocalCompose(true); + + @BeforeClass + public static void checkVersion() { + Assume.assumeTrue(TestEnvironment.dockerApiAtLeast("1.22")); + } + + @Test(timeout = 30_000) + public void testEnvVar() { + BufferedReader reader = Unreliables.retryUntilSuccess(10, TimeUnit.SECONDS, () -> { + Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS); + + Socket socket = new Socket( + compose.getServiceHost(SERVICE_NAME, SERVICE_PORT), + compose.getServicePort(SERVICE_NAME, SERVICE_PORT)); + return new BufferedReader(new InputStreamReader(socket.getInputStream())); + }); + + Unreliables.retryUntilTrue(10, TimeUnit.SECONDS, () -> { + while (reader.ready()) { + String line = reader.readLine(); + if (line.contains(DOCKER_COMPOSE_OVERRIDE_TEST_OVERRIDE_ENV)) { + pass("Mapped environment variable was found"); + return true; + } + } + info("Mapped environment variable was not found yet - process probably not ready"); + Uninterruptibles.sleepUninterruptibly(100, TimeUnit.MILLISECONDS); + return false; + }); + + } +} diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeOverrideTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeOverrideTest.java index 8d72d8d2533..91eca5b8698 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeOverrideTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeOverrideTest.java @@ -39,7 +39,7 @@ public static void checkVersion() { @Test(timeout = 30_000) - public void testEnvVar() throws IOException { + public void testEnvVar() { BufferedReader br = Unreliables.retryUntilSuccess(10, TimeUnit.SECONDS, () -> { Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS); From 1e1767bc89d82ebf10247e56b913987a795eaf2b Mon Sep 17 00:00:00 2001 From: Stanislav Bytsko Date: Fri, 15 Jun 2018 23:39:22 +0300 Subject: [PATCH 2/3] Remove incorrect attribution comment --- .../testcontainers/junit/DockerComposeLocalOverrideTest.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeLocalOverrideTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeLocalOverrideTest.java index f30dd0e54cd..1210b34077c 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeLocalOverrideTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeLocalOverrideTest.java @@ -21,9 +21,6 @@ import static org.testcontainers.junit.DockerComposeDoNotOverrideTest.DOCKER_COMPOSE_OVERRIDE_TEST_OVERRIDE_ENV; import static org.testcontainers.junit.DockerComposeDoNotOverrideTest.DOCKER_COMPOSE_OVERRIDE_TEST_OVERRIDE_YML; -/** - * Created by rnorth on 11/06/2016. - */ public class DockerComposeLocalOverrideTest { private static final int SERVICE_PORT = 3000; From f4e2ed89c39e99fa650c6f26e44c970adde513db Mon Sep 17 00:00:00 2001 From: Richard North Date: Fri, 15 Jun 2018 21:40:19 +0100 Subject: [PATCH 3/3] Combine multiple test classes into a single parameterized test --- .../junit/DockerComposeDoNotOverrideTest.java | 67 --------------- .../junit/DockerComposeLocalOverrideTest.java | 67 --------------- .../junit/DockerComposeOverrideTest.java | 64 --------------- .../junit/DockerComposeOverridesTest.java | 82 +++++++++++++++++++ 4 files changed, 82 insertions(+), 198 deletions(-) delete mode 100644 core/src/test/java/org/testcontainers/junit/DockerComposeDoNotOverrideTest.java delete mode 100644 core/src/test/java/org/testcontainers/junit/DockerComposeOverrideTest.java create mode 100644 core/src/test/java/org/testcontainers/junit/DockerComposeOverridesTest.java diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeDoNotOverrideTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeDoNotOverrideTest.java deleted file mode 100644 index 0037f48b6d6..00000000000 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeDoNotOverrideTest.java +++ /dev/null @@ -1,67 +0,0 @@ -package org.testcontainers.junit; - -import com.google.common.util.concurrent.Uninterruptibles; -import org.junit.Assume; -import org.junit.BeforeClass; -import org.junit.Rule; -import org.junit.Test; -import org.rnorth.ducttape.unreliables.Unreliables; -import org.testcontainers.containers.DockerComposeContainer; -import org.testcontainers.utility.TestEnvironment; - -import java.io.BufferedReader; -import java.io.File; -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.Socket; -import java.util.concurrent.TimeUnit; - -import static org.rnorth.visibleassertions.VisibleAssertions.info; -import static org.rnorth.visibleassertions.VisibleAssertions.pass; - -/** - * Created by rnorth on 11/06/2016. - */ -public class DockerComposeDoNotOverrideTest { - - static final String DOCKER_COMPOSE_OVERRIDE_TEST_BASE_YML = "src/test/resources/docker-compose-base.yml"; - static final String DOCKER_COMPOSE_OVERRIDE_TEST_BASE_ENV = "bar=base"; - - static final String DOCKER_COMPOSE_OVERRIDE_TEST_OVERRIDE_YML = "src/test/resources/docker-compose-non-default-override.yml"; - static final String DOCKER_COMPOSE_OVERRIDE_TEST_OVERRIDE_ENV = "bar=overwritten"; - - @Rule - public DockerComposeContainer compose = - new DockerComposeContainer(new File(DOCKER_COMPOSE_OVERRIDE_TEST_BASE_YML)) - .withExposedService("alpine_1", 3000); - - @BeforeClass - public static void checkVersion() { - Assume.assumeTrue(TestEnvironment.dockerApiAtLeast("1.22")); - } - - - @Test(timeout = 30_000) - public void testEnvVar() throws IOException { - BufferedReader br = Unreliables.retryUntilSuccess(10, TimeUnit.SECONDS, () -> { - Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS); - - Socket socket = new Socket(compose.getServiceHost("alpine_1", 3000), compose.getServicePort("alpine_1", 3000)); - return new BufferedReader(new InputStreamReader(socket.getInputStream())); - }); - - Unreliables.retryUntilTrue(10, TimeUnit.SECONDS, () -> { - while (br.ready()) { - String line = br.readLine(); - if (line.contains(DOCKER_COMPOSE_OVERRIDE_TEST_BASE_ENV)) { - pass("Mapped environment variable was found"); - return true; - } - } - info("Mapped environment variable was not found yet - process probably not ready"); - Uninterruptibles.sleepUninterruptibly(100, TimeUnit.MILLISECONDS); - return false; - }); - - } -} diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeLocalOverrideTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeLocalOverrideTest.java index 1210b34077c..e69de29bb2d 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeLocalOverrideTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeLocalOverrideTest.java @@ -1,67 +0,0 @@ -package org.testcontainers.junit; - -import com.google.common.util.concurrent.Uninterruptibles; -import org.junit.Assume; -import org.junit.BeforeClass; -import org.junit.Rule; -import org.junit.Test; -import org.rnorth.ducttape.unreliables.Unreliables; -import org.testcontainers.containers.DockerComposeContainer; -import org.testcontainers.utility.TestEnvironment; - -import java.io.BufferedReader; -import java.io.File; -import java.io.InputStreamReader; -import java.net.Socket; -import java.util.concurrent.TimeUnit; - -import static org.rnorth.visibleassertions.VisibleAssertions.info; -import static org.rnorth.visibleassertions.VisibleAssertions.pass; -import static org.testcontainers.junit.DockerComposeDoNotOverrideTest.DOCKER_COMPOSE_OVERRIDE_TEST_BASE_YML; -import static org.testcontainers.junit.DockerComposeDoNotOverrideTest.DOCKER_COMPOSE_OVERRIDE_TEST_OVERRIDE_ENV; -import static org.testcontainers.junit.DockerComposeDoNotOverrideTest.DOCKER_COMPOSE_OVERRIDE_TEST_OVERRIDE_YML; - -public class DockerComposeLocalOverrideTest { - - private static final int SERVICE_PORT = 3000; - private static final String SERVICE_NAME = "alpine_1"; - - @Rule - public DockerComposeContainer compose = - new DockerComposeContainer( - new File(DOCKER_COMPOSE_OVERRIDE_TEST_BASE_YML), - new File(DOCKER_COMPOSE_OVERRIDE_TEST_OVERRIDE_YML)) - .withExposedService(SERVICE_NAME, SERVICE_PORT) - .withLocalCompose(true); - - @BeforeClass - public static void checkVersion() { - Assume.assumeTrue(TestEnvironment.dockerApiAtLeast("1.22")); - } - - @Test(timeout = 30_000) - public void testEnvVar() { - BufferedReader reader = Unreliables.retryUntilSuccess(10, TimeUnit.SECONDS, () -> { - Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS); - - Socket socket = new Socket( - compose.getServiceHost(SERVICE_NAME, SERVICE_PORT), - compose.getServicePort(SERVICE_NAME, SERVICE_PORT)); - return new BufferedReader(new InputStreamReader(socket.getInputStream())); - }); - - Unreliables.retryUntilTrue(10, TimeUnit.SECONDS, () -> { - while (reader.ready()) { - String line = reader.readLine(); - if (line.contains(DOCKER_COMPOSE_OVERRIDE_TEST_OVERRIDE_ENV)) { - pass("Mapped environment variable was found"); - return true; - } - } - info("Mapped environment variable was not found yet - process probably not ready"); - Uninterruptibles.sleepUninterruptibly(100, TimeUnit.MILLISECONDS); - return false; - }); - - } -} diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeOverrideTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeOverrideTest.java deleted file mode 100644 index 91eca5b8698..00000000000 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeOverrideTest.java +++ /dev/null @@ -1,64 +0,0 @@ -package org.testcontainers.junit; - -import com.google.common.util.concurrent.Uninterruptibles; -import org.junit.Assume; -import org.junit.BeforeClass; -import org.junit.Rule; -import org.junit.Test; -import org.rnorth.ducttape.unreliables.Unreliables; -import org.testcontainers.containers.DockerComposeContainer; -import org.testcontainers.utility.TestEnvironment; - -import java.io.BufferedReader; -import java.io.File; -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.Socket; -import java.util.concurrent.TimeUnit; - -import static org.rnorth.visibleassertions.VisibleAssertions.info; -import static org.rnorth.visibleassertions.VisibleAssertions.pass; -import static org.testcontainers.junit.DockerComposeDoNotOverrideTest.*; - -/** - * Created by rnorth on 11/06/2016. - */ -public class DockerComposeOverrideTest { - - @Rule - public DockerComposeContainer compose = - new DockerComposeContainer( - new File(DOCKER_COMPOSE_OVERRIDE_TEST_BASE_YML), - new File(DOCKER_COMPOSE_OVERRIDE_TEST_OVERRIDE_YML)) - .withExposedService("alpine_1", 3000); - - @BeforeClass - public static void checkVersion() { - Assume.assumeTrue(TestEnvironment.dockerApiAtLeast("1.22")); - } - - - @Test(timeout = 30_000) - public void testEnvVar() { - BufferedReader br = Unreliables.retryUntilSuccess(10, TimeUnit.SECONDS, () -> { - Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS); - - Socket socket = new Socket(compose.getServiceHost("alpine_1", 3000), compose.getServicePort("alpine_1", 3000)); - return new BufferedReader(new InputStreamReader(socket.getInputStream())); - }); - - Unreliables.retryUntilTrue(10, TimeUnit.SECONDS, () -> { - while (br.ready()) { - String line = br.readLine(); - if (line.contains(DOCKER_COMPOSE_OVERRIDE_TEST_OVERRIDE_ENV)) { - pass("Mapped environment variable was found"); - return true; - } - } - info("Mapped environment variable was not found yet - process probably not ready"); - Uninterruptibles.sleepUninterruptibly(100, TimeUnit.MILLISECONDS); - return false; - }); - - } -} diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeOverridesTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeOverridesTest.java new file mode 100644 index 00000000000..6413694d1c5 --- /dev/null +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeOverridesTest.java @@ -0,0 +1,82 @@ +package org.testcontainers.junit; + +import com.google.common.util.concurrent.Uninterruptibles; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.junit.runners.Parameterized.Parameters; +import org.rnorth.ducttape.unreliables.Unreliables; +import org.testcontainers.containers.DockerComposeContainer; + +import java.io.BufferedReader; +import java.io.File; +import java.io.InputStreamReader; +import java.net.Socket; +import java.util.Arrays; +import java.util.concurrent.TimeUnit; + +import static org.rnorth.visibleassertions.VisibleAssertions.info; +import static org.rnorth.visibleassertions.VisibleAssertions.pass; + +@RunWith(Parameterized.class) +public class DockerComposeOverridesTest { + + private static final File BASE_COMPOSE_FILE = new File("src/test/resources/docker-compose-base.yml"); + private static final String BASE_ENV_VAR = "bar=base"; + private static final File OVERRIDE_COMPOSE_FILE = new File("src/test/resources/docker-compose-non-default-override.yml"); + private static final String OVERRIDE_ENV_VAR = "bar=overwritten"; + private static final int SERVICE_PORT = 3000; + private static final String SERVICE_NAME = "alpine_1"; + + private final boolean localMode; + private final String expectedEnvVar; + private final File[] composeFiles; + + public DockerComposeOverridesTest(boolean localMode, String expectedEnvVar, File... composeFiles) { + this.localMode = localMode; + this.expectedEnvVar = expectedEnvVar; + this.composeFiles = composeFiles; + } + + @Parameters(name = "{index}: local[{0}], composeFiles[{2}], expectedEnvVar[{1}]") + public static Iterable data() { + return Arrays.asList(new Object[][]{ + {true, BASE_ENV_VAR, new File[]{BASE_COMPOSE_FILE}}, + {true, OVERRIDE_ENV_VAR, new File[]{BASE_COMPOSE_FILE, OVERRIDE_COMPOSE_FILE}}, + {false, BASE_ENV_VAR, new File[]{BASE_COMPOSE_FILE}}, + {false, OVERRIDE_ENV_VAR, new File[]{BASE_COMPOSE_FILE, OVERRIDE_COMPOSE_FILE}}, + }); + } + + @Test + public void test() { + try (DockerComposeContainer compose = + new DockerComposeContainer(composeFiles) + .withLocalCompose(localMode) + .withExposedService(SERVICE_NAME, SERVICE_PORT)) { + + compose.start(); + + BufferedReader br = Unreliables.retryUntilSuccess(10, TimeUnit.SECONDS, () -> { + Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS); + + Socket socket = new Socket(compose.getServiceHost(SERVICE_NAME, SERVICE_PORT), compose.getServicePort(SERVICE_NAME, SERVICE_PORT)); + return new BufferedReader(new InputStreamReader(socket.getInputStream())); + }); + + Unreliables.retryUntilTrue(10, TimeUnit.SECONDS, () -> { + while (br.ready()) { + String line = br.readLine(); + if (line.contains(expectedEnvVar)) { + pass("Mapped environment variable was found"); + return true; + } + } + info("Mapped environment variable was not found yet - process probably not ready"); + Uninterruptibles.sleepUninterruptibly(100, TimeUnit.MILLISECONDS); + return false; + }); + } + } + +}