Browse code

portmapper: unit tests for remap problem

Docker-DCO-1.1-Signed-off-by: Erik Hollensbe <github@hollensbe.org> (github: erikh)

Erik Hollensbe authored on 2014/06/28 07:57:20
Showing 1 changed files
... ...
@@ -1,6 +1,7 @@
1 1
 package portmapper
2 2
 
3 3
 import (
4
+	"github.com/dotcloud/docker/daemon/networkdriver/portallocator"
4 5
 	"github.com/dotcloud/docker/pkg/iptables"
5 6
 	"github.com/dotcloud/docker/pkg/proxy"
6 7
 	"net"
... ...
@@ -112,3 +113,40 @@ func TestGetUDPIPAndPort(t *testing.T) {
112 112
 		t.Fatalf("expected port %d got %d", ep, port)
113 113
 	}
114 114
 }
115
+
116
+func TestMapAllPortsSingleInterface(t *testing.T) {
117
+	dstIp1 := net.ParseIP("0.0.0.0")
118
+	srcAddr1 := &net.TCPAddr{Port: 1080, IP: net.ParseIP("172.16.0.1")}
119
+
120
+	hosts := []net.Addr{}
121
+	var host net.Addr
122
+	var err error
123
+
124
+	defer func() {
125
+		for _, val := range hosts {
126
+			Unmap(val)
127
+		}
128
+	}()
129
+
130
+	for i := 0; i < 10; i++ {
131
+		for i := portallocator.BeginPortRange; i < portallocator.EndPortRange; i++ {
132
+			if host, err = Map(srcAddr1, dstIp1, 0); err != nil {
133
+				t.Fatal(err)
134
+			}
135
+
136
+			hosts = append(hosts, host)
137
+		}
138
+
139
+		if _, err := Map(srcAddr1, dstIp1, portallocator.BeginPortRange); err == nil {
140
+			t.Fatal("Port %d should be bound but is not", portallocator.BeginPortRange)
141
+		}
142
+
143
+		for _, val := range hosts {
144
+			if err := Unmap(val); err != nil {
145
+				t.Fatal(err)
146
+			}
147
+		}
148
+
149
+		hosts = []net.Addr{}
150
+	}
151
+}