dns_test.go 924 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. package handler
  2. import (
  3. "ehang.io/nps/lib/enet"
  4. "github.com/miekg/dns"
  5. "github.com/stretchr/testify/assert"
  6. "net"
  7. "testing"
  8. )
  9. type testRule struct {
  10. run bool
  11. }
  12. func (t *testRule) RunConn(c enet.Conn) (bool, error) {
  13. t.run = true
  14. return true, nil
  15. }
  16. func (t *testRule) RunPacketConn(_ enet.PacketConn) (bool, error) {
  17. t.run = true
  18. return true, nil
  19. }
  20. func TestHandleDnsPacket(t *testing.T) {
  21. lPacketConn, err := net.ListenPacket("udp", "127.0.0.1:0")
  22. assert.NoError(t, err)
  23. h := DnsHandler{}
  24. rule := &testRule{}
  25. h.AddRule(rule)
  26. m := new(dns.Msg)
  27. m.SetQuestion(dns.Fqdn("www.google.com"), dns.TypeA)
  28. m.RecursionDesired = true
  29. b, err := m.Pack()
  30. assert.NoError(t, err)
  31. pc := enet.NewReaderPacketConn(nil, b, lPacketConn.LocalAddr())
  32. assert.NoError(t, pc.SendPacket(b, nil))
  33. res, err := h.HandlePacketConn(pc)
  34. assert.NoError(t, err)
  35. assert.Equal(t, true, res)
  36. assert.Equal(t, true, rule.run)
  37. }