diff options
Diffstat (limited to 'plugin/debug')
-rw-r--r-- | plugin/debug/README.md | 20 | ||||
-rw-r--r-- | plugin/debug/debug.go | 28 | ||||
-rw-r--r-- | plugin/debug/debug_test.go | 49 |
3 files changed, 97 insertions, 0 deletions
diff --git a/plugin/debug/README.md b/plugin/debug/README.md new file mode 100644 index 000000000..2598a1900 --- /dev/null +++ b/plugin/debug/README.md @@ -0,0 +1,20 @@ +# debug + +*debug* disables the automatic recovery upon a CoreDNS crash so that you'll get a nice stack trace. + +Note that the *errors* plugin (if loaded) will also set a `recover` negating this setting. +The main use of *debug* is to help testing. + +## Syntax + +~~~ txt +debug +~~~ + +## Examples + +Disable CoreDNS' ability to recover from crashes: + +~~~ txt +debug +~~~ diff --git a/plugin/debug/debug.go b/plugin/debug/debug.go new file mode 100644 index 000000000..d69ce0e55 --- /dev/null +++ b/plugin/debug/debug.go @@ -0,0 +1,28 @@ +package debug + +import ( + "github.com/coredns/coredns/core/dnsserver" + "github.com/coredns/coredns/plugin" + + "github.com/mholt/caddy" +) + +func init() { + caddy.RegisterPlugin("debug", caddy.Plugin{ + ServerType: "dns", + Action: setup, + }) +} + +func setup(c *caddy.Controller) error { + config := dnsserver.GetConfig(c) + + for c.Next() { + if c.NextArg() { + return plugin.Error("debug", c.ArgErr()) + } + config.Debug = true + } + + return nil +} diff --git a/plugin/debug/debug_test.go b/plugin/debug/debug_test.go new file mode 100644 index 000000000..a4802fee5 --- /dev/null +++ b/plugin/debug/debug_test.go @@ -0,0 +1,49 @@ +package debug + +import ( + "io/ioutil" + "log" + "testing" + + "github.com/coredns/coredns/core/dnsserver" + + "github.com/mholt/caddy" +) + +func TestDebug(t *testing.T) { + log.SetOutput(ioutil.Discard) + + tests := []struct { + input string + shouldErr bool + expectedDebug bool + }{ + // positive + { + `debug`, false, true, + }, + // negative + { + `debug off`, true, false, + }, + } + + for i, test := range tests { + c := caddy.NewTestController("dns", test.input) + err := setup(c) + cfg := dnsserver.GetConfig(c) + + if test.shouldErr && err == nil { + t.Fatalf("Test %d: Expected error but found %s for input %s", i, err, test.input) + } + + if err != nil { + if !test.shouldErr { + t.Fatalf("Test %d: Expected no error but found one for input %s. Error was: %v", i, test.input, err) + } + } + if cfg.Debug != test.expectedDebug { + t.Fatalf("Test %d: Expected debug to be: %t, but got: %t, input: %s", i, test.expectedDebug, cfg.Debug, test.input) + } + } +} |