func TestDebugLookupFalse(t *testing.T) { for _, serv := range servicesDebug { set(t, etc, serv.Key, 0, serv) defer delete(t, etc, serv.Key) } for _, tc := range dnsTestCasesDebugFalse { m := tc.Msg() rec := middleware.NewResponseRecorder(&test.ResponseWriter{}) _, err := etc.ServeDNS(ctxt, rec, m) if err != nil { t.Errorf("expected no error, got %v\n", err) continue } resp := rec.Msg() sort.Sort(test.RRSet(resp.Answer)) sort.Sort(test.RRSet(resp.Ns)) sort.Sort(test.RRSet(resp.Extra)) if !test.Header(t, tc, resp) { t.Logf("%v\n", resp) continue } if !test.Section(t, tc, test.Answer, resp.Answer) { t.Logf("%v\n", resp) } if !test.Section(t, tc, test.Ns, resp.Ns) { t.Logf("%v\n", resp) } if !test.Section(t, tc, test.Extra, resp.Extra) { t.Logf("%v\n", resp) } } }
func TestLookup(t *testing.T) { for _, serv := range services { set(t, etc, serv.Key, 0, serv) defer delete(t, etc, serv.Key) } for _, tc := range dnsTestCases { m := tc.Msg() rec := middleware.NewResponseRecorder(&test.ResponseWriter{}) _, err := etc.ServeDNS(ctxt, rec, m) if err != nil { t.Errorf("expected no error, got: %v for %s %s\n", err, m.Question[0].Name, dns.Type(m.Question[0].Qtype)) return } resp := rec.Msg() sort.Sort(test.RRSet(resp.Answer)) sort.Sort(test.RRSet(resp.Ns)) sort.Sort(test.RRSet(resp.Extra)) if !test.Header(t, tc, resp) { t.Logf("%v\n", resp) continue } if !test.Section(t, tc, test.Answer, resp.Answer) { t.Logf("%v\n", resp) } if !test.Section(t, tc, test.Ns, resp.Ns) { t.Logf("%v\n", resp) } if !test.Section(t, tc, test.Extra, resp.Extra) { t.Logf("%v\n", resp) } } }
func TestStubLookup(t *testing.T) { for _, serv := range servicesStub { set(t, etc, serv.Key, 0, serv) defer delete(t, etc, serv.Key) } etc.updateStubZones() for _, tc := range dnsTestCasesStub { m := tc.Msg() rec := middleware.NewResponseRecorder(&test.ResponseWriter{}) _, err := etc.ServeDNS(ctxt, rec, m) if err != nil { if tc.Rcode != dns.RcodeServerFailure { t.Errorf("expected no error, got %v\n", err) } // This is OK, we expect this backend to *not* work. continue } resp := rec.Msg() if resp == nil { // etcd not running? continue } sort.Sort(test.RRSet(resp.Answer)) sort.Sort(test.RRSet(resp.Ns)) sort.Sort(test.RRSet(resp.Extra)) if !test.Header(t, tc, resp) { t.Logf("%v\n", resp) continue } if !test.Section(t, tc, test.Answer, resp.Answer) { t.Logf("%v\n", resp) } if !test.Section(t, tc, test.Ns, resp.Ns) { t.Logf("%v\n", resp) } if !test.Section(t, tc, test.Extra, resp.Extra) { t.Logf("%v\n", resp) } } }
func TestLookupZone(t *testing.T) { zone, err := file.Parse(strings.NewReader(dbMiekNL), "miek.nl.", "stdin") if err != nil { return } fm := file.File{Next: test.ErrorHandler(), Zones: file.Zones{Z: map[string]*file.Zone{"miek.nl.": zone}, Names: []string{"miek.nl."}}} dnskey, rm1, rm2 := newKey(t) defer rm1() defer rm2() dh := NewDnssec([]string{"miek.nl."}, []*DNSKEY{dnskey}, fm) ctx := context.TODO() for _, tc := range dnsTestCases { m := tc.Msg() rec := middleware.NewResponseRecorder(&test.ResponseWriter{}) _, err := dh.ServeDNS(ctx, rec, m) if err != nil { t.Errorf("expected no error, got %v\n", err) return } resp := rec.Msg() sort.Sort(test.RRSet(resp.Answer)) sort.Sort(test.RRSet(resp.Ns)) sort.Sort(test.RRSet(resp.Extra)) if !test.Header(t, tc, resp) { t.Logf("%v\n", resp) continue } if !test.Section(t, tc, test.Answer, resp.Answer) { t.Logf("%v\n", resp) } if !test.Section(t, tc, test.Ns, resp.Ns) { t.Logf("%v\n", resp) } if !test.Section(t, tc, test.Extra, resp.Extra) { t.Logf("%v\n", resp) } } }
func TestLookupENT(t *testing.T) { zone, err := Parse(strings.NewReader(dbMiekENTNL), testzone, "stdin") if err != nil { t.Fatalf("expect no error when reading zone, got %q", err) } fm := File{Next: test.ErrorHandler(), Zones: Zones{Z: map[string]*Zone{testzone: zone}, Names: []string{testzone}}} ctx := context.TODO() for _, tc := range entTestCases { m := tc.Msg() rec := middleware.NewResponseRecorder(&test.ResponseWriter{}) _, err := fm.ServeDNS(ctx, rec, m) if err != nil { t.Errorf("expected no error, got %v\n", err) return } resp := rec.Msg() sort.Sort(test.RRSet(resp.Answer)) sort.Sort(test.RRSet(resp.Ns)) sort.Sort(test.RRSet(resp.Extra)) if !test.Header(t, tc, resp) { t.Logf("%v\n", resp) continue } if !test.Section(t, tc, test.Answer, resp.Answer) { t.Logf("%v\n", resp) } if !test.Section(t, tc, test.Ns, resp.Ns) { t.Logf("%v\n", resp) } if !test.Section(t, tc, test.Extra, resp.Extra) { t.Logf("%v\n", resp) } } }
func TestCache(t *testing.T) { c, crr := newTestCache() for _, tc := range cacheTestCases { m := tc.in.Msg() m = cacheMsg(m, tc) do := tc.in.Do mt, _ := middleware.Classify(m) key := cacheKey(m, mt, do) crr.set(m, key, mt) name := middleware.Name(m.Question[0].Name).Normalize() qtype := m.Question[0].Qtype i, ok := c.get(name, qtype, do) if !ok && !m.Truncated { t.Errorf("Truncated message should not have been cached") } if ok { resp := i.toMsg(m) if !test.Header(t, tc.Case, resp) { t.Logf("%v\n", resp) continue } if !test.Section(t, tc.Case, test.Answer, resp.Answer) { t.Logf("%v\n", resp) } if !test.Section(t, tc.Case, test.Ns, resp.Ns) { t.Logf("%v\n", resp) } if !test.Section(t, tc.Case, test.Extra, resp.Extra) { t.Logf("%v\n", resp) } } } }
func TestMultiLookup(t *testing.T) { etcMulti := etc etcMulti.Zones = []string{"skydns.test.", "miek.nl."} etcMulti.Next = test.ErrorHandler() for _, serv := range servicesMulti { set(t, etcMulti, serv.Key, 0, serv) defer delete(t, etcMulti, serv.Key) } for _, tc := range dnsTestCasesMulti { m := tc.Msg() rec := middleware.NewResponseRecorder(&test.ResponseWriter{}) _, err := etcMulti.ServeDNS(ctxt, rec, m) if err != nil { t.Errorf("expected no error, got %v\n", err) return } resp := rec.Msg() sort.Sort(test.RRSet(resp.Answer)) sort.Sort(test.RRSet(resp.Ns)) sort.Sort(test.RRSet(resp.Extra)) if !test.Header(t, tc, resp) { t.Logf("%v\n", resp) continue } if !test.Section(t, tc, test.Answer, resp.Answer) { t.Logf("%v\n", resp) } if !test.Section(t, tc, test.Ns, resp.Ns) { t.Logf("%v\n", resp) } if !test.Section(t, tc, test.Extra, resp.Extra) { t.Logf("%v\n", resp) } } }
func TestLookupDNSKEY(t *testing.T) { dnskey, rm1, rm2 := newKey(t) defer rm1() defer rm2() dh := NewDnssec([]string{"miek.nl."}, []*DNSKEY{dnskey}, test.ErrorHandler()) ctx := context.TODO() for _, tc := range dnssecTestCases { m := tc.Msg() rec := middleware.NewResponseRecorder(&test.ResponseWriter{}) _, err := dh.ServeDNS(ctx, rec, m) if err != nil { t.Errorf("expected no error, got %v\n", err) return } resp := rec.Msg() sort.Sort(test.RRSet(resp.Answer)) sort.Sort(test.RRSet(resp.Ns)) sort.Sort(test.RRSet(resp.Extra)) if !test.Header(t, tc, resp) { t.Logf("%v\n", resp) continue } if !test.Section(t, tc, test.Answer, resp.Answer) { t.Logf("%v\n", resp) } if !test.Section(t, tc, test.Ns, resp.Ns) { t.Logf("%v\n", resp) } if !test.Section(t, tc, test.Extra, resp.Extra) { t.Logf("%v\n", resp) } } }