aboutsummaryrefslogtreecommitdiff
path: root/plugin/reverse/network_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'plugin/reverse/network_test.go')
-rw-r--r--plugin/reverse/network_test.go135
1 files changed, 135 insertions, 0 deletions
diff --git a/plugin/reverse/network_test.go b/plugin/reverse/network_test.go
new file mode 100644
index 000000000..a826707e5
--- /dev/null
+++ b/plugin/reverse/network_test.go
@@ -0,0 +1,135 @@
+package reverse
+
+import (
+ "net"
+ "reflect"
+ "regexp"
+ "testing"
+)
+
+// Test converting from hostname to IP and back again to hostname
+func TestNetworkConversion(t *testing.T) {
+
+ _, net4, _ := net.ParseCIDR("10.1.1.0/24")
+ _, net6, _ := net.ParseCIDR("fd01::/64")
+
+ regexIP4, _ := regexp.Compile("^dns-" + regexMatchV4 + "\\.domain\\.internal\\.$")
+ regexIP6, _ := regexp.Compile("^dns-" + regexMatchV6 + "\\.domain\\.internal\\.$")
+
+ tests := []struct {
+ network network
+ resultHost string
+ resultIP net.IP
+ }{
+ {
+ network{
+ IPnet: net4,
+ Template: "dns-{ip}.domain.internal.",
+ RegexMatchIP: regexIP4,
+ },
+ "dns-10.1.1.23.domain.internal.",
+ net.ParseIP("10.1.1.23"),
+ },
+ {
+ network{
+ IPnet: net6,
+ Template: "dns-{ip}.domain.internal.",
+ RegexMatchIP: regexIP6,
+ },
+ "dns-fd01000000000000000000000000a32f.domain.internal.",
+ net.ParseIP("fd01::a32f"),
+ },
+ }
+
+ for i, test := range tests {
+ resultIP := test.network.hostnameToIP(test.resultHost)
+ if !reflect.DeepEqual(test.resultIP, resultIP) {
+ t.Fatalf("Test %d expected %v, got %v", i, test.resultIP, resultIP)
+ }
+
+ resultHost := test.network.ipToHostname(test.resultIP)
+ if !reflect.DeepEqual(test.resultHost, resultHost) {
+ t.Fatalf("Test %d expected %v, got %v", i, test.resultHost, resultHost)
+ }
+ }
+}
+
+func TestNetworkHostnameToIP(t *testing.T) {
+
+ _, net4, _ := net.ParseCIDR("10.1.1.0/24")
+ _, net6, _ := net.ParseCIDR("fd01::/64")
+
+ regexIP4, _ := regexp.Compile("^dns-" + regexMatchV4 + "\\.domain\\.internal\\.$")
+ regexIP6, _ := regexp.Compile("^dns-" + regexMatchV6 + "\\.domain\\.internal\\.$")
+
+ // Test regex does NOT match
+ // All this test should return nil
+ testsNil := []struct {
+ network network
+ hostname string
+ }{
+ {
+ network{
+ IPnet: net4,
+ RegexMatchIP: regexIP4,
+ },
+ // domain does not match
+ "dns-10.1.1.23.domain.internals.",
+ },
+ {
+ network{
+ IPnet: net4,
+ RegexMatchIP: regexIP4,
+ },
+ // IP does match / contain in subnet
+ "dns-200.1.1.23.domain.internals.",
+ },
+ {
+ network{
+ IPnet: net4,
+ RegexMatchIP: regexIP4,
+ },
+ // template does not match
+ "dns-10.1.1.23-x.domain.internal.",
+ },
+ {
+ network{
+ IPnet: net4,
+ RegexMatchIP: regexIP4,
+ },
+ // template does not match
+ "IP-dns-10.1.1.23.domain.internal.",
+ },
+ {
+ network{
+ IPnet: net6,
+ RegexMatchIP: regexIP6,
+ },
+ // template does not match
+ "dnx-fd01000000000000000000000000a32f.domain.internal.",
+ },
+ {
+ network{
+ IPnet: net6,
+ RegexMatchIP: regexIP6,
+ },
+ // no valid v6 (missing one 0, only 31 chars)
+ "dns-fd0100000000000000000000000a32f.domain.internal.",
+ },
+ {
+ network{
+ IPnet: net6,
+ RegexMatchIP: regexIP6,
+ },
+ // IP does match / contain in subnet
+ "dns-ed01000000000000000000000000a32f.domain.internal.",
+ },
+ }
+
+ for i, test := range testsNil {
+ resultIP := test.network.hostnameToIP(test.hostname)
+ if resultIP != nil {
+ t.Fatalf("Test %d expected nil, got %v", i, resultIP)
+ }
+ }
+}