135 lines
2.9 KiB
Go
135 lines
2.9 KiB
Go
package reverse
|
|
|
|
import (
|
|
"testing"
|
|
"net"
|
|
"reflect"
|
|
"regexp"
|
|
)
|
|
|
|
// 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)
|
|
}
|
|
}
|
|
}
|