From 48ec468f995b5fd1d0e6f08e414d5ea2191d5158 Mon Sep 17 00:00:00 2001 From: Ahmet Soormally Date: Mon, 15 Jan 2018 09:41:56 +0000 Subject: [PATCH] bug: fix dns panic during tests Depending on your router, the dns test panics: ``` $ go19 test -v -race -run TestBatch . [Jan 15 09:32:30] INFO coprocess: Disabled feature === RUN TestBatch panic: Following domain not mocked:localhost.fritz.box. goroutine 338 [running]: github.com/TykTechnologies/tyk.(*dnsMockHandler).ServeDNS(0x2922f78, 0x2816a20, 0xc420730400, 0xc4203fa480) /Users/ahmet/go/src/github.com/TykTechnologies/tyk/helpers_test.go:539 +0x8cc github.com/TykTechnologies/tyk/vendor/github.com/miekg/dns.(*Server).serve(0xc4204e6000, 0x280abc0, 0xc42019f3b0, 0x2801cc0, 0x2922f78, 0xc4204fc000, 0x25, 0x200, 0xc42000e030, 0xc4202a05e0, ...) /Users/ahmet/go/src/github.com/TykTechnologies/tyk/vendor/github.com/miekg/dns/server.go:558 +0x7a8 created by github.com/TykTechnologies/tyk/vendor/github.com/miekg/dns.(*Server).serveUDP /Users/ahmet/go/src/github.com/TykTechnologies/tyk/vendor/github.com/miekg/dns/server.go:514 +0x363 exit status 2 FAIL github.com/TykTechnologies/tyk 0.346s ``` This PR fixes the issue by automatically pointing to 127.0.0.1 if domain not in the `domainsToAddresses` map. --- helpers_test.go | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/helpers_test.go b/helpers_test.go index d83e7dc020d..f1bf482eabc 100644 --- a/helpers_test.go +++ b/helpers_test.go @@ -513,7 +513,8 @@ func buildAndLoadAPI(apiGens ...func(spec *APISpec)) (specs []*APISpec) { return loadAPI(buildAPI(apiGens...)...) } -var domainsToAddresses map[string]string = map[string]string{ +// TODO - Can we just remove this? It doesn't make sense because is dependent on what your local router is. +var domainsToAddresses = map[string]string{ "host1.local.": "127.0.0.1", "host2.local.": "127.0.0.1", "host3.local.": "127.0.0.1", @@ -522,22 +523,23 @@ var domainsToAddresses map[string]string = map[string]string{ type dnsMockHandler struct{} -func (this *dnsMockHandler) ServeDNS(w dns.ResponseWriter, r *dns.Msg) { +func (d *dnsMockHandler) ServeDNS(w dns.ResponseWriter, r *dns.Msg) { msg := dns.Msg{} msg.SetReply(r) switch r.Question[0].Qtype { case dns.TypeA: msg.Authoritative = true domain := msg.Question[0].Name + address, ok := domainsToAddresses[domain] - if ok { - msg.Answer = append(msg.Answer, &dns.A{ - Hdr: dns.RR_Header{Name: domain, Rrtype: dns.TypeA, Class: dns.ClassINET, Ttl: 60}, - A: net.ParseIP(address), - }) - } else { - panic("Following domain not mocked:" + domain) + if !ok { + address = "127.0.0.1" } + + msg.Answer = append(msg.Answer, &dns.A{ + Hdr: dns.RR_Header{Name: domain, Rrtype: dns.TypeA, Class: dns.ClassINET, Ttl: 60}, + A: net.ParseIP(address), + }) } w.WriteMsg(&msg) }