Docker-DCO-1.1-Signed-off-by: Erik Hollensbe <github@hollensbe.org> (github: erikh)
| ... | ... |
@@ -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 |
+} |