aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
authorGravatar Miek Gieben <miek@miek.nl> 2017-08-18 12:57:23 +0100
committerGravatar GitHub <noreply@github.com> 2017-08-18 12:57:23 +0100
commitcc4e4a0626bf8881e2ae8b2c1e52e09c6308e74e (patch)
treeb1124a42abe78eff2b7944b2b65895522133b61c /test
parent5a1875120cceeaa90f065a4fa7dccffb8c535a71 (diff)
downloadcoredns-cc4e4a0626bf8881e2ae8b2c1e52e09c6308e74e.tar.gz
coredns-cc4e4a0626bf8881e2ae8b2c1e52e09c6308e74e.tar.zst
coredns-cc4e4a0626bf8881e2ae8b2c1e52e09c6308e74e.zip
mw/autopath: integration test with erratic (#930)
Add integration test with erratic. For this erratic now also returns an autopath searchpath. This tests the whole chain; i.e registring a searchfunction and calling that from autopath. This tests does a autopathing domain and a non-autopathing one.
Diffstat (limited to 'test')
-rw-r--r--test/erratic_autopath_test.go85
1 files changed, 85 insertions, 0 deletions
diff --git a/test/erratic_autopath_test.go b/test/erratic_autopath_test.go
new file mode 100644
index 000000000..cd9a077d1
--- /dev/null
+++ b/test/erratic_autopath_test.go
@@ -0,0 +1,85 @@
+package test
+
+import (
+ "testing"
+
+ "github.com/miekg/dns"
+)
+
+func TestLookupAutoPathErratic(t *testing.T) {
+ corefile := `.:0 {
+ erratic
+ autopath @erratic
+ proxy . 8.8.8.8:53
+ debug
+ }
+`
+ i, err := CoreDNSServer(corefile)
+ if err != nil {
+ t.Fatalf("Could not get CoreDNS serving instance: %s", err)
+ }
+
+ udp, _ := CoreDNSServerPorts(i, 0)
+ if udp == "" {
+ t.Fatalf("Could not get UDP listening port")
+ }
+ defer i.Stop()
+
+ tests := []struct {
+ qname string
+ expectedAnswer string
+ expectedType uint16
+ }{
+ {"google.com.a.example.org.", "google.com.a.example.org.", dns.TypeCNAME},
+ {"google.com.", "google.com.", dns.TypeA},
+ }
+
+ for i, tc := range tests {
+ m := new(dns.Msg)
+ // erratic always returns this search path: "a.example.org.", "b.example.org.", "".
+ m.SetQuestion(tc.qname, dns.TypeA)
+
+ r, err := dns.Exchange(m, udp)
+ if err != nil {
+ t.Fatalf("Test %d, failed to sent query: %q", i, err)
+ }
+ if len(r.Answer) == 0 {
+ t.Fatalf("Test %d, answer section should have RRs", i)
+ }
+ if x := r.Answer[0].Header().Name; x != tc.expectedAnswer {
+ t.Fatalf("Test %d, expected answer %s, got %s", i, tc.expectedAnswer, x)
+ }
+ if x := r.Answer[0].Header().Rrtype; x != tc.expectedType {
+ t.Fatalf("Test %d, expected answer type %d, got %d", i, tc.expectedType, x)
+ }
+ }
+}
+
+func TestAutoPathErraticNotLoaded(t *testing.T) {
+ corefile := `.:0 {
+ autopath @erratic
+ proxy . 8.8.8.8:53
+ debug
+ }
+`
+ i, err := CoreDNSServer(corefile)
+ if err != nil {
+ t.Fatalf("Could not get CoreDNS serving instance: %s", err)
+ }
+
+ udp, _ := CoreDNSServerPorts(i, 0)
+ if udp == "" {
+ t.Fatalf("Could not get UDP listening port")
+ }
+ defer i.Stop()
+
+ m := new(dns.Msg)
+ m.SetQuestion("google.com.a.example.org.", dns.TypeA)
+ r, err := dns.Exchange(m, udp)
+ if err != nil {
+ t.Fatalf("Failed to sent query: %q", err)
+ }
+ if r.Rcode != dns.RcodeNameError {
+ t.Fatalf("Expected NXDOMAIN, got %d", r.Rcode)
+ }
+}