summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/hashicorp/go-sockaddr/ifaddr_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/hashicorp/go-sockaddr/ifaddr_test.go')
-rw-r--r--vendor/github.com/hashicorp/go-sockaddr/ifaddr_test.go594
1 files changed, 0 insertions, 594 deletions
diff --git a/vendor/github.com/hashicorp/go-sockaddr/ifaddr_test.go b/vendor/github.com/hashicorp/go-sockaddr/ifaddr_test.go
deleted file mode 100644
index 45a0cc788..000000000
--- a/vendor/github.com/hashicorp/go-sockaddr/ifaddr_test.go
+++ /dev/null
@@ -1,594 +0,0 @@
-package sockaddr_test
-
-import (
- "fmt"
- "net"
- "os"
- "strings"
- "testing"
-
- sockaddr "github.com/hashicorp/go-sockaddr"
-)
-
-func boolEnvVar(envvar string, emptyDefault bool) bool {
- v := os.Getenv(envvar)
- switch strings.ToLower(v) {
- case "":
- return emptyDefault
- case "0", "f", "n":
- return false
- case "1", "t", "y":
- return true
- default:
- fmt.Fprintf(os.Stderr, "Unsupported %s flag %q", envvar, v)
- return true
- }
-}
-
-// havePrivateIP is a helper function that returns true when we believe we
-// should have a private IP address. This changes the failure mode of various
-// tests that expect a private IP address.
-//
-// When you have a private IP assigned to the host, set the environment variable
-// SOCKADDR_HAVE_PRIVATE_IP=1
-func havePrivateIP() bool {
- return boolEnvVar("SOCKADDR_HAVE_PRIVATE_IP", true)
-}
-
-// havePublicIP is a helper function that returns true when we believe we should
-// have a public IP address. This changes the failure mode of various tests
-// that expect a public IP address.
-//
-// When you have a public IP assigned to the host, set the environment variable
-// SOCKADDR_HAVE_PUBLIC_IP=1
-func havePublicIP() bool {
- return boolEnvVar("SOCKADDR_HAVE_PUBLIC_IP", false)
-}
-
-func TestGetPrivateIP(t *testing.T) {
- reportOnPrivate := func(args ...interface{}) {
- if havePrivateIP() {
- t.Fatalf(args[0].(string), args[1:]...)
- } else {
- t.Skipf(args[0].(string), args[1:]...)
- }
- }
- ip, err := sockaddr.GetPrivateIP()
- if err != nil {
- reportOnPrivate("unable to get a private IP: %v", err)
- }
-
- if ip == "" {
- reportOnPrivate("it's hard to test this reliably")
- }
-}
-
-func TestGetPrivateIPs(t *testing.T) {
- reportOnPrivate := func(args ...interface{}) {
- if havePrivateIP() {
- t.Fatalf(args[0].(string), args[1:]...)
- } else {
- t.Skipf(args[0].(string), args[1:]...)
- }
- }
- ips, err := sockaddr.GetPrivateIPs()
- if err != nil {
- reportOnPrivate("unable to get a private IPs: %v", err)
- }
-
- if ips == "" {
- reportOnPrivate("it's hard to test this reliably")
- }
-}
-
-func TestGetPublicIP(t *testing.T) {
- reportOnPublic := func(args ...interface{}) {
- if havePublicIP() {
- t.Fatalf(args[0].(string), args[1:]...)
- } else {
- t.Skipf(args[0].(string), args[1:]...)
- }
- }
- ip, err := sockaddr.GetPublicIP()
- if err != nil {
- reportOnPublic("unable to get a public IP: %v", err)
- }
-
- if ip == "" {
- reportOnPublic("it's hard to test this reliably")
- }
-}
-
-func TestGetPublicIPs(t *testing.T) {
- reportOnPublic := func(args ...interface{}) {
- if havePublicIP() {
- t.Fatalf(args[0].(string), args[1:]...)
- } else {
- t.Skipf(args[0].(string), args[1:]...)
- }
- }
- ips, err := sockaddr.GetPublicIPs()
- if err != nil {
- reportOnPublic("unable to get a public IPs: %v", err)
- }
-
- if ips == "" {
- reportOnPublic("it's hard to test this reliably")
- }
-}
-
-func TestGetInterfaceIP(t *testing.T) {
- ip, err := sockaddr.GetInterfaceIP(`^.*[\d]$`)
- if err != nil {
- t.Fatalf("regexp failed: %v", err)
- }
-
- if ip == "" {
- t.Skip("it's hard to test this reliably")
- }
-}
-
-func TestIfAddrAttr(t *testing.T) {
- tests := []struct {
- name string
- ifAddr sockaddr.IfAddr
- attr string
- expected string
- }{
- {
- name: "name",
- ifAddr: sockaddr.IfAddr{
- Interface: net.Interface{
- Name: "abc0",
- },
- },
- attr: "name",
- expected: "abc0",
- },
- }
-
- for i, test := range tests {
- if test.name == "" {
- t.Fatalf("test %d must have a name", i)
- }
-
- result, err := sockaddr.IfAttr(test.attr, test.ifAddr)
- if err != nil {
- t.Errorf("failed to get attr %q from %v", test.name, test.ifAddr)
- }
-
- if result != test.expected {
- t.Errorf("unexpected result")
- }
- }
-}
-
-func TestIfAddrMath(t *testing.T) {
- tests := []struct {
- name string
- ifAddr sockaddr.IfAddr
- operation string
- value string
- expected string
- wantFail bool
- }{
- {
- name: "ipv4 address +2",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv4Addr("127.0.0.1/8"),
- },
- operation: "address",
- value: "+2",
- expected: "127.0.0.3/8",
- },
- {
- name: "ipv4 address -2",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv4Addr("127.0.0.1/8"),
- },
- operation: "address",
- value: "-2",
- expected: "126.255.255.255/8",
- },
- {
- name: "ipv4 address + overflow 0xff00ff03",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv4Addr("127.0.0.1/8"),
- },
- operation: "address",
- value: fmt.Sprintf("+%d", 0xff00ff03),
- expected: "126.0.255.4/8",
- },
- {
- name: "ipv4 address - underflow 0xff00ff04",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv4Addr("127.0.0.1/8"),
- },
- operation: "address",
- value: fmt.Sprintf("-%d", 0xff00ff04),
- expected: "127.255.0.253/8",
- },
- {
- name: "ipv6 address +2",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv6Addr("::1/128"),
- },
- operation: "address",
- value: "+2",
- expected: "::3",
- },
- {
- name: "ipv6 address -3",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv6Addr("::4/128"),
- },
- operation: "address",
- value: "-3",
- expected: "::1",
- },
- {
- name: "ipv6 address + overflow",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv6Addr("ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff/128"),
- },
- operation: "address",
- value: fmt.Sprintf("+%d", 0x03),
- expected: "::2",
- },
- {
- name: "ipv6 address + underflow",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv6Addr("::1/128"),
- },
- operation: "address",
- value: fmt.Sprintf("-%d", 0x03),
- expected: "ffff:ffff:ffff:ffff:ffff:ffff:ffff:fffe",
- },
- {
- name: "ipv4 network +2",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv4Addr("127.0.0.1/8"),
- },
- operation: "network",
- value: "+2",
- expected: "127.0.0.2/8",
- },
- {
- name: "ipv4 network -2",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv4Addr("127.0.0.1/8"),
- },
- operation: "network",
- value: "-2",
- expected: "127.255.255.254/8",
- },
- {
- // Value exceeds /8
- name: "ipv4 network + overflow 0xff00ff03",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv4Addr("127.0.0.1/8"),
- },
- operation: "network",
- value: fmt.Sprintf("+%d", 0xff00ff03),
- expected: "127.0.255.3/8",
- },
- {
- // Value exceeds /8
- name: "ipv4 network - underflow+wrap 0xff00ff04",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv4Addr("127.0.0.1/8"),
- },
- operation: "network",
- value: fmt.Sprintf("-%d", 0xff00ff04),
- expected: "127.255.0.252/8",
- },
- {
- name: "ipv6 network +6",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv6Addr("fe80::1/64"),
- },
- operation: "network",
- value: "+6",
- expected: "fe80::6/64",
- },
- {
- name: "ipv6 network -6",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv6Addr("fe80::ff/64"),
- },
- operation: "network",
- value: "-6",
- expected: "fe80::ffff:ffff:ffff:fffa/64",
- },
- {
- // Value exceeds /104 mask
- name: "ipv6 network + overflow 0xff00ff03",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv6Addr("fe80::1/104"),
- },
- operation: "network",
- value: fmt.Sprintf("+%d", 0xff00ff03),
- expected: "fe80::ff03/104",
- },
- {
- // Value exceeds /104
- name: "ipv6 network - underflow+wrap 0xff00ff04",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv6Addr("fe80::1/104"),
- },
- operation: "network",
- value: fmt.Sprintf("-%d", 0xff00ff04),
- expected: "fe80::ff:fc/104",
- },
- {
- name: "ipv4 address missing sign",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv4Addr("127.0.0.1/8"),
- },
- operation: "address",
- value: "123",
- wantFail: true,
- },
- {
- name: "ipv4 network missing sign",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv4Addr("127.0.0.1/8"),
- },
- operation: "network",
- value: "123",
- wantFail: true,
- },
- {
- name: "ipv6 address missing sign",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv6Addr("::1/128"),
- },
- operation: "address",
- value: "123",
- wantFail: true,
- },
- {
- name: "ipv6 network missing sign",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv6Addr("::1/128"),
- },
- operation: "network",
- value: "123",
- wantFail: true,
- },
- {
- name: "ipv4 address bad value",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv4Addr("127.0.0.1/8"),
- },
- operation: "address",
- value: "+xyz",
- wantFail: true,
- },
- {
- name: "ipv4 network bad value",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv4Addr("127.0.0.1/8"),
- },
- operation: "network",
- value: "-xyz",
- wantFail: true,
- },
- {
- name: "ipv6 address bad value",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv6Addr("::1/128"),
- },
- operation: "address",
- value: "+xyz",
- wantFail: true,
- },
- {
- name: "ipv6 network bad value",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv6Addr("::1/128"),
- },
- operation: "network",
- value: "-xyz",
- wantFail: true,
- },
- {
- name: "ipv4 bad operation",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv4Addr("127.0.0.1/8"),
- },
- operation: "gooz",
- value: "+xyz",
- wantFail: true,
- },
- {
- name: "ipv6 bad operation",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv6Addr("::1/128"),
- },
- operation: "frabba",
- value: "+xyz",
- wantFail: true,
- },
- {
- name: "ipv4 mask operand equals input ipv4 subnet mask",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv4Addr("10.20.30.40/8"),
- },
- operation: "mask",
- value: "8",
- expected: "10.0.0.0/8",
- },
- {
- name: "ipv4 mask operand larger than input ipv4 subnet mask",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv4Addr("192.168.10.20/24"),
- },
- operation: "mask",
- value: "16",
- expected: "192.168.0.0/16",
- },
- {
- name: "ipv4 host upper bound mask operand larger than input ipv4 subnet mask",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv4Addr("192.168.255.255/24"),
- },
- operation: "mask",
- value: "16",
- expected: "192.168.0.0/16",
- },
- {
- name: "ipv4 mask operand smaller than ipv4 subnet mask",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv4Addr("10.20.30.40/8"),
- },
- operation: "mask",
- value: "16",
- expected: "10.20.0.0/8",
- },
- {
- name: "ipv4 host upper bound mask operand smaller than input ipv4 subnet mask",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv4Addr("10.20.255.255/8"),
- },
- operation: "mask",
- value: "16",
- expected: "10.20.0.0/8",
- },
- {
- name: "ipv4 mask bad value upper bound",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv4Addr("127.0.0.1/8"),
- },
- operation: "mask",
- value: "33",
- wantFail: true,
- },
- {
- name: "ipv4 mask bad value lower bound",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv4Addr("127.0.0.1/8"),
- },
- operation: "mask",
- value: "-1",
- wantFail: true,
- },
- {
- name: "ipv6 mask operand equals input ipv6 subnet mask",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv6Addr("2001:0db8:85a3::8a2e:0370:7334/64"),
- },
- operation: "mask",
- value: "64",
- expected: "2001:db8:85a3::/64",
- },
- {
- name: "ipv6 mask operand larger than input ipv6 subnet mask",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv6Addr("2001:0db8:85a3::8a2e:0370:7334/64"),
- },
- operation: "mask",
- value: "32",
- expected: "2001:db8::/32",
- },
- {
- name: "ipv6 mask operand smaller than input ipv6 subnet mask",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv6Addr("2001:0db8:85a3::8a2e:0370:7334/64"),
- },
- operation: "mask",
- value: "96",
- expected: "2001:db8:85a3::8a2e:0:0/64",
- },
- {
- name: "ipv6 mask bad value upper bound",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv6Addr("::1/128"),
- },
- operation: "mask",
- value: "129",
- wantFail: true,
- },
- {
- name: "ipv6 mask bad value lower bound",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustIPv6Addr("::1/128"),
- },
- operation: "mask",
- value: "-1",
- wantFail: true,
- },
- {
- name: "unix unsupported operation",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustUnixSock("/tmp/bar"),
- },
- operation: "address",
- value: "+123",
- wantFail: true,
- },
- {
- name: "unix unsupported operation",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustUnixSock("/tmp/foo"),
- },
- operation: "network",
- value: "+123",
- wantFail: true,
- },
- {
- name: "unix unsupported operation",
- ifAddr: sockaddr.IfAddr{
- SockAddr: sockaddr.MustUnixSock("/tmp/foo"),
- },
- operation: "mask",
- value: "8",
- wantFail: true,
- },
- }
-
- for i, test := range tests {
- if test.name == "" {
- t.Fatalf("test %d must have a name", i)
- }
-
- results, err := sockaddr.IfAddrsMath(test.operation, test.value, sockaddr.IfAddrs{test.ifAddr})
- if test.wantFail {
- if err != nil {
- continue
- } else {
- t.Fatalf("%s: failed to fail math operation %q with value %q on %v", test.name, test.operation, test.value, test.ifAddr)
- }
- } else if err != nil {
- t.Fatalf("%s: failed to compute math operation %q with value %q on %v", test.name, test.operation, test.value, test.ifAddr)
- }
- if len(results) != 1 {
- t.Fatalf("%s: bad", test.name)
- }
-
- result := results[0]
-
- switch saType := result.Type(); saType {
- case sockaddr.TypeIPv4:
- ipv4 := sockaddr.ToIPv4Addr(result.SockAddr)
- if ipv4 == nil {
- t.Fatalf("bad: %T %+#v", result, result)
- }
-
- if got := ipv4.String(); got != test.expected {
- t.Errorf("unexpected result %q: want %q got %q", test.name, test.expected, got)
- }
- case sockaddr.TypeIPv6:
- ipv6 := sockaddr.ToIPv6Addr(result.SockAddr)
- if ipv6 == nil {
- t.Fatalf("bad: %T %+#v", result, result)
- }
-
- if got := ipv6.String(); got != test.expected {
- t.Errorf("unexpected result %q: want %q got %q", test.name, test.expected, got)
- }
- default:
- t.Fatalf("bad")
- }
- }
-}