protocol_test.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package shadowsocks_test
  2. import (
  3. "testing"
  4. "v2ray.com/core/common/alloc"
  5. "v2ray.com/core/common/loader"
  6. v2net "v2ray.com/core/common/net"
  7. "v2ray.com/core/common/protocol"
  8. . "v2ray.com/core/proxy/shadowsocks"
  9. "v2ray.com/core/testing/assert"
  10. )
  11. func TestUDPEncoding(t *testing.T) {
  12. assert := assert.On(t)
  13. request := &protocol.RequestHeader{
  14. Version: Version,
  15. Command: protocol.RequestCommandUDP,
  16. Address: v2net.LocalHostIP,
  17. Port: 1234,
  18. User: &protocol.User{
  19. Email: "love@v2ray.com",
  20. Account: loader.NewTypedSettings(&Account{
  21. Password: "shadowsocks-password",
  22. CipherType: CipherType_AES_128_CFB,
  23. Ota: Account_Disabled,
  24. }),
  25. },
  26. }
  27. data := alloc.NewLocalBuffer(256).Clear().AppendString("test string")
  28. encodedData, err := EncodeUDPPacket(request, data)
  29. assert.Error(err).IsNil()
  30. decodedRequest, decodedData, err := DecodeUDPPacket(request.User, encodedData)
  31. assert.Error(err).IsNil()
  32. assert.Bytes(decodedData.Value).Equals(data.Value)
  33. assert.Address(decodedRequest.Address).Equals(request.Address)
  34. assert.Port(decodedRequest.Port).Equals(request.Port)
  35. }
  36. func TestTCPRequest(t *testing.T) {
  37. assert := assert.On(t)
  38. request := &protocol.RequestHeader{
  39. Version: Version,
  40. Command: protocol.RequestCommandTCP,
  41. Address: v2net.LocalHostIP,
  42. Option: RequestOptionOneTimeAuth,
  43. Port: 1234,
  44. User: &protocol.User{
  45. Email: "love@v2ray.com",
  46. Account: loader.NewTypedSettings(&Account{
  47. Password: "tcp-password",
  48. CipherType: CipherType_CHACHA20,
  49. }),
  50. },
  51. }
  52. data := alloc.NewLocalBuffer(256).Clear().AppendString("test string")
  53. cache := alloc.NewLargeBuffer().Clear()
  54. writer, err := WriteTCPRequest(request, cache)
  55. assert.Error(err).IsNil()
  56. writer.Write(data)
  57. decodedRequest, reader, err := ReadTCPSession(request.User, cache)
  58. assert.Error(err).IsNil()
  59. assert.Address(decodedRequest.Address).Equals(request.Address)
  60. assert.Port(decodedRequest.Port).Equals(request.Port)
  61. decodedData, err := reader.Read()
  62. assert.Error(err).IsNil()
  63. assert.Bytes(decodedData.Value).Equals([]byte("test string"))
  64. }