| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- package service
- import (
- "strings"
- "testing"
- "github.com/mhsanaei/3x-ui/v3/internal/web/entity"
- )
- func TestValidateSubJsonDnsSetting(t *testing.T) {
- tests := []struct {
- name string
- value string
- want string
- wantError string
- }{
- {name: "blank is trimmed", value: " ", want: ""},
- {name: "object passes through", value: ` {"servers": ["1.1.1.1"]} `, want: `{"servers": ["1.1.1.1"]}`},
- {name: "array passes through", value: `["1.1.1.1", "tls://1.0.0.1"]`, want: `["1.1.1.1", "tls://1.0.0.1"]`},
- {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"]}`},
- {name: "malformed JSON is rejected", value: `{"servers": [`, wantError: "JSON subscription DNS is invalid"},
- {name: "broken field type is rejected", value: `{"servers": ["1.1.1.1"], "hosts": 5}`, wantError: "JSON subscription DNS is invalid"},
- {name: "empty server list is rejected", value: `[]`, wantError: "JSON subscription DNS is invalid"},
- {name: "server without address is rejected", value: `[{"skipFallback": true}]`, wantError: "JSON subscription DNS is invalid"},
- }
- for _, tt := range tests {
- t.Run(tt.name, func(t *testing.T) {
- settings := &entity.AllSetting{SubJsonDns: tt.value}
- err := validateSubJsonDnsSetting(settings)
- if tt.wantError != "" {
- if err == nil || !strings.Contains(err.Error(), tt.wantError) {
- t.Fatalf("err=%v, want %q", err, tt.wantError)
- }
- return
- }
- if err != nil || settings.SubJsonDns != tt.want {
- t.Fatalf("value=%q err=%v", settings.SubJsonDns, err)
- }
- })
- }
- }
- func TestSubJsonDnsSettingDefaultsAndPersists(t *testing.T) {
- setupSettingTestDB(t)
- s := &SettingService{}
- settings, err := s.GetAllSetting()
- if err != nil {
- t.Fatal(err)
- }
- if settings.SubJsonDns != "" {
- t.Fatalf("expected empty default, got %q", settings.SubJsonDns)
- }
- settings.SubJsonDns = `["https://dns.google/dns-query"]`
- if err := s.UpdateAllSetting(settings, SecretClears{}); err != nil {
- t.Fatal(err)
- }
- got, err := s.GetSubJsonDns()
- if err != nil || got != `["https://dns.google/dns-query"]` {
- t.Fatalf("expected the stored DNS list, got %q, err %v", got, err)
- }
- }
|