diff options
author | 2016-10-02 08:31:44 +0100 | |
---|---|---|
committer | 2016-10-02 08:31:44 +0100 | |
commit | e54c232c8c97fb163647c697e921e6f69846e304 (patch) | |
tree | b75fff81276e58a2ec4417c6c6742a22d6156f27 /middleware/cache/cache_test.go | |
parent | 9b6b8d276269cb1a36b7f78da4caa51106dff0ed (diff) | |
download | coredns-e54c232c8c97fb163647c697e921e6f69846e304.tar.gz coredns-e54c232c8c97fb163647c697e921e6f69846e304.tar.zst coredns-e54c232c8c97fb163647c697e921e6f69846e304.zip |
middleware/cache: split cache in positive and negative and use lru (#298)
Make the cache memory bounded, by using a LRU cache. Also split the
cache in a positive and negative one - each with its own controls.
Extend the cache stanza to allow for this:
cache {
positive limit [ttl]
negative limit [ttl]
}
is now possible. This also add a cache_test.go in the toplevel test/
directory that exercises the caching path.
Fixes #260
Diffstat (limited to 'middleware/cache/cache_test.go')
-rw-r--r-- | middleware/cache/cache_test.go | 35 |
1 files changed, 17 insertions, 18 deletions
diff --git a/middleware/cache/cache_test.go b/middleware/cache/cache_test.go index 95a1d50b8..ab3a14bfb 100644 --- a/middleware/cache/cache_test.go +++ b/middleware/cache/cache_test.go @@ -8,6 +8,7 @@ import ( "github.com/miekg/coredns/middleware/pkg/response" "github.com/miekg/coredns/middleware/test" + lru "github.com/hashicorp/golang-lru" "github.com/miekg/dns" ) @@ -26,21 +27,15 @@ var cacheTestCases = []cacheTestCase{ Case: test.Case{ Qname: "miek.nl.", Qtype: dns.TypeMX, Answer: []dns.RR{ - test.MX("miek.nl. 1800 IN MX 1 aspmx.l.google.com."), - test.MX("miek.nl. 1800 IN MX 10 aspmx2.googlemail.com."), - test.MX("miek.nl. 1800 IN MX 10 aspmx3.googlemail.com."), - test.MX("miek.nl. 1800 IN MX 5 alt1.aspmx.l.google.com."), - test.MX("miek.nl. 1800 IN MX 5 alt2.aspmx.l.google.com."), + test.MX("miek.nl. 3600 IN MX 1 aspmx.l.google.com."), + test.MX("miek.nl. 3600 IN MX 10 aspmx2.googlemail.com."), }, }, in: test.Case{ Qname: "miek.nl.", Qtype: dns.TypeMX, Answer: []dns.RR{ - test.MX("miek.nl. 1800 IN MX 1 aspmx.l.google.com."), - test.MX("miek.nl. 1800 IN MX 10 aspmx2.googlemail.com."), - test.MX("miek.nl. 1800 IN MX 10 aspmx3.googlemail.com."), - test.MX("miek.nl. 1800 IN MX 5 alt1.aspmx.l.google.com."), - test.MX("miek.nl. 1800 IN MX 5 alt2.aspmx.l.google.com."), + test.MX("miek.nl. 3601 IN MX 1 aspmx.l.google.com."), + test.MX("miek.nl. 3601 IN MX 10 aspmx2.googlemail.com."), }, }, }, @@ -65,14 +60,17 @@ func cacheMsg(m *dns.Msg, tc cacheTestCase) *dns.Msg { return m } -func newTestCache() (Cache, *ResponseWriter) { - c := NewCache(0, []string{"."}, nil) - crr := NewCachingResponseWriter(nil, c.cache, time.Duration(0)) +func newTestCache(ttl time.Duration) (*Cache, *ResponseWriter) { + c := &Cache{Zones: []string{"."}, pcap: defaultCap, ncap: defaultCap, pttl: ttl, nttl: ttl} + c.pcache, _ = lru.New(c.pcap) + c.ncache, _ = lru.New(c.ncap) + + crr := &ResponseWriter{nil, c} return c, crr } func TestCache(t *testing.T) { - c, crr := newTestCache() + c, crr := newTestCache(maxTTL) for _, tc := range cacheTestCases { m := tc.in.Msg() @@ -80,14 +78,15 @@ func TestCache(t *testing.T) { do := tc.in.Do mt, _ := response.Classify(m) - key := cacheKey(m, mt, do) - crr.set(m, key, mt) + k := key(m, mt, do) + crr.set(m, k, mt, c.pttl) name := middleware.Name(m.Question[0].Name).Normalize() qtype := m.Question[0].Qtype - i, ok := c.get(name, qtype, do) - if !ok && !m.Truncated { + i, ok, _ := c.get(name, qtype, do) + if ok && m.Truncated { t.Errorf("Truncated message should not have been cached") + continue } if ok { |