diff options
Diffstat (limited to 'vendor/github.com/hashicorp/go-sockaddr/ipv4addr_test.go')
-rw-r--r-- | vendor/github.com/hashicorp/go-sockaddr/ipv4addr_test.go | 991 |
1 files changed, 991 insertions, 0 deletions
diff --git a/vendor/github.com/hashicorp/go-sockaddr/ipv4addr_test.go b/vendor/github.com/hashicorp/go-sockaddr/ipv4addr_test.go new file mode 100644 index 000000000..0b3d8b0c6 --- /dev/null +++ b/vendor/github.com/hashicorp/go-sockaddr/ipv4addr_test.go @@ -0,0 +1,991 @@ +package sockaddr_test + +import ( + "fmt" + "testing" + + "github.com/hashicorp/go-sockaddr" +) + +func TestSockAddr_IPv4Addr(t *testing.T) { + tests := []struct { + z00_input string + z01_addrHexStr string + z02_addrBinStr string + z03_addrStr string + z04_NetIPStringOut string + z05_addrInt sockaddr.IPv4Address + z06_netInt sockaddr.IPv4Network + z07_ipMaskStr string + z08_maskbits int + z09_NetIPNetStringOut string + z10_maskInt sockaddr.IPv4Mask + z11_networkStr string + z12_octets []int + z13_firstUsable string + z14_lastUsable string + z15_broadcast string + z16_portInt sockaddr.IPPort + z17_DialPacketArgs []string + z18_DialStreamArgs []string + z19_ListenPacketArgs []string + z20_ListenStreamArgs []string + z21_IsRFC1918 bool + z22_IsRFC6598 bool + z23_IsRFC6890 bool + z99_pass bool + }{ + { // 0 + z00_input: "0.0.0.0", + z01_addrHexStr: "00000000", + z02_addrBinStr: "00000000000000000000000000000000", + z03_addrStr: "0.0.0.0", + z04_NetIPStringOut: "0.0.0.0", + z05_addrInt: 0, + z06_netInt: 0, + z07_ipMaskStr: "ffffffff", + z08_maskbits: 32, + z09_NetIPNetStringOut: "0.0.0.0/32", + z10_maskInt: sockaddr.IPv4HostMask, + z11_networkStr: "0.0.0.0", + z12_octets: []int{0, 0, 0, 0}, + z13_firstUsable: "0.0.0.0", + z14_lastUsable: "0.0.0.0", + z15_broadcast: "0.0.0.0", + z17_DialPacketArgs: []string{"udp4", ""}, + z18_DialStreamArgs: []string{"tcp4", ""}, + z19_ListenPacketArgs: []string{"udp4", "0.0.0.0:0"}, + z20_ListenStreamArgs: []string{"tcp4", "0.0.0.0:0"}, + z23_IsRFC6890: true, + z99_pass: true, + }, + { // 1 + z00_input: "0.0.0.0:80", + z01_addrHexStr: "00000000", + z02_addrBinStr: "00000000000000000000000000000000", + z03_addrStr: "0.0.0.0:80", + z04_NetIPStringOut: "0.0.0.0", + z05_addrInt: 0, + z06_netInt: 0, + z07_ipMaskStr: "ffffffff", + z08_maskbits: 32, + z09_NetIPNetStringOut: "0.0.0.0/32", + z10_maskInt: sockaddr.IPv4HostMask, + z11_networkStr: "0.0.0.0", + z12_octets: []int{0, 0, 0, 0}, + z13_firstUsable: "0.0.0.0", + z14_lastUsable: "0.0.0.0", + z15_broadcast: "0.0.0.0", + z16_portInt: 80, + z17_DialPacketArgs: []string{"udp4", "0.0.0.0:80"}, + z18_DialStreamArgs: []string{"tcp4", "0.0.0.0:80"}, + z19_ListenPacketArgs: []string{"udp4", "0.0.0.0:80"}, + z20_ListenStreamArgs: []string{"tcp4", "0.0.0.0:80"}, + z23_IsRFC6890: true, + z99_pass: true, + }, + { // 2 + z00_input: "0.0.0.0/0", + z01_addrHexStr: "00000000", + z02_addrBinStr: "00000000000000000000000000000000", + z03_addrStr: "0.0.0.0/0", + z04_NetIPStringOut: "0.0.0.0", + z05_addrInt: 0, + z06_netInt: 0, + z07_ipMaskStr: "00000000", + z09_NetIPNetStringOut: "0.0.0.0/0", + z10_maskInt: 0, + z11_networkStr: "0.0.0.0/0", + z12_octets: []int{0, 0, 0, 0}, + z13_firstUsable: "0.0.0.1", + z14_lastUsable: "255.255.255.254", + z15_broadcast: "255.255.255.255", + z17_DialPacketArgs: []string{"udp4", ""}, + z18_DialStreamArgs: []string{"tcp4", ""}, + z19_ListenPacketArgs: []string{"udp4", ""}, + z20_ListenStreamArgs: []string{"tcp4", ""}, + z99_pass: true, + }, + { // 3 + z00_input: "0.0.0.1", + z01_addrHexStr: "00000001", + z02_addrBinStr: "00000000000000000000000000000001", + z03_addrStr: "0.0.0.1", + z04_NetIPStringOut: "0.0.0.1", + z05_addrInt: 1, + z06_netInt: 1, + z07_ipMaskStr: "ffffffff", + z08_maskbits: 32, + z09_NetIPNetStringOut: "0.0.0.1/32", + z10_maskInt: sockaddr.IPv4HostMask, + z11_networkStr: "0.0.0.1", + z12_octets: []int{0, 0, 0, 1}, + z13_firstUsable: "0.0.0.1", + z14_lastUsable: "0.0.0.1", + z15_broadcast: "0.0.0.1", + z17_DialPacketArgs: []string{"udp4", ""}, + z18_DialStreamArgs: []string{"tcp4", ""}, + z19_ListenPacketArgs: []string{"udp4", "0.0.0.1:0"}, + z20_ListenStreamArgs: []string{"tcp4", "0.0.0.1:0"}, + z23_IsRFC6890: true, + z99_pass: true, + }, + { // 4 + z00_input: "0.0.0.1/1", + z01_addrHexStr: "00000001", + z02_addrBinStr: "00000000000000000000000000000001", + z03_addrStr: "0.0.0.1/1", + z04_NetIPStringOut: "0.0.0.1", + z05_addrInt: 1, + z06_netInt: 0, + z07_ipMaskStr: "80000000", + z08_maskbits: 1, + z09_NetIPNetStringOut: "0.0.0.0/1", + z10_maskInt: 2147483648, + z11_networkStr: "0.0.0.0/1", + z12_octets: []int{0, 0, 0, 1}, + z13_firstUsable: "0.0.0.1", + z14_lastUsable: "127.255.255.254", + z15_broadcast: "127.255.255.255", + z17_DialPacketArgs: []string{"udp4", ""}, + z18_DialStreamArgs: []string{"tcp4", ""}, + z19_ListenPacketArgs: []string{"udp4", ""}, + z20_ListenStreamArgs: []string{"tcp4", ""}, + z99_pass: true, + }, + { // 5 + z00_input: "1.2.3.4", + z01_addrHexStr: "01020304", + z02_addrBinStr: "00000001000000100000001100000100", + z03_addrStr: "1.2.3.4", + z04_NetIPStringOut: "1.2.3.4", + z05_addrInt: 16909060, + z06_netInt: 16909060, + z07_ipMaskStr: "ffffffff", + z08_maskbits: 32, + z09_NetIPNetStringOut: "1.2.3.4/32", + z10_maskInt: sockaddr.IPv4HostMask, + z11_networkStr: "1.2.3.4", + z12_octets: []int{1, 2, 3, 4}, + z13_firstUsable: "1.2.3.4", + z14_lastUsable: "1.2.3.4", + z15_broadcast: "1.2.3.4", + z17_DialPacketArgs: []string{"udp4", ""}, + z18_DialStreamArgs: []string{"tcp4", ""}, + z19_ListenPacketArgs: []string{"udp4", "1.2.3.4:0"}, + z20_ListenStreamArgs: []string{"tcp4", "1.2.3.4:0"}, + z99_pass: true, + }, + { // 6 + z00_input: "10.0.0.0/8", + z01_addrHexStr: "0a000000", + z02_addrBinStr: "00001010000000000000000000000000", + z03_addrStr: "10.0.0.0/8", + z04_NetIPStringOut: "10.0.0.0", + z05_addrInt: 167772160, + z06_netInt: 167772160, + z07_ipMaskStr: "ff000000", + z08_maskbits: 8, + z09_NetIPNetStringOut: "10.0.0.0/8", + z10_maskInt: 4278190080, + z11_networkStr: "10.0.0.0/8", + z12_octets: []int{10, 0, 0, 0}, + z13_firstUsable: "10.0.0.1", + z14_lastUsable: "10.255.255.254", + z15_broadcast: "10.255.255.255", + z17_DialPacketArgs: []string{"udp4", ""}, + z18_DialStreamArgs: []string{"tcp4", ""}, + z19_ListenPacketArgs: []string{"udp4", ""}, + z20_ListenStreamArgs: []string{"tcp4", ""}, + z21_IsRFC1918: true, + z23_IsRFC6890: true, + z99_pass: true, + }, + { // 7 + z00_input: "128.0.0.0", + z01_addrHexStr: "80000000", + z02_addrBinStr: "10000000000000000000000000000000", + z03_addrStr: "128.0.0.0", + z04_NetIPStringOut: "128.0.0.0", + z05_addrInt: 2147483648, + z06_netInt: 2147483648, + z07_ipMaskStr: "ffffffff", + z08_maskbits: 32, + z09_NetIPNetStringOut: "128.0.0.0/32", + z10_maskInt: sockaddr.IPv4HostMask, + z11_networkStr: "128.0.0.0", + z12_octets: []int{128, 0, 0, 0}, + z13_firstUsable: "128.0.0.0", + z14_lastUsable: "128.0.0.0", + z15_broadcast: "128.0.0.0", + z17_DialPacketArgs: []string{"udp4", ""}, + z18_DialStreamArgs: []string{"tcp4", ""}, + z19_ListenPacketArgs: []string{"udp4", "128.0.0.0:0"}, + z20_ListenStreamArgs: []string{"tcp4", "128.0.0.0:0"}, + z99_pass: true, + }, + { // 8 + z00_input: "128.95.120.1/32", + z01_addrHexStr: "805f7801", + z02_addrBinStr: "10000000010111110111100000000001", + z03_addrStr: "128.95.120.1", + z04_NetIPStringOut: "128.95.120.1", + z05_addrInt: 2153740289, + z06_netInt: 2153740289, + z07_ipMaskStr: "ffffffff", + z08_maskbits: 32, + z09_NetIPNetStringOut: "128.95.120.1/32", + z10_maskInt: sockaddr.IPv4HostMask, + z11_networkStr: "128.95.120.1", + z12_octets: []int{128, 95, 120, 1}, + z13_firstUsable: "128.95.120.1", + z14_lastUsable: "128.95.120.1", + z15_broadcast: "128.95.120.1", + z17_DialPacketArgs: []string{"udp4", ""}, + z18_DialStreamArgs: []string{"tcp4", ""}, + z19_ListenPacketArgs: []string{"udp4", "128.95.120.1:0"}, + z20_ListenStreamArgs: []string{"tcp4", "128.95.120.1:0"}, + z99_pass: true, + }, + { // 9 + z00_input: "172.16.1.3/12", + z01_addrHexStr: "ac100103", + z02_addrBinStr: "10101100000100000000000100000011", + z03_addrStr: "172.16.1.3/12", + z04_NetIPStringOut: "172.16.1.3", + z05_addrInt: 2886729987, + z06_netInt: 2886729728, + z07_ipMaskStr: "fff00000", + z08_maskbits: 12, + z09_NetIPNetStringOut: "172.16.0.0/12", + z10_maskInt: 4293918720, + z11_networkStr: "172.16.0.0/12", + z12_octets: []int{172, 16, 1, 3}, + z13_firstUsable: "172.16.0.1", + z14_lastUsable: "172.31.255.254", + z15_broadcast: "172.31.255.255", + z17_DialPacketArgs: []string{"udp4", ""}, + z18_DialStreamArgs: []string{"tcp4", ""}, + z19_ListenPacketArgs: []string{"udp4", ""}, + z20_ListenStreamArgs: []string{"tcp4", ""}, + z21_IsRFC1918: true, + z23_IsRFC6890: true, + z99_pass: true, + }, + { // 10 + z00_input: "192.168.0.0/16", + z01_addrHexStr: "c0a80000", + z02_addrBinStr: "11000000101010000000000000000000", + z03_addrStr: "192.168.0.0/16", + z04_NetIPStringOut: "192.168.0.0", + z05_addrInt: 3232235520, + z06_netInt: 3232235520, + z07_ipMaskStr: "ffff0000", + z08_maskbits: 16, + z09_NetIPNetStringOut: "192.168.0.0/16", + z10_maskInt: 4294901760, + z11_networkStr: "192.168.0.0/16", + z12_octets: []int{192, 168, 0, 0}, + z13_firstUsable: "192.168.0.1", + z14_lastUsable: "192.168.255.254", + z15_broadcast: "192.168.255.255", + z17_DialPacketArgs: []string{"udp4", ""}, + z18_DialStreamArgs: []string{"tcp4", ""}, + z19_ListenPacketArgs: []string{"udp4", ""}, + z20_ListenStreamArgs: []string{"tcp4", ""}, + z21_IsRFC1918: true, + z23_IsRFC6890: true, + z99_pass: true, + }, + { // 11 + z00_input: "192.168.0.1", + z01_addrHexStr: "c0a80001", + z02_addrBinStr: "11000000101010000000000000000001", + z03_addrStr: "192.168.0.1", + z04_NetIPStringOut: "192.168.0.1", + z05_addrInt: 3232235521, + z06_netInt: 3232235521, + z07_ipMaskStr: "ffffffff", + z08_maskbits: 32, + z09_NetIPNetStringOut: "192.168.0.1/32", + z10_maskInt: sockaddr.IPv4HostMask, + z11_networkStr: "192.168.0.1", + z12_octets: []int{192, 168, 0, 1}, + z13_firstUsable: "192.168.0.1", + z14_lastUsable: "192.168.0.1", + z15_broadcast: "192.168.0.1", + z17_DialPacketArgs: []string{"udp4", ""}, + z18_DialStreamArgs: []string{"tcp4", ""}, + z19_ListenPacketArgs: []string{"udp4", "192.168.0.1:0"}, + z20_ListenStreamArgs: []string{"tcp4", "192.168.0.1:0"}, + z21_IsRFC1918: true, + z23_IsRFC6890: true, + z99_pass: true, + }, + { // 12 + z00_input: "192.168.0.2/31", + z01_addrHexStr: "c0a80002", + z02_addrBinStr: "11000000101010000000000000000010", + z03_addrStr: "192.168.0.2/31", + z04_NetIPStringOut: "192.168.0.2", + z05_addrInt: 3232235522, + z06_netInt: 3232235522, + z07_ipMaskStr: "fffffffe", + z08_maskbits: 31, + z09_NetIPNetStringOut: "192.168.0.2/31", + z10_maskInt: 4294967294, + z11_networkStr: "192.168.0.2/31", + z12_octets: []int{192, 168, 0, 2}, + z13_firstUsable: "192.168.0.2", + z14_lastUsable: "192.168.0.3", + z15_broadcast: "192.168.0.3", + z17_DialPacketArgs: []string{"udp4", ""}, + z18_DialStreamArgs: []string{"tcp4", ""}, + z19_ListenPacketArgs: []string{"udp4", ""}, + z20_ListenStreamArgs: []string{"tcp4", ""}, + z21_IsRFC1918: true, + z23_IsRFC6890: true, + z99_pass: true, + }, + { // 13 + z00_input: "192.168.1.10/24", + z01_addrHexStr: "c0a8010a", + z02_addrBinStr: "11000000101010000000000100001010", + z03_addrStr: "192.168.1.10/24", + z04_NetIPStringOut: "192.168.1.10", + z05_addrInt: 3232235786, + z06_netInt: 3232235776, + z07_ipMaskStr: "ffffff00", + z08_maskbits: 24, + z09_NetIPNetStringOut: "192.168.1.0/24", + z10_maskInt: 4294967040, + z11_networkStr: "192.168.1.0/24", + z12_octets: []int{192, 168, 1, 10}, + z13_firstUsable: "192.168.1.1", + z14_lastUsable: "192.168.1.254", + z15_broadcast: "192.168.1.255", + z17_DialPacketArgs: []string{"udp4", ""}, + z18_DialStreamArgs: []string{"tcp4", ""}, + z19_ListenPacketArgs: []string{"udp4", ""}, + z20_ListenStreamArgs: []string{"tcp4", ""}, + z21_IsRFC1918: true, + z23_IsRFC6890: true, + z99_pass: true, + }, + { // 14 + z00_input: "192.168.10.10/16", + z01_addrHexStr: "c0a80a0a", + z02_addrBinStr: "11000000101010000000101000001010", + z03_addrStr: "192.168.10.10/16", + z04_NetIPStringOut: "192.168.10.10", + z05_addrInt: 3232238090, + z06_netInt: 3232235520, + z07_ipMaskStr: "ffff0000", + z08_maskbits: 16, + z09_NetIPNetStringOut: "192.168.0.0/16", + z10_maskInt: 4294901760, + z11_networkStr: "192.168.0.0/16", + z12_octets: []int{192, 168, 10, 10}, + z13_firstUsable: "192.168.0.1", + z14_lastUsable: "192.168.255.254", + z15_broadcast: "192.168.255.255", + z17_DialPacketArgs: []string{"udp4", ""}, + z18_DialStreamArgs: []string{"tcp4", ""}, + z19_ListenPacketArgs: []string{"udp4", ""}, + z20_ListenStreamArgs: []string{"tcp4", ""}, + z21_IsRFC1918: true, + z23_IsRFC6890: true, + z99_pass: true, + }, + { // 15 + z00_input: "240.0.0.0/4", + z01_addrHexStr: "f0000000", + z02_addrBinStr: "11110000000000000000000000000000", + z03_addrStr: "240.0.0.0/4", + z04_NetIPStringOut: "240.0.0.0", + z05_addrInt: 4026531840, + z06_netInt: 4026531840, + z07_ipMaskStr: "f0000000", + z08_maskbits: 4, + z09_NetIPNetStringOut: "240.0.0.0/4", + z10_maskInt: 4026531840, + z11_networkStr: "240.0.0.0/4", + z12_octets: []int{240, 0, 0, 0}, + z13_firstUsable: "240.0.0.1", + z14_lastUsable: "255.255.255.254", + z15_broadcast: "255.255.255.255", + z17_DialPacketArgs: []string{"udp4", ""}, + z18_DialStreamArgs: []string{"tcp4", ""}, + z19_ListenPacketArgs: []string{"udp4", ""}, + z20_ListenStreamArgs: []string{"tcp4", ""}, + z23_IsRFC6890: true, + z99_pass: true, + }, + { // 16 + z00_input: "240.0.0.1/4", + z01_addrHexStr: "f0000001", + z02_addrBinStr: "11110000000000000000000000000001", + z03_addrStr: "240.0.0.1/4", + z04_NetIPStringOut: "240.0.0.1", + z05_addrInt: 4026531841, + z06_netInt: 4026531840, + z07_ipMaskStr: "f0000000", + z08_maskbits: 4, + z09_NetIPNetStringOut: "240.0.0.0/4", + z10_maskInt: 4026531840, + z11_networkStr: "240.0.0.0/4", + z12_octets: []int{240, 0, 0, 1}, + z13_firstUsable: "240.0.0.1", + z14_lastUsable: "255.255.255.254", + z15_broadcast: "255.255.255.255", + z17_DialPacketArgs: []string{"udp4", ""}, + z18_DialStreamArgs: []string{"tcp4", ""}, + z19_ListenPacketArgs: []string{"udp4", ""}, + z20_ListenStreamArgs: []string{"tcp4", ""}, + z23_IsRFC6890: true, + z99_pass: true, + }, + { // 17 + z00_input: "255.255.255.255", + z01_addrHexStr: "ffffffff", + z02_addrBinStr: "11111111111111111111111111111111", + z03_addrStr: "255.255.255.255", + z04_NetIPStringOut: "255.255.255.255", + z05_addrInt: 4294967295, + z06_netInt: 4294967295, + z07_ipMaskStr: "ffffffff", + z08_maskbits: 32, + z09_NetIPNetStringOut: "255.255.255.255/32", + z10_maskInt: sockaddr.IPv4HostMask, + z11_networkStr: "255.255.255.255", + z12_octets: []int{255, 255, 255, 255}, + z13_firstUsable: "255.255.255.255", + z14_lastUsable: "255.255.255.255", + z15_broadcast: "255.255.255.255", + z17_DialPacketArgs: []string{"udp4", ""}, + z18_DialStreamArgs: []string{"tcp4", ""}, + z19_ListenPacketArgs: []string{"udp4", "255.255.255.255:0"}, + z20_ListenStreamArgs: []string{"tcp4", "255.255.255.255:0"}, + z23_IsRFC6890: true, + z99_pass: true, + }, + { // 18 + z00_input: "www.hashicorp.com", + z99_pass: false, + }, + { // 19 + z00_input: "2001:DB8::/48", + z99_pass: false, + }, + { // 20 + z00_input: "2001:DB8::", + z99_pass: false, + }, + { // 21 + z00_input: "128.95.120.1:8600", + z01_addrHexStr: "805f7801", + z02_addrBinStr: "10000000010111110111100000000001", + z03_addrStr: "128.95.120.1:8600", + z04_NetIPStringOut: "128.95.120.1", + z05_addrInt: 2153740289, + z06_netInt: 2153740289, + z07_ipMaskStr: "ffffffff", + z08_maskbits: 32, + z09_NetIPNetStringOut: "128.95.120.1/32", + z10_maskInt: sockaddr.IPv4HostMask, + z11_networkStr: "128.95.120.1", + z12_octets: []int{128, 95, 120, 1}, + z13_firstUsable: "128.95.120.1", + z14_lastUsable: "128.95.120.1", + z15_broadcast: "128.95.120.1", + z16_portInt: 8600, + z17_DialPacketArgs: []string{"udp4", "128.95.120.1:8600"}, + z18_DialStreamArgs: []string{"tcp4", "128.95.120.1:8600"}, + z19_ListenPacketArgs: []string{"udp4", "128.95.120.1:8600"}, + z20_ListenStreamArgs: []string{"tcp4", "128.95.120.1:8600"}, + z99_pass: true, + }, + { // 22 + z00_input: "100.64.2.3/23", + z01_addrHexStr: "64400203", + z02_addrBinStr: "01100100010000000000001000000011", + z03_addrStr: "100.64.2.3/23", + z04_NetIPStringOut: "100.64.2.3", + z05_addrInt: 1681916419, + z06_netInt: 1681916416, + z07_ipMaskStr: "fffffe00", + z08_maskbits: 23, + z09_NetIPNetStringOut: "100.64.2.0/23", + z10_maskInt: 4294966784, + z11_networkStr: "100.64.2.0/23", + z12_octets: []int{100, 64, 2, 3}, + z13_firstUsable: "100.64.2.1", + z14_lastUsable: "100.64.3.254", + z15_broadcast: "100.64.3.255", + z17_DialPacketArgs: []string{"udp4", ""}, + z18_DialStreamArgs: []string{"tcp4", ""}, + z19_ListenPacketArgs: []string{"udp4", ""}, + z20_ListenStreamArgs: []string{"tcp4", ""}, + z22_IsRFC6598: true, + z23_IsRFC6890: true, + z99_pass: true, + }, + { // 23 + z00_input: "192.168.3.53/00ffffff", + z01_addrHexStr: "c0a80335", + z02_addrBinStr: "11000000101010000000001100110101", + z03_addrStr: "192.168.3.53", + z04_NetIPStringOut: "192.168.3.53", + z05_addrInt: 3232236341, + z06_netInt: 3232236341, + z07_ipMaskStr: "ffffffff", + z08_maskbits: 32, + z09_NetIPNetStringOut: "192.168.3.53/32", + z10_maskInt: 4294967295, + z11_networkStr: "192.168.3.53", + z12_octets: []int{192, 168, 3, 53}, + z13_firstUsable: "192.168.3.53", + z14_lastUsable: "192.168.3.53", + z15_broadcast: "192.168.3.53", + z17_DialPacketArgs: []string{"udp4", ""}, + z18_DialStreamArgs: []string{"tcp4", ""}, + z19_ListenPacketArgs: []string{"udp4", "192.168.3.53:0"}, + z20_ListenStreamArgs: []string{"tcp4", "192.168.3.53:0"}, + z21_IsRFC1918: true, + z22_IsRFC6598: false, + z23_IsRFC6890: true, + z99_pass: true, + }, + } + + for idx, test := range tests { + t.Run(fmt.Sprintf("%d", idx), func(t *testing.T) { + ipv4, err := sockaddr.NewIPv4Addr(test.z00_input) + if test.z99_pass && err != nil { + t.Fatalf("[%d] Unable to create an IPv4Addr from %+q: %v", idx, test.z00_input, err) + } else if !test.z99_pass && err == nil { + t.Fatalf("[%d] Expected test to fail for %+q", idx, test.z00_input) + } else if !test.z99_pass && err != nil { + // Expected failure, return successfully + return + } + + if type_ := ipv4.Type(); type_ != sockaddr.TypeIPv4 { + t.Errorf("[%d] Expected new IPv4Addr to be Type %d, received %d (int)", idx, sockaddr.TypeIPv4, type_) + } + + h, ok := ipv4.Host().(sockaddr.IPv4Addr) + if !ok { + t.Errorf("[%d] Unable to type assert +%q's Host to IPv4Addr", idx, test.z00_input) + } + + if h.Address != ipv4.Address || h.Mask != sockaddr.IPv4HostMask || h.Port != ipv4.Port { + t.Errorf("[%d] Expected %+q's Host() to return identical IPv4Addr except mask, received %+q", idx, test.z00_input, h.String()) + } + + if c := cap(*ipv4.NetIP()); c != sockaddr.IPv4len { + t.Errorf("[%d] Expected new IPv4Addr's Address capacity to be %d bytes, received %d", idx, sockaddr.IPv4len, c) + } + + if l := len(*ipv4.NetIP()); l != sockaddr.IPv4len { + t.Errorf("[%d] Expected new IPv4Addr's Address length to be %d bytes, received %d", idx, sockaddr.IPv4len, l) + } + + if s := ipv4.AddressHexString(); s != test.z01_addrHexStr { + t.Errorf("[%d] Expected address %+q's hexadecimal representation to be %+q, received %+q", idx, test.z00_input, test.z01_addrHexStr, s) + } + + if s := ipv4.AddressBinString(); s != test.z02_addrBinStr { + t.Errorf("[%d] Expected address %+q's binary representation to be %+q, received %+q", idx, test.z00_input, test.z02_addrBinStr, s) + } + + if s := ipv4.String(); s != test.z03_addrStr { + t.Errorf("[%d] Expected %+q's String to be %+q, received %+q", idx, test.z00_input, test.z03_addrStr, s) + } + + if s := ipv4.NetIP().String(); s != test.z04_NetIPStringOut { + t.Errorf("[%d] Expected %+q's address to be %+q, received %+q", idx, test.z00_input, test.z04_NetIPStringOut, s) + } + + if a := ipv4.Address; a != test.z05_addrInt { + t.Errorf("[%d] Expected %+q's Address to return %d, received %d", idx, test.z00_input, test.z05_addrInt, a) + } + + if n, ok := ipv4.Network().(sockaddr.IPv4Addr); !ok || n.Address != sockaddr.IPv4Address(test.z06_netInt) { + t.Errorf("[%d] Expected %+q's Network to return %d, received %d", idx, test.z00_input, test.z06_netInt, n.Address) + } + + if m := ipv4.NetIPMask().String(); m != test.z07_ipMaskStr { + t.Errorf("[%d] Expected %+q's mask to be %+q, received %+q", idx, test.z00_input, test.z07_ipMaskStr, m) + } + + if m := ipv4.Maskbits(); m != test.z08_maskbits { + t.Errorf("[%d] Expected %+q's port to be %d, received %d", idx, test.z00_input, test.z08_maskbits, m) + } + + if n := ipv4.NetIPNet().String(); n != test.z09_NetIPNetStringOut { + t.Errorf("[%d] Expected %+q's network to be %+q, received %+q", idx, test.z00_input, test.z09_NetIPNetStringOut, n) + } + + if m := ipv4.Mask; m != test.z10_maskInt { + t.Errorf("[%d] Expected %+q's Mask to return %d, received %d", idx, test.z00_input, test.z10_maskInt, m) + } + + // Network()'s mask must match the IPv4Addr's Mask + if n, ok := ipv4.Network().(sockaddr.IPv4Addr); !ok || n.Mask != test.z10_maskInt { + t.Errorf("[%d] Expected %+q's Network's Mask to return %d, received %d", idx, test.z00_input, test.z10_maskInt, n.Mask) + } + + if n := ipv4.Network().String(); n != test.z11_networkStr { + t.Errorf("[%d] Expected %+q's Network() to be %+q, received %+q", idx, test.z00_input, test.z11_networkStr, n) + } + + if o := ipv4.Octets(); len(o) != 4 || o[0] != test.z12_octets[0] || o[1] != test.z12_octets[1] || o[2] != test.z12_octets[2] || o[3] != test.z12_octets[3] { + t.Errorf("[%d] Expected %+q's Octets to be %+v, received %+v", idx, test.z00_input, test.z12_octets, o) + } + + if f := ipv4.FirstUsable().String(); f != test.z13_firstUsable { + t.Errorf("[%d] Expected %+q's FirstUsable() to be %+q, received %+q", idx, test.z00_input, test.z13_firstUsable, f) + } + + if l := ipv4.LastUsable().String(); l != test.z14_lastUsable { + t.Errorf("[%d] Expected %+q's LastUsable() to be %+q, received %+q", idx, test.z00_input, test.z14_lastUsable, l) + } + + if b := ipv4.Broadcast().String(); b != test.z15_broadcast { + t.Errorf("[%d] Expected %+q's broadcast to be %+q, received %+q", idx, test.z00_input, test.z15_broadcast, b) + } + + if p := ipv4.IPPort(); sockaddr.IPPort(p) != test.z16_portInt || sockaddr.IPPort(p) != test.z16_portInt { + t.Errorf("[%d] Expected %+q's port to be %d, received %d", idx, test.z00_input, test.z16_portInt, p) + } + + if dialNet, dialArgs := ipv4.DialPacketArgs(); dialNet != test.z17_DialPacketArgs[0] || dialArgs != test.z17_DialPacketArgs[1] { + t.Errorf("[%d] Expected %+q's DialPacketArgs() to be %+q, received %+q, %+q", idx, test.z00_input, test.z17_DialPacketArgs, dialNet, dialArgs) + } + + if dialNet, dialArgs := ipv4.DialStreamArgs(); dialNet != test.z18_DialStreamArgs[0] || dialArgs != test.z18_DialStreamArgs[1] { + t.Errorf("[%d] Expected %+q's DialStreamArgs() to be %+q, received %+q, %+q", idx, test.z00_input, test.z18_DialStreamArgs, dialNet, dialArgs) + } + + if listenNet, listenArgs := ipv4.ListenPacketArgs(); listenNet != test.z19_ListenPacketArgs[0] || listenArgs != test.z19_ListenPacketArgs[1] { + t.Errorf("[%d] Expected %+q's ListenPacketArgs() to be %+q, received %+q, %+q", idx, test.z00_input, test.z19_ListenPacketArgs, listenNet, listenArgs) + } + + if listenNet, listenArgs := ipv4.ListenStreamArgs(); listenNet != test.z20_ListenStreamArgs[0] || listenArgs != test.z20_ListenStreamArgs[1] { + t.Errorf("[%d] Expected %+q's ListenStreamArgs() to be %+q, received %+q, %+q", idx, test.z00_input, test.z20_ListenStreamArgs, listenNet, listenArgs) + } + + if v := sockaddr.IsRFC(1918, ipv4); v != test.z21_IsRFC1918 { + t.Errorf("[%d] Expected IsRFC(1918, %+q) to be %+q, received %+q", idx, test.z00_input, test.z21_IsRFC1918, v) + } + + if v := sockaddr.IsRFC(6598, ipv4); v != test.z22_IsRFC6598 { + t.Errorf("[%d] Expected IsRFC(6598, %+q) to be %+q, received %+q", idx, test.z00_input, test.z22_IsRFC6598, v) + } + + if v := sockaddr.IsRFC(6890, ipv4); v != test.z23_IsRFC6890 { + t.Errorf("[%d] Expected IsRFC(6890, %+q) to be %+q, received %+q", idx, test.z00_input, test.z23_IsRFC6890, v) + } + }) + } +} + +func TestSockAddr_IPv4Addr_CmpAddress(t *testing.T) { + tests := []struct { + a string + b string + cmp int + }{ + { // 0 + a: "208.67.222.222/32", + b: "208.67.222.222", + cmp: 0, + }, + { // 1 + a: "208.67.222.222/32", + b: "208.67.222.222/32", + cmp: 0, + }, + { // 2 + a: "208.67.222.222/32", + b: "208.67.222.222:0", + cmp: 0, + }, + { // 3 + a: "208.67.222.220/32", + b: "208.67.222.222/32", + cmp: -1, + }, + { // 4 + a: "208.67.222.222/32", + b: "208.67.222.220/32", + cmp: 1, + }, + } + + for idx, test := range tests { + t.Run(fmt.Sprintf("%d", idx), func(t *testing.T) { + ipv4a, err := sockaddr.NewIPv4Addr(test.a) + if err != nil { + t.Fatalf("[%d] Unable to create an IPv4Addr from %+q: %v", idx, test.a, err) + } + + ipv4b, err := sockaddr.NewIPv4Addr(test.b) + if err != nil { + t.Fatalf("[%d] Unable to create an IPv4Addr from %+q: %v", idx, test.b, err) + } + + if x := ipv4a.CmpAddress(ipv4b); x != test.cmp { + t.Errorf("[%d] IPv4Addr.CmpAddress() failed with %+q with %+q (expected %d, received %d)", idx, ipv4a, ipv4b, test.cmp, x) + } + + if x := ipv4b.CmpAddress(ipv4a); x*-1 != test.cmp { + t.Errorf("[%d] IPv4Addr.CmpAddress() failed with %+q with %+q (expected %d, received %d)", idx, ipv4a, ipv4b, test.cmp, x) + } + }) + } +} + +func TestSockAddr_IPv4Addr_ContainsAddress(t *testing.T) { + tests := []struct { + input string + pass []string + fail []string + }{ + { // 0 + input: "208.67.222.222/32", + pass: []string{ + "208.67.222.222", + "208.67.222.222/32", + "208.67.222.223/31", + "208.67.222.222/31", + "0.0.0.0/0", + }, + fail: []string{ + "0.0.0.0/1", + "208.67.222.220/31", + "208.67.220.224/31", + "208.67.220.220/32", + }, + }, + } + + for idx, test := range tests { + t.Run(fmt.Sprintf("%d", idx), func(t *testing.T) { + ipv4, err := sockaddr.NewIPv4Addr(test.input) + if err != nil { + t.Fatalf("[%d] Unable to create an IPv4Addr from %+q: %v", idx, test.input, err) + } + + for passIdx, passInput := range test.pass { + passAddr, err := sockaddr.NewIPv4Addr(passInput) + if err != nil { + t.Fatalf("[%d/%d] Unable to create an IPv4Addr from %+q: %v", idx, passIdx, passInput, err) + } + + if !passAddr.ContainsAddress(ipv4.Address) { + t.Errorf("[%d/%d] Expected %+q to contain %+q", idx, passIdx, test.input, passInput) + } + } + + for failIdx, failInput := range test.fail { + failAddr, err := sockaddr.NewIPv4Addr(failInput) + if err != nil { + t.Fatalf("[%d/%d] Unable to create an IPv4Addr from %+q: %v", idx, failIdx, failInput, err) + } + + if failAddr.ContainsAddress(ipv4.Address) { + t.Errorf("[%d/%d] Expected %+q to contain %+q", idx, failIdx, test.input, failInput) + } + } + }) + } +} + +func TestSockAddr_IPv4Addr_CmpPort(t *testing.T) { + tests := []struct { + a string + b string + cmp int + }{ + { // 0: Same port, same IP + a: "208.67.222.222:0", + b: "208.67.222.222/32", + cmp: 0, + }, + { // 1: Same port, different IP + a: "208.67.222.220:0", + b: "208.67.222.222/32", + cmp: 0, + }, + { // 2: Same IP, different port + a: "208.67.222.222:80", + b: "208.67.222.222:443", + cmp: -1, + }, + { // 3: Same IP, different port + a: "208.67.222.222:443", + b: "208.67.222.222:80", + cmp: 1, + }, + { // 4: Different IP, different port + a: "208.67.222.222:53", + b: "208.67.220.220:8600", + cmp: -1, + }, + { // 5: Different IP, different port + a: "208.67.222.222:8600", + b: "208.67.220.220:53", + cmp: 1, + }, + } + + for idx, test := range tests { + t.Run(fmt.Sprintf("%d", idx), func(t *testing.T) { + ipv4a, err := sockaddr.NewIPv4Addr(test.a) + if err != nil { + t.Fatalf("[%d] Unable to create an IPv4Addr from %+q: %v", idx, test.a, err) + } + + ipv4b, err := sockaddr.NewIPv4Addr(test.b) + if err != nil { + t.Fatalf("[%d] Unable to create an IPv4Addr from %+q: %v", idx, test.b, err) + } + + if x := ipv4a.CmpPort(ipv4b); x != test.cmp { + t.Errorf("[%d] IPv4Addr.CmpPort() failed with %+q with %+q (expected %d, received %d)", idx, ipv4a, ipv4b, test.cmp, x) + } + + if x := ipv4b.CmpPort(ipv4a); x*-1 != test.cmp { + t.Errorf("[%d] IPv4Addr.CmpPort() failed with %+q with %+q (expected %d, received %d)", idx, ipv4a, ipv4b, test.cmp, x) + } + }) + } +} + +func TestSockAddr_IPv4Addr_Equal(t *testing.T) { + tests := []struct { + name string + input string + pass []string + fail []string + }{ + { + name: "passing", + input: "208.67.222.222/32", + pass: []string{"208.67.222.222", "208.67.222.222/32", "208.67.222.222:0"}, + fail: []string{"208.67.222.222/31", "208.67.220.220", "208.67.220.220/32", "208.67.222.222:5432"}, + }, + { + name: "failing", + input: "4.2.2.1", + pass: []string{"4.2.2.1", "4.2.2.1/32"}, + fail: []string{"4.2.2.1/0", "4.2.2.2", "4.2.2.2/32", "::1"}, + }, + } + + for idx, test := range tests { + t.Run(fmt.Sprintf("%d", idx), func(t *testing.T) { + ipv4, err := sockaddr.NewIPv4Addr(test.input) + if err != nil { + t.Fatalf("[%d] Unable to create an IPv4Addr from %+q: %v", idx, test.input, err) + } + + for goodIdx, passInput := range test.pass { + good, err := sockaddr.NewIPv4Addr(passInput) + if err != nil { + t.Fatalf("[%d] Unable to create an IPv4Addr from %+q: %v", idx, passInput, err) + } + + if !ipv4.Equal(good) { + t.Errorf("[%d/%d] Expected %+q to be equal to %+q: %+q/%+q", idx, goodIdx, test.input, passInput, ipv4.String(), good.String()) + } + } + + for failIdx, failInput := range test.fail { + fail, err := sockaddr.NewIPAddr(failInput) + if err != nil { + t.Fatalf("[%d] Unable to create an IPv4Addr from %+q: %v", idx, failInput, err) + } + + if ipv4.Equal(fail) { + t.Errorf("[%d/%d] Expected %+q to be not equal to %+q", idx, failIdx, test.input, failInput) + } + } + }) + } +} + +func TestIPv4CmpRFC(t *testing.T) { + tests := []struct { + name string + ipv4 sockaddr.IPv4Addr + rfc uint + sa sockaddr.SockAddr + ret int + }{ + { + name: "ipv4 rfc cmp recv match not arg", + ipv4: sockaddr.MustIPv4Addr("192.168.1.10"), + rfc: 1918, + sa: sockaddr.MustIPv6Addr("::1"), + ret: -1, + }, + { + name: "ipv4 rfc cmp recv match", + ipv4: sockaddr.MustIPv4Addr("192.168.1.2"), + rfc: 1918, + sa: sockaddr.MustIPv4Addr("203.1.2.3"), + ret: -1, + }, + { + name: "ipv4 rfc cmp defer", + ipv4: sockaddr.MustIPv4Addr("192.168.1.3"), + rfc: 1918, + sa: sockaddr.MustIPv4Addr("192.168.1.4"), + ret: 0, + }, + { + name: "ipv4 rfc cmp recv not match", + ipv4: sockaddr.MustIPv4Addr("1.2.3.4"), + rfc: 1918, + sa: sockaddr.MustIPv4Addr("203.1.2.3"), + ret: 0, + }, + { + name: "ipv4 rfc cmp recv not match arg", + ipv4: sockaddr.MustIPv4Addr("1.2.3.4"), + rfc: 1918, + sa: sockaddr.MustIPv6Addr("::1"), + ret: 0, + }, + { + name: "ipv4 rfc cmp arg match", + ipv4: sockaddr.MustIPv4Addr("1.2.3.4"), + rfc: 1918, + sa: sockaddr.MustIPv4Addr("192.168.1.5"), + ret: 1, + }, + } + for i, test := range tests { + if test.name == "" { + t.Fatalf("test %d must have a name", i) + } + + t.Run(test.name, func(t *testing.T) { + ipv4 := test.ipv4 + if ret := ipv4.CmpRFC(test.rfc, test.sa); ret != test.ret { + t.Errorf("%s: unexpected ret: wanted %d got %d", test.name, test.ret, ret) + } + }) + } +} + +func TestIPv4Attrs(t *testing.T) { + const expectedNumAttrs = 3 + attrs := sockaddr.IPv4Attrs() + if len(attrs) != expectedNumAttrs { + t.Fatalf("wrong number of IPv4Attrs: %d vs %d", len(attrs), expectedNumAttrs) + } +} |