github.com/okex/exchain@v1.8.0/libs/tendermint/rpc/jsonrpc/server/ws_handler_test.go (about) 1 package server 2 3 import ( 4 "net/http" 5 "net/http/httptest" 6 "testing" 7 8 "github.com/gorilla/websocket" 9 "github.com/stretchr/testify/require" 10 11 amino "github.com/tendermint/go-amino" 12 13 "github.com/okex/exchain/libs/tendermint/libs/log" 14 types "github.com/okex/exchain/libs/tendermint/rpc/jsonrpc/types" 15 ) 16 17 func TestWebsocketManagerHandler(t *testing.T) { 18 s := newWSServer() 19 defer s.Close() 20 21 // check upgrader works 22 d := websocket.Dialer{} 23 c, dialResp, err := d.Dial("ws://"+s.Listener.Addr().String()+"/websocket", nil) 24 require.NoError(t, err) 25 26 if got, want := dialResp.StatusCode, http.StatusSwitchingProtocols; got != want { 27 t.Errorf("dialResp.StatusCode = %q, want %q", got, want) 28 } 29 30 // check basic functionality works 31 req, err := types.MapToRequest( 32 amino.NewCodec(), 33 types.JSONRPCStringID("TestWebsocketManager"), 34 "c", 35 map[string]interface{}{"s": "a", "i": 10}, 36 ) 37 require.NoError(t, err) 38 err = c.WriteJSON(req) 39 require.NoError(t, err) 40 41 var resp types.RPCResponse 42 err = c.ReadJSON(&resp) 43 require.NoError(t, err) 44 require.Nil(t, resp.Error) 45 dialResp.Body.Close() 46 } 47 48 func newWSServer() *httptest.Server { 49 funcMap := map[string]*RPCFunc{ 50 "c": NewWSRPCFunc(func(ctx *types.Context, s string, i int) (string, error) { return "foo", nil }, "s,i"), 51 } 52 wm := NewWebsocketManager(funcMap, amino.NewCodec()) 53 wm.SetLogger(log.TestingLogger()) 54 55 mux := http.NewServeMux() 56 mux.HandleFunc("/websocket", wm.WebsocketHandler) 57 58 return httptest.NewServer(mux) 59 }