cd2b019214
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>
85 lines
1.6 KiB
Go
85 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)
|
|
}
|
|
}
|