| 
									
										
										
										
											2018-07-04 07:54:17 +01:00
										 |  |  | 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
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-23 21:02:30 +01:00
										 |  |  | func TestNoDebug(t *testing.T) {
 | 
					
						
							|  |  |  | 	// Must come first, because set log.D.Set() which is impossible to undo.
 | 
					
						
							|  |  |  | 	var f bytes.Buffer
 | 
					
						
							|  |  |  | 	golog.SetOutput(&f)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	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()))
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-07-04 07:54:17 +01:00
										 |  |  | 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)
 | 
					
						
							| 
									
										
										
										
											2019-05-23 21:02:30 +01:00
										 |  |  | 	log.D.Set()
 | 
					
						
							| 
									
										
										
										
											2018-07-04 07:54:17 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	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)
 | 
					
						
							| 
									
										
										
										
											2019-05-23 21:02:30 +01:00
										 |  |  | 	log.D.Set()
 | 
					
						
							| 
									
										
										
										
											2018-07-04 07:54:17 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	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)
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | }
 |