encoding_test.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. package encoding_test
  2. import (
  3. "testing"
  4. "github.com/google/go-cmp/cmp"
  5. "github.com/xtls/xray-core/common"
  6. "github.com/xtls/xray-core/common/buf"
  7. "github.com/xtls/xray-core/common/net"
  8. "github.com/xtls/xray-core/common/protocol"
  9. "github.com/xtls/xray-core/common/uuid"
  10. "github.com/xtls/xray-core/proxy/vless"
  11. . "github.com/xtls/xray-core/proxy/vless/encoding"
  12. )
  13. func toAccount(a *vless.Account) protocol.Account {
  14. account, err := a.AsAccount()
  15. common.Must(err)
  16. return account
  17. }
  18. func TestRequestSerialization(t *testing.T) {
  19. user := &protocol.MemoryUser{
  20. Level: 0,
  21. Email: "[email protected]",
  22. }
  23. id := uuid.New()
  24. account := &vless.Account{
  25. Id: id.String(),
  26. }
  27. user.Account = toAccount(account)
  28. expectedRequest := &protocol.RequestHeader{
  29. Version: Version,
  30. User: user,
  31. Command: protocol.RequestCommandTCP,
  32. Address: net.DomainAddress("www.example.com"),
  33. Port: net.Port(443),
  34. }
  35. expectedAddons := &Addons{}
  36. buffer := buf.StackNew()
  37. common.Must(EncodeRequestHeader(&buffer, expectedRequest, expectedAddons))
  38. Validator := new(vless.Validator)
  39. Validator.Add(user)
  40. actualRequest, actualAddons, _, err := DecodeRequestHeader(false, nil, &buffer, Validator)
  41. common.Must(err)
  42. if r := cmp.Diff(actualRequest, expectedRequest, cmp.AllowUnexported(protocol.ID{})); r != "" {
  43. t.Error(r)
  44. }
  45. if r := cmp.Diff(actualAddons, expectedAddons); r != "" {
  46. t.Error(r)
  47. }
  48. }
  49. func TestInvalidRequest(t *testing.T) {
  50. user := &protocol.MemoryUser{
  51. Level: 0,
  52. Email: "[email protected]",
  53. }
  54. id := uuid.New()
  55. account := &vless.Account{
  56. Id: id.String(),
  57. }
  58. user.Account = toAccount(account)
  59. expectedRequest := &protocol.RequestHeader{
  60. Version: Version,
  61. User: user,
  62. Command: protocol.RequestCommand(100),
  63. Address: net.DomainAddress("www.example.com"),
  64. Port: net.Port(443),
  65. }
  66. expectedAddons := &Addons{}
  67. buffer := buf.StackNew()
  68. common.Must(EncodeRequestHeader(&buffer, expectedRequest, expectedAddons))
  69. Validator := new(vless.Validator)
  70. Validator.Add(user)
  71. _, _, _, err := DecodeRequestHeader(false, nil, &buffer, Validator)
  72. if err == nil {
  73. t.Error("nil error")
  74. }
  75. }
  76. func TestMuxRequest(t *testing.T) {
  77. user := &protocol.MemoryUser{
  78. Level: 0,
  79. Email: "[email protected]",
  80. }
  81. id := uuid.New()
  82. account := &vless.Account{
  83. Id: id.String(),
  84. }
  85. user.Account = toAccount(account)
  86. expectedRequest := &protocol.RequestHeader{
  87. Version: Version,
  88. User: user,
  89. Command: protocol.RequestCommandMux,
  90. Address: net.DomainAddress("v1.mux.cool"),
  91. }
  92. expectedAddons := &Addons{}
  93. buffer := buf.StackNew()
  94. common.Must(EncodeRequestHeader(&buffer, expectedRequest, expectedAddons))
  95. Validator := new(vless.Validator)
  96. Validator.Add(user)
  97. actualRequest, actualAddons, _, err := DecodeRequestHeader(false, nil, &buffer, Validator)
  98. common.Must(err)
  99. if r := cmp.Diff(actualRequest, expectedRequest, cmp.AllowUnexported(protocol.ID{})); r != "" {
  100. t.Error(r)
  101. }
  102. if r := cmp.Diff(actualAddons, expectedAddons); r != "" {
  103. t.Error(r)
  104. }
  105. }