aboutsummaryrefslogtreecommitdiff
path: root/libgo/go/net/addrselect_test.go
diff options
context:
space:
mode:
authorIan Lance Taylor <iant@google.com>2016-02-03 21:58:02 +0000
committerIan Lance Taylor <ian@gcc.gnu.org>2016-02-03 21:58:02 +0000
commitf98dd1a338867a408f7c72d73fbad7fe7fc93e3a (patch)
tree2f8da9862a9c1fe0df138917f997b03439c02773 /libgo/go/net/addrselect_test.go
parentb081ed4efc144da0c45a6484aebfd10e0eb9fda3 (diff)
downloadgcc-f98dd1a338867a408f7c72d73fbad7fe7fc93e3a.zip
gcc-f98dd1a338867a408f7c72d73fbad7fe7fc93e3a.tar.gz
gcc-f98dd1a338867a408f7c72d73fbad7fe7fc93e3a.tar.bz2
libgo: Update to go1.6rc1.
Reviewed-on: https://go-review.googlesource.com/19200 From-SVN: r233110
Diffstat (limited to 'libgo/go/net/addrselect_test.go')
-rw-r--r--libgo/go/net/addrselect_test.go115
1 files changed, 115 insertions, 0 deletions
diff --git a/libgo/go/net/addrselect_test.go b/libgo/go/net/addrselect_test.go
index 5620227..80aa4eb 100644
--- a/libgo/go/net/addrselect_test.go
+++ b/libgo/go/net/addrselect_test.go
@@ -87,6 +87,57 @@ func TestSortByRFC6724(t *testing.T) {
},
reverse: true,
},
+
+ // Issue 13283. Having a 10/8 source address does not
+ // mean we should prefer 23/8 destination addresses.
+ {
+ in: []IPAddr{
+ {IP: ParseIP("54.83.193.112")},
+ {IP: ParseIP("184.72.238.214")},
+ {IP: ParseIP("23.23.172.185")},
+ {IP: ParseIP("75.101.148.21")},
+ {IP: ParseIP("23.23.134.56")},
+ {IP: ParseIP("23.21.50.150")},
+ },
+ srcs: []IP{
+ ParseIP("10.2.3.4"),
+ ParseIP("10.2.3.4"),
+ ParseIP("10.2.3.4"),
+ ParseIP("10.2.3.4"),
+ ParseIP("10.2.3.4"),
+ ParseIP("10.2.3.4"),
+ },
+ want: []IPAddr{
+ {IP: ParseIP("54.83.193.112")},
+ {IP: ParseIP("184.72.238.214")},
+ {IP: ParseIP("23.23.172.185")},
+ {IP: ParseIP("75.101.148.21")},
+ {IP: ParseIP("23.23.134.56")},
+ {IP: ParseIP("23.21.50.150")},
+ },
+ reverse: false,
+ },
+
+ // Prefer longer common prefixes, but only for IPv4 address
+ // pairs in the same special-purpose block.
+ {
+ in: []IPAddr{
+ {IP: ParseIP("1.2.3.4")},
+ {IP: ParseIP("10.55.0.1")},
+ {IP: ParseIP("10.66.0.1")},
+ },
+ srcs: []IP{
+ ParseIP("1.2.3.5"),
+ ParseIP("10.66.1.2"),
+ ParseIP("10.66.1.2"),
+ },
+ want: []IPAddr{
+ {IP: ParseIP("10.66.0.1")},
+ {IP: ParseIP("10.55.0.1")},
+ {IP: ParseIP("1.2.3.4")},
+ },
+ reverse: true,
+ },
}
for i, tt := range tests {
inCopy := make([]IPAddr, len(tt.in))
@@ -217,3 +268,67 @@ func TestRFC6724CommonPrefixLength(t *testing.T) {
}
}
+
+func mustParseCIDRs(t *testing.T, blocks ...string) []*IPNet {
+ res := make([]*IPNet, len(blocks))
+ for i, block := range blocks {
+ var err error
+ _, res[i], err = ParseCIDR(block)
+ if err != nil {
+ t.Fatalf("ParseCIDR(%s) failed: %v", block, err)
+ }
+ }
+ return res
+}
+
+func TestSameIPv4SpecialPurposeBlock(t *testing.T) {
+ blocks := mustParseCIDRs(t,
+ "10.0.0.0/8",
+ "127.0.0.0/8",
+ "169.254.0.0/16",
+ "172.16.0.0/12",
+ "192.168.0.0/16",
+ )
+
+ addrs := []struct {
+ ip IP
+ block int // index or -1
+ }{
+ {IP{1, 2, 3, 4}, -1},
+ {IP{2, 3, 4, 5}, -1},
+ {IP{10, 2, 3, 4}, 0},
+ {IP{10, 6, 7, 8}, 0},
+ {IP{127, 0, 0, 1}, 1},
+ {IP{127, 255, 255, 255}, 1},
+ {IP{169, 254, 77, 99}, 2},
+ {IP{169, 254, 44, 22}, 2},
+ {IP{169, 255, 0, 1}, -1},
+ {IP{172, 15, 5, 6}, -1},
+ {IP{172, 16, 32, 41}, 3},
+ {IP{172, 31, 128, 9}, 3},
+ {IP{172, 32, 88, 100}, -1},
+ {IP{192, 168, 1, 1}, 4},
+ {IP{192, 168, 128, 42}, 4},
+ {IP{192, 169, 1, 1}, -1},
+ }
+
+ for i, addr := range addrs {
+ for j, block := range blocks {
+ got := block.Contains(addr.ip)
+ want := addr.block == j
+ if got != want {
+ t.Errorf("%d/%d. %s.Contains(%s): got %v, want %v", i, j, block, addr.ip, got, want)
+ }
+ }
+ }
+
+ for i, addr1 := range addrs {
+ for j, addr2 := range addrs {
+ got := sameIPv4SpecialPurposeBlock(addr1.ip, addr2.ip)
+ want := addr1.block >= 0 && addr1.block == addr2.block
+ if got != want {
+ t.Errorf("%d/%d. sameIPv4SpecialPurposeBlock(%s, %s): got %v, want %v", i, j, addr1.ip, addr2.ip, got, want)
+ }
+ }
+ }
+}