ws_test.go 3.0 KB

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