1
0

setting_sub_json_dns_test.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. package service
  2. import (
  3. "strings"
  4. "testing"
  5. "github.com/mhsanaei/3x-ui/v3/internal/web/entity"
  6. )
  7. func TestValidateSubJsonDnsSetting(t *testing.T) {
  8. tests := []struct {
  9. name string
  10. value string
  11. want string
  12. wantError string
  13. }{
  14. {name: "blank is trimmed", value: " ", want: ""},
  15. {name: "object passes through", value: ` {"servers": ["1.1.1.1"]} `, want: `{"servers": ["1.1.1.1"]}`},
  16. {name: "array passes through", value: `["1.1.1.1", "tls://1.0.0.1"]`, want: `["1.1.1.1", "tls://1.0.0.1"]`},
  17. {name: "object with hosts and strategy", value: `{"hosts":{"a":"b"},"queryStrategy":"UseIPv4","servers":["1.1.1.1"]}`, want: `{"hosts":{"a":"b"},"queryStrategy":"UseIPv4","servers":["1.1.1.1"]}`},
  18. {name: "malformed JSON is rejected", value: `{"servers": [`, wantError: "JSON subscription DNS is invalid"},
  19. {name: "broken field type is rejected", value: `{"servers": ["1.1.1.1"], "hosts": 5}`, wantError: "JSON subscription DNS is invalid"},
  20. {name: "empty server list is rejected", value: `[]`, wantError: "JSON subscription DNS is invalid"},
  21. {name: "server without address is rejected", value: `[{"skipFallback": true}]`, wantError: "JSON subscription DNS is invalid"},
  22. }
  23. for _, tt := range tests {
  24. t.Run(tt.name, func(t *testing.T) {
  25. settings := &entity.AllSetting{SubJsonDns: tt.value}
  26. err := validateSubJsonDnsSetting(settings)
  27. if tt.wantError != "" {
  28. if err == nil || !strings.Contains(err.Error(), tt.wantError) {
  29. t.Fatalf("err=%v, want %q", err, tt.wantError)
  30. }
  31. return
  32. }
  33. if err != nil || settings.SubJsonDns != tt.want {
  34. t.Fatalf("value=%q err=%v", settings.SubJsonDns, err)
  35. }
  36. })
  37. }
  38. }
  39. func TestSubJsonDnsSettingDefaultsAndPersists(t *testing.T) {
  40. setupSettingTestDB(t)
  41. s := &SettingService{}
  42. settings, err := s.GetAllSetting()
  43. if err != nil {
  44. t.Fatal(err)
  45. }
  46. if settings.SubJsonDns != "" {
  47. t.Fatalf("expected empty default, got %q", settings.SubJsonDns)
  48. }
  49. settings.SubJsonDns = `["https://dns.google/dns-query"]`
  50. if err := s.UpdateAllSetting(settings, SecretClears{}); err != nil {
  51. t.Fatal(err)
  52. }
  53. got, err := s.GetSubJsonDns()
  54. if err != nil || got != `["https://dns.google/dns-query"]` {
  55. t.Fatalf("expected the stored DNS list, got %q, err %v", got, err)
  56. }
  57. }