diff options
Diffstat (limited to 'middleware/cache/cache_test.go')
-rw-r--r-- | middleware/cache/cache_test.go | 44 |
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 + }) +} |