diff options
-rw-r--r-- | plugin/dnstap/dnstapio/io.go | 19 | ||||
-rw-r--r-- | plugin/dnstap/dnstapio/io_test.go | 9 |
2 files changed, 17 insertions, 11 deletions
diff --git a/plugin/dnstap/dnstapio/io.go b/plugin/dnstap/dnstapio/io.go index 586def2ac..0c409d6fb 100644 --- a/plugin/dnstap/dnstapio/io.go +++ b/plugin/dnstap/dnstapio/io.go @@ -1,8 +1,7 @@ package dnstapio import ( - "fmt" - "io" + "log" tap "github.com/dnstap/golang-dnstap" "github.com/golang/protobuf/proto" @@ -10,9 +9,9 @@ import ( // DnstapIO wraps the dnstap I/O routine. type DnstapIO struct { - writer io.WriteCloser - queue chan tap.Dnstap - stop chan bool + protocol Protocol + queue chan tap.Dnstap + stop chan bool } // Protocol is either `out.TCP` or `out.Socket`. @@ -26,7 +25,7 @@ type Protocol interface { // New dnstap I/O routine from Protocol. func New(w Protocol) *DnstapIO { dio := DnstapIO{} - dio.writer = w + dio.protocol = w dio.queue = make(chan tap.Dnstap, 10) dio.stop = make(chan bool) go dio.serve() @@ -38,7 +37,7 @@ func (dio *DnstapIO) Dnstap(payload tap.Dnstap) { select { case dio.queue <- payload: default: - fmt.Println("[WARN] Dnstap payload dropped.") + log.Println("[WARN] Dnstap payload dropped.") } } @@ -48,9 +47,9 @@ func (dio *DnstapIO) serve() { case payload := <-dio.queue: frame, err := proto.Marshal(&payload) if err == nil { - dio.writer.Write(frame) + dio.protocol.Write(frame) } else { - fmt.Println("[ERROR] Invalid dnstap payload dropped.") + log.Printf("[ERROR] Invalid dnstap payload dropped: %s\n", err) } case <-dio.stop: close(dio.queue) @@ -65,5 +64,5 @@ func (dio DnstapIO) Close() error { dio.stop <- true <-dio.stop close(dio.stop) - return dio.writer.Close() + return dio.protocol.Close() } diff --git a/plugin/dnstap/dnstapio/io_test.go b/plugin/dnstap/dnstapio/io_test.go index 80b804752..17e7758c3 100644 --- a/plugin/dnstap/dnstapio/io_test.go +++ b/plugin/dnstap/dnstapio/io_test.go @@ -2,6 +2,8 @@ package dnstapio import ( "bytes" + "io/ioutil" + "log" "sync" "testing" "time" @@ -9,6 +11,10 @@ import ( tap "github.com/dnstap/golang-dnstap" ) +func init() { + log.SetOutput(ioutil.Discard) +} + type buf struct { *bytes.Buffer cost time.Duration @@ -38,7 +44,8 @@ func TestRace(t *testing.T) { return default: time.Sleep(50 * time.Millisecond) - dio.Dnstap(tap.Dnstap{}) + t := tap.Dnstap_MESSAGE + dio.Dnstap(tap.Dnstap{Type: &t}) } } }() |