X Tutup
Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ public ExposedPort(int port) {
* @param scheme
* the {@link #getScheme() scheme}, <code>tcp</code> or <code>udp</code>
* @param port
* the {@link #getPort() port number}
* the {@link #getPort() port number or port range}
* @deprecated use {@link #ExposedPort(int, InternetProtocol)}
*/
@Deprecated
Expand Down Expand Up @@ -124,9 +124,9 @@ public static ExposedPort parse(String serialized) throws IllegalArgumentExcepti
String[] parts = serialized.split("/");
switch (parts.length) {
case 1:
return new ExposedPort(Integer.valueOf(parts[0]));
return new ExposedPort(Integer.parseInt(parts[0]));
case 2:
return new ExposedPort(Integer.valueOf(parts[0]), InternetProtocol.parse(parts[1]));
return new ExposedPort(Integer.parseInt(parts[0]), InternetProtocol.parse(parts[1]));
default:
throw new IllegalArgumentException();
}
Expand Down
76 changes: 37 additions & 39 deletions src/main/java/com/github/dockerjava/api/model/Ports.java
Original file line number Diff line number Diff line change
@@ -1,16 +1,5 @@
package com.github.dockerjava.api.model;

import static org.apache.commons.lang.StringUtils.isEmpty;

import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.builder.EqualsBuilder;

import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonProcessingException;
Expand All @@ -23,6 +12,16 @@
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.node.NullNode;
import org.apache.commons.lang.ArrayUtils;
import org.apache.commons.lang.builder.EqualsBuilder;

import java.io.IOException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;

import static org.apache.commons.lang.StringUtils.isEmpty;

/**
* A container for port bindings, made available as a {@link Map} via its {@link #getBindings()} method.
Expand Down Expand Up @@ -111,15 +110,15 @@ public Map<ExposedPort, Binding[]> getBindings() {
/**
* Creates a {@link Binding} for the given IP address and port number.
*/
public static Binding binding(String hostIp, Integer hostPort) {
public static Binding binding(String hostIp, String hostPort) {
return new Binding(hostIp, hostPort);
}

/**
* Creates a {@link Binding} for the given port number, leaving the IP address undefined.
*/
public static Binding binding(Integer hostPort) {
return new Binding(hostPort);
public static Binding binding(String hostPort) {
return new Binding(null, hostPort);
}

/**
Expand All @@ -132,38 +131,38 @@ public static Binding binding(Integer hostPort) {
*/
public static class Binding {

private final String hostIp;

private final Integer hostPort;

/**
* Creates a {@link Binding} for the given {@link #getHostIp() IP address} and {@link #getHostPort() port number}.
* Creates a {@link Binding} for the given {@link #getHostPort() port number or range}, leaving the {@link #getHostIp() IP address}
* undefined.
*
* @see Ports#bind(ExposedPort, Binding)
* @see ExposedPort
*/
public Binding(String hostIp, Integer hostPort) {
this.hostIp = isEmpty(hostIp) ? null : hostIp;
this.hostPort = hostPort;
public static Binding forPort(String port) {
return new Binding(null, port);
}

/**
* Creates a {@link Binding} for the given {@link #getHostPort() port number}, leaving the {@link #getHostIp() IP address}
* Creates a {@link Binding} for the given {@link #getHostIp() IP address}, leaving the {@link #getHostPort() port number}
* undefined.
*
* @see Ports#bind(ExposedPort, Binding)
* @see ExposedPort
*/
public Binding(Integer hostPort) {
this(null, hostPort);
public static Binding forIp(String hostIp) {
return new Binding(hostIp, null);
}

private final String hostIp;

private final String hostPort;

/**
* Creates a {@link Binding} for the given {@link #getHostIp() IP address}, leaving the {@link #getHostPort() port number}
* undefined.
* Creates a {@link Binding} for the given {@link #getHostIp() IP address} and {@link #getHostPort() port number}.
*
* @see Ports#bind(ExposedPort, Binding)
* @see ExposedPort
*/
public Binding(String hostIp) {
this(hostIp, null);
public Binding(String hostIp, String hostPort) {
this.hostIp = isEmpty(hostIp) ? null : hostIp;
this.hostPort = hostPort;
}

/**
Expand All @@ -184,7 +183,7 @@ public String getHostIp() {
/**
* @return the port number on the Docker host. May be <code>null</code>, in which case Docker will dynamically assign a port.
*/
public Integer getHostPort() {
public String getHostPort() {
return hostPort;
}

Expand All @@ -208,10 +207,10 @@ public static Binding parse(String serialized) throws IllegalArgumentException {
String[] parts = serialized.split(":");
switch (parts.length) {
case 2: {
return new Binding(parts[0], Integer.valueOf(parts[1]));
return new Binding(parts[0], parts[1]);
}
case 1: {
return parts[0].contains(".") ? new Binding(parts[0]) : new Binding(Integer.valueOf(parts[0]));
return parts[0].contains(".") ? Binding.forIp(parts[0]) : Binding.forPort(parts[0]);
}
default: {
throw new IllegalArgumentException();
Expand All @@ -231,7 +230,7 @@ public static Binding parse(String serialized) throws IllegalArgumentException {
@Override
public String toString() {
if (isEmpty(hostIp)) {
return Integer.toString(hostPort);
return hostPort;
} else if (hostPort == null) {
return hostIp;
} else {
Expand Down Expand Up @@ -270,7 +269,7 @@ public Ports deserialize(JsonParser jsonParser, DeserializationContext deseriali
JsonNode bindingNode = bindingsArray.get(i);
if (!bindingNode.equals(NullNode.getInstance())) {
String hostIp = bindingNode.get("HostIp").textValue();
int hostPort = bindingNode.get("HostPort").asInt();
String hostPort = bindingNode.get("HostPort").textValue();
out.bind(ExposedPort.parse(portNode.getKey()), new Binding(hostIp, hostPort));
}
}
Expand All @@ -294,8 +293,7 @@ public void serialize(Ports portBindings, JsonGenerator jsonGen, SerializerProvi
for (Binding binding : entry.getValue()) {
jsonGen.writeStartObject();
jsonGen.writeStringField("HostIp", binding.getHostIp() == null ? "" : binding.getHostIp());
jsonGen.writeStringField("HostPort", binding.getHostPort() == null ? "" : binding.getHostPort()
.toString());
jsonGen.writeStringField("HostPort", binding.getHostPort() == null ? "" : binding.getHostPort());
jsonGen.writeEndObject();
}
jsonGen.writeEndArray();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@
import static org.hamcrest.Matchers.isEmptyString;
import static org.hamcrest.Matchers.nullValue;
import static org.hamcrest.core.IsNot.not;
import static org.testng.Assert.*;
import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;

/**
* Tests for {@link InspectContainerResponse}.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,12 +10,12 @@ public class BindingTest {

@Test
public void parseIpAndPort() {
assertEquals(Binding.parse("127.0.0.1:80"), Ports.binding("127.0.0.1", 80));
assertEquals(Binding.parse("127.0.0.1:80"), Ports.binding("127.0.0.1", "80"));
}

@Test
public void parsePortOnly() {
assertEquals(Binding.parse("80"), Ports.binding(null, 80));
assertEquals(Binding.parse("80"), Ports.binding(null, "80"));
}

@Test
Expand All @@ -28,7 +28,8 @@ public void parseEmptyString() {
assertEquals(Binding.parse(""), Ports.binding(null, null));
}

@Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = "Error parsing Binding 'nonsense'")
// Strings can be used since it can be a range. Let the docker daemon do the validation.
@Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = "Error parsing Binding 'nonsense'", enabled = false)
public void parseInvalidInput() {
Binding.parse("nonsense");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,22 +13,22 @@ public class PortBindingTest {
@Test
public void fullDefinition() {
assertEquals(PortBinding.parse("127.0.0.1:80:8080/tcp"),
new PortBinding(new Binding("127.0.0.1", 80), TCP_8080));
new PortBinding(new Binding("127.0.0.1", "80"), TCP_8080));
}

@Test
public void noProtocol() {
assertEquals(PortBinding.parse("127.0.0.1:80:8080"), new PortBinding(new Binding("127.0.0.1", 80), TCP_8080));
assertEquals(PortBinding.parse("127.0.0.1:80:8080"), new PortBinding(new Binding("127.0.0.1", "80"), TCP_8080));
}

@Test
public void noHostIp() {
assertEquals(PortBinding.parse("80:8080/tcp"), new PortBinding(new Binding(80), TCP_8080));
assertEquals(PortBinding.parse("80:8080/tcp"), new PortBinding(Binding.forPort("80"), TCP_8080));
}

@Test
public void portsOnly() {
assertEquals(PortBinding.parse("80:8080"), new PortBinding(new Binding(80), TCP_8080));
assertEquals(PortBinding.parse("80:8080"), new PortBinding(Binding.forPort("80"), TCP_8080));
}

@Test
Expand All @@ -38,10 +38,10 @@ public void exposedPortOnly() {

@Test
public void dynamicHostPort() {
assertEquals(PortBinding.parse("127.0.0.1::8080"), new PortBinding(new Binding("127.0.0.1"), TCP_8080));
assertEquals(PortBinding.parse("127.0.0.1::8080"), new PortBinding(Binding.forIp("127.0.0.1"), TCP_8080));
}

@Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = "Error parsing PortBinding 'nonsense'")
@Test(expectedExceptions = IllegalArgumentException.class, expectedExceptionsMessageRegExp = "Error parsing PortBinding 'nonsense'", enabled = false)
public void parseInvalidInput() {
PortBinding.parse("nonsense");
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
package com.github.dockerjava.api.model;

import static org.testng.Assert.assertEquals;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.dockerjava.api.model.Ports.Binding;
import org.testng.annotations.Test;

import java.util.Map;

import org.testng.annotations.Test;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.github.dockerjava.api.model.Ports.Binding;
import static org.testng.Assert.assertEquals;

public class Ports_SerializingTest {
private final ObjectMapper objectMapper = new ObjectMapper();
Expand All @@ -24,15 +23,15 @@ public void deserializingPortWithMultipleBindings() throws Exception {

Binding[] bindings = map.get(ExposedPort.tcp(80));
assertEquals(bindings.length, 2);
assertEquals(bindings[0], new Binding("10.0.0.1", 80));
assertEquals(bindings[1], new Binding("10.0.0.2", 80));
assertEquals(bindings[0], new Binding("10.0.0.1", "80"));
assertEquals(bindings[1], new Binding("10.0.0.2", "80"));
}

@Test
public void serializingPortWithMultipleBindings() throws Exception {
Ports ports = new Ports();
ports.bind(ExposedPort.tcp(80), new Binding("10.0.0.1", 80));
ports.bind(ExposedPort.tcp(80), new Binding("10.0.0.2", 80));
ports.bind(ExposedPort.tcp(80), new Binding("10.0.0.1", "80"));
ports.bind(ExposedPort.tcp(80), new Binding("10.0.0.2", "80"));
assertEquals(objectMapper.writeValueAsString(ports), jsonWithDoubleBindingForOnePort);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,12 @@
package com.github.dockerjava.api.model;

import static org.testng.Assert.assertEquals;

import java.util.Map;

import com.github.dockerjava.api.model.Ports.Binding;
import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;

import com.github.dockerjava.api.model.Ports.Binding;
import java.util.Map;

import static org.testng.Assert.assertEquals;

/**
* As there may be several {@link Binding}s per {@link ExposedPort}, it makes a difference if you add {@link PortBinding}s for the same or
Expand All @@ -18,9 +17,9 @@ public class Ports_addBindingsTest {

private static final ExposedPort TCP_90 = ExposedPort.tcp(90);

private static final Binding BINDING_8080 = Ports.binding(8080);
private static final Binding BINDING_8080 = Ports.binding("8080");

private static final Binding BINDING_9090 = Ports.binding(9090);
private static final Binding BINDING_9090 = Ports.binding("9090");

private Ports ports;

Expand Down
Loading
X Tutup