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  }