Files

83 lines
2.4 KiB
Go

package resolver_test
import (
"ekdns/platform"
"ekdns/resolver"
"reflect"
"testing"
)
func TestBuildResolverPool(t *testing.T) {
tests := []struct {
name string
mode resolver.ServerMode
info platform.NetworkInfo
expected []string
}{
{
name: "default mode with local resolvers prepended",
mode: resolver.ServerMode{Mode: "default"},
info: platform.NetworkInfo{DNSServers: []string{"10.0.0.1", "10.0.0.2"}},
expected: []string{
"10.0.0.1", "10.0.0.2",
"1.1.1.1", "8.8.8.8", "1.0.0.1", "8.8.4.4", "9.9.9.9", "208.67.222.222",
},
},
{
name: "default mode deduplicates bootstrap servers already in local list",
mode: resolver.ServerMode{Mode: "default"},
info: platform.NetworkInfo{DNSServers: []string{"8.8.8.8", "10.0.0.1"}},
// 8.8.8.8 is already seen from local list, so it is skipped when appending bootstraps
expected: []string{
"8.8.8.8", "10.0.0.1",
"1.1.1.1", "1.0.0.1", "8.8.4.4", "9.9.9.9", "208.67.222.222",
},
},
{
name: "default mode with no local resolvers uses only bootstrap",
mode: resolver.ServerMode{Mode: "default"},
info: platform.NetworkInfo{},
expected: resolver.BootstrapResolvers,
},
{
name: "local mode returns only local DNS servers",
mode: resolver.ServerMode{Mode: "local"},
info: platform.NetworkInfo{DNSServers: []string{"10.0.0.1"}},
expected: []string{"10.0.0.1"},
},
{
name: "local mode empty DNS servers returns nil",
mode: resolver.ServerMode{Mode: "local"},
info: platform.NetworkInfo{},
expected: nil,
},
{
name: "gateway mode returns only the gateway IP",
mode: resolver.ServerMode{Mode: "gateway"},
info: platform.NetworkInfo{Gateway: "192.168.1.1"},
expected: []string{"192.168.1.1"},
},
{
name: "explicit mode returns only the explicit address",
mode: resolver.ServerMode{Mode: "explicit", ExplicitAddr: "10.0.0.53:5353"},
info: platform.NetworkInfo{},
expected: []string{"10.0.0.53:5353"},
},
{
name: "unknown mode returns nil",
mode: resolver.ServerMode{Mode: "bogus"},
info: platform.NetworkInfo{},
expected: nil,
},
}
for _, tc := range tests {
t.Run(tc.name, func(t *testing.T) {
got := resolver.BuildResolverPool(tc.mode, tc.info)
if !reflect.DeepEqual(got, tc.expected) {
t.Errorf("BuildResolverPool(%+v, ...) =\n got %v\n want %v", tc.mode, got, tc.expected)
}
})
}
}