Refactor code structure for improved readability and maintainability
This commit is contained in:
@@ -0,0 +1,83 @@
|
||||
package resolver_test
|
||||
|
||||
import (
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
"dns-helper/platform"
|
||||
"dns-helper/resolver"
|
||||
)
|
||||
|
||||
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)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user