diff --git a/pkg/rpc/client/wsclient.go b/pkg/rpc/client/wsclient.go index 24363f1dd..3f469a86a 100644 --- a/pkg/rpc/client/wsclient.go +++ b/pkg/rpc/client/wsclient.go @@ -71,6 +71,10 @@ const ( // connection). You need to use websocket URL for it like `ws://1.2.3.4/ws`. func NewWS(ctx context.Context, endpoint string, opts Options) (*WSClient, error) { cl, err := New(ctx, endpoint, opts) + if err != nil { + return nil, err + } + cl.cli = nil dialer := websocket.Dialer{HandshakeTimeout: opts.DialTimeout} diff --git a/pkg/rpc/client/wsclient_test.go b/pkg/rpc/client/wsclient_test.go index 55224cf35..a31a6beb0 100644 --- a/pkg/rpc/client/wsclient_test.go +++ b/pkg/rpc/client/wsclient_test.go @@ -4,6 +4,7 @@ import ( "context" "net/http" "net/http/httptest" + "strings" "testing" "time" @@ -297,3 +298,17 @@ func TestWSFilteredSubscriptions(t *testing.T) { }) } } + +func TestNewWS(t *testing.T) { + srv := initTestServer(t, "") + defer srv.Close() + + t.Run("good", func(t *testing.T) { + _, err := NewWS(context.TODO(), httpURLtoWS(srv.URL), Options{}) + require.NoError(t, err) + }) + t.Run("bad URL", func(t *testing.T) { + _, err := NewWS(context.TODO(), strings.Trim(srv.URL, "http://"), Options{}) + require.Error(t, err) + }) +}