mirror of
https://github.com/tendermint/tendermint.git
synced 2026-01-07 13:55:17 +00:00
* Update Caller interface and its documentation. * Rework MapToRequest as ParamsToRequest. The old interface returned the result as well as populating it. Nothing was using this, so drop the duplicated value from the return signature. Clarify the documentation on the Caller type. Rework the MapToRequest helper to take an arbitrary value instead of only a map. This is groundwork for getting rid of the custom marshaling code. For now, however, the implementation preserves the existing behaviour for the map, until we can replace those.
64 lines
1.5 KiB
Go
64 lines
1.5 KiB
Go
package server
|
|
|
|
import (
|
|
"net/http"
|
|
"net/http/httptest"
|
|
"testing"
|
|
|
|
"github.com/gorilla/websocket"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/tendermint/tendermint/libs/log"
|
|
rpctypes "github.com/tendermint/tendermint/rpc/jsonrpc/types"
|
|
)
|
|
|
|
func TestWebsocketManagerHandler(t *testing.T) {
|
|
logger := log.NewTestingLogger(t)
|
|
|
|
s := newWSServer(t, logger)
|
|
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 := rpctypes.ParamsToRequest(
|
|
rpctypes.JSONRPCStringID("TestWebsocketManager"),
|
|
"c",
|
|
map[string]interface{}{"s": "a", "i": 10},
|
|
)
|
|
require.NoError(t, err)
|
|
err = c.WriteJSON(req)
|
|
require.NoError(t, err)
|
|
|
|
var resp rpctypes.RPCResponse
|
|
err = c.ReadJSON(&resp)
|
|
require.NoError(t, err)
|
|
require.Nil(t, resp.Error)
|
|
dialResp.Body.Close()
|
|
}
|
|
|
|
func newWSServer(t *testing.T, logger log.Logger) *httptest.Server {
|
|
funcMap := map[string]*RPCFunc{
|
|
"c": NewWSRPCFunc(func(ctx *rpctypes.Context, s string, i int) (string, error) { return "foo", nil }, "s,i"),
|
|
}
|
|
wm := NewWebsocketManager(funcMap)
|
|
|
|
wm.SetLogger(logger)
|
|
|
|
mux := http.NewServeMux()
|
|
mux.HandleFunc("/websocket", wm.WebsocketHandler)
|
|
|
|
srv := httptest.NewServer(mux)
|
|
|
|
t.Cleanup(srv.Close)
|
|
|
|
return srv
|
|
}
|