From faf66251448de01b4c24b36b1e1605f574711307 Mon Sep 17 00:00:00 2001 From: coestre Date: Thu, 14 May 2020 09:43:02 -0500 Subject: [PATCH] Fix for duplicate key violation for exposed ports #1391 --- .../dockerjava/api/model/ExposedPorts.java | 4 +++- .../dockerjava/api/model/ExposedPortsTest.java | 17 +++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ExposedPorts.java b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ExposedPorts.java index 445cba2de..cee98a316 100644 --- a/docker-java-api/src/main/java/com/github/dockerjava/api/model/ExposedPorts.java +++ b/docker-java-api/src/main/java/com/github/dockerjava/api/model/ExposedPorts.java @@ -35,7 +35,9 @@ public static ExposedPorts fromPrimitive(Map object) { @JsonValue public Map toPrimitive() { - return Stream.of(exposedPorts).collect(Collectors.toMap( + return Stream.of(exposedPorts) + .distinct() + .collect(Collectors.toMap( ExposedPort::toString, __ -> new Object() )); diff --git a/docker-java/src/test/java/com/github/dockerjava/api/model/ExposedPortsTest.java b/docker-java/src/test/java/com/github/dockerjava/api/model/ExposedPortsTest.java index c64d5ace2..f33fbd852 100644 --- a/docker-java/src/test/java/com/github/dockerjava/api/model/ExposedPortsTest.java +++ b/docker-java/src/test/java/com/github/dockerjava/api/model/ExposedPortsTest.java @@ -6,10 +6,13 @@ import org.junit.Test; import java.util.List; +import java.util.Map; import java.util.Map.Entry; import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.aMapWithSize; import static org.hamcrest.Matchers.arrayContainingInAnyOrder; +import static org.hamcrest.Matchers.arrayWithSize; import static org.hamcrest.Matchers.notNullValue; public class ExposedPortsTest { @@ -46,4 +49,18 @@ public void usesFromJson() throws Exception { new ExposedPort(3868, InternetProtocol.SCTP) )); } + + @Test + public void usesFromJsonWithDuplicate() throws Exception { + ExposedPorts ports = new ExposedPorts( + new ExposedPort(80, InternetProtocol.UDP), + new ExposedPort(80), + new ExposedPort(80)); + + assertThat(ports, notNullValue()); + assertThat(ports.getExposedPorts(), arrayWithSize(3)); + + Map map = ports.toPrimitive(); + assertThat(map, aMapWithSize(2)); + } }