aboutsummaryrefslogtreecommitdiff
path: root/middleware/cache/cache_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'middleware/cache/cache_test.go')
-rw-r--r--middleware/cache/cache_test.go44
1 files changed, 44 insertions, 0 deletions
diff --git a/middleware/cache/cache_test.go b/middleware/cache/cache_test.go
index adac7d67b..f364e69f1 100644
--- a/middleware/cache/cache_test.go
+++ b/middleware/cache/cache_test.go
@@ -6,6 +6,8 @@ import (
"testing"
"time"
+ "golang.org/x/net/context"
+
"github.com/coredns/coredns/middleware"
"github.com/coredns/coredns/middleware/pkg/cache"
"github.com/coredns/coredns/middleware/pkg/response"
@@ -205,3 +207,45 @@ func TestCache(t *testing.T) {
}
}
}
+
+func BenchmarkCacheResponse(b *testing.B) {
+ 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 = BackendHandler()
+
+ ctx := context.TODO()
+
+ reqs := make([]*dns.Msg, 5)
+ for i, q := range []string{"example1", "example2", "a", "b", "ddd"} {
+ reqs[i] = new(dns.Msg)
+ reqs[i].SetQuestion(q+".example.org.", dns.TypeA)
+ }
+
+ b.RunParallel(func(pb *testing.PB) {
+ i := 0
+ for pb.Next() {
+ req := reqs[i]
+ c.ServeDNS(ctx, &test.ResponseWriter{}, req)
+ i++
+ i = i % 5
+ }
+ })
+}
+
+func BackendHandler() middleware.Handler {
+ return middleware.HandlerFunc(func(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error) {
+ m := new(dns.Msg)
+ m.SetReply(r)
+ m.Response = true
+ m.RecursionAvailable = true
+
+ owner := m.Question[0].Name
+ m.Answer = []dns.RR{test.A(owner + " 303 IN A 127.0.0.53")}
+
+ w.WriteMsg(m)
+ return dns.RcodeSuccess, nil
+ })
+}