diff options
author | 2016-10-17 18:37:56 +0100 | |
---|---|---|
committer | 2016-10-17 18:37:56 +0100 | |
commit | d536272201b117e18c909a921358fa19dee89f35 (patch) | |
tree | 35bf3d9a118401cb6e51d6bc20e1e7eb3b0b5f95 /test/auto_test.go | |
parent | 2eafe3ee94bc4b1e94000bc74f8ee524132ae27c (diff) | |
download | coredns-d536272201b117e18c909a921358fa19dee89f35.tar.gz coredns-d536272201b117e18c909a921358fa19dee89f35.tar.zst coredns-d536272201b117e18c909a921358fa19dee89f35.zip |
middleware/auto: add (#333)
Add auto-load middleware that automatically picks up zones.
Every X seconds it will scan for new zones.
Add tests and documentation.
Make 'make test' use -race.
Diffstat (limited to 'test/auto_test.go')
-rw-r--r-- | test/auto_test.go | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/test/auto_test.go b/test/auto_test.go new file mode 100644 index 000000000..525e58df3 --- /dev/null +++ b/test/auto_test.go @@ -0,0 +1,88 @@ +package test + +import ( + "io/ioutil" + "log" + "os" + "path" + "testing" + "time" + + "github.com/miekg/coredns/middleware/proxy" + "github.com/miekg/coredns/middleware/test" + "github.com/miekg/coredns/request" + + "github.com/miekg/dns" +) + +func TestAuto(t *testing.T) { + tmpdir, err := ioutil.TempDir(os.TempDir(), "coredns") + if err != nil { + t.Fatal(err) + } + + corefile := `org:0 { + auto { + directory ` + tmpdir + ` db\.(.*) {1} 1 + } + } +` + + 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() + + log.SetOutput(ioutil.Discard) + + p := proxy.New([]string{udp}) + state := request.Request{W: &test.ResponseWriter{}, Req: new(dns.Msg)} + + resp, err := p.Lookup(state, "www.example.org.", dns.TypeA) + if err != nil { + t.Fatal("Expected to receive reply, but didn't") + } + if resp.Rcode != dns.RcodeServerFailure { + t.Fatalf("Expected reply to be a SERVFAIL, got %d", resp.Rcode) + } + + // Write db.example.org to get example.org. + if err = ioutil.WriteFile(path.Join(tmpdir, "db.example.org"), []byte(zoneContent), 0644); err != nil { + t.Fatal(err) + } + + time.Sleep(1100 * time.Millisecond) // wait for it to be picked up + resp, err = p.Lookup(state, "www.example.org.", dns.TypeA) + if err != nil { + t.Fatal("Expected to receive reply, but didn't") + } + if len(resp.Answer) != 1 { + t.Fatalf("Expected 1 RR in the answer section, got %d", len(resp.Answer)) + } + + // Remove db.example.org again. + os.Remove(path.Join(tmpdir, "db.example.org")) + + time.Sleep(1100 * time.Millisecond) // wait for it to be picked up + resp, err = p.Lookup(state, "www.example.org.", dns.TypeA) + if err != nil { + t.Fatal("Expected to receive reply, but didn't") + } + if resp.Rcode != dns.RcodeServerFailure { + t.Fatalf("Expected reply to be a SERVFAIL, got %d", resp.Rcode) + } +} + +const zoneContent = `; testzone +@ IN SOA sns.dns.icann.org. noc.dns.icann.org. 2016082534 7200 3600 1209600 3600 + NS a.iana-servers.net. + NS b.iana-servers.net. + +www IN A 127.0.0.1 +` |