mirror of
https://github.com/coredns/coredns.git
synced 2025-11-16 00:42:16 -05:00
return an error for multiple use of some plugins (#1559)
* plugins: Return error for multiple use of some Return plugin.ErrOnce when a plugin that doesn't support it, is called mutliple times. This now adds it for: cache, dnssec, errors, forward, hosts, nsid. And changes it slightly in kubernetes, pprof, reload, root. * more tests
This commit is contained in:
2
plugin/cache/README.md
vendored
2
plugin/cache/README.md
vendored
@@ -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
|
||||
|
||||
10
plugin/cache/setup.go
vendored
10
plugin/cache/setup.go
vendored
@@ -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
|
||||
}
|
||||
|
||||
54
plugin/cache/setup_test.go
vendored
54
plugin/cache/setup_test.go
vendored
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user