package org.arquillian.cube.docker.impl.util; import java.util.HashMap; import java.util.Map; import org.arquillian.cube.docker.impl.client.CubeDockerConfiguration; import org.arquillian.cube.docker.impl.client.DefinitionFormat; import org.junit.Test; import static org.hamcrest.CoreMatchers.is; import static org.junit.Assert.assertThat; public class SinglePortBindResolverTest { @Test public void should_resolve_single_bind_port() { String content = "tomcat:\n" + " image: tutum/tomcat:8.0\n" + " portBindings: [8080/tcp]\n" + " links:\n" + " - ping\n" + "ping:\n" + " image: jonmorehouse/ping-pong\n" + " exposedPorts: [8089/tcp]\n" + "storage:\n" + " image: tutum/mongodb"; Map<String, String> parameters = new HashMap<String, String>(); parameters.put("dockerContainers", content); parameters.put("definitionFormat", DefinitionFormat.CUBE.name()); CubeDockerConfiguration cubeConfiguration = CubeDockerConfiguration.fromMap(parameters, null); final int bindPort = SinglePortBindResolver.resolveBindPort(cubeConfiguration); assertThat(bindPort, is(8080)); } @Test(expected = IllegalArgumentException.class) public void should_throw_exception_with_resolve_two_bind_port() { String content = "tomcat:\n" + " image: tutum/tomcat:8.0\n" + " portBindings: [8080/tcp, 8081/tcp]\n" + " links:\n" + " - ping\n" + "ping:\n" + " image: jonmorehouse/ping-pong\n" + " exposedPorts: [8089/tcp]\n" + "storage:\n" + " image: tutum/mongodb"; Map<String, String> parameters = new HashMap<String, String>(); parameters.put("dockerContainers", content); parameters.put("definitionFormat", DefinitionFormat.CUBE.name()); CubeDockerConfiguration cubeConfiguration = CubeDockerConfiguration.fromMap(parameters, null); final int bindPort = SinglePortBindResolver.resolveBindPort(cubeConfiguration); } @Test(expected = IllegalArgumentException.class) public void should_throw_exception_with_resolve_two_bind_port_from_different_containers() { String content = "tomcat:\n" + " image: tutum/tomcat:8.0\n" + " portBindings: [8080/tcp]\n" + " links:\n" + " - ping\n" + "ping:\n" + " image: jonmorehouse/ping-pong\n" + " portBindings: [8081/tcp]\n" + "storage:\n" + " image: tutum/mongodb"; Map<String, String> parameters = new HashMap<String, String>(); parameters.put("dockerContainers", content); parameters.put("definitionFormat", DefinitionFormat.CUBE.name()); CubeDockerConfiguration cubeConfiguration = CubeDockerConfiguration.fromMap(parameters, null); final int bindPort = SinglePortBindResolver.resolveBindPort(cubeConfiguration); } @Test public void should_resolve_two_bind_port_from_different_containers_with_exclusions() { String content = "tomcat:\n" + " image: tutum/tomcat:8.0\n" + " portBindings: [8080/tcp]\n" + " links:\n" + " - ping\n" + "ping:\n" + " image: jonmorehouse/ping-pong\n" + " portBindings: [8081/tcp]\n" + "storage:\n" + " image: tutum/mongodb"; Map<String, String> parameters = new HashMap<String, String>(); parameters.put("dockerContainers", content); parameters.put("definitionFormat", DefinitionFormat.CUBE.name()); CubeDockerConfiguration cubeConfiguration = CubeDockerConfiguration.fromMap(parameters, null); final int bindPort = SinglePortBindResolver.resolveBindPort(cubeConfiguration, "ping"); assertThat(bindPort, is(8080)); } @Test public void should_resolve_two_bind_port_from_different_containers_with_exposed_port() { String content = "tomcat:\n" + " image: tutum/tomcat:8.0\n" + " portBindings: [8080/tcp]\n" + " links:\n" + " - ping\n" + "ping:\n" + " image: jonmorehouse/ping-pong\n" + " portBindings: [8081/tcp]\n" + "storage:\n" + " image: tutum/mongodb"; Map<String, String> parameters = new HashMap<String, String>(); parameters.put("dockerContainers", content); parameters.put("definitionFormat", DefinitionFormat.CUBE.name()); CubeDockerConfiguration cubeConfiguration = CubeDockerConfiguration.fromMap(parameters, null); final int bindPort = SinglePortBindResolver.resolveBindPort(cubeConfiguration, 8080); assertThat(bindPort, is(8080)); } @Test(expected = IllegalArgumentException.class) public void should_throw_exception_when_resolve_two_bind_port_from_different_containers_with_same_exposed_port() { String content = "tomcat:\n" + " image: tutum/tomcat:8.0\n" + " portBindings: [8080/tcp]\n" + " links:\n" + " - ping\n" + "ping:\n" + " image: jonmorehouse/ping-pong\n" + " portBindings: [8080/tcp]\n" + "storage:\n" + " image: tutum/mongodb"; Map<String, String> parameters = new HashMap<String, String>(); parameters.put("dockerContainers", content); parameters.put("definitionFormat", DefinitionFormat.CUBE.name()); CubeDockerConfiguration cubeConfiguration = CubeDockerConfiguration.fromMap(parameters, null); final int bindPort = SinglePortBindResolver.resolveBindPort(cubeConfiguration, 8080); } @Test public void should_resolve_two_bind_port_from_different_containers_with_exposed_port_value_if_no_matches() { String content = "tomcat:\n" + " image: tutum/tomcat:8.0\n" + " portBindings: [8080/tcp]\n" + " links:\n" + " - ping\n" + "ping:\n" + " image: jonmorehouse/ping-pong\n" + " portBindings: [8081/tcp]\n" + "storage:\n" + " image: tutum/mongodb"; Map<String, String> parameters = new HashMap<String, String>(); parameters.put("dockerContainers", content); parameters.put("definitionFormat", DefinitionFormat.CUBE.name()); CubeDockerConfiguration cubeConfiguration = CubeDockerConfiguration.fromMap(parameters, null); final int bindPort = SinglePortBindResolver.resolveBindPort(cubeConfiguration, 8082); assertThat(bindPort, is(8082)); } }