summaryrefslogtreecommitdiffhomepage
path: root/pkg/tcpip/tcpip_test.go
diff options
context:
space:
mode:
authorGoogler <noreply@google.com>2018-04-27 10:37:02 -0700
committerAdin Scannell <ascannell@google.com>2018-04-28 01:44:26 -0400
commitd02b74a5dcfed4bfc8f2f8e545bca4d2afabb296 (patch)
tree54f95eef73aee6bacbfc736fffc631be2605ed53 /pkg/tcpip/tcpip_test.go
parentf70210e742919f40aa2f0934a22f1c9ba6dada62 (diff)
Check in gVisor.
PiperOrigin-RevId: 194583126 Change-Id: Ica1d8821a90f74e7e745962d71801c598c652463
Diffstat (limited to 'pkg/tcpip/tcpip_test.go')
-rw-r--r--pkg/tcpip/tcpip_test.go130
1 files changed, 130 insertions, 0 deletions
diff --git a/pkg/tcpip/tcpip_test.go b/pkg/tcpip/tcpip_test.go
new file mode 100644
index 000000000..fd4d8346f
--- /dev/null
+++ b/pkg/tcpip/tcpip_test.go
@@ -0,0 +1,130 @@
+// Copyright 2016 The Netstack Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style
+// license that can be found in the LICENSE file.
+
+package tcpip
+
+import (
+ "testing"
+)
+
+func TestSubnetContains(t *testing.T) {
+ tests := []struct {
+ s Address
+ m AddressMask
+ a Address
+ want bool
+ }{
+ {"\xa0", "\xf0", "\x90", false},
+ {"\xa0", "\xf0", "\xa0", true},
+ {"\xa0", "\xf0", "\xa5", true},
+ {"\xa0", "\xf0", "\xaf", true},
+ {"\xa0", "\xf0", "\xb0", false},
+ {"\xa0", "\xf0", "", false},
+ {"\xa0", "\xf0", "\xa0\x00", false},
+ {"\xc2\x80", "\xff\xf0", "\xc2\x80", true},
+ {"\xc2\x80", "\xff\xf0", "\xc2\x00", false},
+ {"\xc2\x00", "\xff\xf0", "\xc2\x00", true},
+ {"\xc2\x00", "\xff\xf0", "\xc2\x80", false},
+ }
+ for _, tt := range tests {
+ s, err := NewSubnet(tt.s, tt.m)
+ if err != nil {
+ t.Errorf("NewSubnet(%v, %v) = %v", tt.s, tt.m, err)
+ continue
+ }
+ if got := s.Contains(tt.a); got != tt.want {
+ t.Errorf("Subnet(%v).Contains(%v) = %v, want %v", s, tt.a, got, tt.want)
+ }
+ }
+}
+
+func TestSubnetBits(t *testing.T) {
+ tests := []struct {
+ a AddressMask
+ want1 int
+ want0 int
+ }{
+ {"\x00", 0, 8},
+ {"\x00\x00", 0, 16},
+ {"\x36", 4, 4},
+ {"\x5c", 4, 4},
+ {"\x5c\x5c", 8, 8},
+ {"\x5c\x36", 8, 8},
+ {"\x36\x5c", 8, 8},
+ {"\x36\x36", 8, 8},
+ {"\xff", 8, 0},
+ {"\xff\xff", 16, 0},
+ }
+ for _, tt := range tests {
+ s := &Subnet{mask: tt.a}
+ got1, got0 := s.Bits()
+ if got1 != tt.want1 || got0 != tt.want0 {
+ t.Errorf("Subnet{mask: %x}.Bits() = %d, %d, want %d, %d", tt.a, got1, got0, tt.want1, tt.want0)
+ }
+ }
+}
+
+func TestSubnetPrefix(t *testing.T) {
+ tests := []struct {
+ a AddressMask
+ want int
+ }{
+ {"\x00", 0},
+ {"\x00\x00", 0},
+ {"\x36", 0},
+ {"\x86", 1},
+ {"\xc5", 2},
+ {"\xff\x00", 8},
+ {"\xff\x36", 8},
+ {"\xff\x8c", 9},
+ {"\xff\xc8", 10},
+ {"\xff", 8},
+ {"\xff\xff", 16},
+ }
+ for _, tt := range tests {
+ s := &Subnet{mask: tt.a}
+ got := s.Prefix()
+ if got != tt.want {
+ t.Errorf("Subnet{mask: %x}.Bits() = %d want %d", tt.a, got, tt.want)
+ }
+ }
+}
+
+func TestSubnetCreation(t *testing.T) {
+ tests := []struct {
+ a Address
+ m AddressMask
+ want error
+ }{
+ {"\xa0", "\xf0", nil},
+ {"\xa0\xa0", "\xf0", errSubnetLengthMismatch},
+ {"\xaa", "\xf0", errSubnetAddressMasked},
+ {"", "", nil},
+ }
+ for _, tt := range tests {
+ if _, err := NewSubnet(tt.a, tt.m); err != tt.want {
+ t.Errorf("NewSubnet(%v, %v) = %v, want %v", tt.a, tt.m, err, tt.want)
+ }
+ }
+}
+
+func TestRouteMatch(t *testing.T) {
+ tests := []struct {
+ d Address
+ m Address
+ a Address
+ want bool
+ }{
+ {"\xc2\x80", "\xff\xf0", "\xc2\x80", true},
+ {"\xc2\x80", "\xff\xf0", "\xc2\x00", false},
+ {"\xc2\x00", "\xff\xf0", "\xc2\x00", true},
+ {"\xc2\x00", "\xff\xf0", "\xc2\x80", false},
+ }
+ for _, tt := range tests {
+ r := Route{Destination: tt.d, Mask: tt.m}
+ if got := r.Match(tt.a); got != tt.want {
+ t.Errorf("Route(%v).Match(%v) = %v, want %v", r, tt.a, got, tt.want)
+ }
+ }
+}