encoding_test.go 3.1 KB

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