config_test.go 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package xray
  2. import (
  3. "testing"
  4. "github.com/mhsanaei/3x-ui/v3/util/json_util"
  5. )
  6. func makeConfig() *Config {
  7. return &Config{
  8. LogConfig: json_util.RawMessage(`{"loglevel":"warning"}`),
  9. RouterConfig: json_util.RawMessage(`{}`),
  10. OutboundConfigs: json_util.RawMessage(`[]`),
  11. Policy: json_util.RawMessage(`{}`),
  12. API: json_util.RawMessage(`{}`),
  13. Stats: json_util.RawMessage(`{}`),
  14. Metrics: json_util.RawMessage(`{}`),
  15. InboundConfigs: []InboundConfig{
  16. {
  17. Port: 1080,
  18. Protocol: "vless",
  19. Tag: "inbound-1080",
  20. Listen: json_util.RawMessage(`"0.0.0.0"`),
  21. Settings: json_util.RawMessage(`{"clients":[]}`),
  22. },
  23. },
  24. }
  25. }
  26. func TestConfigEquals_IdenticalConfigs(t *testing.T) {
  27. a := makeConfig()
  28. b := makeConfig()
  29. if !a.Equals(b) {
  30. t.Fatal("two identical configs should be Equals")
  31. }
  32. }
  33. func TestConfigEquals_DifferentInboundCount(t *testing.T) {
  34. a := makeConfig()
  35. b := makeConfig()
  36. b.InboundConfigs = append(b.InboundConfigs, InboundConfig{Port: 2080, Protocol: "vmess", Tag: "inbound-2080"})
  37. if a.Equals(b) {
  38. t.Fatal("configs with different inbound counts should not be Equals")
  39. }
  40. }
  41. func TestConfigEquals_DifferentInboundContent(t *testing.T) {
  42. a := makeConfig()
  43. b := makeConfig()
  44. b.InboundConfigs[0].Port = 9999
  45. if a.Equals(b) {
  46. t.Fatal("config with changed inbound port should not be Equals")
  47. }
  48. }
  49. func TestConfigEquals_DifferentLogConfig(t *testing.T) {
  50. a := makeConfig()
  51. b := makeConfig()
  52. b.LogConfig = json_util.RawMessage(`{"loglevel":"debug"}`)
  53. if a.Equals(b) {
  54. t.Fatal("config with changed log section should not be Equals")
  55. }
  56. }
  57. func TestConfigEquals_RawSectionsCompared(t *testing.T) {
  58. fields := []struct {
  59. name string
  60. mutator func(c *Config)
  61. }{
  62. {"RouterConfig", func(c *Config) { c.RouterConfig = json_util.RawMessage(`{"changed":true}`) }},
  63. {"DNSConfig", func(c *Config) { c.DNSConfig = json_util.RawMessage(`{"servers":["1.1.1.1"]}`) }},
  64. {"OutboundConfigs", func(c *Config) { c.OutboundConfigs = json_util.RawMessage(`[{"tag":"x"}]`) }},
  65. {"Transport", func(c *Config) { c.Transport = json_util.RawMessage(`{"x":1}`) }},
  66. {"Policy", func(c *Config) { c.Policy = json_util.RawMessage(`{"levels":{}}`) }},
  67. {"API", func(c *Config) { c.API = json_util.RawMessage(`{"tag":"api"}`) }},
  68. {"Stats", func(c *Config) { c.Stats = json_util.RawMessage(`{"on":true}`) }},
  69. {"Reverse", func(c *Config) { c.Reverse = json_util.RawMessage(`{"bridges":[]}`) }},
  70. {"FakeDNS", func(c *Config) { c.FakeDNS = json_util.RawMessage(`[]`) }},
  71. {"Metrics", func(c *Config) { c.Metrics = json_util.RawMessage(`{"tag":"m"}`) }},
  72. }
  73. for _, f := range fields {
  74. t.Run(f.name, func(t *testing.T) {
  75. a := makeConfig()
  76. b := makeConfig()
  77. f.mutator(b)
  78. if a.Equals(b) {
  79. t.Fatalf("mutating %s should break Equals", f.name)
  80. }
  81. })
  82. }
  83. }