|
|
|
|
@ -11,6 +11,7 @@ import ( |
|
|
|
|
"strings" |
|
|
|
|
"testing" |
|
|
|
|
|
|
|
|
|
"github.com/google/go-cmp/cmp" |
|
|
|
|
"inet.af/netaddr" |
|
|
|
|
"tailscale.com/net/packet" |
|
|
|
|
"tailscale.com/types/logger" |
|
|
|
|
@ -188,21 +189,20 @@ func TestNoAllocs(t *testing.T) { |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func TestParseIP(t *testing.T) { |
|
|
|
|
var noaddr netaddr.IPPrefix |
|
|
|
|
tests := []struct { |
|
|
|
|
host string |
|
|
|
|
bits int |
|
|
|
|
want netaddr.IPPrefix |
|
|
|
|
want []netaddr.IPPrefix |
|
|
|
|
wantErr string |
|
|
|
|
}{ |
|
|
|
|
{"8.8.8.8", 24, pfx("8.8.8.8/24"), ""}, |
|
|
|
|
{"2601:1234::", 64, pfx("2601:1234::/64"), ""}, |
|
|
|
|
{"8.8.8.8", 33, noaddr, `invalid CIDR size 33 for host "8.8.8.8"`}, |
|
|
|
|
{"8.8.8.8", -1, noaddr, `invalid CIDR size -1 for host "8.8.8.8"`}, |
|
|
|
|
{"2601:1234::", 129, noaddr, `invalid CIDR size 129 for host "2601:1234::"`}, |
|
|
|
|
{"0.0.0.0", 24, noaddr, `ports="0.0.0.0": to allow all IP addresses, use *:port, not 0.0.0.0:port`}, |
|
|
|
|
{"::", 64, noaddr, `ports="::": to allow all IP addresses, use *:port, not [::]:port`}, |
|
|
|
|
{"*", 24, pfx("0.0.0.0/0"), ""}, |
|
|
|
|
{"8.8.8.8", 33, nil, `invalid CIDR size 33 for host "8.8.8.8"`}, |
|
|
|
|
{"8.8.8.8", -1, nil, `invalid CIDR size -1 for host "8.8.8.8"`}, |
|
|
|
|
{"2601:1234::", 129, nil, `invalid CIDR size 129 for host "2601:1234::"`}, |
|
|
|
|
{"0.0.0.0", 24, nil, `ports="0.0.0.0": to allow all IP addresses, use *:port, not 0.0.0.0:port`}, |
|
|
|
|
{"::", 64, nil, `ports="::": to allow all IP addresses, use *:port, not [::]:port`}, |
|
|
|
|
{"*", 24, pfx("0.0.0.0/0", "::/0"), ""}, |
|
|
|
|
} |
|
|
|
|
for _, tt := range tests { |
|
|
|
|
got, err := parseIP(tt.host, tt.bits) |
|
|
|
|
@ -212,8 +212,8 @@ func TestParseIP(t *testing.T) { |
|
|
|
|
} |
|
|
|
|
t.Errorf("parseIP(%q, %v) error: %v; want error %q", tt.host, tt.bits, err, tt.wantErr) |
|
|
|
|
} |
|
|
|
|
if got != tt.want { |
|
|
|
|
t.Errorf("parseIP(%q, %v) = %#v; want %#v", tt.host, tt.bits, got, tt.want) |
|
|
|
|
if diff := cmp.Diff(got, tt.want, cmp.Comparer(func(a, b netaddr.IP) bool { return a == b })); diff != "" { |
|
|
|
|
t.Errorf("parseIP(%q, %v) = %s; want %s", tt.host, tt.bits, got, tt.want) |
|
|
|
|
continue |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
@ -480,12 +480,15 @@ func mustIP4(s string) packet.IP4 { |
|
|
|
|
return packet.IP4FromNetaddr(ip) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func pfx(s string) netaddr.IPPrefix { |
|
|
|
|
pfx, err := netaddr.ParseIPPrefix(s) |
|
|
|
|
if err != nil { |
|
|
|
|
panic(err) |
|
|
|
|
func pfx(strs ...string) (ret []netaddr.IPPrefix) { |
|
|
|
|
for _, s := range strs { |
|
|
|
|
pfx, err := netaddr.ParseIPPrefix(s) |
|
|
|
|
if err != nil { |
|
|
|
|
panic(err) |
|
|
|
|
} |
|
|
|
|
ret = append(ret, pfx) |
|
|
|
|
} |
|
|
|
|
return pfx |
|
|
|
|
return ret |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
func nets(nets ...string) (ret []netaddr.IPPrefix) { |
|
|
|
|
|