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"