shadowsocks_test.go 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package scenarios
  2. import (
  3. "net"
  4. "testing"
  5. v2net "github.com/v2ray/v2ray-core/common/net"
  6. "github.com/v2ray/v2ray-core/testing/assert"
  7. "github.com/v2ray/v2ray-core/testing/servers/tcp"
  8. ssclient "github.com/shadowsocks/shadowsocks-go/shadowsocks"
  9. )
  10. func TestShadowsocksTCP(t *testing.T) {
  11. assert := assert.On(t)
  12. tcpServer := &tcp.Server{
  13. Port: v2net.Port(50052),
  14. MsgProcessor: func(data []byte) []byte {
  15. buffer := make([]byte, 0, 2048)
  16. buffer = append(buffer, []byte("Processed: ")...)
  17. buffer = append(buffer, data...)
  18. return buffer
  19. },
  20. }
  21. _, err := tcpServer.Start()
  22. assert.Error(err).IsNil()
  23. defer tcpServer.Close()
  24. assert.Error(InitializeServerServer("test_6")).IsNil()
  25. cipher, err := ssclient.NewCipher("aes-256-cfb", "v2ray-password")
  26. assert.Error(err).IsNil()
  27. rawAddr := []byte{1, 127, 0, 0, 1, 0xc3, 0x84} // 127.0.0.1:50052
  28. conn, err := ssclient.DialWithRawAddr(rawAddr, "127.0.0.1:50051", cipher)
  29. assert.Error(err).IsNil()
  30. payload := "shadowsocks request."
  31. nBytes, err := conn.Write([]byte(payload))
  32. assert.Error(err).IsNil()
  33. assert.Int(nBytes).Equals(len(payload))
  34. conn.Conn.(*net.TCPConn).CloseWrite()
  35. response := make([]byte, 1024)
  36. nBytes, err = conn.Read(response)
  37. assert.Error(err).IsNil()
  38. assert.String("Processed: " + payload).Equals(string(response[:nBytes]))
  39. conn.Close()
  40. cipher, err = ssclient.NewCipher("aes-128-cfb", "v2ray-another")
  41. assert.Error(err).IsNil()
  42. conn, err = ssclient.DialWithRawAddr(rawAddr, "127.0.0.1:50055", cipher)
  43. assert.Error(err).IsNil()
  44. payload = "shadowsocks request 2."
  45. nBytes, err = conn.Write([]byte(payload))
  46. assert.Error(err).IsNil()
  47. assert.Int(nBytes).Equals(len(payload))
  48. conn.Conn.(*net.TCPConn).CloseWrite()
  49. response = make([]byte, 1024)
  50. nBytes, err = conn.Read(response)
  51. assert.Error(err).IsNil()
  52. assert.String("Processed: " + payload).Equals(string(response[:nBytes]))
  53. conn.Close()
  54. cipher, err = ssclient.NewCipher("chacha20", "new-password")
  55. assert.Error(err).IsNil()
  56. conn, err = ssclient.DialWithRawAddr(rawAddr, "127.0.0.1:50056", cipher)
  57. assert.Error(err).IsNil()
  58. payload = "shadowsocks request 3."
  59. nBytes, err = conn.Write([]byte(payload))
  60. assert.Error(err).IsNil()
  61. assert.Int(nBytes).Equals(len(payload))
  62. conn.Conn.(*net.TCPConn).CloseWrite()
  63. response = make([]byte, 1024)
  64. nBytes, err = conn.Read(response)
  65. assert.Error(err).IsNil()
  66. assert.String("Processed: " + payload).Equals(string(response[:nBytes]))
  67. conn.Close()
  68. CloseAllServers()
  69. }