package io.cattle.platform.core.util;
import static org.junit.Assert.*;
import io.github.ibuildthecloud.gdapi.exception.ClientVisibleException;
import org.junit.Test;
public class PortSpecTest {
@Test
public void testValidFormats() {
// format: ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort | containerPort
PortSpec spec = new PortSpec("80");
assertEquals(80, spec.getPrivatePort());
assertEquals("tcp", spec.getProtocol());
assertNull(spec.getPublicPort());
assertNull(spec.getIpAddress());
spec = new PortSpec("81:80");
assertEquals(80, spec.getPrivatePort());
assertEquals("tcp", spec.getProtocol());
assertEquals(new Integer(81), spec.getPublicPort());
assertNull(spec.getIpAddress());
spec = new PortSpec("81:80/tcp");
assertEquals(80, spec.getPrivatePort());
assertEquals("tcp", spec.getProtocol());
assertEquals(new Integer(81), spec.getPublicPort());
assertNull(spec.getIpAddress());
spec = new PortSpec("81:80/udp");
assertEquals(80, spec.getPrivatePort());
assertEquals("udp", spec.getProtocol());
assertEquals(new Integer(81), spec.getPublicPort());
assertNull(spec.getIpAddress());
spec = new PortSpec("80/udp");
assertEquals(80, spec.getPrivatePort());
assertEquals("udp", spec.getProtocol());
assertNull(spec.getPublicPort());
assertNull(spec.getIpAddress());
spec = new PortSpec("127.0.0.1:81:80");
assertEquals("127.0.0.1", spec.getIpAddress());
assertEquals(new Integer(81), spec.getPublicPort());
assertEquals("tcp", spec.getProtocol());
assertEquals(80, spec.getPrivatePort());
spec = new PortSpec("[::1]:81:80");
assertEquals("::1", spec.getIpAddress());
assertEquals(new Integer(81), spec.getPublicPort());
assertEquals("tcp", spec.getProtocol());
assertEquals(80, spec.getPrivatePort());
spec = new PortSpec("127.0.0.1:81:80/udp");
assertEquals("127.0.0.1", spec.getIpAddress());
assertEquals(new Integer(81), spec.getPublicPort());
assertEquals("udp", spec.getProtocol());
assertEquals(80, spec.getPrivatePort());
spec = new PortSpec("127.0.0.1::80");
assertEquals("127.0.0.1", spec.getIpAddress());
assertNull(spec.getPublicPort());
assertEquals("tcp", spec.getProtocol());
assertEquals(80, spec.getPrivatePort());
assertNull(spec.getPublicPort());
}
@Test
public void testBadFormats() {
try {
new PortSpec("a");
fail();
} catch (ClientVisibleException e) {
assertEquals(PortSpec.WRONG_FORMAT, e.getCode());
}
try {
new PortSpec("0");
fail();
} catch (ClientVisibleException e) {
assertEquals(PortSpec.INVALID_PRIVATE_PORT, e.getCode());
}
try {
new PortSpec("65536");
fail();
} catch (ClientVisibleException e) {
assertEquals(PortSpec.INVALID_PRIVATE_PORT, e.getCode());
}
try {
new PortSpec("0:65535");
fail();
} catch (ClientVisibleException e) {
assertEquals(PortSpec.INVALID_PUBLIC_PORT, e.getCode());
}
try {
new PortSpec("65536:65535");
fail();
} catch (ClientVisibleException e) {
assertEquals(PortSpec.INVALID_PUBLIC_PORT, e.getCode());
}
try {
new PortSpec("80/asdf");
fail();
} catch (ClientVisibleException e) {
assertEquals(PortSpec.INVALID_PROTOCOL, e.getCode());
}
}
}