Skip to content

Commit

Permalink
Fix parsing of docker-compose < 1.25.2 output on narrow terminals
Browse files Browse the repository at this point in the history
  • Loading branch information
albanf committed Dec 2, 2022
1 parent 916c91a commit 1e7b661
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,11 +18,13 @@
import com.google.common.base.Preconditions;
import com.google.common.base.Strings;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Objects;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Stream;

public final class Ports {
Expand Down Expand Up @@ -55,8 +57,12 @@ public Stream<DockerPort> stream() {
}

public static Ports parseFromDockerComposePs(String psOutput, String dockerMachineIp) {
Preconditions.checkArgument(!Strings.isNullOrEmpty(psOutput), "No container found");
Matcher matcher = PORT_PATTERN.matcher(psOutput);
// Clean the ps output to remove line breaks and unneeded spaces
String cleanOutput = Arrays.stream(psOutput.split("\\R"))
.map(String::trim)
.collect(Collectors.joining(""));
Preconditions.checkArgument(!Strings.isNullOrEmpty(cleanOutput), "No container found");
Matcher matcher = PORT_PATTERN.matcher(cleanOutput);
List<DockerPort> ports = new ArrayList<>();
while (matcher.find()) {
String matchedIpAddress = matcher.group(IP_ADDRESS);
Expand All @@ -66,7 +72,7 @@ public static Ports parseFromDockerComposePs(String psOutput, String dockerMachi

ports.add(new DockerPort(ip, externalPort, internalPort));
}
Matcher rangeMatcher = PORT_RANGE_PATTERN.matcher(psOutput);
Matcher rangeMatcher = PORT_RANGE_PATTERN.matcher(cleanOutput);
while (rangeMatcher.find()) {
String matchedIpAddress = rangeMatcher.group(IP_ADDRESS);
String ip = matchedIpAddress.equals(NO_IP_ADDRESS) ? dockerMachineIp : matchedIpAddress;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,6 +95,23 @@ public void parse_actual_docker_compose_output() {
assertThat(ports, is(expected));
}

@Test
public void parse_docker_compose_output_on_narrow_terminal() {
String psOutput =
" Name Command State Ports \n" +
"--------------------------------------------------------------------------------\n" +
"projectnamemyserv docker-entrypoint.sh Up (healthy) 4510/tcp, 4511/tcp,\n" +
"ice_localstack_1 4512/tcp, 4513/tcp,\n" +
" 4514/tcp, 4515/tcp,\n" +
" 4558/tcp, 4559/tcp,\n" +
" 0.0.0.0:49153->4566\n" +
" /tcp,:::49153->4566\n" +
" /tcp, 5678/tcp ";
Ports ports = Ports.parseFromDockerComposePs(psOutput, LOCALHOST_IP);
Ports expected = new Ports(newArrayList(new DockerPort(LOCALHOST_IP, 49153, 4566)));
assertThat(ports, is(expected));
}

@Test
public void throw_illegal_state_exception_when_no_running_container_found_for_service() {
exception.expect(IllegalArgumentException.class);
Expand Down

0 comments on commit 1e7b661

Please sign in to comment.