Files
coredns/core/dnsserver/example_test.go
2026-08-13 23:26:01 -07:00

59 lines
1.4 KiB
Go

package dnsserver_test
import (
"errors"
"fmt"
"github.com/coredns/caddy"
"github.com/coredns/coredns/core/dnsserver"
_ "github.com/coredns/coredns/plugin/bind"
_ "github.com/coredns/coredns/plugin/whoami"
"github.com/miekg/dns"
)
func Example_embedding() {
oldDirectives := dnsserver.Directives
oldCaddyQuiet := caddy.Quiet
oldDNSQuiet := dnsserver.Quiet
defer func() {
dnsserver.Directives = oldDirectives
caddy.Quiet = oldCaddyQuiet
dnsserver.Quiet = oldDNSQuiet
}()
// Import only the plugins the host needs and set their execution order
// before starting the first server.
dnsserver.Directives = []string{"bind", "whoami"}
caddy.Quiet = true
dnsserver.Quiet = true
instance, err := caddy.Start(caddy.CaddyfileInput{
Filepath: "Corefile",
Contents: []byte(".:0 {\nbind 127.0.0.1\nwhoami\n}\n"),
ServerTypeName: "dns",
})
if err != nil {
panic(err)
}
defer func() {
shutdownErr := errors.Join(instance.ShutdownCallbacks()...)
stopErr := instance.Stop()
instance.Wait()
if err := errors.Join(shutdownErr, stopErr); err != nil {
panic(err)
}
}()
server := instance.Servers()[0].LocalAddr().String()
query := new(dns.Msg)
query.SetQuestion("example.org.", dns.TypeA)
response, err := dns.Exchange(query, server)
if err != nil {
panic(err)
}
fmt.Println(response.Authoritative, response.Rcode == dns.RcodeSuccess)
// Output: true true
}