| 
									
										
										
										
											2017-07-24 23:12:50 +02:00
										 |  |  | package taprw
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import (
 | 
					
						
							|  |  |  | 	"testing"
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-14 09:36:06 +01:00
										 |  |  | 	"github.com/coredns/coredns/plugin/dnstap/test"
 | 
					
						
							|  |  |  | 	mwtest "github.com/coredns/coredns/plugin/test"
 | 
					
						
							| 
									
										
										
										
											2017-07-24 23:12:50 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	"github.com/miekg/dns"
 | 
					
						
							|  |  |  | )
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func testingMsg() (m *dns.Msg) {
 | 
					
						
							|  |  |  | 	m = new(dns.Msg)
 | 
					
						
							|  |  |  | 	m.SetQuestion("example.com.", dns.TypeA)
 | 
					
						
							|  |  |  | 	m.SetEdns0(4097, true)
 | 
					
						
							|  |  |  | 	return
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-01 12:41:41 +02:00
										 |  |  | func TestClientQueryResponse(t *testing.T) {
 | 
					
						
							|  |  |  | 	trapper := test.TrapTapper{Full: true}
 | 
					
						
							|  |  |  | 	m := testingMsg()
 | 
					
						
							| 
									
										
										
										
											2017-07-24 23:12:50 +02:00
										 |  |  | 	rw := ResponseWriter{
 | 
					
						
							| 
									
										
										
										
											2017-09-01 12:41:41 +02:00
										 |  |  | 		Query:          m,
 | 
					
						
							|  |  |  | 		Tapper:         &trapper,
 | 
					
						
							| 
									
										
										
										
											2017-07-24 23:12:50 +02:00
										 |  |  | 		ResponseWriter: &mwtest.ResponseWriter{},
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 	d := test.TestingData()
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// will the wire-format msg be reported?
 | 
					
						
							|  |  |  | 	bin, err := m.Pack()
 | 
					
						
							|  |  |  | 	if err != nil {
 | 
					
						
							|  |  |  | 		t.Fatal(err)
 | 
					
						
							|  |  |  | 		return
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 	d.Packed = bin
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-01 12:41:41 +02:00
										 |  |  | 	if err := rw.WriteMsg(m); err != nil {
 | 
					
						
							| 
									
										
										
										
											2017-07-24 23:12:50 +02:00
										 |  |  | 		t.Fatal(err)
 | 
					
						
							|  |  |  | 		return
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							| 
									
										
										
										
											2017-09-01 12:41:41 +02:00
										 |  |  | 	if l := len(trapper.Trap); l != 2 {
 | 
					
						
							| 
									
										
										
										
											2018-05-07 22:47:25 +01:00
										 |  |  | 		t.Fatalf("Mmsg %d trapped", l)
 | 
					
						
							| 
									
										
										
										
											2017-07-24 23:12:50 +02:00
										 |  |  | 		return
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							| 
									
										
										
										
											2018-03-01 03:19:01 +01:00
										 |  |  | 	want, err := d.ToClientQuery()
 | 
					
						
							|  |  |  | 	if err != nil {
 | 
					
						
							|  |  |  | 		t.Fatal("Testing data must build", err)
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							| 
									
										
										
										
											2017-07-24 23:12:50 +02:00
										 |  |  | 	have := trapper.Trap[0]
 | 
					
						
							|  |  |  | 	if !test.MsgEqual(want, have) {
 | 
					
						
							| 
									
										
										
										
											2018-05-07 22:47:25 +01:00
										 |  |  | 		t.Fatalf("Query: want: %v\nhave: %v", want, have)
 | 
					
						
							| 
									
										
										
										
											2017-07-24 23:12:50 +02:00
										 |  |  | 	}
 | 
					
						
							| 
									
										
										
										
											2018-03-01 03:19:01 +01:00
										 |  |  | 	want, err = d.ToClientResponse()
 | 
					
						
							|  |  |  | 	if err != nil {
 | 
					
						
							|  |  |  | 		t.Fatal("Testing data must build", err)
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							| 
									
										
										
										
											2017-09-01 12:41:41 +02:00
										 |  |  | 	have = trapper.Trap[1]
 | 
					
						
							| 
									
										
										
										
											2017-07-24 23:12:50 +02:00
										 |  |  | 	if !test.MsgEqual(want, have) {
 | 
					
						
							| 
									
										
										
										
											2018-05-07 22:47:25 +01:00
										 |  |  | 		t.Fatalf("Response: want: %v\nhave: %v", want, have)
 | 
					
						
							| 
									
										
										
										
											2017-07-24 23:12:50 +02:00
										 |  |  | 	}
 | 
					
						
							|  |  |  | }
 | 
					
						
							| 
									
										
										
										
											2017-09-29 13:38:01 -07:00
										 |  |  | 
 | 
					
						
							|  |  |  | func TestClientQueryResponseWithSendOption(t *testing.T) {
 | 
					
						
							|  |  |  | 	trapper := test.TrapTapper{Full: true}
 | 
					
						
							|  |  |  | 	m := testingMsg()
 | 
					
						
							|  |  |  | 	rw := ResponseWriter{
 | 
					
						
							|  |  |  | 		Query:          m,
 | 
					
						
							|  |  |  | 		Tapper:         &trapper,
 | 
					
						
							|  |  |  | 		ResponseWriter: &mwtest.ResponseWriter{},
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 	d := test.TestingData()
 | 
					
						
							|  |  |  | 	bin, err := m.Pack()
 | 
					
						
							|  |  |  | 	if err != nil {
 | 
					
						
							|  |  |  | 		t.Fatal(err)
 | 
					
						
							|  |  |  | 		return
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 	d.Packed = bin
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Do not send both CQ and CR
 | 
					
						
							|  |  |  | 	o := SendOption{Cq: false, Cr: false}
 | 
					
						
							|  |  |  | 	rw.Send = &o
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if err := rw.WriteMsg(m); err != nil {
 | 
					
						
							|  |  |  | 		t.Fatal(err)
 | 
					
						
							|  |  |  | 		return
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 	if l := len(trapper.Trap); l != 0 {
 | 
					
						
							|  |  |  | 		t.Fatalf("%d msg trapped", l)
 | 
					
						
							|  |  |  | 		return
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	//Send CQ
 | 
					
						
							|  |  |  | 	o.Cq = true
 | 
					
						
							|  |  |  | 	if err := rw.WriteMsg(m); err != nil {
 | 
					
						
							|  |  |  | 		t.Fatal(err)
 | 
					
						
							|  |  |  | 		return
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 	if l := len(trapper.Trap); l != 1 {
 | 
					
						
							|  |  |  | 		t.Fatalf("%d msg trapped", l)
 | 
					
						
							|  |  |  | 		return
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	//Send CR
 | 
					
						
							|  |  |  | 	trapper.Trap = trapper.Trap[:0]
 | 
					
						
							|  |  |  | 	o.Cq = false
 | 
					
						
							|  |  |  | 	o.Cr = true
 | 
					
						
							|  |  |  | 	if err := rw.WriteMsg(m); err != nil {
 | 
					
						
							|  |  |  | 		t.Fatal(err)
 | 
					
						
							|  |  |  | 		return
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | 	if l := len(trapper.Trap); l != 1 {
 | 
					
						
							|  |  |  | 		t.Fatalf("%d msg trapped", l)
 | 
					
						
							|  |  |  | 		return
 | 
					
						
							|  |  |  | 	}
 | 
					
						
							|  |  |  | }
 |