plugin/secondary: fix a bunch of things and tests (#1406)

Fix the error handling. Log when we have an error during any of the
transfer state. And if there isn't an error transfer the zones.

Also fix the tests in test/ so we, at least, check the initial transfer.

Update the docs to show more about how errors are handled.

Ref #1400
This commit is contained in:
Miek Gieben
2018-01-23 10:35:10 +00:00
committed by GitHub
parent 7d371edb2d
commit 85457cf50d
4 changed files with 62 additions and 146 deletions

View File

@@ -1,8 +1,6 @@
package test
import (
"io/ioutil"
"log"
"testing"
"github.com/coredns/coredns/plugin/proxy"
@@ -27,8 +25,6 @@ func TestEmptySecondaryZone(t *testing.T) {
}
defer i.Stop()
log.SetOutput(ioutil.Discard)
p := proxy.NewLookup([]string{udp})
state := request.Request{W: &test.ResponseWriter{}, Req: new(dns.Msg)}
@@ -40,3 +36,48 @@ func TestEmptySecondaryZone(t *testing.T) {
t.Fatalf("Expected reply to be a SERVFAIL, got %d", resp.Rcode)
}
}
func TestSecondaryZoneTransfer(t *testing.T) {
name, rm, err := test.TempFile(".", exampleOrg)
if err != nil {
t.Fatalf("failed to create zone: %s", err)
}
defer rm()
corefile := `example.org:0 {
file ` + name + ` {
transfer to *
}
}
`
i, _, tcp, err := CoreDNSServerAndPorts(corefile)
if err != nil {
t.Fatalf("Could not get CoreDNS serving instance: %s", err)
}
defer i.Stop()
corefile = `example.org:0 {
secondary {
transfer from ` + tcp + `
}
}
`
i1, udp, _, err := CoreDNSServerAndPorts(corefile)
if err != nil {
t.Fatalf("Could not get CoreDNS serving instance: %s", err)
}
defer i1.Stop()
m := new(dns.Msg)
m.SetQuestion("example.org.", dns.TypeSOA)
r, err := dns.Exchange(m, udp)
if err != nil {
t.Fatalf("Expected to receive reply, but didn't: %s", err)
}
if len(r.Answer) == 0 {
t.Fatalf("Expected answer section")
}
}