Changes large parts of proxy lookup mechanism. The duplicate zone checking erroneous added a nameserver for each zone we are auth. for, creating to many backend hosts. So even when a host was determined do be Down() we still got an (identical) new one from the list. The Down() and failure checking for upstream hosts had data race in the uh.Fails check - we now use atomic.LoadInt32 for that. Use and debug the test/server.go test servers implementation in the TestStubLookup test to prevent going out to the internet. Also delete the stub cycle test. That test was wrong and did not test what it needed to be testing. Deleted for now.
76 lines
2 KiB
Go
76 lines
2 KiB
Go
// +build etcd
|
|
|
|
package etcd
|
|
|
|
import (
|
|
"sort"
|
|
"testing"
|
|
|
|
"github.com/miekg/coredns/middleware"
|
|
"github.com/miekg/coredns/middleware/etcd/msg"
|
|
"github.com/miekg/coredns/middleware/test"
|
|
|
|
"github.com/miekg/dns"
|
|
)
|
|
|
|
func TestMultiLookup(t *testing.T) {
|
|
etc.Zones = []string{"skydns.test.", "miek.nl."}
|
|
defer func() { etc.Zones = []string{"skydns.test.", "skydns_extra.test.", "in-addr.arpa."} }()
|
|
etc.Next = test.ErrorHandler()
|
|
defer func() { etc.Next = nil }()
|
|
|
|
for _, serv := range servicesMulti {
|
|
set(t, etc, serv.Key, 0, serv)
|
|
defer delete(t, etc, serv.Key)
|
|
}
|
|
for _, tc := range dnsTestCasesMulti {
|
|
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)
|
|
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)
|
|
}
|
|
}
|
|
}
|
|
|
|
// Note the key is encoded as DNS name, while in "reality" it is a etcd path.
|
|
var servicesMulti = []*msg.Service{
|
|
{Host: "dev.server1", Port: 8080, Key: "a.server1.dev.region1.skydns.test."},
|
|
{Host: "dev.server1", Port: 8080, Key: "a.server1.dev.region1.miek.nl."},
|
|
{Host: "dev.server1", Port: 8080, Key: "a.server1.dev.region1.example.org."},
|
|
}
|
|
|
|
var dnsTestCasesMulti = []test.Case{
|
|
{
|
|
Qname: "a.server1.dev.region1.skydns.test.", Qtype: dns.TypeSRV,
|
|
Answer: []dns.RR{test.SRV("a.server1.dev.region1.skydns.test. 300 SRV 10 100 8080 dev.server1.")},
|
|
},
|
|
{
|
|
Qname: "a.server1.dev.region1.miek.nl.", Qtype: dns.TypeSRV,
|
|
Answer: []dns.RR{test.SRV("a.server1.dev.region1.miek.nl. 300 SRV 10 100 8080 dev.server1.")},
|
|
},
|
|
{
|
|
Qname: "a.server1.dev.region1.example.org.", Qtype: dns.TypeSRV, Rcode: dns.RcodeServerFailure,
|
|
},
|
|
}
|