summaryrefslogtreecommitdiff
path: root/daemon/networkdriver/portmapper/mapper_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'daemon/networkdriver/portmapper/mapper_test.go')
-rw-r--r--daemon/networkdriver/portmapper/mapper_test.go53
1 files changed, 49 insertions, 4 deletions
diff --git a/daemon/networkdriver/portmapper/mapper_test.go b/daemon/networkdriver/portmapper/mapper_test.go
index 4c09f3c651..6affdc5445 100644
--- a/daemon/networkdriver/portmapper/mapper_test.go
+++ b/daemon/networkdriver/portmapper/mapper_test.go
@@ -1,6 +1,7 @@
package portmapper
import (
+ "github.com/dotcloud/docker/daemon/networkdriver/portallocator"
"github.com/dotcloud/docker/pkg/iptables"
"github.com/dotcloud/docker/pkg/proxy"
"net"
@@ -44,19 +45,26 @@ func TestMapPorts(t *testing.T) {
srcAddr1 := &net.TCPAddr{Port: 1080, IP: net.ParseIP("172.16.0.1")}
srcAddr2 := &net.TCPAddr{Port: 1080, IP: net.ParseIP("172.16.0.2")}
- if err := Map(srcAddr1, dstIp1, 80); err != nil {
+ addrEqual := func(addr1, addr2 net.Addr) bool {
+ return (addr1.Network() == addr2.Network()) && (addr1.String() == addr2.String())
+ }
+
+ if host, err := Map(srcAddr1, dstIp1, 80); err != nil {
t.Fatalf("Failed to allocate port: %s", err)
+ } else if !addrEqual(dstAddr1, host) {
+ t.Fatalf("Incorrect mapping result: expected %s:%s, got %s:%s",
+ dstAddr1.String(), dstAddr1.Network(), host.String(), host.Network())
}
- if Map(srcAddr1, dstIp1, 80) == nil {
+ if _, err := Map(srcAddr1, dstIp1, 80); err == nil {
t.Fatalf("Port is in use - mapping should have failed")
}
- if Map(srcAddr2, dstIp1, 80) == nil {
+ if _, err := Map(srcAddr2, dstIp1, 80); err == nil {
t.Fatalf("Port is in use - mapping should have failed")
}
- if err := Map(srcAddr2, dstIp2, 80); err != nil {
+ if _, err := Map(srcAddr2, dstIp2, 80); err != nil {
t.Fatalf("Failed to allocate port: %s", err)
}
@@ -105,3 +113,40 @@ func TestGetUDPIPAndPort(t *testing.T) {
t.Fatalf("expected port %d got %d", ep, port)
}
}
+
+func TestMapAllPortsSingleInterface(t *testing.T) {
+ dstIp1 := net.ParseIP("0.0.0.0")
+ srcAddr1 := &net.TCPAddr{Port: 1080, IP: net.ParseIP("172.16.0.1")}
+
+ hosts := []net.Addr{}
+ var host net.Addr
+ var err error
+
+ defer func() {
+ for _, val := range hosts {
+ Unmap(val)
+ }
+ }()
+
+ for i := 0; i < 10; i++ {
+ for i := portallocator.BeginPortRange; i < portallocator.EndPortRange; i++ {
+ if host, err = Map(srcAddr1, dstIp1, 0); err != nil {
+ t.Fatal(err)
+ }
+
+ hosts = append(hosts, host)
+ }
+
+ if _, err := Map(srcAddr1, dstIp1, portallocator.BeginPortRange); err == nil {
+ t.Fatal("Port %d should be bound but is not", portallocator.BeginPortRange)
+ }
+
+ for _, val := range hosts {
+ if err := Unmap(val); err != nil {
+ t.Fatal(err)
+ }
+ }
+
+ hosts = []net.Addr{}
+ }
+}