aboutsummaryrefslogtreecommitdiff
path: root/plugin/cache/prefech_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'plugin/cache/prefech_test.go')
-rw-r--r--plugin/cache/prefech_test.go54
1 files changed, 54 insertions, 0 deletions
diff --git a/plugin/cache/prefech_test.go b/plugin/cache/prefech_test.go
new file mode 100644
index 000000000..0e9d84da2
--- /dev/null
+++ b/plugin/cache/prefech_test.go
@@ -0,0 +1,54 @@
+package cache
+
+import (
+ "fmt"
+ "testing"
+ "time"
+
+ "github.com/coredns/coredns/plugin"
+ "github.com/coredns/coredns/plugin/pkg/cache"
+ "github.com/coredns/coredns/plugin/pkg/dnsrecorder"
+
+ "github.com/coredns/coredns/plugin/test"
+ "github.com/miekg/dns"
+ "golang.org/x/net/context"
+)
+
+var p = false
+
+func TestPrefetch(t *testing.T) {
+ c := &Cache{Zones: []string{"."}, pcap: defaultCap, ncap: defaultCap, pttl: maxTTL, nttl: maxTTL}
+ c.pcache = cache.New(c.pcap)
+ c.ncache = cache.New(c.ncap)
+ c.prefetch = 1
+ c.duration = 1 * time.Second
+ c.Next = PrefetchHandler(t, dns.RcodeSuccess, nil)
+
+ ctx := context.TODO()
+
+ req := new(dns.Msg)
+ req.SetQuestion("lowttl.example.org.", dns.TypeA)
+
+ rec := dnsrecorder.New(&test.ResponseWriter{})
+
+ c.ServeDNS(ctx, rec, req)
+ p = true // prefetch should be true for the 2nd fetch
+ c.ServeDNS(ctx, rec, req)
+}
+
+func PrefetchHandler(t *testing.T, rcode int, err error) plugin.Handler {
+ return plugin.HandlerFunc(func(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error) {
+ m := new(dns.Msg)
+ m.SetQuestion("lowttl.example.org.", dns.TypeA)
+ m.Response = true
+ m.RecursionAvailable = true
+ m.Answer = append(m.Answer, test.A("lowttl.example.org. 80 IN A 127.0.0.53"))
+ if p != w.(*ResponseWriter).prefetch {
+ err = fmt.Errorf("cache prefetch not equal to p: got %t, want %t", p, w.(*ResponseWriter).prefetch)
+ t.Fatal(err)
+ }
+
+ w.WriteMsg(m)
+ return rcode, err
+ })
+}