mirror of
https://github.com/fluencelabs/tendermint
synced 2025-06-07 18:41:19 +00:00
54 lines
1.4 KiB
Go
54 lines
1.4 KiB
Go
|
package rpcserver
|
||
|
|
||
|
import (
|
||
|
"net/http"
|
||
|
"net/http/httptest"
|
||
|
"testing"
|
||
|
|
||
|
"github.com/gorilla/websocket"
|
||
|
"github.com/stretchr/testify/require"
|
||
|
|
||
|
amino "github.com/tendermint/go-amino"
|
||
|
|
||
|
"github.com/tendermint/tendermint/libs/log"
|
||
|
types "github.com/tendermint/tendermint/rpc/lib/types"
|
||
|
)
|
||
|
|
||
|
func TestWebsocketManagerHandler(t *testing.T) {
|
||
|
s := newWSServer()
|
||
|
defer s.Close()
|
||
|
|
||
|
// check upgrader works
|
||
|
d := websocket.Dialer{}
|
||
|
c, dialResp, err := d.Dial("ws://"+s.Listener.Addr().String()+"/websocket", nil)
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
if got, want := dialResp.StatusCode, http.StatusSwitchingProtocols; got != want {
|
||
|
t.Errorf("dialResp.StatusCode = %q, want %q", got, want)
|
||
|
}
|
||
|
|
||
|
// check basic functionality works
|
||
|
req, err := types.MapToRequest(amino.NewCodec(), types.JSONRPCStringID("TestWebsocketManager"), "c", map[string]interface{}{"s": "a", "i": 10})
|
||
|
require.NoError(t, err)
|
||
|
err = c.WriteJSON(req)
|
||
|
require.NoError(t, err)
|
||
|
|
||
|
var resp types.RPCResponse
|
||
|
err = c.ReadJSON(&resp)
|
||
|
require.NoError(t, err)
|
||
|
require.Nil(t, resp.Error)
|
||
|
}
|
||
|
|
||
|
func newWSServer() *httptest.Server {
|
||
|
funcMap := map[string]*RPCFunc{
|
||
|
"c": NewWSRPCFunc(func(ctx *types.Context, s string, i int) (string, error) { return "foo", nil }, "s,i"),
|
||
|
}
|
||
|
wm := NewWebsocketManager(funcMap, amino.NewCodec())
|
||
|
wm.SetLogger(log.TestingLogger())
|
||
|
|
||
|
mux := http.NewServeMux()
|
||
|
mux.HandleFunc("/websocket", wm.WebsocketHandler)
|
||
|
|
||
|
return httptest.NewServer(mux)
|
||
|
}
|