transport_test.go 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package dns
  2. import (
  3. "context"
  4. "testing"
  5. "time"
  6. M "github.com/sagernet/sing/common/metadata"
  7. N "github.com/sagernet/sing/common/network"
  8. C "github.com/sagernet/sing-box/constant"
  9. "github.com/sagernet/sing-box/log"
  10. "github.com/stretchr/testify/require"
  11. "golang.org/x/net/dns/dnsmessage"
  12. )
  13. func TestTCPDNS(t *testing.T) {
  14. ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
  15. transport := NewTCPTransport(ctx, N.SystemDialer, log.NewNopLogger(), M.ParseSocksaddr("1.0.0.1:53"))
  16. response, err := transport.Exchange(ctx, makeQuery())
  17. cancel()
  18. require.NoError(t, err)
  19. require.NotEmpty(t, response.Answers, "no answers")
  20. for _, answer := range response.Answers {
  21. t.Log(answer)
  22. }
  23. }
  24. func TestTLSDNS(t *testing.T) {
  25. ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
  26. transport := NewTLSTransport(ctx, N.SystemDialer, log.NewNopLogger(), M.ParseSocksaddr("1.0.0.1:853"))
  27. response, err := transport.Exchange(ctx, makeQuery())
  28. cancel()
  29. require.NoError(t, err)
  30. require.NotEmpty(t, response.Answers, "no answers")
  31. for _, answer := range response.Answers {
  32. t.Log(answer)
  33. }
  34. }
  35. func TestHTTPSDNS(t *testing.T) {
  36. ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
  37. transport := NewHTTPSTransport(N.SystemDialer, "https://1.0.0.1:443/dns-query")
  38. response, err := transport.Exchange(ctx, makeQuery())
  39. cancel()
  40. require.NoError(t, err)
  41. require.NotEmpty(t, response.Answers, "no answers")
  42. for _, answer := range response.Answers {
  43. t.Log(answer)
  44. }
  45. }
  46. func TestUDPDNS(t *testing.T) {
  47. ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
  48. transport := NewUDPTransport(ctx, N.SystemDialer, log.NewNopLogger(), M.ParseSocksaddr("1.0.0.1:53"))
  49. response, err := transport.Exchange(ctx, makeQuery())
  50. cancel()
  51. require.NoError(t, err)
  52. require.NotEmpty(t, response.Answers, "no answers")
  53. for _, answer := range response.Answers {
  54. t.Log(answer)
  55. }
  56. }
  57. func TestLocalDNS(t *testing.T) {
  58. ctx, cancel := context.WithTimeout(context.Background(), time.Second*5)
  59. transport := NewLocalTransport()
  60. response, err := transport.Lookup(ctx, "google.com", C.DomainStrategyAsIS)
  61. cancel()
  62. require.NoError(t, err)
  63. require.NotEmpty(t, response, "no answers")
  64. for _, answer := range response {
  65. t.Log(answer)
  66. }
  67. }
  68. func makeQuery() *dnsmessage.Message {
  69. message := &dnsmessage.Message{}
  70. message.Header.ID = 1
  71. message.Header.RecursionDesired = true
  72. message.Questions = append(message.Questions, dnsmessage.Question{
  73. Name: dnsmessage.MustNewName("google.com."),
  74. Type: dnsmessage.TypeA,
  75. Class: dnsmessage.ClassINET,
  76. })
  77. return message
  78. }