common_test.go 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230
  1. package conf_test
  2. import (
  3. "encoding/json"
  4. "os"
  5. "testing"
  6. "github.com/google/go-cmp/cmp"
  7. "v2ray.com/core/common/protocol"
  8. "v2ray.com/core/common"
  9. "v2ray.com/core/common/net"
  10. . "v2ray.com/core/infra/conf"
  11. )
  12. func TestStringListUnmarshalError(t *testing.T) {
  13. rawJson := `1234`
  14. list := new(StringList)
  15. err := json.Unmarshal([]byte(rawJson), list)
  16. if err == nil {
  17. t.Error("expected error, but got nil")
  18. }
  19. }
  20. func TestStringListLen(t *testing.T) {
  21. rawJson := `"a, b, c, d"`
  22. var list StringList
  23. err := json.Unmarshal([]byte(rawJson), &list)
  24. common.Must(err)
  25. if r := cmp.Diff([]string(list), []string{"a", " b", " c", " d"}); r != "" {
  26. t.Error(r)
  27. }
  28. }
  29. func TestIPParsing(t *testing.T) {
  30. rawJson := "\"8.8.8.8\""
  31. var address Address
  32. err := json.Unmarshal([]byte(rawJson), &address)
  33. common.Must(err)
  34. if r := cmp.Diff(address.IP(), net.IP{8, 8, 8, 8}); r != "" {
  35. t.Error(r)
  36. }
  37. }
  38. func TestDomainParsing(t *testing.T) {
  39. rawJson := "\"v2ray.com\""
  40. var address Address
  41. common.Must(json.Unmarshal([]byte(rawJson), &address))
  42. if address.Domain() != "v2ray.com" {
  43. t.Error("domain: ", address.Domain())
  44. }
  45. }
  46. func TestURLParsing(t *testing.T) {
  47. {
  48. rawJson := "\"https://dns.google/dns-query\""
  49. var address Address
  50. common.Must(json.Unmarshal([]byte(rawJson), &address))
  51. if address.Domain() != "https://dns.google/dns-query" {
  52. t.Error("URL: ", address.Domain())
  53. }
  54. }
  55. {
  56. rawJson := "\"https+local://dns.google/dns-query\""
  57. var address Address
  58. common.Must(json.Unmarshal([]byte(rawJson), &address))
  59. if address.Domain() != "https+local://dns.google/dns-query" {
  60. t.Error("URL: ", address.Domain())
  61. }
  62. }
  63. }
  64. func TestInvalidAddressJson(t *testing.T) {
  65. rawJson := "1234"
  66. var address Address
  67. err := json.Unmarshal([]byte(rawJson), &address)
  68. if err == nil {
  69. t.Error("nil error")
  70. }
  71. }
  72. func TestStringNetwork(t *testing.T) {
  73. var network Network
  74. common.Must(json.Unmarshal([]byte(`"tcp"`), &network))
  75. if v := network.Build(); v != net.Network_TCP {
  76. t.Error("network: ", v)
  77. }
  78. }
  79. func TestArrayNetworkList(t *testing.T) {
  80. var list NetworkList
  81. common.Must(json.Unmarshal([]byte("[\"Tcp\"]"), &list))
  82. nlist := list.Build()
  83. if !net.HasNetwork(nlist, net.Network_TCP) {
  84. t.Error("no tcp network")
  85. }
  86. if net.HasNetwork(nlist, net.Network_UDP) {
  87. t.Error("has udp network")
  88. }
  89. }
  90. func TestStringNetworkList(t *testing.T) {
  91. var list NetworkList
  92. common.Must(json.Unmarshal([]byte("\"TCP, ip\""), &list))
  93. nlist := list.Build()
  94. if !net.HasNetwork(nlist, net.Network_TCP) {
  95. t.Error("no tcp network")
  96. }
  97. if net.HasNetwork(nlist, net.Network_UDP) {
  98. t.Error("has udp network")
  99. }
  100. }
  101. func TestInvalidNetworkJson(t *testing.T) {
  102. var list NetworkList
  103. err := json.Unmarshal([]byte("0"), &list)
  104. if err == nil {
  105. t.Error("nil error")
  106. }
  107. }
  108. func TestIntPort(t *testing.T) {
  109. var portRange PortRange
  110. common.Must(json.Unmarshal([]byte("1234"), &portRange))
  111. if r := cmp.Diff(portRange, PortRange{
  112. From: 1234, To: 1234,
  113. }); r != "" {
  114. t.Error(r)
  115. }
  116. }
  117. func TestOverRangeIntPort(t *testing.T) {
  118. var portRange PortRange
  119. err := json.Unmarshal([]byte("70000"), &portRange)
  120. if err == nil {
  121. t.Error("nil error")
  122. }
  123. err = json.Unmarshal([]byte("-1"), &portRange)
  124. if err == nil {
  125. t.Error("nil error")
  126. }
  127. }
  128. func TestEnvPort(t *testing.T) {
  129. common.Must(os.Setenv("PORT", "1234"))
  130. var portRange PortRange
  131. common.Must(json.Unmarshal([]byte("\"env:PORT\""), &portRange))
  132. if r := cmp.Diff(portRange, PortRange{
  133. From: 1234, To: 1234,
  134. }); r != "" {
  135. t.Error(r)
  136. }
  137. }
  138. func TestSingleStringPort(t *testing.T) {
  139. var portRange PortRange
  140. common.Must(json.Unmarshal([]byte("\"1234\""), &portRange))
  141. if r := cmp.Diff(portRange, PortRange{
  142. From: 1234, To: 1234,
  143. }); r != "" {
  144. t.Error(r)
  145. }
  146. }
  147. func TestStringPairPort(t *testing.T) {
  148. var portRange PortRange
  149. common.Must(json.Unmarshal([]byte("\"1234-5678\""), &portRange))
  150. if r := cmp.Diff(portRange, PortRange{
  151. From: 1234, To: 5678,
  152. }); r != "" {
  153. t.Error(r)
  154. }
  155. }
  156. func TestOverRangeStringPort(t *testing.T) {
  157. var portRange PortRange
  158. err := json.Unmarshal([]byte("\"65536\""), &portRange)
  159. if err == nil {
  160. t.Error("nil error")
  161. }
  162. err = json.Unmarshal([]byte("\"70000-80000\""), &portRange)
  163. if err == nil {
  164. t.Error("nil error")
  165. }
  166. err = json.Unmarshal([]byte("\"1-90000\""), &portRange)
  167. if err == nil {
  168. t.Error("nil error")
  169. }
  170. err = json.Unmarshal([]byte("\"700-600\""), &portRange)
  171. if err == nil {
  172. t.Error("nil error")
  173. }
  174. }
  175. func TestUserParsing(t *testing.T) {
  176. user := new(User)
  177. common.Must(json.Unmarshal([]byte(`{
  178. "id": "96edb838-6d68-42ef-a933-25f7ac3a9d09",
  179. "email": "love@v2ray.com",
  180. "level": 1,
  181. "alterId": 100
  182. }`), user))
  183. nUser := user.Build()
  184. if r := cmp.Diff(nUser, &protocol.User{
  185. Level: 1,
  186. Email: "love@v2ray.com",
  187. }); r != "" {
  188. t.Error(r)
  189. }
  190. }
  191. func TestInvalidUserJson(t *testing.T) {
  192. user := new(User)
  193. err := json.Unmarshal([]byte(`{"email": 1234}`), user)
  194. if err == nil {
  195. t.Error("nil error")
  196. }
  197. }