8 "golang.org/x/net/dns/dnsmessage"
11 var testq = dnsmessage.Question{Name: dnsmessage.MustNewName("www.example.com."), Type: dnsmessage.TypeA, Class: dnsmessage.ClassINET}
13 func resolveBadly(w ResponseWriter, qmsg *dnsmessage.Message) {
14 rmsg := dnsmessage.Message{
15 Header: dnsmessage.Header{
16 ID: qmsg.Header.ID + 69,
18 RCode: dnsmessage.RCodeNameError,
20 Questions: qmsg.Questions,
25 func resolveWrongQuestion(w ResponseWriter, qmsg *dnsmessage.Message) {
26 wrongq := dnsmessage.Question{Name: dnsmessage.MustNewName("blabla.example.org."), Type: dnsmessage.TypeNS, Class: dnsmessage.ClassCHAOS}
27 rmsg := dnsmessage.Message{
28 Header: dnsmessage.Header{
31 RCode: dnsmessage.RCodeSuccess,
34 Questions: []dnsmessage.Question{wrongq},
39 func TestBadResolver(t *testing.T) {
40 srv := Server{network: "udp", addr: "127.0.0.1", Handler: resolveBadly}
41 conn, err := net.ListenPacket("udp", "127.0.0.1:5359")
46 t.Fatal(srv.ServePacket(conn))
48 rmsg, err := Ask(testq, "127.0.0.1:5359")
50 t.Error("wanted error, got nil")
53 t.Log("sent:", testq, "received", rmsg)
55 srv.Handler = resolveWrongQuestion
56 rmsg, err = Ask(testq, "127.0.0.1:5359")
58 t.Error("wanted error, got nil")
59 } else if err != nil {
62 t.Log("sent:", testq, "received:", rmsg)
65 func buildmsg(s string) (dnsmessage.Message, error) {
66 name, err := dnsmessage.NewName(s)
68 return dnsmessage.Message{}, err
70 var msg dnsmessage.Message
71 header := dnsmessage.Header{ID: uint16(rand.Intn(8192)), RecursionDesired: true}
72 buf := make([]byte, 2, 512+2)
73 b := dnsmessage.NewBuilder(buf, header)
75 q := dnsmessage.Question{Name: name, Type: dnsmessage.TypeA, Class: dnsmessage.ClassINET}
76 if err := b.StartQuestions(); err != nil {
79 if err := b.Question(q); err != nil {
82 packed, err := b.Finish()
86 if err := msg.Unpack(packed[2:]); err != nil {