ws_test.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. package websocket_test
  2. import (
  3. "bytes"
  4. "context"
  5. "testing"
  6. "time"
  7. v2net "v2ray.com/core/common/net"
  8. "v2ray.com/core/testing/assert"
  9. tlsgen "v2ray.com/core/testing/tls"
  10. "v2ray.com/core/transport/internet"
  11. v2tls "v2ray.com/core/transport/internet/tls"
  12. . "v2ray.com/core/transport/internet/websocket"
  13. )
  14. func Test_listenWSAndDial(t *testing.T) {
  15. assert := assert.On(t)
  16. listen, err := ListenWS(internet.ContextWithTransportSettings(context.Background(), &Config{
  17. Path: "ws",
  18. }), v2net.DomainAddress("localhost"), 13146)
  19. assert.Error(err).IsNil()
  20. go func() {
  21. for {
  22. conn, err := listen.Accept()
  23. if err != nil {
  24. break
  25. }
  26. go func() {
  27. defer conn.Close()
  28. var b [1024]byte
  29. n, err := conn.Read(b[:])
  30. //assert.Error(err).IsNil()
  31. if err != nil {
  32. conn.SetReusable(false)
  33. return
  34. }
  35. assert.Bool(bytes.HasPrefix(b[:n], []byte("Test connection"))).IsTrue()
  36. _, err = conn.Write([]byte("Response"))
  37. assert.Error(err).IsNil()
  38. }()
  39. }
  40. }()
  41. ctx := internet.ContextWithTransportSettings(context.Background(), &Config{Path: "ws"})
  42. conn, err := Dial(ctx, v2net.TCPDestination(v2net.DomainAddress("localhost"), 13146))
  43. assert.Error(err).IsNil()
  44. _, err = conn.Write([]byte("Test connection 1"))
  45. assert.Error(err).IsNil()
  46. var b [1024]byte
  47. n, err := conn.Read(b[:])
  48. assert.Error(err).IsNil()
  49. assert.String(string(b[:n])).Equals("Response")
  50. assert.Error(conn.Close()).IsNil()
  51. <-time.After(time.Second * 5)
  52. conn, err = Dial(ctx, v2net.TCPDestination(v2net.DomainAddress("localhost"), 13146))
  53. assert.Error(err).IsNil()
  54. _, err = conn.Write([]byte("Test connection 2"))
  55. assert.Error(err).IsNil()
  56. n, err = conn.Read(b[:])
  57. assert.Error(err).IsNil()
  58. assert.String(string(b[:n])).Equals("Response")
  59. assert.Error(conn.Close()).IsNil()
  60. <-time.After(time.Second * 15)
  61. conn, err = Dial(ctx, v2net.TCPDestination(v2net.DomainAddress("localhost"), 13146))
  62. assert.Error(err).IsNil()
  63. _, err = conn.Write([]byte("Test connection 3"))
  64. assert.Error(err).IsNil()
  65. n, err = conn.Read(b[:])
  66. assert.Error(err).IsNil()
  67. assert.String(string(b[:n])).Equals("Response")
  68. assert.Error(conn.Close()).IsNil()
  69. assert.Error(listen.Close()).IsNil()
  70. }
  71. func Test_listenWSAndDial_TLS(t *testing.T) {
  72. assert := assert.On(t)
  73. go func() {
  74. <-time.After(time.Second * 5)
  75. assert.Fail("Too slow")
  76. }()
  77. ctx := internet.ContextWithTransportSettings(context.Background(), &Config{
  78. Path: "wss",
  79. ConnectionReuse: &ConnectionReuse{
  80. Enable: true,
  81. },
  82. })
  83. ctx = internet.ContextWithSecuritySettings(ctx, &v2tls.Config{
  84. AllowInsecure: true,
  85. Certificate: []*v2tls.Certificate{tlsgen.GenerateCertificateForTest()},
  86. })
  87. listen, err := ListenWS(ctx, v2net.DomainAddress("localhost"), 13143)
  88. assert.Error(err).IsNil()
  89. go func() {
  90. conn, err := listen.Accept()
  91. assert.Error(err).IsNil()
  92. conn.Close()
  93. listen.Close()
  94. }()
  95. conn, err := Dial(ctx, v2net.TCPDestination(v2net.DomainAddress("localhost"), 13143))
  96. assert.Error(err).IsNil()
  97. conn.Close()
  98. }