From ca49bb7540f402a525181c8a34dba88d25534f3e Mon Sep 17 00:00:00 2001 From: Matthias Hahn Date: Fri, 31 May 2019 16:07:42 +0200 Subject: [PATCH 01/13] new: startup certain services --- .gitignore | 1 + .../containers/DockerComposeContainer.java | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 1b6070306a2..64186847336 100644 --- a/.gitignore +++ b/.gitignore @@ -63,3 +63,4 @@ src/mkdocs-codeinclude-plugin src/pip-delete-this-directory.txt .DS_Store +.directory diff --git a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java index 67674796cdd..b0c75aadbb9 100644 --- a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java +++ b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java @@ -75,6 +75,8 @@ public class DockerComposeContainer> e private static final Object MUTEX = new Object(); + private List services = new LinkedList<>(); + /** * Properties that should be passed through to all Compose and ambassador containers (not * necessarily to containers that are spawned by Compose itself) @@ -159,10 +161,15 @@ private void pullImages() { runWithCompose("pull"); } + public SELF withServices(String... services) { + this.services = Arrays.asList(services); + return self(); + } private void createServices() { + String services = String.join(" ", this.services); // Run the docker-compose container, which starts up the services - runWithCompose("up -d"); + runWithCompose(("up -d " + services).trim()); } private void waitUntilServiceStarted() { From c7a0174f3bf61ffce3d147d5dc4ca592e97482ff Mon Sep 17 00:00:00 2001 From: Matthias Hahn Date: Mon, 3 Jun 2019 15:25:09 +0200 Subject: [PATCH 02/13] add: better modularisation --- .../containers/DockerComposeContainer.java | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java index b0c75aadbb9..278c933bb8b 100644 --- a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java +++ b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java @@ -75,7 +75,7 @@ public class DockerComposeContainer> e private static final Object MUTEX = new Object(); - private List services = new LinkedList<>(); + private String services = ""; /** * Properties that should be passed through to all Compose and ambassador containers (not @@ -161,15 +161,14 @@ private void pullImages() { runWithCompose("pull"); } - public SELF withServices(String... services) { - this.services = Arrays.asList(services); + public SELF withServices(@NonNull String... services) { + this.services = String.join(" ", Arrays.asList(services)); return self(); } private void createServices() { - String services = String.join(" ", this.services); // Run the docker-compose container, which starts up the services - runWithCompose(("up -d " + services).trim()); + runWithCompose("up -d " + services); } private void waitUntilServiceStarted() { From a93e44b9de2bb12c8120e1d6d8883dfa89885c7a Mon Sep 17 00:00:00 2001 From: Matthias Hahn Date: Tue, 4 Jun 2019 11:24:54 +0200 Subject: [PATCH 03/13] add: tests for the new implementation --- .../containers/DockerComposeContainer.java | 6 ++-- .../junit/DockerComposeServiceTest.java | 33 +++++++++++++++++++ 2 files changed, 36 insertions(+), 3 deletions(-) create mode 100644 core/src/test/java/org/testcontainers/junit/DockerComposeServiceTest.java diff --git a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java index 278c933bb8b..3aa96725357 100644 --- a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java +++ b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java @@ -75,7 +75,7 @@ public class DockerComposeContainer> e private static final Object MUTEX = new Object(); - private String services = ""; + private List services = new ArrayList<>(); /** * Properties that should be passed through to all Compose and ambassador containers (not @@ -162,13 +162,13 @@ private void pullImages() { } public SELF withServices(@NonNull String... services) { - this.services = String.join(" ", Arrays.asList(services)); + this.services = Arrays.asList(services); return self(); } private void createServices() { // Run the docker-compose container, which starts up the services - runWithCompose("up -d " + services); + runWithCompose("up -d " + String.join(" ", this.services)); } private void waitUntilServiceStarted() { diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeServiceTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeServiceTest.java new file mode 100644 index 00000000000..c0360050d27 --- /dev/null +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeServiceTest.java @@ -0,0 +1,33 @@ +package org.testcontainers.junit; + +import org.junit.Rule; +import org.junit.Test; +import org.testcontainers.containers.DockerComposeContainer; + +import static org.rnorth.visibleassertions.VisibleAssertions.assertNotNull; + +import java.io.File; + +public class DockerComposeServiceTest extends BaseDockerComposeTest { + + @Rule + public DockerComposeContainer environment = new DockerComposeContainer(new File("src/test/resources/compose-test.yml")) + .withServices("redis") + .withExposedService("redis_1", REDIS_PORT); + + + @Override + protected DockerComposeContainer getEnvironment() { + return environment; + } + + @Test(expected = NullPointerException.class) + public void testDbIsNotStarting() { + environment.getServicePort("db_1", 10001); + } + + @Test + public void testRedisIsStarting() { + assertNotNull("Redis server started", environment.getServicePort("redis_1", REDIS_PORT)); + } +} From 0bfd440abeeaa20b033e8cf79d5f618e911e1aa4 Mon Sep 17 00:00:00 2001 From: HaMatthias <38075918+HaMatthias@users.noreply.github.com> Date: Tue, 11 Jun 2019 09:38:37 +0200 Subject: [PATCH 04/13] Update .gitignore --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 64186847336..1b6070306a2 100644 --- a/.gitignore +++ b/.gitignore @@ -63,4 +63,3 @@ src/mkdocs-codeinclude-plugin src/pip-delete-this-directory.txt .DS_Store -.directory From b145b8a6eb280ca2df4eda87353e94e7878c3f00 Mon Sep 17 00:00:00 2001 From: HaMatthias <38075918+HaMatthias@users.noreply.github.com> Date: Tue, 11 Jun 2019 09:43:20 +0200 Subject: [PATCH 05/13] Update DockerComposeServiceTest.java --- .../java/org/testcontainers/junit/DockerComposeServiceTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeServiceTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeServiceTest.java index c0360050d27..d05a0c2a61a 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeServiceTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeServiceTest.java @@ -21,6 +21,7 @@ protected DockerComposeContainer getEnvironment() { return environment; } + // TODO: Map correct exception @Test(expected = NullPointerException.class) public void testDbIsNotStarting() { environment.getServicePort("db_1", 10001); From 954ebf69d574d6fac7a4c6ad3cf3b75fe4fa80d5 Mon Sep 17 00:00:00 2001 From: Matthias Hahn Date: Mon, 24 Jun 2019 13:51:47 +0200 Subject: [PATCH 06/13] fix: Correct exception Handling with failure message --- .../testcontainers/containers/DockerComposeContainer.java | 8 +++++++- .../testcontainers/junit/DockerComposeServiceTest.java | 4 ++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java index 3aa96725357..d703b4b812b 100644 --- a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java +++ b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java @@ -384,7 +384,13 @@ public String getServiceHost(String serviceName, Integer servicePort) { * @return a port that can be used for accessing the service container. */ public Integer getServicePort(String serviceName, Integer servicePort) { - return ambassadorContainer.getMappedPort(ambassadorPortMappings.get(getServiceInstanceName(serviceName)).get(servicePort)); + if(getServiceInstanceName(serviceName) == null) { + throw new IllegalArgumentException("Context: Getting the port of '" + serviceName + "'.\n" + + "Problem: '" + serviceName + "' does not exist.\n" + + "Solution: Expose the service '" + serviceName + "' at the container setup of this instance."); + } else { + return ambassadorContainer.getMappedPort(ambassadorPortMappings.get(getServiceInstanceName(serviceName)).get(servicePort)); + } } public SELF withScaledService(String serviceBaseName, int numInstances) { diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeServiceTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeServiceTest.java index d05a0c2a61a..4df1533f1fb 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeServiceTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeServiceTest.java @@ -21,8 +21,12 @@ protected DockerComposeContainer getEnvironment() { return environment; } +<<<<<<< Updated upstream // TODO: Map correct exception @Test(expected = NullPointerException.class) +======= + @Test/*(expected = NullPointerException.class)*/ +>>>>>>> Stashed changes public void testDbIsNotStarting() { environment.getServicePort("db_1", 10001); } From 3de96c80b6bd538bdb455e84c1ca392834dd0dfc Mon Sep 17 00:00:00 2001 From: Matthias Hahn Date: Tue, 25 Jun 2019 09:09:07 +0200 Subject: [PATCH 07/13] fix: Exception handling for non existing portmappings --- .../testcontainers/containers/DockerComposeContainer.java | 8 +++++--- .../testcontainers/junit/DockerComposeServiceTest.java | 7 +------ 2 files changed, 6 insertions(+), 9 deletions(-) diff --git a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java index d703b4b812b..0266133cda3 100644 --- a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java +++ b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java @@ -384,12 +384,14 @@ public String getServiceHost(String serviceName, Integer servicePort) { * @return a port that can be used for accessing the service container. */ public Integer getServicePort(String serviceName, Integer servicePort) { - if(getServiceInstanceName(serviceName) == null) { - throw new IllegalArgumentException("Context: Getting the port of '" + serviceName + "'.\n" + + Map portMap = ambassadorPortMappings.get(getServiceInstanceName(serviceName)); + + if(portMap == null) { + throw new IllegalArgumentException("\n\nContext: Getting the port of '" + serviceName + "'.\n" + "Problem: '" + serviceName + "' does not exist.\n" + "Solution: Expose the service '" + serviceName + "' at the container setup of this instance."); } else { - return ambassadorContainer.getMappedPort(ambassadorPortMappings.get(getServiceInstanceName(serviceName)).get(servicePort)); + return ambassadorContainer.getMappedPort(portMap.get(servicePort)); } } diff --git a/core/src/test/java/org/testcontainers/junit/DockerComposeServiceTest.java b/core/src/test/java/org/testcontainers/junit/DockerComposeServiceTest.java index 4df1533f1fb..ec8c50d42ab 100644 --- a/core/src/test/java/org/testcontainers/junit/DockerComposeServiceTest.java +++ b/core/src/test/java/org/testcontainers/junit/DockerComposeServiceTest.java @@ -21,12 +21,7 @@ protected DockerComposeContainer getEnvironment() { return environment; } -<<<<<<< Updated upstream - // TODO: Map correct exception - @Test(expected = NullPointerException.class) -======= - @Test/*(expected = NullPointerException.class)*/ ->>>>>>> Stashed changes + @Test(expected = IllegalArgumentException.class) public void testDbIsNotStarting() { environment.getServicePort("db_1", 10001); } From f3a2b8b7ef980846f671487f5391a7839923d3ab Mon Sep 17 00:00:00 2001 From: HaMatthias <38075918+HaMatthias@users.noreply.github.com> Date: Fri, 1 Nov 2019 13:29:52 +0100 Subject: [PATCH 08/13] Update core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java Co-Authored-By: Richard North --- .../org/testcontainers/containers/DockerComposeContainer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java index 18f2a1e489d..67b95f21b09 100644 --- a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java +++ b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java @@ -449,7 +449,7 @@ public String getServiceHost(String serviceName, Integer servicePort) { public Integer getServicePort(String serviceName, Integer servicePort) { Map portMap = ambassadorPortMappings.get(getServiceInstanceName(serviceName)); - if(portMap == null) { + if (portMap == null) { throw new IllegalArgumentException("\n\nContext: Getting the port of '" + serviceName + "'.\n" + "Problem: '" + serviceName + "' does not exist.\n" + "Solution: Expose the service '" + serviceName + "' at the container setup of this instance."); From 3de738543cd8773d66120713bf916e9f9161063d Mon Sep 17 00:00:00 2001 From: HaMatthias <38075918+HaMatthias@users.noreply.github.com> Date: Fri, 1 Nov 2019 13:30:16 +0100 Subject: [PATCH 09/13] Update core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java Co-Authored-By: Richard North --- .../org/testcontainers/containers/DockerComposeContainer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java index 67b95f21b09..eb4cb5eff89 100644 --- a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java +++ b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java @@ -450,7 +450,7 @@ public Integer getServicePort(String serviceName, Integer servicePort) { Map portMap = ambassadorPortMappings.get(getServiceInstanceName(serviceName)); if (portMap == null) { - throw new IllegalArgumentException("\n\nContext: Getting the port of '" + serviceName + "'.\n" + + throw new IllegalArgumentException("Could not get a port for '" + serviceName + "'. " + "Problem: '" + serviceName + "' does not exist.\n" + "Solution: Expose the service '" + serviceName + "' at the container setup of this instance."); } else { From 8520c2929bb013fb5631a022117ffac91c290718 Mon Sep 17 00:00:00 2001 From: HaMatthias <38075918+HaMatthias@users.noreply.github.com> Date: Fri, 1 Nov 2019 13:30:35 +0100 Subject: [PATCH 10/13] Update core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java Co-Authored-By: Richard North --- .../org/testcontainers/containers/DockerComposeContainer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java index eb4cb5eff89..894a69e071e 100644 --- a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java +++ b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java @@ -451,7 +451,7 @@ public Integer getServicePort(String serviceName, Integer servicePort) { if (portMap == null) { throw new IllegalArgumentException("Could not get a port for '" + serviceName + "'. " + - "Problem: '" + serviceName + "' does not exist.\n" + + "Reason: '" + serviceName + "' does not exist. " + "Solution: Expose the service '" + serviceName + "' at the container setup of this instance."); } else { return ambassadorContainer.getMappedPort(portMap.get(servicePort)); From 9b68a7d7e2bf1fd387ef02ec3950d5d4621a4d8b Mon Sep 17 00:00:00 2001 From: HaMatthias <38075918+HaMatthias@users.noreply.github.com> Date: Fri, 1 Nov 2019 13:30:53 +0100 Subject: [PATCH 11/13] Update core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java Co-Authored-By: Richard North --- .../org/testcontainers/containers/DockerComposeContainer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java index 894a69e071e..eac9de09818 100644 --- a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java +++ b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java @@ -452,7 +452,7 @@ public Integer getServicePort(String serviceName, Integer servicePort) { if (portMap == null) { throw new IllegalArgumentException("Could not get a port for '" + serviceName + "'. " + "Reason: '" + serviceName + "' does not exist. " + - "Solution: Expose the service '" + serviceName + "' at the container setup of this instance."); + "To fix, please ensure that the service '" + serviceName + "' has ports exposed using .withExposedService(...)"); } else { return ambassadorContainer.getMappedPort(portMap.get(servicePort)); } From 071aab7877762d1f94ce217c2068bb34a505a57f Mon Sep 17 00:00:00 2001 From: HaMatthias <38075918+HaMatthias@users.noreply.github.com> Date: Fri, 1 Nov 2019 14:57:53 +0100 Subject: [PATCH 12/13] Update core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java Co-Authored-By: Richard North --- .../org/testcontainers/containers/DockerComposeContainer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java index eac9de09818..349c9261993 100644 --- a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java +++ b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java @@ -451,7 +451,7 @@ public Integer getServicePort(String serviceName, Integer servicePort) { if (portMap == null) { throw new IllegalArgumentException("Could not get a port for '" + serviceName + "'. " + - "Reason: '" + serviceName + "' does not exist. " + + "Testcontainers does not have an exposed port configured for '" + serviceName + "'. + "To fix, please ensure that the service '" + serviceName + "' has ports exposed using .withExposedService(...)"); } else { return ambassadorContainer.getMappedPort(portMap.get(servicePort)); From 89b3bb18a50fe2931ed940f8c6275874d1b4fc2f Mon Sep 17 00:00:00 2001 From: Richard North Date: Thu, 5 Dec 2019 21:37:24 +0000 Subject: [PATCH 13/13] Fix typo --- .../org/testcontainers/containers/DockerComposeContainer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java index 349c9261993..bfb93c349c0 100644 --- a/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java +++ b/core/src/main/java/org/testcontainers/containers/DockerComposeContainer.java @@ -451,7 +451,7 @@ public Integer getServicePort(String serviceName, Integer servicePort) { if (portMap == null) { throw new IllegalArgumentException("Could not get a port for '" + serviceName + "'. " + - "Testcontainers does not have an exposed port configured for '" + serviceName + "'. + + "Testcontainers does not have an exposed port configured for '" + serviceName + "'. "+ "To fix, please ensure that the service '" + serviceName + "' has ports exposed using .withExposedService(...)"); } else { return ambassadorContainer.getMappedPort(portMap.get(servicePort));