aboutsummaryrefslogtreecommitdiff
path: root/plugin/dnstap/handler_test.go
diff options
context:
space:
mode:
authorGravatar varyoo <varyoo@users.noreply.github.com> 2018-03-01 03:19:01 +0100
committerGravatar Miek Gieben <miek@miek.nl> 2018-02-28 18:19:01 -0800
commit6bb08ffee446573c8f401160fa7830ffacca8530 (patch)
treece52ca2ecb3b2b7dbbac16218a22d0af868a19e0 /plugin/dnstap/handler_test.go
parentf697b33283afe695554888eb0cf9f5451c481470 (diff)
downloadcoredns-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.go67
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)
+ }
+}