prioritize the ports with static mapping before dynamic mapping. This removes the port conflicts when we allocate static port in the reserved range together with dynamic ones. When static port is allocated first, Docker will skip those when determining free ports for dynamic ones. Signed-off-by: Daniel, Dao Quang Minh <dqminh89@gmail.com> Upstream-commit: cd2b019214eb1978ae267786668dc7a8a3702679 Component: engine
86 lines
1.6 KiB
Go
86 lines
1.6 KiB
Go
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)
|
|
}
|
|
}
|