common_test.go 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  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 TestInvalidAddressJson(t *testing.T) {
  47. rawJson := "1234"
  48. var address Address
  49. err := json.Unmarshal([]byte(rawJson), &address)
  50. if err == nil {
  51. t.Error("nil error")
  52. }
  53. }
  54. func TestStringNetwork(t *testing.T) {
  55. var network Network
  56. common.Must(json.Unmarshal([]byte(`"tcp"`), &network))
  57. if v := network.Build(); v != net.Network_TCP {
  58. t.Error("network: ", v)
  59. }
  60. }
  61. func TestArrayNetworkList(t *testing.T) {
  62. var list NetworkList
  63. common.Must(json.Unmarshal([]byte("[\"Tcp\"]"), &list))
  64. nlist := list.Build()
  65. if !net.HasNetwork(nlist, net.Network_TCP) {
  66. t.Error("no tcp network")
  67. }
  68. if net.HasNetwork(nlist, net.Network_UDP) {
  69. t.Error("has udp network")
  70. }
  71. }
  72. func TestStringNetworkList(t *testing.T) {
  73. var list NetworkList
  74. common.Must(json.Unmarshal([]byte("\"TCP, ip\""), &list))
  75. nlist := list.Build()
  76. if !net.HasNetwork(nlist, net.Network_TCP) {
  77. t.Error("no tcp network")
  78. }
  79. if net.HasNetwork(nlist, net.Network_UDP) {
  80. t.Error("has udp network")
  81. }
  82. }
  83. func TestInvalidNetworkJson(t *testing.T) {
  84. var list NetworkList
  85. err := json.Unmarshal([]byte("0"), &list)
  86. if err == nil {
  87. t.Error("nil error")
  88. }
  89. }
  90. func TestIntPort(t *testing.T) {
  91. var portRange PortRange
  92. common.Must(json.Unmarshal([]byte("1234"), &portRange))
  93. if r := cmp.Diff(portRange, PortRange{
  94. From: 1234, To: 1234,
  95. }); r != "" {
  96. t.Error(r)
  97. }
  98. }
  99. func TestOverRangeIntPort(t *testing.T) {
  100. var portRange PortRange
  101. err := json.Unmarshal([]byte("70000"), &portRange)
  102. if err == nil {
  103. t.Error("nil error")
  104. }
  105. err = json.Unmarshal([]byte("-1"), &portRange)
  106. if err == nil {
  107. t.Error("nil error")
  108. }
  109. }
  110. func TestEnvPort(t *testing.T) {
  111. common.Must(os.Setenv("PORT", "1234"))
  112. var portRange PortRange
  113. common.Must(json.Unmarshal([]byte("\"env:PORT\""), &portRange))
  114. if r := cmp.Diff(portRange, PortRange{
  115. From: 1234, To: 1234,
  116. }); r != "" {
  117. t.Error(r)
  118. }
  119. }
  120. func TestSingleStringPort(t *testing.T) {
  121. var portRange PortRange
  122. common.Must(json.Unmarshal([]byte("\"1234\""), &portRange))
  123. if r := cmp.Diff(portRange, PortRange{
  124. From: 1234, To: 1234,
  125. }); r != "" {
  126. t.Error(r)
  127. }
  128. }
  129. func TestStringPairPort(t *testing.T) {
  130. var portRange PortRange
  131. common.Must(json.Unmarshal([]byte("\"1234-5678\""), &portRange))
  132. if r := cmp.Diff(portRange, PortRange{
  133. From: 1234, To: 5678,
  134. }); r != "" {
  135. t.Error(r)
  136. }
  137. }
  138. func TestOverRangeStringPort(t *testing.T) {
  139. var portRange PortRange
  140. err := json.Unmarshal([]byte("\"65536\""), &portRange)
  141. if err == nil {
  142. t.Error("nil error")
  143. }
  144. err = json.Unmarshal([]byte("\"70000-80000\""), &portRange)
  145. if err == nil {
  146. t.Error("nil error")
  147. }
  148. err = json.Unmarshal([]byte("\"1-90000\""), &portRange)
  149. if err == nil {
  150. t.Error("nil error")
  151. }
  152. err = json.Unmarshal([]byte("\"700-600\""), &portRange)
  153. if err == nil {
  154. t.Error("nil error")
  155. }
  156. }
  157. func TestUserParsing(t *testing.T) {
  158. user := new(User)
  159. common.Must(json.Unmarshal([]byte(`{
  160. "id": "96edb838-6d68-42ef-a933-25f7ac3a9d09",
  161. "email": "love@v2ray.com",
  162. "level": 1,
  163. "alterId": 100
  164. }`), user))
  165. nUser := user.Build()
  166. if r := cmp.Diff(nUser, &protocol.User{
  167. Level: 1,
  168. Email: "love@v2ray.com",
  169. }); r != "" {
  170. t.Error(r)
  171. }
  172. }
  173. func TestInvalidUserJson(t *testing.T) {
  174. user := new(User)
  175. err := json.Unmarshal([]byte(`{"email": 1234}`), user)
  176. if err == nil {
  177. t.Error("nil error")
  178. }
  179. }