Files
coredns/plugin/chaos/chaos_test.go
Ville Vesilehto 3080ec0448 lint(errorlint): handle wrapped errors
Enable errorlint and preserve wrapped error chains so runtime checks
and tests classify failures correctly. This also makes Route53
surface insert failures instead of silently dropping them.

Signed-off-by: Ville Vesilehto <ville@vesilehto.fi>
2026-04-25 11:57:32 +03:00

82 lines
1.8 KiB
Go

package chaos
import (
"context"
"errors"
"testing"
"github.com/coredns/coredns/plugin"
"github.com/coredns/coredns/plugin/pkg/dnstest"
"github.com/coredns/coredns/plugin/test"
"github.com/miekg/dns"
)
func TestChaos(t *testing.T) {
em := Chaos{
Version: version,
Authors: []string{"Miek Gieben"},
}
tests := []struct {
next plugin.Handler
qname string
qtype uint16
expectedCode int
expectedReply string
expectedErr error
}{
{
next: test.NextHandler(dns.RcodeSuccess, nil),
qname: "version.bind",
expectedCode: dns.RcodeSuccess,
expectedReply: version,
expectedErr: nil,
},
{
next: test.NextHandler(dns.RcodeSuccess, nil),
qname: "authors.bind",
expectedCode: dns.RcodeSuccess,
expectedReply: "Miek Gieben",
expectedErr: nil,
},
{
next: test.NextHandler(dns.RcodeSuccess, nil),
qname: "authors.bind",
qtype: dns.TypeSRV,
expectedCode: dns.RcodeSuccess,
expectedErr: nil,
},
}
ctx := context.TODO()
for i, tc := range tests {
req := new(dns.Msg)
if tc.qtype == 0 {
tc.qtype = dns.TypeTXT
}
req.SetQuestion(dns.Fqdn(tc.qname), tc.qtype)
req.Question[0].Qclass = dns.ClassCHAOS
em.Next = tc.next
rec := dnstest.NewRecorder(&test.ResponseWriter{})
code, err := em.ServeDNS(ctx, rec, req)
if !errors.Is(err, tc.expectedErr) {
t.Errorf("Test %d: Expected error %v, but got %v", i, tc.expectedErr, err)
}
if code != tc.expectedCode {
t.Errorf("Test %d: Expected status code %d, but got %d", i, tc.expectedCode, code)
}
if tc.expectedReply != "" {
answer := rec.Msg.Answer[0].(*dns.TXT).Txt[0]
if answer != tc.expectedReply {
t.Errorf("Test %d: Expected answer %s, but got %s", i, tc.expectedReply, answer)
}
}
}
}
const version = "CoreDNS-001"