package api import ( "net" "testing" ) func TestFindAvailableOIDCPortSkipsReservedAndOccupied(t *testing.T) { listener, err := net.Listen("tcp", "127.0.0.1:0") if err != nil { t.Skipf("当前环境不允许监听回环端口: %v", err) } defer listener.Close() occupied := listener.Addr().(*net.TCPAddr).Port if occupied < 1024 || occupied > 65533 { t.Skip("系统分配的临时端口无法用于递增测试") } reserved := map[int]bool{occupied + 1: true} if loopbackTCPAvailable(occupied) { t.Fatal("监听中的端口必须视为占用") } available := func(port int) bool { return port != occupied } port, ok := findAvailableOIDCPort(occupied, 1, reserved, available) if !ok || port != occupied+2 { t.Fatalf("递增应跳过已监听及已配置的端口,得到 %d (ok=%t)", port, ok) } port, ok = findAvailableOIDCPort(occupied+1, -1, reserved, available) if !ok || port != occupied-1 { t.Fatalf("递减应跳过已配置及已监听的端口,得到 %d (ok=%t)", port, ok) } }