dns_test.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package option
  2. import (
  3. "context"
  4. "testing"
  5. C "github.com/sagernet/sing-box/constant"
  6. "github.com/sagernet/sing/common/json"
  7. "github.com/sagernet/sing/service"
  8. "github.com/stretchr/testify/require"
  9. )
  10. type stubDNSTransportOptionsRegistry struct{}
  11. func (stubDNSTransportOptionsRegistry) CreateOptions(transportType string) (any, bool) {
  12. switch transportType {
  13. case C.DNSTypeUDP:
  14. return new(RemoteDNSServerOptions), true
  15. case C.DNSTypeFakeIP:
  16. return new(FakeIPDNSServerOptions), true
  17. default:
  18. return nil, false
  19. }
  20. }
  21. func TestDNSOptionsRejectsLegacyFakeIPOptions(t *testing.T) {
  22. t.Parallel()
  23. ctx := service.ContextWith[DNSTransportOptionsRegistry](context.Background(), stubDNSTransportOptionsRegistry{})
  24. var options DNSOptions
  25. err := json.UnmarshalContext(ctx, []byte(`{
  26. "fakeip": {
  27. "enabled": true,
  28. "inet4_range": "198.18.0.0/15"
  29. }
  30. }`), &options)
  31. require.EqualError(t, err, legacyDNSFakeIPRemovedMessage)
  32. }
  33. func TestDNSServerOptionsRejectsLegacyFormats(t *testing.T) {
  34. t.Parallel()
  35. ctx := service.ContextWith[DNSTransportOptionsRegistry](context.Background(), stubDNSTransportOptionsRegistry{})
  36. testCases := []string{
  37. `{"address":"1.1.1.1"}`,
  38. `{"type":"legacy","address":"1.1.1.1"}`,
  39. }
  40. for _, content := range testCases {
  41. var options DNSServerOptions
  42. err := json.UnmarshalContext(ctx, []byte(content), &options)
  43. require.EqualError(t, err, legacyDNSServerRemovedMessage)
  44. }
  45. }