aboutsummaryrefslogtreecommitdiff
path: root/plugin/cache
diff options
context:
space:
mode:
Diffstat (limited to 'plugin/cache')
-rw-r--r--plugin/cache/README.md2
-rw-r--r--plugin/cache/setup.go10
-rw-r--r--plugin/cache/setup_test.go54
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)