Another thing we can test automatically, we sorta settled on using an uppercase letter in in t.Log and t.Fatal calls. Let's just check for this.
121 lines
4.1 KiB
Go
121 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)
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|