summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/hashicorp/go-sockaddr/ifattr_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/hashicorp/go-sockaddr/ifattr_test.go')
-rw-r--r--vendor/github.com/hashicorp/go-sockaddr/ifattr_test.go112
1 files changed, 112 insertions, 0 deletions
diff --git a/vendor/github.com/hashicorp/go-sockaddr/ifattr_test.go b/vendor/github.com/hashicorp/go-sockaddr/ifattr_test.go
new file mode 100644
index 000000000..b1a01b892
--- /dev/null
+++ b/vendor/github.com/hashicorp/go-sockaddr/ifattr_test.go
@@ -0,0 +1,112 @@
+package sockaddr_test
+
+import (
+ "testing"
+
+ sockaddr "github.com/hashicorp/go-sockaddr"
+)
+
+func TestIfAttr_net(t *testing.T) {
+ ifAddrs, err := sockaddr.GetAllInterfaces()
+ if err != nil {
+ t.Fatalf("Unable to proceed: %v", err)
+ }
+
+ for _, ifAddr := range ifAddrs {
+ testSockAddrAttr(t, ifAddr)
+ }
+}
+
+func TestIfAttr_unix(t *testing.T) {
+ newUnixSock := func(path string) sockaddr.UnixSock {
+ sa, err := sockaddr.NewUnixSock(path)
+ if err != nil {
+ t.Fatalf("unable to create new unix socket: %v", err)
+ }
+ return sa
+ }
+ unixSockets := []sockaddr.SockAddr{
+ newUnixSock("/tmp/test"),
+ }
+
+ for _, sa := range unixSockets {
+ testSockAddrAttr(t, sa)
+ }
+}
+
+func testSockAddrAttr(t *testing.T, sai interface{}) {
+ attrNamesPerType := []struct {
+ name sockaddr.AttrName
+ ipv4Pass bool
+ ipv6Pass bool
+ unixPass bool
+ }{
+ // Universal
+ {"type", true, true, true},
+ {"string", true, true, true},
+ // IP
+ {"name", true, true, false},
+ {"size", true, true, false},
+ {"flags", true, true, false},
+ {"host", true, true, false},
+ {"address", true, true, false},
+ {"port", true, true, false},
+ {"netmask", true, true, false},
+ {"network", true, true, false},
+ {"mask_bits", true, true, false},
+ {"binary", true, true, false},
+ {"hex", true, true, false},
+ {"first_usable", true, true, false},
+ {"last_usable", true, true, false},
+ {"octets", true, true, false},
+ // IPv4
+ {"broadcast", true, false, false},
+ {"uint32", true, false, false},
+ // IPv6
+ {"uint128", false, true, false},
+ // Unix
+ {"path", false, false, true},
+ }
+
+ for _, attrTest := range attrNamesPerType {
+ switch v := sai.(type) {
+ case sockaddr.IfAddr:
+ saType := v.Type()
+ _, err := v.Attr(attrTest.name)
+ switch saType {
+ case sockaddr.TypeIPv4:
+ if err == nil && attrTest.ipv4Pass || err != nil && !attrTest.ipv4Pass {
+ // pass
+ }
+ // fallthrough
+ case sockaddr.TypeIPv6:
+ if err == nil && attrTest.ipv6Pass || err != nil && !attrTest.ipv6Pass {
+ // pass
+ }
+ // fallthrough
+ case sockaddr.TypeUnix:
+ if err == nil && attrTest.unixPass || err != nil && !attrTest.unixPass {
+ // pass
+ }
+ // fallthrough
+ default:
+ t.Errorf("Unable to fetch attr name %q: %v", attrTest.name, err)
+ }
+ case sockaddr.SockAddr:
+ val, err := sockaddr.Attr(v, attrTest.name)
+ _ = err
+
+ pass := len(val) > 0
+ switch {
+ case v.Type() == sockaddr.TypeIPv4 && attrTest.ipv4Pass == pass,
+ v.Type() == sockaddr.TypeIPv6 && attrTest.ipv6Pass == pass,
+ v.Type() == sockaddr.TypeUnix && attrTest.unixPass == pass:
+ // pass
+ default:
+ t.Errorf("Unable to fetch attr name %q from %v / %v + %+q", attrTest.name, v, v.Type(), val)
+ }
+ default:
+ t.Fatal("unsupported type %T %v", sai, sai)
+ }
+ }
+}