Add middleware reverse (#452)
This commit is contained in:
parent
a7c9fd5d6b
commit
61afc6dbad
9 changed files with 804 additions and 0 deletions
135
middleware/reverse/network_test.go
Normal file
135
middleware/reverse/network_test.go
Normal file
|
@ -0,0 +1,135 @@
|
|||
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)
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue