dns_test.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. package main
  2. import (
  3. "testing"
  4. "time"
  5. "github.com/miekg/dns"
  6. "github.com/stretchr/testify/assert"
  7. "github.com/stretchr/testify/require"
  8. )
  9. func exchange(address, domain string, tp uint16) ([]dns.RR, error) {
  10. client := dns.Client{}
  11. query := &dns.Msg{}
  12. query.SetQuestion(dns.Fqdn(domain), tp)
  13. r, _, err := client.Exchange(query, address)
  14. if err != nil {
  15. return nil, err
  16. }
  17. return r.Answer, nil
  18. }
  19. func TestMihomo_DNS(t *testing.T) {
  20. basic := `
  21. log-level: silent
  22. dns:
  23. enable: true
  24. listen: 0.0.0.0:8553
  25. nameserver:
  26. - 119.29.29.29
  27. `
  28. err := parseAndApply(basic)
  29. require.NoError(t, err)
  30. defer cleanup()
  31. time.Sleep(waitTime)
  32. rr, err := exchange("127.0.0.1:8553", "1.1.1.1.nip.io", dns.TypeA)
  33. assert.NoError(t, err)
  34. assert.NotEmptyf(t, rr, "record empty")
  35. record := rr[0].(*dns.A)
  36. assert.Equal(t, record.A.String(), "1.1.1.1")
  37. rr, err = exchange("127.0.0.1:8553", "2606-4700-4700--1111.sslip.io", dns.TypeAAAA)
  38. assert.NoError(t, err)
  39. assert.Empty(t, rr)
  40. }
  41. func TestMihomo_DNSHostAndFakeIP(t *testing.T) {
  42. basic := `
  43. log-level: silent
  44. hosts:
  45. foo.mihomo.dev: 1.1.1.1
  46. dns:
  47. enable: true
  48. listen: 0.0.0.0:8553
  49. ipv6: true
  50. enhanced-mode: fake-ip
  51. fake-ip-range: 198.18.0.1/16
  52. fake-ip-filter:
  53. - .sslip.io
  54. nameserver:
  55. - 119.29.29.29
  56. `
  57. err := parseAndApply(basic)
  58. require.NoError(t, err)
  59. defer cleanup()
  60. time.Sleep(waitTime)
  61. type domainPair struct {
  62. domain string
  63. ip string
  64. }
  65. list := []domainPair{
  66. {"foo.org", "198.18.0.4"},
  67. {"bar.org", "198.18.0.5"},
  68. {"foo.org", "198.18.0.4"},
  69. {"foo.mihomo.dev", "1.1.1.1"},
  70. }
  71. for _, pair := range list {
  72. rr, err := exchange("127.0.0.1:8553", pair.domain, dns.TypeA)
  73. assert.NoError(t, err)
  74. assert.NotEmpty(t, rr)
  75. record := rr[0].(*dns.A)
  76. assert.Equal(t, record.A.String(), pair.ip)
  77. }
  78. rr, err := exchange("127.0.0.1:8553", "2606-4700-4700--1111.sslip.io", dns.TypeAAAA)
  79. assert.NoError(t, err)
  80. assert.NotEmpty(t, rr)
  81. assert.Equal(t, rr[0].(*dns.AAAA).AAAA.String(), "2606:4700:4700::1111")
  82. }