ws_test.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157
  1. package ws_test
  2. import (
  3. "testing"
  4. "time"
  5. "github.com/v2ray/v2ray-core/testing/assert"
  6. . "github.com/v2ray/v2ray-core/transport/internet/ws"
  7. v2net "github.com/v2ray/v2ray-core/common/net"
  8. )
  9. func Test_Connect_ws(t *testing.T) {
  10. assert := assert.On(t)
  11. (&Config{Pto: "ws", Path: ""}).Apply()
  12. conn, err := Dial(v2net.AnyIP, v2net.TCPDestination(v2net.DomainAddress("echo.websocket.org"), 80))
  13. assert.Error(err).IsNil()
  14. conn.Write([]byte("echo"))
  15. s := make(chan int)
  16. go func() {
  17. buf := make([]byte, 4)
  18. conn.Read(buf)
  19. s <- 0
  20. }()
  21. <-s
  22. conn.Close()
  23. }
  24. func Test_Connect_wss(t *testing.T) {
  25. assert := assert.On(t)
  26. (&Config{Pto: "wss", Path: ""}).Apply()
  27. conn, err := Dial(v2net.AnyIP, v2net.TCPDestination(v2net.DomainAddress("echo.websocket.org"), 443))
  28. assert.Error(err).IsNil()
  29. conn.Write([]byte("echo"))
  30. s := make(chan int)
  31. go func() {
  32. buf := make([]byte, 4)
  33. conn.Read(buf)
  34. s <- 0
  35. }()
  36. <-s
  37. conn.Close()
  38. }
  39. func Test_Connect_ws_guess(t *testing.T) {
  40. assert := assert.On(t)
  41. (&Config{Pto: "", Path: ""}).Apply()
  42. conn, err := Dial(v2net.AnyIP, v2net.TCPDestination(v2net.DomainAddress("echo.websocket.org"), 80))
  43. assert.Error(err).IsNil()
  44. conn.Write([]byte("echo"))
  45. s := make(chan int)
  46. go func() {
  47. buf := make([]byte, 4)
  48. conn.Read(buf)
  49. s <- 0
  50. }()
  51. <-s
  52. conn.Close()
  53. }
  54. func Test_Connect_wss_guess(t *testing.T) {
  55. assert := assert.On(t)
  56. (&Config{Pto: "", Path: ""}).Apply()
  57. conn, err := Dial(v2net.AnyIP, v2net.TCPDestination(v2net.DomainAddress("echo.websocket.org"), 443))
  58. assert.Error(err).IsNil()
  59. conn.Write([]byte("echo"))
  60. s := make(chan int)
  61. go func() {
  62. buf := make([]byte, 4)
  63. conn.Read(buf)
  64. s <- 0
  65. }()
  66. <-s
  67. conn.Close()
  68. }
  69. func Test_Connect_wss_guess_fail(t *testing.T) {
  70. assert := assert.On(t)
  71. go func() {
  72. <-time.After(time.Second * 5)
  73. assert.Fail("Too slow")
  74. }()
  75. (&Config{Pto: "", Path: ""}).Apply()
  76. _, err := Dial(v2net.AnyIP, v2net.TCPDestination(v2net.DomainAddress("static.kkdev.org"), 443))
  77. assert.Error(err).IsNotNil()
  78. }
  79. func Test_Connect_wss_guess_reuse(t *testing.T) {
  80. assert := assert.On(t)
  81. go func() {
  82. <-time.After(time.Second * 5)
  83. assert.Fail("Too slow")
  84. }()
  85. (&Config{Pto: "", Path: "", ConnectionReuse: true}).Apply()
  86. i := 3
  87. for i != 0 {
  88. conn, err := Dial(v2net.AnyIP, v2net.TCPDestination(v2net.DomainAddress("echo.websocket.org"), 443))
  89. assert.Error(err).IsNil()
  90. conn.Write([]byte("echo"))
  91. s := make(chan int)
  92. go func() {
  93. buf := make([]byte, 4)
  94. conn.Read(buf)
  95. s <- 0
  96. }()
  97. <-s
  98. if i == 0 {
  99. conn.SetDeadline(time.Now())
  100. conn.SetReadDeadline(time.Now())
  101. conn.SetWriteDeadline(time.Now())
  102. conn.SetReusable(false)
  103. }
  104. conn.Close()
  105. i--
  106. }
  107. }
  108. func Test_listenWSAndDial(t *testing.T) {
  109. assert := assert.On(t)
  110. go func() {
  111. <-time.After(time.Second * 5)
  112. assert.Fail("Too slow")
  113. }()
  114. (&Config{Pto: "ws", Path: "ws"}).Apply()
  115. listen, err := ListenWS(v2net.DomainAddress("localhost"), 13142)
  116. assert.Error(err).IsNil()
  117. go func() {
  118. conn, err := listen.Accept()
  119. assert.Error(err).IsNil()
  120. conn.Close()
  121. listen.Close()
  122. }()
  123. conn, err := Dial(v2net.AnyIP, v2net.TCPDestination(v2net.DomainAddress("localhost"), 13142))
  124. assert.Error(err).IsNil()
  125. conn.Close()
  126. }
  127. func Test_listenWSAndDial_TLS(t *testing.T) {
  128. assert := assert.On(t)
  129. go func() {
  130. <-time.After(time.Second * 5)
  131. assert.Fail("Too slow")
  132. }()
  133. (&Config{Pto: "wss", Path: "wss", ConnectionReuse: true, DeveloperInsecureSkipVerify: true, PrivKey: "./../../../testing/tls/key.pem", Cert: "./../../../testing/tls/cert.pem"}).Apply()
  134. listen, err := ListenWS(v2net.DomainAddress("localhost"), 13143)
  135. assert.Error(err).IsNil()
  136. go func() {
  137. conn, err := listen.Accept()
  138. assert.Error(err).IsNil()
  139. conn.Close()
  140. listen.Close()
  141. }()
  142. conn, err := Dial(v2net.AnyIP, v2net.TCPDestination(v2net.DomainAddress("localhost"), 13143))
  143. assert.Error(err).IsNil()
  144. conn.Close()
  145. }