1775ed8c |
package main
import (
"fmt" |
4f420978 |
"io/ioutil" |
1775ed8c |
"net" |
72652c59 |
"strings" |
dc944ea7 |
|
26ae6d6b |
"github.com/docker/docker/pkg/integration/checker" |
dc944ea7 |
"github.com/go-check/check" |
1775ed8c |
)
|
4f420978 |
func startServerContainer(c *check.C, msg string, port int) string { |
f42348e1 |
name := "server" |
4f420978 |
cmd := []string{
"-d",
"-p", fmt.Sprintf("%d:%d", port, port),
"busybox",
"sh", "-c", fmt.Sprintf("echo %q | nc -lp %d", msg, port),
} |
26ae6d6b |
c.Assert(waitForContainer(name, cmd...), check.IsNil) |
f42348e1 |
return name
}
func getExternalAddress(c *check.C) net.IP { |
1775ed8c |
iface, err := net.InterfaceByName("eth0")
if err != nil { |
dc944ea7 |
c.Skip(fmt.Sprintf("Test not running with `make test`. Interface eth0 not found: %v", err)) |
1775ed8c |
}
ifaceAddrs, err := iface.Addrs() |
26ae6d6b |
c.Assert(err, check.IsNil)
c.Assert(ifaceAddrs, checker.Not(checker.HasLen), 0) |
1775ed8c |
|
c0e63224 |
ifaceIP, _, err := net.ParseCIDR(ifaceAddrs[0].String()) |
26ae6d6b |
c.Assert(err, check.IsNil) |
1775ed8c |
|
f42348e1 |
return ifaceIP
}
func getContainerLogs(c *check.C, containerID string) string { |
eef6eda7 |
out, _ := dockerCmd(c, "logs", containerID) |
f42348e1 |
return strings.Trim(out, "\r\n")
} |
1775ed8c |
|
f42348e1 |
func getContainerStatus(c *check.C, containerID string) string { |
74f8a4ec |
out, err := inspectField(containerID, "State.Running")
c.Assert(err, check.IsNil)
return out |
f42348e1 |
} |
1775ed8c |
|
f42348e1 |
func (s *DockerSuite) TestNetworkNat(c *check.C) { |
157b66ad |
testRequires(c, DaemonIsLinux, SameHostDaemon) |
4f420978 |
msg := "it works"
startServerContainer(c, msg, 8080) |
f42348e1 |
endpoint := getExternalAddress(c) |
4f420978 |
conn, err := net.Dial("tcp", fmt.Sprintf("%s:%d", endpoint.String(), 8080)) |
26ae6d6b |
c.Assert(err, check.IsNil)
|
4f420978 |
data, err := ioutil.ReadAll(conn)
conn.Close() |
26ae6d6b |
c.Assert(err, check.IsNil)
|
4f420978 |
final := strings.TrimRight(string(data), "\n") |
26ae6d6b |
c.Assert(final, checker.Equals, msg) |
f42348e1 |
}
func (s *DockerSuite) TestNetworkLocalhostTCPNat(c *check.C) { |
157b66ad |
testRequires(c, DaemonIsLinux, SameHostDaemon) |
4f420978 |
var (
msg = "hi yall"
)
startServerContainer(c, msg, 8081) |
f42348e1 |
conn, err := net.Dial("tcp", "localhost:8081") |
26ae6d6b |
c.Assert(err, check.IsNil)
|
4f420978 |
data, err := ioutil.ReadAll(conn)
conn.Close() |
26ae6d6b |
c.Assert(err, check.IsNil)
|
4f420978 |
final := strings.TrimRight(string(data), "\n") |
26ae6d6b |
c.Assert(final, checker.Equals, msg) |
1775ed8c |
} |
f3d18263 |
func (s *DockerSuite) TestNetworkLoopbackNat(c *check.C) { |
157b66ad |
testRequires(c, DaemonIsLinux, SameHostDaemon, NotUserNamespace) |
f3d18263 |
msg := "it works"
startServerContainer(c, msg, 8080)
endpoint := getExternalAddress(c) |
eef6eda7 |
out, _ := dockerCmd(c, "run", "-t", "--net=container:server", "busybox", |
f3d18263 |
"sh", "-c", fmt.Sprintf("stty raw && nc -w 5 %s 8080", endpoint.String()))
final := strings.TrimRight(string(out), "\n") |
26ae6d6b |
c.Assert(final, checker.Equals, msg) |
f3d18263 |
} |