aboutsummaryrefslogtreecommitdiff
path: root/test/auto_test.go
diff options
context:
space:
mode:
authorGravatar Miek Gieben <miek@miek.nl> 2016-10-17 18:37:56 +0100
committerGravatar GitHub <noreply@github.com> 2016-10-17 18:37:56 +0100
commitd536272201b117e18c909a921358fa19dee89f35 (patch)
tree35bf3d9a118401cb6e51d6bc20e1e7eb3b0b5f95 /test/auto_test.go
parent2eafe3ee94bc4b1e94000bc74f8ee524132ae27c (diff)
downloadcoredns-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.go88
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
+`