diff --git a/changelog/@unreleased/pr-722.v2.yml b/changelog/@unreleased/pr-722.v2.yml
new file mode 100644
index 000000000..67d38342e
--- /dev/null
+++ b/changelog/@unreleased/pr-722.v2.yml
@@ -0,0 +1,5 @@
+type: feature
+feature:
+ description: docker-compose-rule now adds (opt in) support for docker-compose v2
+ links:
+ - https://github.com/palantir/docker-compose-rule/pull/722
diff --git a/docker-compose-junit-jupiter/src/integrationTest/java/com/palantir/docker/compose/DockerComposeExtensionV2IntegrationTest.java b/docker-compose-junit-jupiter/src/integrationTest/java/com/palantir/docker/compose/DockerComposeExtensionV2IntegrationTest.java
new file mode 100644
index 000000000..6b04586f8
--- /dev/null
+++ b/docker-compose-junit-jupiter/src/integrationTest/java/com/palantir/docker/compose/DockerComposeExtensionV2IntegrationTest.java
@@ -0,0 +1,54 @@
+/*
+ * (c) Copyright 2019 Palantir Technologies Inc. All rights reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.palantir.docker.compose;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+import com.palantir.docker.compose.configuration.DockerComposeFiles;
+import com.palantir.docker.compose.connection.waiting.HealthChecks;
+import org.junit.jupiter.api.Order;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.RegisterExtension;
+
+public class DockerComposeExtensionV2IntegrationTest {
+
+ @RegisterExtension
+ public static final DockerComposeExtension docker = DockerComposeExtension.builder()
+ .files(DockerComposeFiles.from("src/integrationTest/resources/docker-compose.yaml"))
+ .waitingForService("db", HealthChecks.toHaveAllPortsOpen())
+ .waitingForService("db2", HealthChecks.toHaveAllPortsOpen())
+ .waitingForService("db3", HealthChecks.toHaveAllPortsOpen())
+ .waitingForService("db4", HealthChecks.toHaveAllPortsOpen())
+ .useDockerComposeV2(true)
+ .build();
+
+ private static int port;
+
+ @Test
+ @Order(1)
+ public void an_external_port_exists() {
+ port = docker.containers().container("db").port(5432).getExternalPort();
+ assertThat(port).isNotZero();
+ }
+
+ @Test
+ @Order(2)
+ public void container_stays_up_between_tests() {
+ assertThat(docker.containers().container("db").port(5432).getExternalPort())
+ .isEqualTo(port);
+ }
+}
diff --git a/docker-compose-junit-jupiter/src/integrationTest/resources/docker-compose.yaml b/docker-compose-junit-jupiter/src/integrationTest/resources/docker-compose.yaml
index 49d871d56..0ee4103b3 100644
--- a/docker-compose-junit-jupiter/src/integrationTest/resources/docker-compose.yaml
+++ b/docker-compose-junit-jupiter/src/integrationTest/resources/docker-compose.yaml
@@ -1,23 +1,26 @@
-db:
- image: appropriate/nc
- command: /bin/sh -c 'echo server started && nc -lk 5432'
- ports:
- - "5432"
+version: '2.1'
-db2:
- image: appropriate/nc
- command: /bin/sh -c 'echo server started && nc -lk 5432'
- ports:
- - "5432"
+services:
+ db:
+ image: appropriate/nc
+ command: /bin/sh -c 'echo server started && nc -lk 5432'
+ ports:
+ - "5432"
-db3:
- image: appropriate/nc
- command: /bin/sh -c 'echo server started && nc -lk 5432'
- ports:
- - "5432"
+ db2:
+ image: appropriate/nc
+ command: /bin/sh -c 'echo server started && nc -lk 5432'
+ ports:
+ - "5432"
-db4:
- image: appropriate/nc
- command: /bin/sh -c 'echo server started && nc -lk 5432'
- ports:
- - "5432"
+ db3:
+ image: appropriate/nc
+ command: /bin/sh -c 'echo server started && nc -lk 5432'
+ ports:
+ - "5432"
+
+ db4:
+ image: appropriate/nc
+ command: /bin/sh -c 'echo server started && nc -lk 5432'
+ ports:
+ - "5432"
diff --git a/docker-compose-rule-core/src/integrationTest/java/com/palantir/docker/compose/DockerComposeManagerNativeHealthcheckIntegrationTest.java b/docker-compose-rule-core/src/integrationTest/java/com/palantir/docker/compose/DockerComposeManagerNativeHealthcheckIntegrationTest.java
index 202847c99..e07660eb0 100644
--- a/docker-compose-rule-core/src/integrationTest/java/com/palantir/docker/compose/DockerComposeManagerNativeHealthcheckIntegrationTest.java
+++ b/docker-compose-rule-core/src/integrationTest/java/com/palantir/docker/compose/DockerComposeManagerNativeHealthcheckIntegrationTest.java
@@ -20,15 +20,10 @@
import static com.palantir.docker.compose.execution.DockerComposeExecArgument.arguments;
import static com.palantir.docker.compose.execution.DockerComposeExecOption.noOptions;
import static org.awaitility.Awaitility.await;
-import static org.hamcrest.Matchers.greaterThanOrEqualTo;
import static org.junit.Assert.fail;
-import static org.junit.Assume.assumeThat;
-import com.github.zafarkhaja.semver.Version;
import com.palantir.docker.compose.connection.Container;
import com.palantir.docker.compose.connection.State;
-import com.palantir.docker.compose.execution.Docker;
-import com.palantir.docker.compose.execution.DockerCompose;
import java.io.IOException;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
@@ -53,19 +48,9 @@ public void shutdownPool() {
}
}
- /**
- * This test is not currently enabled in Circle as it does not provide a
- * sufficiently recent version of docker-compose.
- *
- * @see Issue #156
- */
@Test
public void dockerComposeManagerWaitsUntilHealthcheckPasses()
throws ExecutionException, IOException, InterruptedException, TimeoutException {
- assumeThat("docker version", Docker.version(), greaterThanOrEqualTo(Version.forIntegers(1, 12, 0)));
- assumeThat(
- "docker-compose version", DockerCompose.version(), greaterThanOrEqualTo(Version.forIntegers(1, 10, 0)));
-
docker = new DockerComposeManager.Builder()
.file("src/test/resources/native-healthcheck.yaml")
.build();
diff --git a/docker-compose-rule-core/src/integrationTest/java/com/palantir/docker/compose/EventsIntegrationTest.java b/docker-compose-rule-core/src/integrationTest/java/com/palantir/docker/compose/EventsIntegrationTest.java
index e39f2cb23..5a91c4309 100644
--- a/docker-compose-rule-core/src/integrationTest/java/com/palantir/docker/compose/EventsIntegrationTest.java
+++ b/docker-compose-rule-core/src/integrationTest/java/com/palantir/docker/compose/EventsIntegrationTest.java
@@ -96,15 +96,17 @@ public void produces_events_when_a_container_healthcheck_exceeds_its_timeout() {
List events = getEvents();
- ClusterWaitEvent clusterWait = events.stream()
+ Optional clusterWait = events.stream()
.map(this::isClusterWait)
.filter(Optional::isPresent)
.map(Optional::get)
- .findFirst()
- .orElseThrow(() -> new IllegalStateException("no clusterwaits in events"));
+ .filter(clusterWaitEvent ->
+ clusterWaitEvent.getTask().getFailure().isPresent())
+ .findFirst();
- assertThat(clusterWait.getServiceNames()).containsOnly("one");
- assertThat(clusterWait.getTask().getFailure()).hasValueSatisfying(failure -> {
+ assertThat(clusterWait).isPresent();
+ assertThat(clusterWait.get().getServiceNames()).containsOnly("one");
+ assertThat(clusterWait.get().getTask().getFailure()).hasValueSatisfying(failure -> {
assertThat(failure).contains(failureMessage);
});
}
diff --git a/docker-compose-rule-core/src/integrationTest/java/com/palantir/docker/compose/connection/ContainerIntegrationTests.java b/docker-compose-rule-core/src/integrationTest/java/com/palantir/docker/compose/connection/ContainerIntegrationTests.java
index 613adaa93..45d44e554 100644
--- a/docker-compose-rule-core/src/integrationTest/java/com/palantir/docker/compose/connection/ContainerIntegrationTests.java
+++ b/docker-compose-rule-core/src/integrationTest/java/com/palantir/docker/compose/connection/ContainerIntegrationTests.java
@@ -20,11 +20,8 @@
import static com.palantir.docker.compose.execution.DockerComposeExecOption.noOptions;
import static org.awaitility.Awaitility.await;
import static org.hamcrest.Matchers.equalTo;
-import static org.hamcrest.Matchers.greaterThanOrEqualTo;
import static org.junit.Assert.assertEquals;
-import static org.junit.Assume.assumeThat;
-import com.github.zafarkhaja.semver.Version;
import com.palantir.docker.compose.configuration.DockerComposeFiles;
import com.palantir.docker.compose.configuration.ProjectName;
import com.palantir.docker.compose.execution.DefaultDockerCompose;
@@ -59,18 +56,8 @@ public void testStateChanges_withoutHealthCheck() throws IOException, Interrupte
assertEquals(State.DOWN, container.state());
}
- /**
- * This test is not currently enabled in Circle as it does not provide a
- * sufficiently recent version of docker-compose.
- *
- * @see Issue #156
- */
@Test
public void testStateChanges_withHealthCheck() throws IOException, InterruptedException {
- assumeThat("docker version", Docker.version(), greaterThanOrEqualTo(Version.forIntegers(1, 12, 0)));
- assumeThat(
- "docker-compose version", DockerCompose.version(), greaterThanOrEqualTo(Version.forIntegers(1, 10, 0)));
-
DockerCompose dockerCompose = new DefaultDockerCompose(
DockerComposeFiles.from("src/test/resources/native-healthcheck.yaml"),
dockerMachine,
diff --git a/docker-compose-rule-core/src/integrationTest/java/com/palantir/docker/compose/logging/LoggingIntegrationTest.java b/docker-compose-rule-core/src/integrationTest/java/com/palantir/docker/compose/logging/LoggingIntegrationTest.java
index 33fe0ff9c..28da68b0d 100644
--- a/docker-compose-rule-core/src/integrationTest/java/com/palantir/docker/compose/logging/LoggingIntegrationTest.java
+++ b/docker-compose-rule-core/src/integrationTest/java/com/palantir/docker/compose/logging/LoggingIntegrationTest.java
@@ -55,9 +55,9 @@ public void logs_can_be_saved_to_a_directory() throws IOException, InterruptedEx
}
assertThat(
new File(logFolder.getRoot(), "db.log"),
- is(fileWithConents(matchingPattern(".*Attaching to \\w+_db_1.*server started.*"))));
+ is(fileWithConents(matchingPattern(".*db-1.*server started.*"))));
assertThat(
new File(logFolder.getRoot(), "db2.log"),
- is(fileWithConents(matchingPattern(".*Attaching to \\w+_db2_1.*server started.*"))));
+ is(fileWithConents(matchingPattern(".*db2-1.*server started.*"))));
}
}
diff --git a/docker-compose-rule-core/src/main/java/com/palantir/docker/compose/DockerComposeManager.java b/docker-compose-rule-core/src/main/java/com/palantir/docker/compose/DockerComposeManager.java
index 5c8b61b3c..d9bd7ffb1 100644
--- a/docker-compose-rule-core/src/main/java/com/palantir/docker/compose/DockerComposeManager.java
+++ b/docker-compose-rule-core/src/main/java/com/palantir/docker/compose/DockerComposeManager.java
@@ -101,9 +101,15 @@ public DockerComposeExecutable dockerComposeExecutable() {
.dockerComposeFiles(files())
.dockerConfiguration(machine())
.projectName(projectName())
+ .useDockerComposeV2(useDockerComposeV2())
.build();
}
+ @Value.Default
+ public boolean useDockerComposeV2() {
+ return false;
+ }
+
@Value.Default
public DockerExecutable dockerExecutable() {
return DockerExecutable.builder().dockerConfiguration(machine()).build();
diff --git a/docker-compose-rule-core/src/main/java/com/palantir/docker/compose/connection/ContainerNames.java b/docker-compose-rule-core/src/main/java/com/palantir/docker/compose/connection/ContainerNames.java
index ea4776d01..8dffc78fe 100644
--- a/docker-compose-rule-core/src/main/java/com/palantir/docker/compose/connection/ContainerNames.java
+++ b/docker-compose-rule-core/src/main/java/com/palantir/docker/compose/connection/ContainerNames.java
@@ -18,29 +18,26 @@
import static java.util.Collections.emptyList;
import static java.util.stream.Collectors.toList;
-import com.google.common.base.Splitter;
+import java.util.Arrays;
import java.util.List;
-import java.util.regex.Pattern;
-import java.util.stream.Stream;
public final class ContainerNames {
- private static final Pattern HEAD_PATTERN = Pattern.compile("-+(\r|\n)+");
- private static final Pattern BODY_PATTERN = Pattern.compile("(\r|\n)+");
+ private static final String LINE_DELIM = "\n";
private ContainerNames() {}
public static List parseFromDockerComposePs(String psOutput) {
- List psHeadAndBody = Splitter.on(HEAD_PATTERN).splitToList(psOutput);
+ List psHeadAndBody = Arrays.asList(psOutput.split(LINE_DELIM));
if (psHeadAndBody.size() < 2) {
return emptyList();
}
- String psBody = psHeadAndBody.get(1);
- return psBodyLines(psBody).map(ContainerName::fromPsLine).collect(toList());
- }
+ List psBody = psHeadAndBody.subList(1, psHeadAndBody.size());
- private static Stream psBodyLines(String psBody) {
- List lines = Splitter.on(BODY_PATTERN).splitToList(psBody);
- return lines.stream().map(String::trim).filter(line -> !line.isEmpty());
+ return psBody.stream()
+ .map(String::trim)
+ .filter(line -> !line.isEmpty())
+ .map(ContainerName::fromPsLine)
+ .collect(toList());
}
}
diff --git a/docker-compose-rule-core/src/main/java/com/palantir/docker/compose/execution/DefaultDockerCompose.java b/docker-compose-rule-core/src/main/java/com/palantir/docker/compose/execution/DefaultDockerCompose.java
index a0a12f5a9..860b82b56 100644
--- a/docker-compose-rule-core/src/main/java/com/palantir/docker/compose/execution/DefaultDockerCompose.java
+++ b/docker-compose-rule-core/src/main/java/com/palantir/docker/compose/execution/DefaultDockerCompose.java
@@ -149,8 +149,15 @@ private void verifyDockerComposeVersionAtLeast(Version targetVersion, String mes
}
private Version version() throws IOException, InterruptedException {
- String versionOutput = command.execute(Command.throwingOnError(), "-v");
- return DockerComposeVersion.parseFromDockerComposeVersion(versionOutput);
+ // docker-compose and docker compose have different ways to query the version.
+ // Since it can be either one, even silently sym-linked underneath us, try both
+ try {
+ String versionOutput = command.execute(Command.throwingOnError(), "version");
+ return DockerComposeVersion.parseFromDockerComposeVersion(versionOutput);
+ } catch (RuntimeException _exception) {
+ String versionOutput = command.execute(Command.throwingOnError(), "-v");
+ return DockerComposeVersion.parseFromDockerComposeVersion(versionOutput);
+ }
}
private static String[] constructFullDockerComposeExecArguments(
diff --git a/docker-compose-rule-core/src/main/java/com/palantir/docker/compose/execution/DockerComposeExecutable.java b/docker-compose-rule-core/src/main/java/com/palantir/docker/compose/execution/DockerComposeExecutable.java
index b71673cae..38a4734df 100644
--- a/docker-compose-rule-core/src/main/java/com/palantir/docker/compose/execution/DockerComposeExecutable.java
+++ b/docker-compose-rule-core/src/main/java/com/palantir/docker/compose/execution/DockerComposeExecutable.java
@@ -30,20 +30,31 @@
public abstract class DockerComposeExecutable implements Executable {
private static final Logger log = LoggerFactory.getLogger(DockerComposeExecutable.class);
- private static final DockerCommandLocations DOCKER_COMPOSE_LOCATIONS = new DockerCommandLocations(
+ private static final DockerCommandLocations DOCKER_COMPOSE_V1_LOCATIONS = new DockerCommandLocations(
System.getenv("DOCKER_COMPOSE_LOCATION"), "/usr/local/bin/docker-compose", "/usr/bin/docker-compose");
- private static String defaultDockerComposePath() {
- String pathToUse = DOCKER_COMPOSE_LOCATIONS
+ private static final DockerCommandLocations DOCKER_COMPOSE_V2_LOCATIONS =
+ new DockerCommandLocations(System.getenv("DOCKER_LOCATION"), "/usr/local/bin/docker", "/usr/bin/docker");
+
+ private static String defaultDockerComposePath(boolean useDockerComposeV2) {
+ DockerCommandLocations locations =
+ useDockerComposeV2 ? DOCKER_COMPOSE_V2_LOCATIONS : DOCKER_COMPOSE_V1_LOCATIONS;
+ String pathToUse = locations
.preferredLocation()
- .orElseThrow(() -> new IllegalStateException(
- "Could not find docker-compose, looked in: " + DOCKER_COMPOSE_LOCATIONS));
+ .orElseThrow(() -> new IllegalStateException("Could not find docker-compose, looked in: " + locations));
log.debug("Using docker-compose found at " + pathToUse);
return pathToUse;
}
+ /**
+ * Returns the version of docker-compose.
+ *
+ * @deprecated only supports getting the version of docker-compose v1.
+ * Just use {@link #execute} to get the version directly.
+ */
+ @Deprecated
static Version version() throws IOException, InterruptedException {
Command dockerCompose = new Command(
new Executable() {
@@ -55,7 +66,7 @@ public String commandName() {
@Override
public Process execute(String... commands) throws IOException {
List args = ImmutableList.builder()
- .add(defaultDockerComposePath())
+ .add(defaultDockerComposePath(false))
.add(commands)
.build();
return new ProcessBuilder(args)
@@ -82,12 +93,22 @@ public ProjectName projectName() {
@Override
public final String commandName() {
- return "docker-compose";
+ return useDockerComposeV2() ? "docker compose" : "docker-compose";
}
@Value.Derived
- protected String dockerComposePath() {
- return defaultDockerComposePath();
+ protected List dockerComposePath() {
+ String path = defaultDockerComposePath(useDockerComposeV2());
+ if (useDockerComposeV2()) {
+ return ImmutableList.of(path, "compose");
+ } else {
+ return ImmutableList.of(path);
+ }
+ }
+
+ @Value.Default
+ public boolean useDockerComposeV2() {
+ return false;
}
@Override
@@ -95,7 +116,7 @@ public Process execute(String... commands) throws IOException {
DockerForMacHostsIssue.issueWarning();
List args = ImmutableList.builder()
- .add(dockerComposePath())
+ .addAll(dockerComposePath())
.addAll(projectName().constructComposeFileCommand())
.addAll(dockerComposeFiles().constructComposeFileCommand())
.add(commands)
diff --git a/docker-compose-rule-core/src/main/java/com/palantir/docker/compose/execution/DockerComposeVersion.java b/docker-compose-rule-core/src/main/java/com/palantir/docker/compose/execution/DockerComposeVersion.java
index 81618f6c9..f7c314fa1 100644
--- a/docker-compose-rule-core/src/main/java/com/palantir/docker/compose/execution/DockerComposeVersion.java
+++ b/docker-compose-rule-core/src/main/java/com/palantir/docker/compose/execution/DockerComposeVersion.java
@@ -16,19 +16,24 @@
package com.palantir.docker.compose.execution;
import com.github.zafarkhaja.semver.Version;
-import com.google.common.base.Splitter;
-import java.util.List;
public final class DockerComposeVersion {
private DockerComposeVersion() {}
+ private static final String VERSION_PREFIX = " version ";
+
// docker-compose version format is like 1.7.0rc1, which can't be parsed by java-semver
// here we only pass 1.7.0 to java-semver
public static Version parseFromDockerComposeVersion(String versionOutput) {
- List splitOnSeparator = Splitter.on(' ').splitToList(versionOutput);
- String version = splitOnSeparator.get(2);
+ String version = versionOutput.substring(versionOutput.indexOf(VERSION_PREFIX) + VERSION_PREFIX.length());
StringBuilder builder = new StringBuilder();
+
+ // Handle new version format, e.g. v2.1.0
+ if (version.startsWith("v")) {
+ version = version.substring(1);
+ }
+
for (int i = 0; i < version.length(); i++) {
if ((version.charAt(i) >= '0' && version.charAt(i) <= '9') || version.charAt(i) == '.') {
builder.append(version.charAt(i));
diff --git a/docker-compose-rule-core/src/test/java/com/palantir/docker/compose/connection/ContainerNameShould.java b/docker-compose-rule-core/src/test/java/com/palantir/docker/compose/connection/ContainerNameShould.java
index 8f4aecb95..786678cf0 100644
--- a/docker-compose-rule-core/src/test/java/com/palantir/docker/compose/connection/ContainerNameShould.java
+++ b/docker-compose-rule-core/src/test/java/com/palantir/docker/compose/connection/ContainerNameShould.java
@@ -53,46 +53,46 @@ public void can_handle_custom_container_names() {
@Test
public void result_in_no_container_names_when_ps_output_is_empty() {
- List names = ContainerNames.parseFromDockerComposePs("\n----\n");
+ List names = ContainerNames.parseFromDockerComposePs("HEADER\n");
assertThat(names, is(emptyList()));
}
@Test
public void result_in_a_single_container_name_when_ps_output_has_a_single_container() {
- List names = ContainerNames.parseFromDockerComposePs("\n----\ndir_db_1 other line contents");
+ List names = ContainerNames.parseFromDockerComposePs("HEADER\ndir_db_1 other line contents");
assertThat(names, contains(containerName("dir", "db", "1")));
}
@Test
public void allow_windows_newline_characters() {
- List names = ContainerNames.parseFromDockerComposePs("\r\n----\r\ndir_db_1 other line contents");
+ List names = ContainerNames.parseFromDockerComposePs("HEADER\r\ndir_db_1 other line contents");
assertThat(names, contains(containerName("dir", "db", "1")));
}
@Test
public void allow_containers_with_underscores_in_their_name() {
List names =
- ContainerNames.parseFromDockerComposePs("\n----\ndir_left_right_1 other line contents");
+ ContainerNames.parseFromDockerComposePs("HEADER\ndir_left_right_1 other line contents");
assertThat(names, contains(containerName("dir", "left_right", "1")));
}
@Test
public void result_in_two_container_names_when_ps_output_has_two_containers() {
List names =
- ContainerNames.parseFromDockerComposePs("\n----\ndir_db_1 other line contents\ndir_db2_1 other stuff");
+ ContainerNames.parseFromDockerComposePs("HEADER\ndir_db_1 other line contents\ndir_db2_1 other stuff");
assertThat(names, contains(containerName("dir", "db", "1"), containerName("dir", "db2", "1")));
}
@Test
public void ignore_an_empty_line_in_ps_output() {
- List names = ContainerNames.parseFromDockerComposePs("\n----\ndir_db_1 other line contents\n\n");
+ List names = ContainerNames.parseFromDockerComposePs("HEADER\ndir_db_1 other line contents\n\n");
assertThat(names, contains(containerName("dir", "db", "1")));
}
@Test
public void ignore_a_line_with_ony_spaces_in_ps_output() {
List names =
- ContainerNames.parseFromDockerComposePs("\n----\ndir_db_1 other line contents\n \n");
+ ContainerNames.parseFromDockerComposePs("HEADER\ndir_db_1 other line contents\n \n");
assertThat(names, contains(containerName("dir", "db", "1")));
}
diff --git a/docker-compose-rule-core/src/test/java/com/palantir/docker/compose/execution/DockerComposeShould.java b/docker-compose-rule-core/src/test/java/com/palantir/docker/compose/execution/DockerComposeShould.java
index 07bf0ce14..64ee9a258 100644
--- a/docker-compose-rule-core/src/test/java/com/palantir/docker/compose/execution/DockerComposeShould.java
+++ b/docker-compose-rule-core/src/test/java/com/palantir/docker/compose/execution/DockerComposeShould.java
@@ -91,7 +91,7 @@ public void call_docker_compose_start_on_start() throws IOException, Interrupted
@Test
public void parse_and_returns_container_names_on_ps() throws IOException, InterruptedException {
- when(executedProcess.getInputStream()).thenReturn(toInputStream("ps\n----\ndir_db_1"));
+ when(executedProcess.getInputStream()).thenReturn(toInputStream("HEADER\ndir_db_1"));
List containerNames = compose.ps();
verify(executor).execute("ps");
assertThat(
@@ -123,7 +123,7 @@ public void call_docker_compose_with_no_container_on_logs() throws IOException {
when(mockVersionProcess.exitValue()).thenReturn(0);
when(mockVersionProcess.getInputStream())
.thenReturn(toInputStream("docker-compose version 1.7.0, build 1ad8866"));
- when(executor.execute("-v")).thenReturn(mockVersionProcess);
+ when(executor.execute("version")).thenReturn(mockVersionProcess);
when(executor.execute("logs", "--no-color", "db")).thenReturn(executedProcess);
when(executedProcess.getInputStream()).thenReturn(toInputStream("logs"));
ByteArrayOutputStream output = new ByteArrayOutputStream();
@@ -224,7 +224,7 @@ public void return_the_output_from_the_executed_process_on_docker_compose_exec()
DockerComposeExecutable processExecutor = mock(DockerComposeExecutable.class);
- addProcessToExecutor(processExecutor, processWithOutput(versionString), "-v");
+ addProcessToExecutor(processExecutor, processWithOutput(versionString), "version");
addProcessToExecutor(processExecutor, processWithOutput(lsString), "exec", "-T", "container_1", "ls", "-l");
DockerCompose processCompose = new DefaultDockerCompose(processExecutor, dockerMachine);
diff --git a/docker-compose-rule-core/src/test/resources/docker-compose.yaml b/docker-compose-rule-core/src/test/resources/docker-compose.yaml
index 49d871d56..0ee4103b3 100644
--- a/docker-compose-rule-core/src/test/resources/docker-compose.yaml
+++ b/docker-compose-rule-core/src/test/resources/docker-compose.yaml
@@ -1,23 +1,26 @@
-db:
- image: appropriate/nc
- command: /bin/sh -c 'echo server started && nc -lk 5432'
- ports:
- - "5432"
+version: '2.1'
-db2:
- image: appropriate/nc
- command: /bin/sh -c 'echo server started && nc -lk 5432'
- ports:
- - "5432"
+services:
+ db:
+ image: appropriate/nc
+ command: /bin/sh -c 'echo server started && nc -lk 5432'
+ ports:
+ - "5432"
-db3:
- image: appropriate/nc
- command: /bin/sh -c 'echo server started && nc -lk 5432'
- ports:
- - "5432"
+ db2:
+ image: appropriate/nc
+ command: /bin/sh -c 'echo server started && nc -lk 5432'
+ ports:
+ - "5432"
-db4:
- image: appropriate/nc
- command: /bin/sh -c 'echo server started && nc -lk 5432'
- ports:
- - "5432"
+ db3:
+ image: appropriate/nc
+ command: /bin/sh -c 'echo server started && nc -lk 5432'
+ ports:
+ - "5432"
+
+ db4:
+ image: appropriate/nc
+ command: /bin/sh -c 'echo server started && nc -lk 5432'
+ ports:
+ - "5432"
diff --git a/docker-compose-rule-core/src/test/resources/environment/docker-compose.yaml b/docker-compose-rule-core/src/test/resources/environment/docker-compose.yaml
index 18d15757e..887bcd9c2 100644
--- a/docker-compose-rule-core/src/test/resources/environment/docker-compose.yaml
+++ b/docker-compose-rule-core/src/test/resources/environment/docker-compose.yaml
@@ -1,5 +1,8 @@
-env-test:
- image: gliderlabs/alpine
- environment:
- SOME_VARIABLE: ${SOME_VARIABLE}
- command: env
\ No newline at end of file
+version: "2.1"
+
+services:
+ env-test:
+ image: gliderlabs/alpine
+ environment:
+ SOME_VARIABLE: ${SOME_VARIABLE}
+ command: env
diff --git a/docker-compose-rule-core/src/test/resources/named-containers-docker-compose.yaml b/docker-compose-rule-core/src/test/resources/named-containers-docker-compose.yaml
index 1e5b8233e..af5e8fbf3 100644
--- a/docker-compose-rule-core/src/test/resources/named-containers-docker-compose.yaml
+++ b/docker-compose-rule-core/src/test/resources/named-containers-docker-compose.yaml
@@ -1,7 +1,10 @@
-test-1:
- container_name: test-1.container.name
- image: kiasaki/alpine-postgres
+version: '2.1'
-test-2:
- container_name: test-2.container.name
- image: kiasaki/alpine-postgres
+services:
+ test-1:
+ container_name: test-1.container.name
+ image: kiasaki/alpine-postgres
+
+ test-2:
+ container_name: test-2.container.name
+ image: kiasaki/alpine-postgres
diff --git a/docker-compose-rule-core/src/test/resources/shutdown-strategy.yaml b/docker-compose-rule-core/src/test/resources/shutdown-strategy.yaml
index 46f81eb6c..cac1470b1 100644
--- a/docker-compose-rule-core/src/test/resources/shutdown-strategy.yaml
+++ b/docker-compose-rule-core/src/test/resources/shutdown-strategy.yaml
@@ -1,11 +1,14 @@
-infinite-netcat-loop:
- image: appropriate/nc
- command: sh -c 'while true; do nc -l 8080 < ./entrypoint.sh; done'
- ports:
- - "8080"
+version: '2.1'
-infinite-netcat-loop2:
- image: appropriate/nc
- command: sh -c 'while true; do nc -l 8080 < ./entrypoint.sh; done'
- ports:
- - "8080"
+services:
+ infinite-netcat-loop:
+ image: appropriate/nc
+ command: sh -c 'while true; do nc -l 8080 < ./entrypoint.sh; done'
+ ports:
+ - "8080"
+
+ infinite-netcat-loop2:
+ image: appropriate/nc
+ command: sh -c 'while true; do nc -l 8080 < ./entrypoint.sh; done'
+ ports:
+ - "8080"
diff --git a/docker-compose-rule-core/src/test/resources/up-integration-test.yaml b/docker-compose-rule-core/src/test/resources/up-integration-test.yaml
index a1cf6ef47..27a437247 100644
--- a/docker-compose-rule-core/src/test/resources/up-integration-test.yaml
+++ b/docker-compose-rule-core/src/test/resources/up-integration-test.yaml
@@ -1,5 +1,8 @@
-infinite-netcat-loop:
- image: appropriate/nc
- command: sh -c 'while true; do nc -l 8080 < ./entrypoint.sh; done'
- ports:
- - "8080"
+version: '2.1'
+
+services:
+ infinite-netcat-loop:
+ image: appropriate/nc
+ command: sh -c 'while true; do nc -l 8080 < ./entrypoint.sh; done'
+ ports:
+ - "8080"
diff --git a/docker-compose-rule-junit4/src/test/resources/docker-compose.yaml b/docker-compose-rule-junit4/src/test/resources/docker-compose.yaml
index 49d871d56..0ee4103b3 100644
--- a/docker-compose-rule-junit4/src/test/resources/docker-compose.yaml
+++ b/docker-compose-rule-junit4/src/test/resources/docker-compose.yaml
@@ -1,23 +1,26 @@
-db:
- image: appropriate/nc
- command: /bin/sh -c 'echo server started && nc -lk 5432'
- ports:
- - "5432"
+version: '2.1'
-db2:
- image: appropriate/nc
- command: /bin/sh -c 'echo server started && nc -lk 5432'
- ports:
- - "5432"
+services:
+ db:
+ image: appropriate/nc
+ command: /bin/sh -c 'echo server started && nc -lk 5432'
+ ports:
+ - "5432"
-db3:
- image: appropriate/nc
- command: /bin/sh -c 'echo server started && nc -lk 5432'
- ports:
- - "5432"
+ db2:
+ image: appropriate/nc
+ command: /bin/sh -c 'echo server started && nc -lk 5432'
+ ports:
+ - "5432"
-db4:
- image: appropriate/nc
- command: /bin/sh -c 'echo server started && nc -lk 5432'
- ports:
- - "5432"
+ db3:
+ image: appropriate/nc
+ command: /bin/sh -c 'echo server started && nc -lk 5432'
+ ports:
+ - "5432"
+
+ db4:
+ image: appropriate/nc
+ command: /bin/sh -c 'echo server started && nc -lk 5432'
+ ports:
+ - "5432"