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:
Miek Gieben
2018-02-28 18:16:05 -08:00
committed by GitHub
parent 5faa9e7bc1
commit f697b33283
27 changed files with 150 additions and 95 deletions

View File

@@ -6,9 +6,12 @@
## Description
This plugin implements RFC 5001 and adds an EDNS0 OPT resource record to replies that uniquely
identify the server. This is useful in anycast setups to see which server was responsible for
generating the reply and for debugging.
This plugin implements [RFC 5001](https://tools.ietf.org/html/rfc5001) and adds an EDNS0 OPT
resource record to replies that uniquely identify the server. This is useful in anycast setups to
see which server was responsible for generating the reply and for debugging.
This plugin can only be used once per Server Block.
## Syntax
@@ -48,3 +51,7 @@ And now a client with NSID support will see an OPT record with the NSID option:
;; QUESTION SECTION:
;whoami.example.org. IN A
~~~
## Also See
[RFC 5001](https://tools.ietf.org/html/rfc5001)

View File

@@ -36,13 +36,16 @@ func nsidParse(c *caddy.Controller) (string, error) {
if err != nil {
nsid = "localhost"
}
i := 0
for c.Next() {
args := c.RemainingArgs()
if len(args) == 0 {
return nsid, nil
if i > 0 {
return nsid, plugin.ErrOnce
}
i++
args := c.RemainingArgs()
if len(args) > 0 {
nsid = strings.Join(args, " ")
}
nsid = strings.Join(args, " ")
return nsid, nil
}
return nsid, nil
}

View File

@@ -19,18 +19,12 @@ func TestSetupNsid(t *testing.T) {
expectedData string
expectedErrContent string // substring from the expected error. Empty for positive cases.
}{
{
`nsid`, false, defaultNsid, "",
},
{
`nsid "ps0"`, false, "ps0", "",
},
{
`nsid "worker1"`, false, "worker1", "",
},
{
`nsid "tf 2"`, false, "tf 2", "",
},
{`nsid`, false, defaultNsid, ""},
{`nsid "ps0"`, false, "ps0", ""},
{`nsid "worker1"`, false, "worker1", ""},
{`nsid "tf 2"`, false, "tf 2", ""},
{`nsid
nsid`, true, "", "plugin"},
}
for i, test := range tests {