protocol_test.go 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. package shadowsocks_test
  2. import (
  3. "io"
  4. "testing"
  5. "github.com/v2ray/v2ray-core/common/alloc"
  6. v2net "github.com/v2ray/v2ray-core/common/net"
  7. "github.com/v2ray/v2ray-core/proxy"
  8. . "github.com/v2ray/v2ray-core/proxy/shadowsocks"
  9. "github.com/v2ray/v2ray-core/testing/assert"
  10. "github.com/v2ray/v2ray-core/transport"
  11. )
  12. func TestNormalRequestParsing(t *testing.T) {
  13. assert := assert.On(t)
  14. buffer := alloc.NewSmallBuffer().Clear()
  15. buffer.AppendBytes(1, 127, 0, 0, 1, 0, 80)
  16. request, err := ReadRequest(buffer, nil, false)
  17. assert.Error(err).IsNil()
  18. assert.Address(request.Address).Equals(v2net.LocalHostIP)
  19. assert.Port(request.Port).Equals(v2net.Port(80))
  20. assert.Bool(request.OTA).IsFalse()
  21. }
  22. func TestEmptyPayload(t *testing.T) {
  23. assert := assert.On(t)
  24. buffer := alloc.NewSmallBuffer().Clear()
  25. _, err := ReadRequest(buffer, nil, false)
  26. assert.Error(err).Equals(io.EOF)
  27. }
  28. func TestSingleBytePayload(t *testing.T) {
  29. assert := assert.On(t)
  30. buffer := alloc.NewSmallBuffer().Clear().AppendBytes(1)
  31. _, err := ReadRequest(buffer, nil, false)
  32. assert.Error(err).Equals(transport.ErrCorruptedPacket)
  33. }
  34. func TestWrongAddressType(t *testing.T) {
  35. assert := assert.On(t)
  36. buffer := alloc.NewSmallBuffer().Clear().AppendBytes(5)
  37. _, err := ReadRequest(buffer, nil, false)
  38. assert.Error(err).Equals(transport.ErrCorruptedPacket)
  39. }
  40. func TestInsufficientAddressRequest(t *testing.T) {
  41. assert := assert.On(t)
  42. buffer := alloc.NewSmallBuffer().Clear().AppendBytes(1, 1)
  43. _, err := ReadRequest(buffer, nil, false)
  44. assert.Error(err).Equals(transport.ErrCorruptedPacket)
  45. buffer = alloc.NewSmallBuffer().Clear().AppendBytes(4, 1)
  46. _, err = ReadRequest(buffer, nil, false)
  47. assert.Error(err).Equals(transport.ErrCorruptedPacket)
  48. buffer = alloc.NewSmallBuffer().Clear().AppendBytes(3, 255, 1)
  49. _, err = ReadRequest(buffer, nil, false)
  50. assert.Error(err).Equals(transport.ErrCorruptedPacket)
  51. }
  52. func TestInsufficientPortRequest(t *testing.T) {
  53. assert := assert.On(t)
  54. buffer := alloc.NewSmallBuffer().Clear().AppendBytes(1, 1, 2, 3, 4, 5)
  55. _, err := ReadRequest(buffer, nil, false)
  56. assert.Error(err).Equals(transport.ErrCorruptedPacket)
  57. }
  58. func TestOTARequest(t *testing.T) {
  59. assert := assert.On(t)
  60. buffer := alloc.NewSmallBuffer().Clear()
  61. buffer.AppendBytes(0x13, 13, 119, 119, 119, 46, 118, 50, 114, 97, 121, 46, 99, 111, 109, 0, 0, 239, 115, 52, 212, 178, 172, 26, 6, 168, 0)
  62. auth := NewAuthenticator(HeaderKeyGenerator(
  63. []byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5},
  64. []byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5}))
  65. request, err := ReadRequest(buffer, auth, false)
  66. assert.Error(err).IsNil()
  67. assert.Address(request.Address).Equals(v2net.DomainAddress("www.v2ray.com"))
  68. assert.Bool(request.OTA).IsTrue()
  69. }
  70. func TestInvalidOTARequest(t *testing.T) {
  71. assert := assert.On(t)
  72. buffer := alloc.NewSmallBuffer().Clear()
  73. buffer.AppendBytes(0x13, 13, 119, 119, 119, 46, 118, 50, 114, 97, 121, 46, 99, 111, 109, 0, 0, 239, 115, 52, 212, 178, 172, 26, 6, 168, 1)
  74. auth := NewAuthenticator(HeaderKeyGenerator(
  75. []byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5},
  76. []byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5}))
  77. _, err := ReadRequest(buffer, auth, false)
  78. assert.Error(err).Equals(proxy.ErrInvalidAuthentication)
  79. }
  80. func TestUDPRequestParsing(t *testing.T) {
  81. assert := assert.On(t)
  82. buffer := alloc.NewSmallBuffer().Clear()
  83. buffer.AppendBytes(1, 127, 0, 0, 1, 0, 80, 1, 2, 3, 4, 5, 6)
  84. request, err := ReadRequest(buffer, nil, true)
  85. assert.Error(err).IsNil()
  86. assert.Address(request.Address).Equals(v2net.LocalHostIP)
  87. assert.Port(request.Port).Equals(v2net.Port(80))
  88. assert.Bool(request.OTA).IsFalse()
  89. assert.Bytes(request.UDPPayload.Value).Equals([]byte{1, 2, 3, 4, 5, 6})
  90. }
  91. func TestUDPRequestWithOTA(t *testing.T) {
  92. assert := assert.On(t)
  93. buffer := alloc.NewSmallBuffer().Clear()
  94. buffer.AppendBytes(
  95. 0x13, 13, 119, 119, 119, 46, 118, 50, 114, 97, 121, 46, 99, 111, 109, 0, 0,
  96. 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0,
  97. 58, 32, 223, 30, 57, 199, 50, 139, 143, 101)
  98. auth := NewAuthenticator(HeaderKeyGenerator(
  99. []byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5},
  100. []byte{0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 1, 2, 3, 4, 5}))
  101. request, err := ReadRequest(buffer, auth, true)
  102. assert.Error(err).IsNil()
  103. assert.Address(request.Address).Equals(v2net.DomainAddress("www.v2ray.com"))
  104. assert.Bool(request.OTA).IsTrue()
  105. assert.Bytes(request.UDPPayload.Value).Equals([]byte{
  106. 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0})
  107. }