| package portmapper |
| |
| import ( |
| "github.com/dotcloud/docker/pkg/iptables" |
| "github.com/dotcloud/docker/proxy" |
| "net" |
| "testing" |
| ) |
| |
| func init() { |
| // override this func to mock out the proxy server |
| newProxy = proxy.NewStubProxy |
| } |
| |
| func reset() { |
| chain = nil |
| currentMappings = make(map[string]*mapping) |
| } |
| |
| func TestSetIptablesChain(t *testing.T) { |
| defer reset() |
| |
| c := &iptables.Chain{ |
| Name: "TEST", |
| Bridge: "192.168.1.1", |
| } |
| |
| if chain != nil { |
| t.Fatal("chain should be nil at init") |
| } |
| |
| SetIptablesChain(c) |
| if chain == nil { |
| t.Fatal("chain should not be nil after set") |
| } |
| } |
| |
| func TestMapPorts(t *testing.T) { |
| dstIp1 := net.ParseIP("192.168.0.1") |
| dstIp2 := net.ParseIP("192.168.0.2") |
| dstAddr1 := &net.TCPAddr{IP: dstIp1, Port: 80} |
| dstAddr2 := &net.TCPAddr{IP: dstIp2, Port: 80} |
| |
| 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 { |
| t.Fatalf("Failed to allocate port: %s", err) |
| } |
| |
| if Map(srcAddr1, dstIp1, 80) == nil { |
| t.Fatalf("Port is in use - mapping should have failed") |
| } |
| |
| if Map(srcAddr2, dstIp1, 80) == nil { |
| t.Fatalf("Port is in use - mapping should have failed") |
| } |
| |
| if err := Map(srcAddr2, dstIp2, 80); err != nil { |
| t.Fatalf("Failed to allocate port: %s", err) |
| } |
| |
| if Unmap(dstAddr1) != nil { |
| t.Fatalf("Failed to release port") |
| } |
| |
| if Unmap(dstAddr2) != nil { |
| t.Fatalf("Failed to release port") |
| } |
| |
| if Unmap(dstAddr2) == nil { |
| t.Fatalf("Port already released, but no error reported") |
| } |
| } |
| |
| func TestGetUDPKey(t *testing.T) { |
| addr := &net.UDPAddr{IP: net.ParseIP("192.168.1.5"), Port: 53} |
| |
| key := getKey(addr) |
| |
| if expected := "192.168.1.5:53/udp"; key != expected { |
| t.Fatalf("expected key %s got %s", expected, key) |
| } |
| } |
| |
| func TestGetTCPKey(t *testing.T) { |
| addr := &net.TCPAddr{IP: net.ParseIP("192.168.1.5"), Port: 80} |
| |
| key := getKey(addr) |
| |
| if expected := "192.168.1.5:80/tcp"; key != expected { |
| t.Fatalf("expected key %s got %s", expected, key) |
| } |
| } |
| |
| func TestGetUDPIPAndPort(t *testing.T) { |
| addr := &net.UDPAddr{IP: net.ParseIP("192.168.1.5"), Port: 53} |
| |
| ip, port := getIPAndPort(addr) |
| if expected := "192.168.1.5"; ip.String() != expected { |
| t.Fatalf("expected ip %s got %s", expected, ip) |
| } |
| |
| if ep := 53; port != ep { |
| t.Fatalf("expected port %d got %d", ep, port) |
| } |
| } |