1515package grpcutil
1616
1717import (
18+ "context"
1819 "io"
1920 "net/http"
2021 "net/http/httptest"
@@ -27,56 +28,61 @@ import (
2728)
2829
2930type testHandler struct {
30- responses chan string
31+ is * is.I
32+ response string
3133}
3234
33- func newTestHandler () * testHandler {
34- return & testHandler {responses : make (chan string , 1 )}
35- }
36-
37- func (h * testHandler ) ServeHTTP (w http.ResponseWriter , r * http.Request ) {
38- select {
39- case resp := <- h .responses :
40- w .Write ([]byte (resp ))
41- }
35+ func (h * testHandler ) ServeHTTP (w http.ResponseWriter , _ * http.Request ) {
36+ _ , err := w .Write ([]byte (h .response ))
37+ h .is .NoErr (err )
4238}
4339
4440func TestWebSocket_NoUpgradeToWebSocket (t * testing.T ) {
4541 is := is .New (t )
42+ ctx , cancel := context .WithCancel (context .Background ())
43+ defer cancel ()
4644
47- h := newTestHandler ()
45+ h := & testHandler {
46+ is : is ,
47+ response : "hi there" ,
48+ }
4849 s := httptest .NewServer (newWebSocketProxy (h , log .Nop ()))
4950 defer s .Close ()
5051
51- h .responses <- "hi there"
52- resp , err := http .Get (s .URL )
52+ req , err := http .NewRequestWithContext (ctx , "GET" , s .URL , nil )
53+ is .NoErr (err )
54+
55+ resp , err := http .DefaultClient .Do (req )
5356 is .NoErr (err )
5457 is .True (resp .Body != nil ) // expected response to have a body
5558 defer resp .Body .Close ()
5659
5760 bytes , err := io .ReadAll (resp .Body )
5861 is .NoErr (err )
59- is .Equal ("hi there" , string (bytes ))
62+ is .Equal (h . response , string (bytes ))
6063}
6164
6265func TestWebSocket_UpgradeToWebSocket (t * testing.T ) {
6366 is := is .New (t )
6467
65- h := newTestHandler ()
68+ h := & testHandler {
69+ is : is ,
70+ response : "hi there" ,
71+ }
6672 s := httptest .NewServer (newWebSocketProxy (h , log .Nop ()))
6773 defer s .Close ()
6874
6975 // Convert http to ws
7076 wsURL := "ws" + strings .TrimPrefix (s .URL , "http" )
7177
7278 // Connect to the server
73- ws , _ , err := websocket .DefaultDialer .Dial (wsURL , nil )
79+ ws , resp , err := websocket .DefaultDialer .Dial (wsURL , nil )
7480 is .NoErr (err )
7581 defer ws .Close ()
82+ defer resp .Body .Close ()
7683
77- h .responses <- "hi there"
7884 msgType , bytes , err := ws .ReadMessage ()
7985 is .NoErr (err )
80- is .Equal ("hi there" , string (bytes ))
86+ is .Equal (h . response , string (bytes ))
8187 is .Equal (websocket .TextMessage , msgType )
8288}
0 commit comments