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/setup_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/setup_test.go')
-rw-r--r-- | middleware/cache/setup_test.go | 71 |
1 files changed, 71 insertions, 0 deletions
diff --git a/middleware/cache/setup_test.go b/middleware/cache/setup_test.go new file mode 100644 index 000000000..493ade5a7 --- /dev/null +++ b/middleware/cache/setup_test.go @@ -0,0 +1,71 @@ +package cache + +import ( + "testing" + "time" + + "github.com/mholt/caddy" +) + +func TestSetup(t *testing.T) { + tests := []struct { + input string + shouldErr bool + expectedNcap int + expectedPcap int + expectedNttl time.Duration + expectedPttl time.Duration + }{ + {`cache`, false, defaultCap, defaultCap, maxNTTL, maxTTL}, + {`cache {}`, false, defaultCap, defaultCap, maxNTTL, maxTTL}, + {`cache example.nl { + positive 10 + }`, false, defaultCap, 10, maxNTTL, maxTTL}, + {`cache example.nl { + positive 10 + negative 10 15 + }`, false, 10, 10, 15 * time.Second, maxTTL}, + {`cache 25 example.nl { + positive 10 + negative 10 15 + }`, false, 10, 10, 15 * time.Second, 25 * time.Second}, + {`cache aaa example.nl`, false, defaultCap, defaultCap, maxNTTL, maxTTL}, + + // fails + {`cache example.nl { + positive + negative 10 15 + }`, true, defaultCap, defaultCap, maxTTL, maxTTL}, + {`cache example.nl { + positive 15 + negative aaa + }`, true, defaultCap, defaultCap, maxTTL, maxTTL}, + } + for i, test := range tests { + c := caddy.NewTestController("dns", test.input) + ca, err := cacheParse(c) + if test.shouldErr && err == nil { + t.Errorf("Test %v: Expected error but found nil", i) + continue + } else if !test.shouldErr && err != nil { + t.Errorf("Test %v: Expected no error but found error: %v", i, err) + continue + } + if test.shouldErr && err != nil { + continue + } + + if ca.ncap != test.expectedNcap { + t.Errorf("Test %v: Expected ncap %v but found: %v", i, test.expectedNcap, ca.ncap) + } + if ca.pcap != test.expectedPcap { + t.Errorf("Test %v: Expected pcap %v but found: %v", i, test.expectedPcap, ca.pcap) + } + if ca.nttl != test.expectedNttl { + t.Errorf("Test %v: Expected nttl %v but found: %v", i, test.expectedNttl, ca.nttl) + } + if ca.pttl != test.expectedPttl { + t.Errorf("Test %v: Expected pttl %v but found: %v", i, test.expectedPttl, ca.pttl) + } + } +} |