mirror of
https://github.com/coredns/coredns.git
synced 2026-10-09 03:55:21 -04:00
core/dnsserver: support explicit registration for embedded hosts (#8525)
* core/dnsserver: test host-plugin embedding with forward Signed-off-by: houyuwushang <liuluoqianqiu@outlook.com> * core/dnsserver: add a directive setter for embedded hosts Signed-off-by: houyuwushang <liuluoqianqiu@outlook.com> * core/dnsserver: support explicit server registration for embedded hosts Signed-off-by: houyuwushang <liuluoqianqiu@outlook.com> --------- Signed-off-by: houyuwushang <liuluoqianqiu@outlook.com>
This commit is contained in:
73
core/dnsserver/directives_test.go
Normal file
73
core/dnsserver/directives_test.go
Normal file
@@ -0,0 +1,73 @@
|
||||
package dnsserver
|
||||
|
||||
import (
|
||||
"slices"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
"github.com/coredns/caddy"
|
||||
)
|
||||
|
||||
func TestSetDirectives(t *testing.T) {
|
||||
original := Directives
|
||||
t.Cleanup(func() { Directives = original })
|
||||
|
||||
for _, tc := range []struct {
|
||||
name string
|
||||
directives []string
|
||||
wantError string
|
||||
}{
|
||||
{name: "ordered", directives: []string{"bind", "test_host", "forward"}},
|
||||
{name: "replacement", directives: []string{"whoami", "bind"}},
|
||||
{name: "nil", directives: nil},
|
||||
{name: "empty", directives: []string{}},
|
||||
{name: "empty name", directives: []string{"bind", ""}, wantError: "empty directive name"},
|
||||
{name: "duplicate", directives: []string{"bind", "forward", "bind"}, wantError: `duplicate directive "bind"`},
|
||||
} {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
Directives = []string{"test_previous"}
|
||||
previous := Directives
|
||||
input := slices.Clone(tc.directives)
|
||||
err := SetDirectives(input)
|
||||
if tc.wantError != "" {
|
||||
if err == nil || !strings.Contains(err.Error(), tc.wantError) {
|
||||
t.Fatalf("SetDirectives(%v) = %v, want %q", input, err, tc.wantError)
|
||||
}
|
||||
if !slices.Equal(Directives, previous) || &Directives[0] != &previous[0] {
|
||||
t.Fatalf("invalid list changed Directives: got %v, want %v", Directives, previous)
|
||||
}
|
||||
} else {
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if got := caddy.ValidDirectives("dns"); !slices.Equal(got, tc.directives) {
|
||||
t.Fatalf("registered server directives = %v, want %v", got, tc.directives)
|
||||
}
|
||||
if len(input) > 0 {
|
||||
input[0] = "test_mutated"
|
||||
if !slices.Equal(Directives, tc.directives) {
|
||||
t.Fatalf("caller mutation changed Directives: %v", Directives)
|
||||
}
|
||||
input[0] = tc.directives[0]
|
||||
}
|
||||
}
|
||||
if !slices.Equal(input, tc.directives) {
|
||||
t.Fatalf("SetDirectives changed the input: got %v, want %v", input, tc.directives)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestSetDirectivesCopiesCurrentList(t *testing.T) {
|
||||
original := Directives
|
||||
t.Cleanup(func() { Directives = original })
|
||||
Directives = []string{"bind", "test_host", "forward"}
|
||||
previous := Directives
|
||||
if err := SetDirectives(Directives[1:]); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
previous[1] = "test_mutated"
|
||||
if want := []string{"test_host", "forward"}; !slices.Equal(Directives, want) {
|
||||
t.Fatalf("old list mutation changed Directives: got %v, want %v", Directives, want)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user