encoding_test.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  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.MemoryValidator)
  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. addonsComparer := func(x, y *Addons) bool {
  46. return (x.Flow == y.Flow) && (cmp.Equal(x.Seed, y.Seed))
  47. }
  48. if r := cmp.Diff(actualAddons, expectedAddons, cmp.Comparer(addonsComparer)); r != "" {
  49. t.Error(r)
  50. }
  51. }
  52. func TestInvalidRequest(t *testing.T) {
  53. user := &protocol.MemoryUser{
  54. Level: 0,
  55. Email: "[email protected]",
  56. }
  57. id := uuid.New()
  58. account := &vless.Account{
  59. Id: id.String(),
  60. }
  61. user.Account = toAccount(account)
  62. expectedRequest := &protocol.RequestHeader{
  63. Version: Version,
  64. User: user,
  65. Command: protocol.RequestCommand(100),
  66. Address: net.DomainAddress("www.example.com"),
  67. Port: net.Port(443),
  68. }
  69. expectedAddons := &Addons{}
  70. buffer := buf.StackNew()
  71. common.Must(EncodeRequestHeader(&buffer, expectedRequest, expectedAddons))
  72. Validator := new(vless.MemoryValidator)
  73. Validator.Add(user)
  74. _, _, _, _, err := DecodeRequestHeader(false, nil, &buffer, Validator)
  75. if err == nil {
  76. t.Error("nil error")
  77. }
  78. }
  79. func TestMuxRequest(t *testing.T) {
  80. user := &protocol.MemoryUser{
  81. Level: 0,
  82. Email: "[email protected]",
  83. }
  84. id := uuid.New()
  85. account := &vless.Account{
  86. Id: id.String(),
  87. }
  88. user.Account = toAccount(account)
  89. expectedRequest := &protocol.RequestHeader{
  90. Version: Version,
  91. User: user,
  92. Command: protocol.RequestCommandMux,
  93. Address: net.DomainAddress("v1.mux.cool"),
  94. }
  95. expectedAddons := &Addons{}
  96. buffer := buf.StackNew()
  97. common.Must(EncodeRequestHeader(&buffer, expectedRequest, expectedAddons))
  98. Validator := new(vless.MemoryValidator)
  99. Validator.Add(user)
  100. _, actualRequest, actualAddons, _, err := DecodeRequestHeader(false, nil, &buffer, Validator)
  101. common.Must(err)
  102. if r := cmp.Diff(actualRequest, expectedRequest, cmp.AllowUnexported(protocol.ID{})); r != "" {
  103. t.Error(r)
  104. }
  105. addonsComparer := func(x, y *Addons) bool {
  106. return (x.Flow == y.Flow) && (cmp.Equal(x.Seed, y.Seed))
  107. }
  108. if r := cmp.Diff(actualAddons, expectedAddons, cmp.Comparer(addonsComparer)); r != "" {
  109. t.Error(r)
  110. }
  111. }