ws_test.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160
  1. package websocket_test
  2. import (
  3. "io/ioutil"
  4. "testing"
  5. "time"
  6. v2net "v2ray.com/core/common/net"
  7. "v2ray.com/core/common/serial"
  8. "v2ray.com/core/testing/assert"
  9. "v2ray.com/core/transport/internet"
  10. v2tls "v2ray.com/core/transport/internet/tls"
  11. . "v2ray.com/core/transport/internet/websocket"
  12. )
  13. func Test_listenWSAndDial(t *testing.T) {
  14. assert := assert.On(t)
  15. listen, err := ListenWS(v2net.DomainAddress("localhost"), 13146, internet.ListenOptions{
  16. Stream: &internet.StreamConfig{
  17. Network: v2net.Network_WebSocket,
  18. NetworkSettings: []*internet.NetworkSettings{
  19. {
  20. Network: v2net.Network_WebSocket,
  21. Settings: serial.ToTypedMessage(&Config{
  22. Path: "ws",
  23. }),
  24. },
  25. },
  26. },
  27. })
  28. assert.Error(err).IsNil()
  29. go func() {
  30. conn, err := listen.Accept()
  31. assert.Error(err).IsNil()
  32. conn.Close()
  33. conn, err = listen.Accept()
  34. assert.Error(err).IsNil()
  35. conn.Close()
  36. conn, err = listen.Accept()
  37. assert.Error(err).IsNil()
  38. conn.Close()
  39. listen.Close()
  40. }()
  41. conn, err := Dial(v2net.AnyIP, v2net.TCPDestination(v2net.DomainAddress("localhost"), 13146), internet.DialerOptions{
  42. Stream: &internet.StreamConfig{
  43. Network: v2net.Network_WebSocket,
  44. NetworkSettings: []*internet.NetworkSettings{
  45. {
  46. Network: v2net.Network_WebSocket,
  47. Settings: serial.ToTypedMessage(&Config{
  48. Path: "ws",
  49. }),
  50. },
  51. },
  52. },
  53. })
  54. assert.Error(err).IsNil()
  55. conn.Close()
  56. <-time.After(time.Second * 5)
  57. conn, err = Dial(v2net.AnyIP, v2net.TCPDestination(v2net.DomainAddress("localhost"), 13146), internet.DialerOptions{
  58. Stream: &internet.StreamConfig{
  59. Network: v2net.Network_WebSocket,
  60. NetworkSettings: []*internet.NetworkSettings{
  61. {
  62. Network: v2net.Network_WebSocket,
  63. Settings: serial.ToTypedMessage(&Config{
  64. Path: "ws",
  65. }),
  66. },
  67. },
  68. },
  69. })
  70. assert.Error(err).IsNil()
  71. conn.Close()
  72. <-time.After(time.Second * 15)
  73. conn, err = Dial(v2net.AnyIP, v2net.TCPDestination(v2net.DomainAddress("localhost"), 13146), internet.DialerOptions{
  74. Stream: &internet.StreamConfig{
  75. Network: v2net.Network_WebSocket,
  76. NetworkSettings: []*internet.NetworkSettings{
  77. {
  78. Network: v2net.Network_WebSocket,
  79. Settings: serial.ToTypedMessage(&Config{
  80. Path: "ws",
  81. }),
  82. },
  83. },
  84. },
  85. })
  86. assert.Error(err).IsNil()
  87. conn.Close()
  88. }
  89. func Test_listenWSAndDial_TLS(t *testing.T) {
  90. assert := assert.On(t)
  91. go func() {
  92. <-time.After(time.Second * 5)
  93. assert.Fail("Too slow")
  94. }()
  95. tlsSettings := &v2tls.Config{
  96. AllowInsecure: true,
  97. Certificate: []*v2tls.Certificate{
  98. {
  99. Certificate: ReadFile("./../../../testing/tls/cert.pem", assert),
  100. Key: ReadFile("./../../../testing/tls/key.pem", assert),
  101. },
  102. },
  103. }
  104. listen, err := ListenWS(v2net.DomainAddress("localhost"), 13143, internet.ListenOptions{
  105. Stream: &internet.StreamConfig{
  106. SecurityType: serial.GetMessageType(new(v2tls.Config)),
  107. SecuritySettings: []*serial.TypedMessage{serial.ToTypedMessage(tlsSettings)},
  108. Network: v2net.Network_WebSocket,
  109. NetworkSettings: []*internet.NetworkSettings{
  110. {
  111. Network: v2net.Network_WebSocket,
  112. Settings: serial.ToTypedMessage(&Config{
  113. Path: "wss",
  114. ConnectionReuse: &ConnectionReuse{
  115. Enable: true,
  116. },
  117. }),
  118. },
  119. },
  120. },
  121. })
  122. assert.Error(err).IsNil()
  123. go func() {
  124. conn, err := listen.Accept()
  125. assert.Error(err).IsNil()
  126. conn.Close()
  127. listen.Close()
  128. }()
  129. conn, err := Dial(v2net.AnyIP, v2net.TCPDestination(v2net.DomainAddress("localhost"), 13143), internet.DialerOptions{
  130. Stream: &internet.StreamConfig{
  131. SecurityType: serial.GetMessageType(new(v2tls.Config)),
  132. SecuritySettings: []*serial.TypedMessage{serial.ToTypedMessage(tlsSettings)},
  133. Network: v2net.Network_WebSocket,
  134. NetworkSettings: []*internet.NetworkSettings{
  135. {
  136. Network: v2net.Network_WebSocket,
  137. Settings: serial.ToTypedMessage(&Config{
  138. Path: "wss",
  139. ConnectionReuse: &ConnectionReuse{
  140. Enable: true,
  141. },
  142. }),
  143. },
  144. },
  145. },
  146. })
  147. assert.Error(err).IsNil()
  148. conn.Close()
  149. }
  150. func ReadFile(file string, assert *assert.Assert) []byte {
  151. b, err := ioutil.ReadFile(file)
  152. assert.Error(err).IsNil()
  153. return b
  154. }