diff options
Diffstat (limited to 'plugin/cache')
-rw-r--r-- | plugin/cache/README.md | 2 | ||||
-rw-r--r-- | plugin/cache/setup.go | 10 | ||||
-rw-r--r-- | plugin/cache/setup_test.go | 54 |
3 files changed, 37 insertions, 29 deletions
diff --git a/plugin/cache/README.md b/plugin/cache/README.md index fe9e45c24..ade647599 100644 --- a/plugin/cache/README.md +++ b/plugin/cache/README.md @@ -10,6 +10,8 @@ With *cache* enabled, all records except zone transfers and metadata records wil 3600s. Caching is mostly useful in a scenario when fetching data from the backend (upstream, database, etc.) is expensive. +This plugin can only be used once per Server Block. + ## Syntax ~~~ txt diff --git a/plugin/cache/setup.go b/plugin/cache/setup.go index 41fa023b8..4ea51d510 100644 --- a/plugin/cache/setup.go +++ b/plugin/cache/setup.go @@ -61,7 +61,13 @@ func setup(c *caddy.Controller) error { func cacheParse(c *caddy.Controller) (*Cache, error) { ca := New() + j := 0 for c.Next() { + if j > 0 { + return nil, plugin.ErrOnce + } + j++ + // cache [ttl] [zones..] origins := make([]string, len(c.ServerBlockKeys)) copy(origins, c.ServerBlockKeys) @@ -180,9 +186,7 @@ func cacheParse(c *caddy.Controller) (*Cache, error) { ca.pcache = cache.New(ca.pcap) ca.ncache = cache.New(ca.ncap) - - return ca, nil } - return nil, nil + return ca, nil } diff --git a/plugin/cache/setup_test.go b/plugin/cache/setup_test.go index afc2ecc13..c735e0bb2 100644 --- a/plugin/cache/setup_test.go +++ b/plugin/cache/setup_test.go @@ -20,46 +20,48 @@ func TestSetup(t *testing.T) { {`cache`, false, defaultCap, defaultCap, maxNTTL, maxTTL, 0}, {`cache {}`, false, defaultCap, defaultCap, maxNTTL, maxTTL, 0}, {`cache example.nl { - success 10 - }`, false, defaultCap, 10, maxNTTL, maxTTL, 0}, + success 10 + }`, false, defaultCap, 10, maxNTTL, maxTTL, 0}, {`cache example.nl { - success 10 - denial 10 15 - }`, false, 10, 10, 15 * time.Second, maxTTL, 0}, + success 10 + denial 10 15 + }`, false, 10, 10, 15 * time.Second, maxTTL, 0}, {`cache 25 example.nl { - success 10 - denial 10 15 - }`, false, 10, 10, 15 * time.Second, 25 * time.Second, 0}, + success 10 + denial 10 15 + }`, false, 10, 10, 15 * time.Second, 25 * time.Second, 0}, {`cache aaa example.nl`, false, defaultCap, defaultCap, maxNTTL, maxTTL, 0}, {`cache { - prefetch 10 - }`, false, defaultCap, defaultCap, maxNTTL, maxTTL, 10}, + prefetch 10 + }`, false, defaultCap, defaultCap, maxNTTL, maxTTL, 10}, // fails {`cache example.nl { - success - denial 10 15 - }`, true, defaultCap, defaultCap, maxTTL, maxTTL, 0}, + success + denial 10 15 + }`, true, defaultCap, defaultCap, maxTTL, maxTTL, 0}, {`cache example.nl { - success 15 - denial aaa - }`, true, defaultCap, defaultCap, maxTTL, maxTTL, 0}, + success 15 + denial aaa + }`, true, defaultCap, defaultCap, maxTTL, maxTTL, 0}, {`cache example.nl { - positive 15 - negative aaa - }`, true, defaultCap, defaultCap, maxTTL, maxTTL, 0}, + positive 15 + negative aaa + }`, true, defaultCap, defaultCap, maxTTL, maxTTL, 0}, {`cache 0 example.nl`, true, defaultCap, defaultCap, maxTTL, maxTTL, 0}, {`cache -1 example.nl`, true, defaultCap, defaultCap, maxTTL, maxTTL, 0}, {`cache 1 example.nl { - positive 0 - }`, true, defaultCap, defaultCap, maxTTL, maxTTL, 0}, + positive 0 + }`, true, defaultCap, defaultCap, maxTTL, maxTTL, 0}, {`cache 1 example.nl { - positive 0 - prefetch -1 - }`, true, defaultCap, defaultCap, maxTTL, maxTTL, 0}, + positive 0 + prefetch -1 + }`, true, defaultCap, defaultCap, maxTTL, maxTTL, 0}, {`cache 1 example.nl { - prefetch 0 blurp - }`, true, defaultCap, defaultCap, maxTTL, maxTTL, 0}, + prefetch 0 blurp + }`, true, defaultCap, defaultCap, maxTTL, maxTTL, 0}, + {`cache + cache`, true, defaultCap, defaultCap, maxTTL, maxTTL, 0}, } for i, test := range tests { c := caddy.NewTestController("dns", test.input) |