Skip to content
Merged
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
40 changes: 26 additions & 14 deletions src/main/java/com/github/dockerjava/api/model/Ports.java
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,11 @@ public void bind(ExposedPort exposedPort, Binding binding) {
Binding[] bindings = ports.get(exposedPort);
ports.put(exposedPort, (Binding[]) ArrayUtils.add(bindings, binding));
} else {
ports.put(exposedPort, new Binding[]{binding});
if (binding == null) {
ports.put(exposedPort, null);
} else {
ports.put(exposedPort, new Binding[]{binding});
}
}
}

Expand Down Expand Up @@ -282,12 +286,16 @@ public Ports deserialize(JsonParser jsonParser, DeserializationContext deseriali

Map.Entry<String, JsonNode> portNode = it.next();
JsonNode bindingsArray = portNode.getValue();
for (int i = 0; i < bindingsArray.size(); i++) {
JsonNode bindingNode = bindingsArray.get(i);
if (!bindingNode.equals(NullNode.getInstance())) {
String hostIp = bindingNode.get("HostIp").textValue();
int hostPort = bindingNode.get("HostPort").asInt();
out.bind(ExposedPort.parse(portNode.getKey()), new Binding(hostIp, hostPort));
if (bindingsArray.equals(NullNode.getInstance())) {
out.bind(ExposedPort.parse(portNode.getKey()), null);
} else {
for (int i = 0; i < bindingsArray.size(); i++) {
JsonNode bindingNode = bindingsArray.get(i);
if (!bindingNode.equals(NullNode.getInstance())) {
String hostIp = bindingNode.get("HostIp").textValue();
int hostPort = bindingNode.get("HostPort").asInt();
out.bind(ExposedPort.parse(portNode.getKey()), new Binding(hostIp, hostPort));
}
}
}
}
Expand All @@ -304,14 +312,18 @@ public void serialize(Ports portBindings, JsonGenerator jsonGen,
jsonGen.writeStartObject();
for(Entry<ExposedPort, Binding[]> entry : portBindings.getBindings().entrySet()){
jsonGen.writeFieldName(entry.getKey().toString());
jsonGen.writeStartArray();
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.writeEndObject();
if (entry.getValue() != null) {
jsonGen.writeStartArray();
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.writeEndObject();
}
jsonGen.writeEndArray();
} else {
jsonGen.writeNull();
}
jsonGen.writeEndArray();
}
jsonGen.writeEndObject();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ public class Ports_SerializingTest {
private final ObjectMapper objectMapper = new ObjectMapper();
private final String jsonWithDoubleBindingForOnePort =
"{\"80/tcp\":[{\"HostIp\":\"10.0.0.1\",\"HostPort\":\"80\"},{\"HostIp\":\"10.0.0.2\",\"HostPort\":\"80\"}]}";
private final String jsonWithNullBindingForOnePort = "{\"80/tcp\":null}";

@Test
public void deserializingPortWithMultipleBindings() throws Exception {
Expand All @@ -39,4 +40,20 @@ public void serializingEmptyBinding() throws Exception {
Ports ports = new Ports(ExposedPort.tcp(80), new Binding(null, null));
assertEquals(objectMapper.writeValueAsString(ports), "{\"80/tcp\":[{\"HostIp\":\"\",\"HostPort\":\"\"}]}");
}

@Test
public void deserializingPortWithNullBindings() throws Exception {
Ports ports = objectMapper.readValue(jsonWithNullBindingForOnePort, Ports.class);
Map<ExposedPort, Binding[]> map = ports.getBindings();
assertEquals(map.size(), 1);

assertEquals(map.get(ExposedPort.tcp(80)), null);
}

@Test
public void serializingWithNullBindings() throws Exception {
Ports ports = new Ports();
ports.bind(ExposedPort.tcp(80), null);
assertEquals(objectMapper.writeValueAsString(ports), jsonWithNullBindingForOnePort);
}
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.github.dockerjava.api.model;

import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;

import java.util.Map;

Expand Down Expand Up @@ -54,4 +55,12 @@ public void addTwoBindingsForSameExposedPort() {
assertEquals(bindings.get(TCP_80), new Binding[] { BINDING_8080, BINDING_9090 });
}

@Test
public void addNullBindings() {
ports.add(new PortBinding(null, TCP_80));
Map<ExposedPort, Binding[]> bindings = ports.getBindings();
// one key with two values
assertEquals(bindings.size(), 1);
assertEquals(bindings.get(TCP_80), null);
}
}