From eef3490362fb6a5e965437f13bd167650a13ccbc Mon Sep 17 00:00:00 2001 From: kyleaure Date: Tue, 9 Nov 2021 14:01:08 -0600 Subject: [PATCH 1/4] Verify UDP path is broken --- .../containers/GenericContainerTest.java | 38 +++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/core/src/test/java/org/testcontainers/containers/GenericContainerTest.java b/core/src/test/java/org/testcontainers/containers/GenericContainerTest.java index 93a9cd96479..56628702dec 100644 --- a/core/src/test/java/org/testcontainers/containers/GenericContainerTest.java +++ b/core/src/test/java/org/testcontainers/containers/GenericContainerTest.java @@ -23,6 +23,7 @@ import org.testcontainers.images.builder.ImageFromDockerfile; import java.util.Arrays; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.concurrent.TimeUnit; @@ -32,6 +33,7 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.hamcrest.CoreMatchers.equalTo; import static org.rnorth.visibleassertions.VisibleAssertions.assertEquals; +import static org.rnorth.visibleassertions.VisibleAssertions.assertNotNull; import static org.rnorth.visibleassertions.VisibleAssertions.assertThrows; import static org.rnorth.visibleassertions.VisibleAssertions.assertTrue; import static org.testcontainers.TestImages.TINY_IMAGE; @@ -146,6 +148,42 @@ public void shouldWaitUntilExposedPortIsMapped() { } } + @Test + public void shouldHonorUDPPorts() { + ImageFromDockerfile image = new ImageFromDockerfile("publish-multiple") + .withDockerfileFromBuilder(builder -> + builder + .from("testcontainers/helloworld:1.1.0") + .expose(8080, 8081) + .build() + ); + + try ( + GenericContainer container = new GenericContainer<>(image) + .withExposedPorts(8080, 8081) + .withCreateContainerCmdModifier(cmd -> { + //Add previously exposed ports + List ports = new ArrayList<>(); + for (ExposedPort p : cmd.getExposedPorts()) { + ports.add(p); + } + //Add and expose UDP port + ports.add(ExposedPort.udp(99)); + cmd.withExposedPorts(ports); + } + ) + ) { + + container.start(); + ExposedPort expectedPort = ExposedPort.udp(99); + Map map = container.getContainerInfo().getNetworkSettings().getPorts().getBindings(); + + assertEquals("Two TCP ports should have been exposed.", 2, container.getExposedPorts().size()); + assertNotNull("withExposedPorts should have exposed UDP port", map.get(expectedPort)); + assertTrue("UDP port 99 should have been mapped to a different port", 99 != Integer.valueOf(map.get(expectedPort)[0].getHostPortSpec())); + } + } + static class NoopStartupCheckStrategy extends StartupCheckStrategy { @Override From 17d4e6649191ad1689a73c4bd72b4585214d89bd Mon Sep 17 00:00:00 2001 From: kyleaure Date: Wed, 10 Nov 2021 09:54:40 -0600 Subject: [PATCH 2/4] Accepted workaround --- .../containers/GenericContainerTest.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/core/src/test/java/org/testcontainers/containers/GenericContainerTest.java b/core/src/test/java/org/testcontainers/containers/GenericContainerTest.java index 56628702dec..f4df1e47a84 100644 --- a/core/src/test/java/org/testcontainers/containers/GenericContainerTest.java +++ b/core/src/test/java/org/testcontainers/containers/GenericContainerTest.java @@ -162,14 +162,18 @@ public void shouldHonorUDPPorts() { GenericContainer container = new GenericContainer<>(image) .withExposedPorts(8080, 8081) .withCreateContainerCmdModifier(cmd -> { - //Add previously exposed ports - List ports = new ArrayList<>(); + //Add previously exposed ports and UDP port + List exposedPorts = new ArrayList<>(); for (ExposedPort p : cmd.getExposedPorts()) { - ports.add(p); + exposedPorts.add(p); } - //Add and expose UDP port - ports.add(ExposedPort.udp(99)); - cmd.withExposedPorts(ports); + exposedPorts.add(ExposedPort.udp(99)); + cmd.withExposedPorts(exposedPorts); + + //Add previous port bindings and UDP port binding + Ports ports = cmd.getPortBindings(); + ports.bind(ExposedPort.udp(99), Ports.Binding.empty()); + cmd.withPortBindings(ports); } ) ) { From d97d51bae048871c0437fa97f431b79e62e2d8ca Mon Sep 17 00:00:00 2001 From: Kyle Aure Date: Tue, 18 Mar 2025 10:39:18 -0500 Subject: [PATCH 3/4] fix: spotless apply --- .../containers/GenericContainerTest.java | 35 +++++++++---------- 1 file changed, 17 insertions(+), 18 deletions(-) diff --git a/core/src/test/java/org/testcontainers/containers/GenericContainerTest.java b/core/src/test/java/org/testcontainers/containers/GenericContainerTest.java index 44a9c5d02b4..83b5a2505df 100644 --- a/core/src/test/java/org/testcontainers/containers/GenericContainerTest.java +++ b/core/src/test/java/org/testcontainers/containers/GenericContainerTest.java @@ -32,8 +32,8 @@ import org.testcontainers.utility.MountableFile; import java.time.Duration; -import java.util.Arrays; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; @@ -44,14 +44,11 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; -import static org.hamcrest.CoreMatchers.equalTo; +import static org.assertj.core.api.Assertions.catchThrowable; +import static org.assertj.core.api.Assumptions.assumeThat; import static org.rnorth.visibleassertions.VisibleAssertions.assertEquals; import static org.rnorth.visibleassertions.VisibleAssertions.assertNotNull; -import static org.rnorth.visibleassertions.VisibleAssertions.assertThrows; import static org.rnorth.visibleassertions.VisibleAssertions.assertTrue; -import static org.testcontainers.TestImages.TINY_IMAGE; -import static org.assertj.core.api.Assertions.catchThrowable; -import static org.assertj.core.api.Assumptions.assumeThat; public class GenericContainerTest { @@ -242,12 +239,9 @@ public void testArchitectureCheck() { @Test public void shouldHonorUDPPorts() { ImageFromDockerfile image = new ImageFromDockerfile("publish-multiple") - .withDockerfileFromBuilder(builder -> - builder - .from("testcontainers/helloworld:1.1.0") - .expose(8080, 8081) - .build() - ); + .withDockerfileFromBuilder(builder -> + builder.from("testcontainers/helloworld:1.1.0").expose(8080, 8081).build() + ); try ( GenericContainer container = new GenericContainer<>(image) @@ -265,20 +259,25 @@ public void shouldHonorUDPPorts() { Ports ports = cmd.getPortBindings(); ports.bind(ExposedPort.udp(99), Ports.Binding.empty()); cmd.withPortBindings(ports); - } - ) + }) ) { - container.start(); ExposedPort expectedPort = ExposedPort.udp(99); - Map map = container.getContainerInfo().getNetworkSettings().getPorts().getBindings(); + Map map = container + .getContainerInfo() + .getNetworkSettings() + .getPorts() + .getBindings(); assertEquals("Two TCP ports should have been exposed.", 2, container.getExposedPorts().size()); assertNotNull("withExposedPorts should have exposed UDP port", map.get(expectedPort)); - assertTrue("UDP port 99 should have been mapped to a different port", 99 != Integer.valueOf(map.get(expectedPort)[0].getHostPortSpec())); + assertTrue( + "UDP port 99 should have been mapped to a different port", + 99 != Integer.valueOf(map.get(expectedPort)[0].getHostPortSpec()) + ); } } - + @Test public void shouldReturnTheProvidedImage() { GenericContainer container = new GenericContainer(TestImages.REDIS_IMAGE); From 5deaa7af7fc9a041d8582cc0fe4aa218c3dd41a1 Mon Sep 17 00:00:00 2001 From: Kyle Aure Date: Tue, 18 Mar 2025 10:54:51 -0500 Subject: [PATCH 4/4] fix: use only assertj assertions --- .../containers/GenericContainerTest.java | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/core/src/test/java/org/testcontainers/containers/GenericContainerTest.java b/core/src/test/java/org/testcontainers/containers/GenericContainerTest.java index 83b5a2505df..db1dad62db7 100644 --- a/core/src/test/java/org/testcontainers/containers/GenericContainerTest.java +++ b/core/src/test/java/org/testcontainers/containers/GenericContainerTest.java @@ -46,9 +46,6 @@ import static org.assertj.core.api.Assertions.assertThatThrownBy; import static org.assertj.core.api.Assertions.catchThrowable; import static org.assertj.core.api.Assumptions.assumeThat; -import static org.rnorth.visibleassertions.VisibleAssertions.assertEquals; -import static org.rnorth.visibleassertions.VisibleAssertions.assertNotNull; -import static org.rnorth.visibleassertions.VisibleAssertions.assertTrue; public class GenericContainerTest { @@ -269,12 +266,11 @@ public void shouldHonorUDPPorts() { .getPorts() .getBindings(); - assertEquals("Two TCP ports should have been exposed.", 2, container.getExposedPorts().size()); - assertNotNull("withExposedPorts should have exposed UDP port", map.get(expectedPort)); - assertTrue( - "UDP port 99 should have been mapped to a different port", - 99 != Integer.valueOf(map.get(expectedPort)[0].getHostPortSpec()) - ); + assertThat(container.getExposedPorts()).as("Two TCP ports should have been exposed").hasSize(2); + assertThat(map.get(expectedPort)).as("withExposedPorts should have exposed UDP port").isNotEmpty(); + assertThat(Integer.valueOf(map.get(expectedPort)[0].getHostPortSpec())) + .as("UDP port 99 should have been mapped to a different port") + .isNotEqualTo(99); } }