From 786d95590f3d539706455f50c481bf309ff86216 Mon Sep 17 00:00:00 2001 From: Michael Irwin Date: Tue, 23 Jul 2019 14:11:00 -0400 Subject: [PATCH 1/3] Add networking documentation Resolves #1159 --- .../generic/ContainerNetworkCreationTest.java | 43 +++++++++++++++++++ docs/features/networking.md | 12 ++++++ 2 files changed, 55 insertions(+) create mode 100644 docs/examples/src/test/java/generic/ContainerNetworkCreationTest.java diff --git a/docs/examples/src/test/java/generic/ContainerNetworkCreationTest.java b/docs/examples/src/test/java/generic/ContainerNetworkCreationTest.java new file mode 100644 index 00000000000..5049d6e6f59 --- /dev/null +++ b/docs/examples/src/test/java/generic/ContainerNetworkCreationTest.java @@ -0,0 +1,43 @@ +package generic; + +import com.sun.net.httpserver.HttpServer; +import org.junit.AfterClass; +import org.junit.BeforeClass; +import org.junit.Rule; +import org.junit.Test; +import org.testcontainers.Testcontainers; +import org.testcontainers.containers.GenericContainer; +import org.testcontainers.containers.Network; + +import static org.junit.Assert.assertEquals; + +public class ContainerNetworkCreationTest { + + @Test + public void testContainersWithCustomNetwork() throws Exception { + + // useCustomNetwork { + final Network network = Network.newNetwork(); + + final GenericContainer server = new GenericContainer() + .withNetwork(network) + .withNetworkAliases("server") + .withCommand("/bin/sh", "-c", "while true ; do printf 'HTTP/1.1 200 OK\\n\\nyay' | nc -l -p 8080; done"); + + final GenericContainer container = new GenericContainer() + .withNetwork(network) + .withCommand("top"); + + server.start(); + container.start(); + + // Validate network communication works + final String response = container.execInContainer("wget", "-O", "-", "http://server:8080").getStdout(); + assertEquals("received response", "yay", response); + // } + + server.close(); + container.close(); + network.close(); + } +} diff --git a/docs/features/networking.md b/docs/features/networking.md index d0007df878b..11e9049c0cd 100644 --- a/docs/features/networking.md +++ b/docs/features/networking.md @@ -75,3 +75,15 @@ For example, here we construct an HTTP URL for our local web application and tel [Accessing the exposed host port from a container](../examples/src/test/java/generic/HostPortExposedTest.java) inside_block:useHostExposedPort + + +## Advanced networking + +Docker provides the ability for you to create custom networks and place containers on one or more networks. Then, communication can occur between networked containers without the need of exposing ports through the host. With Testcontainers, you can do this as well. + +!!! warning + Note that Testcontainers currently only allows a container to be on a single network. + + +[Creating custom networks](../examples/src/test/java/generic/ContainerNetworkCreationTest.java) inside_block:useCustomNetwork + \ No newline at end of file From 848cecef78ee3e21cba74f80f0b7d9e69e928203 Mon Sep 17 00:00:00 2001 From: Michael Irwin Date: Tue, 23 Jul 2019 15:10:01 -0400 Subject: [PATCH 2/3] Use code snippet from NetworkTest in networking documentation Issue #1159 --- .../test/java/org/testcontainers/containers/NetworkTest.java | 5 ++++- docs/features/networking.md | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/core/src/test/java/org/testcontainers/containers/NetworkTest.java b/core/src/test/java/org/testcontainers/containers/NetworkTest.java index 04edf42c6d1..b717b8dc81a 100644 --- a/core/src/test/java/org/testcontainers/containers/NetworkTest.java +++ b/core/src/test/java/org/testcontainers/containers/NetworkTest.java @@ -5,6 +5,7 @@ import org.junit.experimental.runners.Enclosed; import org.junit.runner.RunWith; import org.testcontainers.DockerClientFactory; +import org.testcontainers.containers.Network; import static org.rnorth.visibleassertions.VisibleAssertions.*; import static org.testcontainers.containers.Network.newNetwork; @@ -39,8 +40,9 @@ public static class WithoutRules { @Test public void testNetworkSupport() throws Exception { + // useCustomNetwork { try ( - Network network = newNetwork(); + Network network = Network.newNetwork(); GenericContainer foo = new GenericContainer() .withNetwork(network) @@ -57,6 +59,7 @@ public void testNetworkSupport() throws Exception { String response = bar.execInContainer("wget", "-O", "-", "http://foo:8080").getStdout(); assertEquals("received response", "yay", response); } + // } } @Test diff --git a/docs/features/networking.md b/docs/features/networking.md index 11e9049c0cd..75dd924d6bc 100644 --- a/docs/features/networking.md +++ b/docs/features/networking.md @@ -85,5 +85,5 @@ Docker provides the ability for you to create custom networks and place containe Note that Testcontainers currently only allows a container to be on a single network. -[Creating custom networks](../examples/src/test/java/generic/ContainerNetworkCreationTest.java) inside_block:useCustomNetwork +[Creating custom networks](../../core/src/test/java/org/testcontainers/containers/NetworkTest.java) inside_block:useCustomNetwork \ No newline at end of file From f196aa130b60544e4a20c4ae672be8ae3da8a390 Mon Sep 17 00:00:00 2001 From: Michael Irwin Date: Tue, 23 Jul 2019 16:04:51 -0400 Subject: [PATCH 3/3] Removed example no longer being used Issue #1159 --- .../generic/ContainerNetworkCreationTest.java | 43 ------------------- 1 file changed, 43 deletions(-) delete mode 100644 docs/examples/src/test/java/generic/ContainerNetworkCreationTest.java diff --git a/docs/examples/src/test/java/generic/ContainerNetworkCreationTest.java b/docs/examples/src/test/java/generic/ContainerNetworkCreationTest.java deleted file mode 100644 index 5049d6e6f59..00000000000 --- a/docs/examples/src/test/java/generic/ContainerNetworkCreationTest.java +++ /dev/null @@ -1,43 +0,0 @@ -package generic; - -import com.sun.net.httpserver.HttpServer; -import org.junit.AfterClass; -import org.junit.BeforeClass; -import org.junit.Rule; -import org.junit.Test; -import org.testcontainers.Testcontainers; -import org.testcontainers.containers.GenericContainer; -import org.testcontainers.containers.Network; - -import static org.junit.Assert.assertEquals; - -public class ContainerNetworkCreationTest { - - @Test - public void testContainersWithCustomNetwork() throws Exception { - - // useCustomNetwork { - final Network network = Network.newNetwork(); - - final GenericContainer server = new GenericContainer() - .withNetwork(network) - .withNetworkAliases("server") - .withCommand("/bin/sh", "-c", "while true ; do printf 'HTTP/1.1 200 OK\\n\\nyay' | nc -l -p 8080; done"); - - final GenericContainer container = new GenericContainer() - .withNetwork(network) - .withCommand("top"); - - server.start(); - container.start(); - - // Validate network communication works - final String response = container.execInContainer("wget", "-O", "-", "http://server:8080").getStdout(); - assertEquals("received response", "yay", response); - // } - - server.close(); - container.close(); - network.close(); - } -}