summaryrefslogtreecommitdiffstats
path: root/vendor/github.com/hashicorp/go-sockaddr/template/template_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/github.com/hashicorp/go-sockaddr/template/template_test.go')
-rw-r--r--vendor/github.com/hashicorp/go-sockaddr/template/template_test.go278
1 files changed, 0 insertions, 278 deletions
diff --git a/vendor/github.com/hashicorp/go-sockaddr/template/template_test.go b/vendor/github.com/hashicorp/go-sockaddr/template/template_test.go
deleted file mode 100644
index ec9822e77..000000000
--- a/vendor/github.com/hashicorp/go-sockaddr/template/template_test.go
+++ /dev/null
@@ -1,278 +0,0 @@
-package template_test
-
-import (
- "testing"
-
- socktmpl "github.com/hashicorp/go-sockaddr/template"
-)
-
-func TestSockAddr_Parse(t *testing.T) {
- tests := []struct {
- name string
- input string
- output string
- fail bool
- requireOnline bool
- }{
- {
- name: `basic include "name"`,
- input: `{{GetAllInterfaces | include "name" "lo0" | printf "%v"}}`,
- output: `[127.0.0.1/8 {1 16384 lo0 up|loopback|multicast} ::1 {1 16384 lo0 up|loopback|multicast} fe80::1/64 {1 16384 lo0 up|loopback|multicast}]`,
- },
- {
- name: "invalid input",
- input: `{{`,
- output: ``,
- fail: true,
- },
- {
- name: "GetDefaultInterface",
- input: `{{GetDefaultInterfaces | include "type" "IPv4" | attr "name" }}`,
- output: `en0`,
- },
- {
- name: `include "name" regexp`,
- input: `{{GetAllInterfaces | include "name" "^(en|lo)0$" | exclude "name" "^en0$" | sort "type" | sort "address" | join "address" " " }}`,
- output: `127.0.0.1 ::1 fe80::1`,
- },
- {
- name: `exclude "name"`,
- input: `{{. | include "name" "^(en|lo)0$" | exclude "name" "^en0$" | sort "type" | sort "address" | join "address" " " }}`,
- output: `127.0.0.1 ::1 fe80::1`,
- },
- {
- name: `"dot" pipeline, IPv4 type`,
- input: `{{. | include "type" "IPv4" | include "name" "^lo0$" | sort "type" | sort "address" }}`,
- output: `[127.0.0.1/8 {1 16384 lo0 up|loopback|multicast}]`,
- },
- {
- name: `include "type" "IPv6`,
- input: `{{. | include "type" "IPv6" | include "name" "^lo0$" | sort "address" }}`,
- output: `[::1 {1 16384 lo0 up|loopback|multicast} fe80::1/64 {1 16384 lo0 up|loopback|multicast}]`,
- },
- {
- name: "better example for IP types",
- input: `{{. | include "type" "IPv4|IPv6" | include "name" "^lo0$" | sort "type" | sort "address" }}`,
- output: `[127.0.0.1/8 {1 16384 lo0 up|loopback|multicast} ::1 {1 16384 lo0 up|loopback|multicast} fe80::1/64 {1 16384 lo0 up|loopback|multicast}]`,
- },
- {
- name: "ifAddrs1",
- input: `{{. | include "type" "IPv4" | include "name" "^lo0$"}}`,
- output: `[127.0.0.1/8 {1 16384 lo0 up|loopback|multicast}]`,
- },
- {
- name: "ifAddrs2",
- input: `{{. | include "type" "IP" | include "name" "^lo0$" | sort "type" | sort "address" }}`,
- output: `[127.0.0.1/8 {1 16384 lo0 up|loopback|multicast} ::1 {1 16384 lo0 up|loopback|multicast} fe80::1/64 {1 16384 lo0 up|loopback|multicast}]`,
- },
- {
- name: `range "dot" example`,
- input: `{{range . | include "type" "IP" | include "name" "^lo0$"}}{{.Name}} {{.SockAddr}} {{end}}`,
- output: `lo0 127.0.0.1/8 lo0 ::1 lo0 fe80::1/64 `,
- },
- {
- name: `exclude "type"`,
- input: `{{. | exclude "type" "IPv4" | include "name" "^lo0$" | sort "address" | unique "name" | join "name" " "}} {{range . | exclude "type" "IPv4" | include "name" "^lo0$"}}{{.SockAddr}} {{end}}`,
- output: `lo0 ::1 fe80::1/64 `,
- },
- {
- name: "with variable pipeline",
- input: `{{with $ifSet := include "type" "IPv4" . | include "name" "^lo0$"}}{{range $ifSet }}{{.Name}} {{end}}{{range $ifSet}}{{.SockAddr}} {{end}}{{end}}`,
- output: `lo0 127.0.0.1/8 `,
- },
- {
- name: "range sample on lo0",
- input: `{{with $ifAddrs := . | exclude "rfc" "1918" | include "name" "lo0" | sort "type,address" }}{{range $ifAddrs }}{{.Name}}/{{.SockAddr.NetIP}} {{end}}{{end}}`,
- output: `lo0/127.0.0.1 lo0/::1 lo0/fe80::1 `,
- },
- {
- name: "non-RFC1918 on on lo0",
- input: `{{. | exclude "rfc" "1918" | include "name" "lo0" | sort "type,address" | len | eq 3}}`,
- output: `true`,
- },
- {
- // NOTE(sean@): Difficult to reliably test includeByRFC.
- // In this case, we ass-u-me that the host running the
- // test has at least one RFC1918 address on their host.
- name: `include "rfc"`,
- input: `{{(. | include "rfc" "1918" | attr "name")}}`,
- output: `en0`,
- requireOnline: true,
- },
- {
- name: "test for non-empty array",
- input: `{{. | include "type" "IPv4" | include "rfc" "1918" | print | len | eq (len "[]")}}`,
- output: `false`,
- },
- {
- // NOTE(sean@): This will fail if there is a public IPv4 address on loopback.
- name: "non-IPv4 RFC1918",
- input: `{{. | include "name" "lo0" | exclude "type" "IPv4" | include "rfc" "1918" | len | eq 0}}`,
- output: `true`,
- },
- {
- // NOTE(sean@): There are no RFC6598 addresses on most testing hosts so this should be empty.
- name: "rfc6598",
- input: `{{. | include "type" "IPv4" | include "rfc" "6598" | print | len | eq (len "[]")}}`,
- output: `true`,
- },
- {
- name: "invalid RFC",
- input: `{{. | include "type" "IPv4" | include "rfc" "99999999999" | print | len | eq (len "[]")}}`,
- output: `true`,
- fail: true,
- },
- {
- name: `sort asc address`,
- input: `{{ . | include "name" "lo0" | sort "type,address" | join "address" " " }}`,
- output: `127.0.0.1 ::1 fe80::1`,
- },
- {
- name: `sort asc address old`,
- input: `{{with $ifSet := include "name" "lo0" . }}{{ range include "type" "IPv4" $ifSet | sort "address"}}{{ .SockAddr }} {{end}}{{ range include "type" "IPv6" $ifSet | sort "address"}}{{ .SockAddr }} {{end}}{{end}}`,
- output: `127.0.0.1/8 ::1 fe80::1/64 `,
- },
- {
- name: `sort desc address`,
- input: `{{ . | include "name" "lo0" | sort "type,-address" | join "address" " " }}`,
- output: `127.0.0.1 fe80::1 ::1`,
- },
- {
- name: `sort desc address`,
- input: `{{ . | include "name" "lo0" | include "type" "IPv6" | sort "type,-address" | join "address" " " }}`,
- output: `fe80::1 ::1`,
- },
- {
- name: `sort asc address`,
- input: `{{with $ifSet := include "name" "lo0" . }}{{ range include "type" "IPv6" $ifSet | sort "address"}}{{ .SockAddr }} {{end}}{{end}}`,
- output: `::1 fe80::1/64 `,
- },
- {
- name: "lo0 limit 1",
- input: `{{. | include "name" "lo0" | include "type" "IPv6" | sort "address" | limit 1 | len}}`,
- output: `1`,
- },
- {
- name: "join address",
- input: `{{. | include "name" "lo0" | include "type" "IPv6" | sort "address" | join "address" " " }}`,
- output: `::1 fe80::1`,
- },
- {
- name: "join name",
- input: `{{. | include "name" "lo0" | include "type" "IPv6" | sort "address" | join "name" " " }}`,
- output: `lo0 lo0`,
- },
- {
- name: "lo0 flags up and limit 1",
- input: `{{. | include "name" "lo0" | include "flag" "up" | sort "-type,+address" | attr "address" }}`,
- output: `::1`,
- },
- {
- // NOTE(sean@): This is the HashiCorp default in 2016.
- // Indented for effect. Using "true" as the output
- // instead of printing the correct $rfc*Addrs values.
- name: "HashiCorpDefault2016",
- input: `
-{{- with $addr := GetAllInterfaces | include "type" "IP" | include "rfc" "1918|6598" | sort "address" | attr "address" -}}
-
- {{- if ($addr | len) gt 0 -}}
- {{- print "true" -}}{{/* print $addr*/ -}}
- {{- end -}}
-{{- end -}}`,
- output: `true`,
- },
- {
- name: "math address +",
- input: `{{GetAllInterfaces | include "name" "^lo0$" | include "type" "IP" | math "address" "+2" | sort "+type,+address" | join "address" " " }}`,
- output: `127.0.0.3 ::3 fe80::3`,
- },
- {
- name: "math address + overflow",
- input: `|{{- with $ifAddrs := GetAllInterfaces | include "name" "^lo0$" | include "type" "IP" | math "address" "+16777217" | sort "+type,+address" -}}
- {{- range $ifAddrs -}}
- {{- attr "address" . }} -- {{ attr "network" . }}/{{ attr "size" . }}|{{ end -}}
-{{- end -}}`,
- output: `|128.0.0.2 -- 128.0.0.0/16777216|::100:2 -- ::100:2/1|fe80::100:2 -- fe80::/18446744073709551616|`,
- },
- {
- name: "math address + overflow+wrap",
- input: `{{GetAllInterfaces | include "name" "^lo0$" | include "type" "IP" | math "address" "+4294967294" | sort "+type,+address" | join "address" " " }}`,
- output: `126.255.255.255 ::ffff:ffff fe80::ffff:ffff`,
- },
- {
- name: "math address -",
- input: `{{GetAllInterfaces | include "name" "^lo0$" | include "type" "IP" | math "address" "-256" | sort "+type,+address" | join "address" " " }}`,
- output: `126.255.255.1 fe7f:ffff:ffff:ffff:ffff:ffff:ffff:ff01 ffff:ffff:ffff:ffff:ffff:ffff:ffff:ff01`,
- },
- {
- name: "math address - underflow",
- input: `{{GetAllInterfaces | include "name" "^lo0$" | include "type" "IP" | math "address" "-4278190082" | sort "+type,+address" | join "address" " " }}`,
- output: `127.255.255.255 fe7f:ffff:ffff:ffff:ffff:ffff:ff:ffff ffff:ffff:ffff:ffff:ffff:ffff:ff:ffff`,
- },
- {
- // Note to readers: lo0's link-local address (::1) address has a mask of
- // /128 which means its value never changes and this is expected. lo0's
- // site-local address has a /64 address and is expected to change.
- name: "math network",
- input: `{{GetAllInterfaces | include "name" "^lo0$" | include "type" "IP" | math "network" "+2" | sort "+type,+address" | join "address" " " }}`,
- output: `127.0.0.2 ::1 fe80::2`,
- },
- {
- // Assume an IPv4 input of 127.0.0.1. With a value of 0xff00ff01, we wrap once on purpose.
- name: "math network + wrap",
- input: `{{GetAllInterfaces | include "name" "^lo0$" | include "type" "IP" | math "network" "+4278255368" | sort "+type,+address" | join "address" " " }}`,
- output: `127.0.255.8 ::1 fe80::ff00:ff08`,
- },
- {
- name: "math network -",
- input: `{{GetAllInterfaces | include "name" "^lo0$" | include "type" "IP" | math "network" "-2" | sort "+type,+address" | join "address" " " }}`,
- output: `127.255.255.254 ::1 fe80::ffff:ffff:ffff:fffe`,
- },
- {
- // Assume an IPv4 input of 127.0.0.1. With a value of 0xff000008 it
- // should wrap and underflow by 8. Assume an IPv6 input of ::1. With a
- // value of -0xff000008 the value underflows and wraps.
- name: "math network - underflow+wrap",
- input: `{{GetAllInterfaces | include "name" "^lo0$" | include "type" "IP" | sort "+type,+address" | math "network" "-4278190088" | join "address" " " }}`,
- output: `127.255.255.248 ::1 fe80::ffff:ffff:ff:fff8`,
- },
- {
- // Assume the private IPs available on the host are: 10.1.2.3
- // fe80::1025:f732:1001:203
- name: "GetPrivateIPs",
- input: `{{GetPrivateIPs}}`,
- output: `10.1.2.3 fe80::1025:f732:1001:203`,
- },
- {
- // Assume the public IPs available on the host are: 1.2.3.4 6.7.8.9
- name: "GetPublicIPs",
- input: `{{GetPublicIPs}}`,
- output: `1.2.3.4 6.7.8.9`,
- },
- {
- // Assume the private IPs on this host are just the IPv4 addresses:
- // 10.1.2.3 and 172.16.4.6
- name: "GetInterfaceIPs",
- input: `{{GetInterfaceIPs "en0"}}`,
- output: `10.1.2.3 and 172.16.4.6`,
- },
- }
-
- for i, test := range tests {
- test := test // capture range variable
- if test.name == "" {
- t.Fatalf("test number %d has an empty test name", i)
- }
- t.Run(test.name, func(t *testing.T) {
- t.Parallel()
- out, err := socktmpl.Parse(test.input)
- if err != nil && !test.fail {
- t.Fatalf("%q: bad: %v", test.name, err)
- }
-
- if out != test.output && !test.fail {
- t.Fatalf("%q: Expected %+q, received %+q\n%+q", test.name, test.output, out, test.input)
- }
- })
- }
-}