diff options
author | 2018-03-01 03:19:01 +0100 | |
---|---|---|
committer | 2018-02-28 18:19:01 -0800 | |
commit | 6bb08ffee446573c8f401160fa7830ffacca8530 (patch) | |
tree | ce52ca2ecb3b2b7dbbac16218a22d0af868a19e0 /plugin/dnstap/handler_test.go | |
parent | f697b33283afe695554888eb0cf9f5451c481470 (diff) | |
download | coredns-6bb08ffee446573c8f401160fa7830ffacca8530.tar.gz coredns-6bb08ffee446573c8f401160fa7830ffacca8530.tar.zst coredns-6bb08ffee446573c8f401160fa7830ffacca8530.zip |
Easier way to dnstap? (#1496)
* Easier way to dnstap?
* Remove unnecessary function parameter from Tapper
* golint
* golint 2
* Proxy dnstap tests
* README.md & doc
* net.IP
* Proxy test was incorrect
* Small changes
* Update README.md
* Was not reporting dnstap errors + test
* Wasn't working at all, now it's ok
* Thanks Travis
Diffstat (limited to 'plugin/dnstap/handler_test.go')
-rw-r--r-- | plugin/dnstap/handler_test.go | 67 |
1 files changed, 63 insertions, 4 deletions
diff --git a/plugin/dnstap/handler_test.go b/plugin/dnstap/handler_test.go index 617c8e675..3809bc4d0 100644 --- a/plugin/dnstap/handler_test.go +++ b/plugin/dnstap/handler_test.go @@ -1,8 +1,12 @@ package dnstap import ( + "errors" + "net" + "strings" "testing" + "github.com/coredns/coredns/plugin" "github.com/coredns/coredns/plugin/dnstap/test" mwtest "github.com/coredns/coredns/plugin/test" @@ -20,8 +24,8 @@ func testCase(t *testing.T, tapq, tapr *tap.Message, q, r *dns.Msg) { return 0, w.WriteMsg(r) }), - IO: &w, - Pack: false, + IO: &w, + JoinRawMessage: false, } _, err := h.ServeDNS(context.TODO(), &mwtest.ResponseWriter{}, q) if err != nil { @@ -52,7 +56,62 @@ func TestDnstap(t *testing.T) { mwtest.A("example.org. 3600 IN A 10.0.0.1"), }, }.Msg() - tapq := test.TestingData().ToClientQuery() - tapr := test.TestingData().ToClientResponse() + tapq, _ := test.TestingData().ToClientQuery() + tapr, _ := test.TestingData().ToClientResponse() testCase(t, tapq, tapr, q, r) } + +type noWriter struct { +} + +func (n noWriter) Dnstap(d tap.Dnstap) { +} + +func endWith(c int, err error) plugin.Handler { + return mwtest.HandlerFunc(func(_ context.Context, w dns.ResponseWriter, _ *dns.Msg) (int, error) { + w.WriteMsg(nil) // trigger plugin dnstap to log client query and response + // maybe dnstap should log the client query when no message is written... + return c, err + }) +} + +type badAddr struct { +} + +func (bad badAddr) Network() string { + return "bad network" +} +func (bad badAddr) String() string { + return "bad address" +} + +type badRW struct { + dns.ResponseWriter +} + +func (bad *badRW) RemoteAddr() net.Addr { + return badAddr{} +} + +func TestError(t *testing.T) { + h := Dnstap{ + Next: endWith(0, nil), + IO: noWriter{}, + JoinRawMessage: false, + } + rw := &badRW{&mwtest.ResponseWriter{}} + + // the dnstap error will show only if there is no plugin error + _, err := h.ServeDNS(context.TODO(), rw, nil) + if err == nil || !strings.HasPrefix(err.Error(), "plugin/dnstap") { + t.Fatal("must return the dnstap error but have:", err) + } + + // plugin errors will always overwrite dnstap errors + pluginErr := errors.New("plugin error") + h.Next = endWith(0, pluginErr) + _, err = h.ServeDNS(context.TODO(), rw, nil) + if err != pluginErr { + t.Fatal("must return the plugin error but have:", err) + } +} |