package org.jenkinsci.plugins.dockerbuildstep.util;
import static org.junit.Assert.*;
import org.junit.Test;
import com.github.dockerjava.api.model.ExposedPort;
import com.github.dockerjava.api.model.PortBinding;
import com.github.dockerjava.api.model.Ports;
/**
* Defines legal syntax for entering port bindings.
*/
public class PortBindingParserTest {
private static final ExposedPort TCP_8080 = ExposedPort.tcp(8080);
@Test
public void fullDefinition_blank() {
assertCreatesBindings("127.0.0.1:80 8080/tcp",
new PortBinding(Ports.Binding.bindIpAndPort("127.0.0.1", 80), TCP_8080));
}
@Test
public void noProtocol_blank() {
assertCreatesBindings("127.0.0.1:80 8080",
new PortBinding(Ports.Binding.bindIpAndPort("127.0.0.1", 80), TCP_8080));
}
@Test
public void noHostIp_blank() {
assertCreatesBindings("80 8080/tcp",
new PortBinding(Ports.Binding.bindPort(80), TCP_8080));
}
@Test
public void portsOnly_blank() {
assertCreatesBindings("80 8080",
new PortBinding(Ports.Binding.bindPort(80), TCP_8080));
}
@Test
public void fullDefinition_colon() {
assertCreatesBindings("127.0.0.1:80:8080/tcp",
new PortBinding(Ports.Binding.bindIpAndPort("127.0.0.1", 80), TCP_8080));
}
@Test
public void noProtocol_colon() {
assertCreatesBindings("127.0.0.1:80:8080",
new PortBinding(Ports.Binding.bindIpAndPort("127.0.0.1", 80), TCP_8080));
}
@Test
public void noHostIp_colon() {
assertCreatesBindings("80:8080/tcp",
new PortBinding(Ports.Binding.bindPort(80), TCP_8080));
}
@Test
public void portsOnly_colon() {
assertCreatesBindings("80:8080",
new PortBinding(Ports.Binding.bindPort(80), TCP_8080));
}
@Test(expected = IllegalArgumentException.class)
public void syntaxError() {
PortBindingParser.parse("nonsense");
}
@Test
public void parseEmptyString() {
PortBinding[] bindings = PortBindingParser.parse("");
assertEquals(0, bindings.length);
}
@Test
public void exposedUdpPort() {
assertCreatesBindings("80 8080/udp",
new PortBinding(Ports.Binding.bindPort(80), ExposedPort.udp(8080)));
}
@Test
public void dynamicHostPort_blank() {
assertCreatesBindings("127.0.0.1: 8080",
new PortBinding(Ports.Binding.bindIp("127.0.0.1"), TCP_8080));
}
@Test
public void dynamicHostPort_colon() {
assertCreatesBindings("127.0.0.1::8080",
new PortBinding(Ports.Binding.bindIp("127.0.0.1"), TCP_8080));
}
@Test
public void twoBindings_UnixStyle() {
twoBindings("80 8080\n81 8081");
}
@Test
public void twoBindings_DosStyle() {
twoBindings("80 8080\r\n81 8081");
}
private void twoBindings(String input) {
assertCreatesBindings(input,
new PortBinding(Ports.Binding.bindPort(80), ExposedPort.tcp(8080)),
new PortBinding(Ports.Binding.bindPort(81), ExposedPort.tcp(8081)));
}
private static void assertCreatesBindings(String input, PortBinding... expected) {
PortBinding[] parsed = PortBindingParser.parse(input);
assertEquals("wrong number of PortBindings created", expected.length, parsed.length);
for (int i = 0; i < parsed.length; i++) {
assertEquals(expected[i], parsed[i]);
}
}
}