83 lines
2.4 KiB
Go
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)
|
|
}
|
|
})
|
|
}
|
|
}
|