1
0

sub_uri_base_test.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package service
  2. import "testing"
  3. // BuildSubURIBase is the single source of truth for the scheme://host[:port]
  4. // prefix shown both on the panel's Client Information page and on the
  5. // subscription page. The cases pin scheme selection (sub TLS cert/key),
  6. // Sub Domain preference, standard-port omission, and IPv6 bracketing.
  7. func TestBuildSubURIBase(t *testing.T) {
  8. setupConflictDB(t)
  9. s := &SettingService{}
  10. set := func(subDomain, port, cert, key string) {
  11. if err := s.saveSetting("subDomain", subDomain); err != nil {
  12. t.Fatalf("set subDomain: %v", err)
  13. }
  14. if err := s.saveSetting("subPort", port); err != nil {
  15. t.Fatalf("set subPort: %v", err)
  16. }
  17. if err := s.saveSetting("subCertFile", cert); err != nil {
  18. t.Fatalf("set subCertFile: %v", err)
  19. }
  20. if err := s.saveSetting("subKeyFile", key); err != nil {
  21. t.Fatalf("set subKeyFile: %v", err)
  22. }
  23. }
  24. cases := []struct {
  25. name string
  26. subDomain, port string
  27. cert, key string
  28. host string
  29. want string
  30. }{
  31. {"no domain, plain, non-standard port", "", "2096", "", "", "panel.example.com", "http://panel.example.com:2096"},
  32. {"host carries a port — stripped, sub port applied", "", "2096", "", "", "panel.example.com:9999", "http://panel.example.com:2096"},
  33. {"sub domain preferred over host", "sub.cdn.com", "2096", "", "", "panel.example.com", "http://sub.cdn.com:2096"},
  34. {"tls + 443 omits the port", "sub.cdn.com", "443", "/c.crt", "/k.key", "panel.example.com", "https://sub.cdn.com"},
  35. {"plain + 80 omits the port", "", "80", "", "", "x.com", "http://x.com"},
  36. {"tls on a non-standard port keeps it", "", "2096", "/c.crt", "/k.key", "x.com", "https://x.com:2096"},
  37. {"ipv6 host is bracketed", "", "2096", "", "", "::1", "http://[::1]:2096"},
  38. }
  39. for _, c := range cases {
  40. t.Run(c.name, func(t *testing.T) {
  41. set(c.subDomain, c.port, c.cert, c.key)
  42. if got := s.BuildSubURIBase(c.host); got != c.want {
  43. t.Fatalf("BuildSubURIBase(%q) = %q, want %q", c.host, got, c.want)
  44. }
  45. })
  46. }
  47. }