aboutsummaryrefslogtreecommitdiff
path: root/plugin/debug/pcap_test.go
diff options
context:
space:
mode:
authorGravatar Miek Gieben <miek@miek.nl> 2018-07-04 07:54:17 +0100
committerGravatar GitHub <noreply@github.com> 2018-07-04 07:54:17 +0100
commite6f81ebb314f3a4923fb3a63436a9243eeba9e47 (patch)
tree6d3f816dd39294844ce2a2bdc2a1ec53999354ba /plugin/debug/pcap_test.go
parent063e673bc4575532d30600405d4b60f4ee74282c (diff)
downloadcoredns-e6f81ebb314f3a4923fb3a63436a9243eeba9e47.tar.gz
coredns-e6f81ebb314f3a4923fb3a63436a9243eeba9e47.tar.zst
coredns-e6f81ebb314f3a4923fb3a63436a9243eeba9e47.zip
Add debug.Hexdump (#1902)
Allow plugins to dump messages in text pcap to the log. The forward plugin does this when a reply does not much the query. If the debug plugin isn't loaded Hexdump and Hexdumpf are noop. Signed-off-by: Miek Gieben <miek@miek.nl>
Diffstat (limited to 'plugin/debug/pcap_test.go')
-rw-r--r--plugin/debug/pcap_test.go74
1 files changed, 74 insertions, 0 deletions
diff --git a/plugin/debug/pcap_test.go b/plugin/debug/pcap_test.go
new file mode 100644
index 000000000..724189db7
--- /dev/null
+++ b/plugin/debug/pcap_test.go
@@ -0,0 +1,74 @@
+package debug
+
+import (
+ "bytes"
+ "fmt"
+ golog "log"
+ "strings"
+ "testing"
+
+ "github.com/coredns/coredns/plugin/pkg/log"
+
+ "github.com/miekg/dns"
+)
+
+func msg() *dns.Msg {
+ m := new(dns.Msg)
+ m.SetQuestion("example.local.", dns.TypeA)
+ m.SetEdns0(4096, true)
+ m.Id = 10
+
+ return m
+}
+
+func ExampleLogHexdump() {
+ buf, _ := msg().Pack()
+ h := hexdump(buf)
+ fmt.Println(string(h))
+
+ // Output:
+ // debug: 000000 00 0a 01 00 00 01 00 00 00 00 00 01 07 65 78 61
+ // debug: 000010 6d 70 6c 65 05 6c 6f 63 61 6c 00 00 01 00 01 00
+ // debug: 000020 00 29 10 00 00 00 80 00 00 00
+ // debug: 00002a
+}
+
+func TestHexdump(t *testing.T) {
+ var f bytes.Buffer
+ golog.SetOutput(&f)
+ log.D = true
+
+ str := "Hi There!"
+ Hexdump(msg(), str)
+ logged := f.String()
+
+ if !strings.Contains(logged, "[DEBUG] "+str) {
+ t.Errorf("The string %s, is not contained in the logged output: %s", str, logged)
+ }
+}
+
+func TestHexdumpf(t *testing.T) {
+ var f bytes.Buffer
+ golog.SetOutput(&f)
+ log.D = true
+
+ str := "Hi There!"
+ Hexdumpf(msg(), "%s %d", str, 10)
+ logged := f.String()
+
+ if !strings.Contains(logged, "[DEBUG] "+fmt.Sprintf("%s %d", str, 10)) {
+ t.Errorf("The string %s %d, is not contained in the logged output: %s", str, 10, logged)
+ }
+}
+
+func TestNoDebug(t *testing.T) {
+ var f bytes.Buffer
+ golog.SetOutput(&f)
+ log.D = false
+
+ str := "Hi There!"
+ Hexdumpf(msg(), "%s %d", str, 10)
+ if len(f.Bytes()) != 0 {
+ t.Errorf("Expected no output, got %d bytes", len(f.Bytes()))
+ }
+}