dns_test.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package sniff_test
  2. import (
  3. "bytes"
  4. "context"
  5. "encoding/hex"
  6. "testing"
  7. "github.com/sagernet/sing-box/adapter"
  8. "github.com/sagernet/sing-box/common/sniff"
  9. C "github.com/sagernet/sing-box/constant"
  10. "github.com/stretchr/testify/require"
  11. )
  12. func TestSniffDNS(t *testing.T) {
  13. t.Parallel()
  14. query, err := hex.DecodeString("740701000001000000000000012a06676f6f676c6503636f6d0000010001")
  15. require.NoError(t, err)
  16. var metadata adapter.InboundContext
  17. err = sniff.DomainNameQuery(context.TODO(), &metadata, query)
  18. require.NoError(t, err)
  19. require.Equal(t, C.ProtocolDNS, metadata.Protocol)
  20. }
  21. func TestSniffStreamDNS(t *testing.T) {
  22. t.Parallel()
  23. query, err := hex.DecodeString("001e740701000001000000000000012a06676f6f676c6503636f6d0000010001")
  24. require.NoError(t, err)
  25. var metadata adapter.InboundContext
  26. err = sniff.StreamDomainNameQuery(context.TODO(), &metadata, bytes.NewReader(query))
  27. require.NoError(t, err)
  28. require.Equal(t, C.ProtocolDNS, metadata.Protocol)
  29. }
  30. func TestSniffIncompleteStreamDNS(t *testing.T) {
  31. t.Parallel()
  32. query, err := hex.DecodeString("001e740701000001000000000000")
  33. require.NoError(t, err)
  34. var metadata adapter.InboundContext
  35. err = sniff.StreamDomainNameQuery(context.TODO(), &metadata, bytes.NewReader(query))
  36. require.ErrorIs(t, err, sniff.ErrNeedMoreData)
  37. }
  38. func TestSniffNotStreamDNS(t *testing.T) {
  39. t.Parallel()
  40. query, err := hex.DecodeString("001e740701000000000000000000")
  41. require.NoError(t, err)
  42. var metadata adapter.InboundContext
  43. err = sniff.StreamDomainNameQuery(context.TODO(), &metadata, bytes.NewReader(query))
  44. require.NotEmpty(t, err)
  45. require.NotErrorIs(t, err, sniff.ErrNeedMoreData)
  46. }