package nat import ( "fmt" "reflect" "testing" ) func TestSortUniquePorts(t *testing.T) { ports := []Port{ Port("6379/tcp"), Port("22/tcp"), } Sort(ports, func(ip, jp Port) bool { return ip.Int() < jp.Int() || (ip.Int() == jp.Int() && ip.Proto() == "tcp") }) first := ports[0] if fmt.Sprint(first) != "22/tcp" { t.Log(fmt.Sprint(first)) t.Fail() } } func TestSortSamePortWithDifferentProto(t *testing.T) { ports := []Port{ Port("8888/tcp"), Port("8888/udp"), Port("6379/tcp"), Port("6379/udp"), } Sort(ports, func(ip, jp Port) bool { return ip.Int() < jp.Int() || (ip.Int() == jp.Int() && ip.Proto() == "tcp") }) first := ports[0] if fmt.Sprint(first) != "6379/tcp" { t.Fail() } } func TestSortPortMap(t *testing.T) { ports := []Port{ Port("22/tcp"), Port("22/udp"), Port("8000/tcp"), Port("6379/tcp"), Port("9999/tcp"), } portMap := PortMap{ Port("22/tcp"): []PortBinding{ {}, }, Port("8000/tcp"): []PortBinding{ {}, }, Port("6379/tcp"): []PortBinding{ {}, {HostIp: "0.0.0.0", HostPort: "32749"}, }, Port("9999/tcp"): []PortBinding{ {HostIp: "0.0.0.0", HostPort: "40000"}, }, } SortPortMap(ports, portMap) if !reflect.DeepEqual(ports, []Port{ Port("9999/tcp"), Port("6379/tcp"), Port("8000/tcp"), Port("22/tcp"), Port("22/udp"), }) { t.Errorf("failed to prioritize port with explicit mappings, got %v", ports) } if pm := portMap[Port("6379/tcp")]; !reflect.DeepEqual(pm, []PortBinding{ {HostIp: "0.0.0.0", HostPort: "32749"}, {}, }) { t.Errorf("failed to prioritize bindings with explicit mappings, got %v", pm) } }