Skip to content

Commit

Permalink
Fix #1100 Normalized paths (#1101)
Browse files Browse the repository at this point in the history
  • Loading branch information
AndyGee authored and lordofthejars committed Nov 1, 2018
1 parent 77c915c commit 40b9ae5
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 15 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ public class ContainerBuilder {
private static final String LABELS = "labels";
private static final String LOG_DRIVER = "log_driver";
private static final String SECURITY_OPT = "security_opt";
private static final String DOCKERFILE= "dockerfile";
private static final String DOCKERFILE = "dockerfile";
private static final String READ_ONLY = "read_only";
private static final String EXTENDS = "extends";
private static final String PORTS = "ports";
Expand Down Expand Up @@ -181,8 +181,9 @@ public CubeContainer build(Map<String, Object> dockerComposeContainerDefinition,
this.addExpose(asListOfString(dockerComposeContainerDefinition, EXPOSE));
}
if (dockerComposeContainerDefinition.containsKey(VOLUMES)) {
this.addVolumes(asListOfString(dockerComposeContainerDefinition, VOLUMES));
this.addBinds(asListOfString(dockerComposeContainerDefinition, VOLUMES));
Collection<String> volumes = asListOfString(dockerComposeContainerDefinition, VOLUMES);
this.addVolumes(volumes);
this.addBinds(normalizePaths(volumes));
}
if(dockerComposeContainerDefinition.containsKey(LABELS)) {
this.addLabels(asMapOfStrings(dockerComposeContainerDefinition, LABELS));
Expand Down Expand Up @@ -298,6 +299,37 @@ public CubeContainer build(Map<String, Object> dockerComposeContainerDefinition,
return this.build();
}

private Collection<String> normalizePaths(Collection<String> volumes) {
final ArrayList<String> expanded = new ArrayList<>(volumes.size());

for (final String volume : volumes) {
final String[] split = volume.split(":");
try {
expanded.add(volume.replace(split[0], normalizePath(split[0])));
} catch (IOException e) {
log.log(Level.WARNING, "Failed to normalize volume: " + volume, e);
expanded.add(volume);
}
}
return expanded;
}

private String normalizePath(String bind) throws IOException {
if (bind.startsWith("//")) {
//Windows escaped syntax
bind = bind.substring(2).replaceFirst("/", ":/");
}

String absolutePath = new File(bind).getCanonicalPath().replace("\\", "/");

if (':' == absolutePath.charAt(1)) {
//Windows escaped syntax
absolutePath = "//" + absolutePath.replaceFirst(":", "");
}

return absolutePath;
}

private ContainerBuilder addNetworks(Collection<String> networks) {
if (configuration.getNetworks() != null) {
configuration.getNetworks().addAll(networks);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package org.arquillian.cube.docker.impl.docker.compose;

import static org.assertj.core.api.Assertions.assertThat;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder;
import static org.junit.Assert.assertThat;
import org.arquillian.cube.docker.impl.client.config.CubeContainer;
import org.arquillian.cube.docker.impl.client.config.DockerCompositions;
import org.arquillian.cube.docker.impl.client.config.Link;
import org.arquillian.cube.docker.impl.client.config.Network;
import org.arquillian.cube.docker.impl.client.config.PortBinding;
import org.junit.Test;

import java.io.IOException;
import java.net.URI;
Expand All @@ -13,13 +14,14 @@
import java.util.Collection;
import java.util.Map;

import org.arquillian.cube.docker.impl.client.config.CubeContainer;
import org.arquillian.cube.docker.impl.client.config.DockerCompositions;
import org.arquillian.cube.docker.impl.client.config.Link;
import org.arquillian.cube.docker.impl.client.config.Network;
import org.arquillian.cube.docker.impl.client.config.PortBinding;
import org.assertj.core.api.Assertions;
import org.junit.Test;
import static org.assertj.core.api.Assertions.assertThat;
import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertThat;
import static org.junit.Assert.assertTrue;

public class DockerComposeConverterTest {

Expand Down Expand Up @@ -299,4 +301,20 @@ public void shouldTransformSimpleDockerComposeV2FormatNetworkAliases() throws UR
assertThat(webapp.getAliases()).containsOnly("foo", "bar");
}

@Test
public void shouldResolveBinding() throws URISyntaxException {
URI simpleDockerComposeVolumes = DockerComposeConverterTest.class.getResource("/simple-docker-compose-volumes.yml").toURI();
DockerComposeConverter dockerComposeConverter = DockerComposeConverter.create(Paths.get(simpleDockerComposeVolumes));

DockerCompositions convert = dockerComposeConverter.convert();
CubeContainer webapp = convert.get("webapp");

Collection<String> binds = webapp.getBinds();
assertEquals(3, binds.size());
assertTrue(binds.toString().contains("docker/local:container"));
assertFalse(binds.toString().contains("\\"));
if (System.getProperty("os.name").toLowerCase().contains("windows")) {
assertTrue(binds.toString().contains("//"));
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
webapp:
build: .
ports:
- "8000:8000"
volumes:
- "/local"
- "//C/local:container"
- "./local:container"

0 comments on commit 40b9ae5

Please sign in to comment.