120 lines
4.1 KiB
Go
120 lines
4.1 KiB
Go
package dnsserver
|
|
|
|
import (
|
|
"testing"
|
|
)
|
|
|
|
func TestHandler(t *testing.T) {
|
|
tp := testPlugin{}
|
|
c := testConfig("dns", tp)
|
|
if _, err := NewServer("127.0.0.1:53", []*Config{c}); err != nil {
|
|
t.Errorf("Expected no error for NewServer, got %s", err)
|
|
}
|
|
if h := c.Handler("testplugin"); h != tp {
|
|
t.Errorf("Expected testPlugin from Handler, got %T", h)
|
|
}
|
|
if h := c.Handler("nothing"); h != nil {
|
|
t.Errorf("Expected nil from Handler, got %T", h)
|
|
}
|
|
}
|
|
|
|
func TestHandlers(t *testing.T) {
|
|
tp := testPlugin{}
|
|
c := testConfig("dns", tp)
|
|
if _, err := NewServer("127.0.0.1:53", []*Config{c}); err != nil {
|
|
t.Errorf("Expected no error for NewServer, got %s", err)
|
|
}
|
|
hs := c.Handlers()
|
|
if len(hs) != 1 || hs[0] != tp {
|
|
t.Errorf("Expected [testPlugin] from Handlers, got %v", hs)
|
|
}
|
|
}
|
|
|
|
func TestGroupingServers(t *testing.T) {
|
|
for i, test := range []struct {
|
|
configs []*Config
|
|
expectedGroups []string
|
|
failing bool
|
|
}{
|
|
// single config -> one group
|
|
{configs: []*Config{
|
|
{Transport: "dns", Zone: ".", Port: "53", ListenHosts: []string{""}},
|
|
},
|
|
expectedGroups: []string{"dns://:53"},
|
|
failing: false},
|
|
|
|
// 2 configs on different port -> 2 groups
|
|
{configs: []*Config{
|
|
{Transport: "dns", Zone: ".", Port: "53", ListenHosts: []string{""}},
|
|
{Transport: "dns", Zone: ".", Port: "54", ListenHosts: []string{""}},
|
|
},
|
|
expectedGroups: []string{"dns://:53", "dns://:54"},
|
|
failing: false},
|
|
|
|
// 2 configs on same port, both not using bind, diff zones -> 1 group
|
|
{configs: []*Config{
|
|
{Transport: "dns", Zone: ".", Port: "53", ListenHosts: []string{""}},
|
|
{Transport: "dns", Zone: "com.", Port: "53", ListenHosts: []string{""}},
|
|
},
|
|
expectedGroups: []string{"dns://:53"},
|
|
failing: false},
|
|
|
|
// 2 configs on same port, one addressed - one not using bind, diff zones -> 1 group
|
|
{configs: []*Config{
|
|
{Transport: "dns", Zone: ".", Port: "53", ListenHosts: []string{"127.0.0.1"}},
|
|
{Transport: "dns", Zone: ".", Port: "54", ListenHosts: []string{""}},
|
|
},
|
|
expectedGroups: []string{"dns://127.0.0.1:53", "dns://:54"},
|
|
failing: false},
|
|
|
|
// 2 configs on diff ports, 3 different address, diff zones -> 3 group
|
|
{configs: []*Config{
|
|
{Transport: "dns", Zone: ".", Port: "53", ListenHosts: []string{"127.0.0.1", "::1"}},
|
|
{Transport: "dns", Zone: ".", Port: "54", ListenHosts: []string{""}}},
|
|
expectedGroups: []string{"dns://127.0.0.1:53", "dns://[::1]:53", "dns://:54"},
|
|
failing: false},
|
|
|
|
// 2 configs on same port, same address, diff zones -> 1 group
|
|
{configs: []*Config{
|
|
{Transport: "dns", Zone: ".", Port: "53", ListenHosts: []string{"127.0.0.1", "::1"}},
|
|
{Transport: "dns", Zone: "com.", Port: "53", ListenHosts: []string{"127.0.0.1", "::1"}},
|
|
},
|
|
expectedGroups: []string{"dns://127.0.0.1:53", "dns://[::1]:53"},
|
|
failing: false},
|
|
|
|
// 2 configs on same port, total 2 diff addresses, diff zones -> 2 groups
|
|
{configs: []*Config{
|
|
{Transport: "dns", Zone: ".", Port: "53", ListenHosts: []string{"127.0.0.1"}},
|
|
{Transport: "dns", Zone: "com.", Port: "53", ListenHosts: []string{"::1"}},
|
|
},
|
|
expectedGroups: []string{"dns://127.0.0.1:53", "dns://[::1]:53"},
|
|
failing: false},
|
|
|
|
// 2 configs on same port, total 3 diff addresses, diff zones -> 3 groups
|
|
{configs: []*Config{
|
|
{Transport: "dns", Zone: ".", Port: "53", ListenHosts: []string{"127.0.0.1", "::1"}},
|
|
{Transport: "dns", Zone: "com.", Port: "53", ListenHosts: []string{""}}},
|
|
expectedGroups: []string{"dns://127.0.0.1:53", "dns://[::1]:53", "dns://:53"},
|
|
failing: false},
|
|
} {
|
|
groups, err := groupConfigsByListenAddr(test.configs)
|
|
if err != nil {
|
|
if !test.failing {
|
|
t.Fatalf("Test %d, expected no errors, but got: %v", i, err)
|
|
}
|
|
continue
|
|
}
|
|
if test.failing {
|
|
t.Fatalf("Test %d, expected to failed but did not, returned values", i)
|
|
}
|
|
if len(groups) != len(test.expectedGroups) {
|
|
t.Errorf("Test %d : expected the group's size to be %d, was %d", i, len(test.expectedGroups), len(groups))
|
|
continue
|
|
}
|
|
for _, v := range test.expectedGroups {
|
|
if _, ok := groups[v]; !ok {
|
|
t.Errorf("Test %d : expected value %v to be in the group, was not", i, v)
|
|
}
|
|
}
|
|
}
|
|
}
|