From 9f9adb92ddd6313a2bb70ffbf778c8528709180f Mon Sep 17 00:00:00 2001 From: Garet Halliday <me@garet.holiday> Date: Tue, 5 Dec 2023 14:43:25 -0600 Subject: [PATCH] fix test --- contrib/codecs/http/client.go | 3 +- contrib/extension/subscription/client.go | 6 ++-- contrib/extension/subscription/client_test.go | 7 ---- contrib/extension/subscription/engine.go | 2 +- pkg/jsonrpc/json.go | 2 +- pkg/jsonrpc/reqresp.go | 32 +++++++++++++++++-- pkg/server/server.go | 3 +- 7 files changed, 39 insertions(+), 16 deletions(-) diff --git a/contrib/codecs/http/client.go b/contrib/codecs/http/client.go index 1937fa7..301332e 100644 --- a/contrib/codecs/http/client.go +++ b/contrib/codecs/http/client.go @@ -12,9 +12,10 @@ import ( "sync" "sync/atomic" + "golang.org/x/net/http2" + "gfx.cafe/open/jrpc/pkg/jjson" "gfx.cafe/open/jrpc/pkg/jsonrpc" - "golang.org/x/net/http2" ) var ( diff --git a/contrib/extension/subscription/client.go b/contrib/extension/subscription/client.go index 8b8f136..ac5a38e 100644 --- a/contrib/extension/subscription/client.go +++ b/contrib/extension/subscription/client.go @@ -172,8 +172,10 @@ func (c *clientSub) Unsubscribe() error { c.engine.mu.Unlock() // TODO: dont use context background here... - var result string - err := c.conn.Do(context.Background(), &result, c.namespace+serviceMethodSeparator+unsubscribeMethodSuffix, nil) + var result bool + err := c.conn.Do(context.Background(), &result, c.namespace+serviceMethodSeparator+unsubscribeMethodSuffix, []string{ + c.id, + }) if err != nil { return err } diff --git a/contrib/extension/subscription/client_test.go b/contrib/extension/subscription/client_test.go index a1f9936..4292e3b 100644 --- a/contrib/extension/subscription/client_test.go +++ b/contrib/extension/subscription/client_test.go @@ -2,7 +2,6 @@ package subscription import ( "context" - "net/http" "net/http/httptest" _ "net/http/pprof" "strings" @@ -102,12 +101,6 @@ func TestUnsubscribeNoRead(t *testing.T) { } func TestWrapClient(t *testing.T) { - go func() { - if err := http.ListenAndServe(":6060", nil); err != nil { - panic(err) - } - }() - engine := NewEngine() r := jmux.NewRouter() r.Use(engine.Middleware()) diff --git a/contrib/extension/subscription/engine.go b/contrib/extension/subscription/engine.go index e4ba9a2..e8d1aa6 100644 --- a/contrib/extension/subscription/engine.go +++ b/contrib/extension/subscription/engine.go @@ -62,7 +62,7 @@ func (e *Engine) Middleware() func(jsonrpc.Handler) jsonrpc.Handler { h.ServeRPC(w, r) case strings.HasSuffix(r.Method, serviceMethodSeparator+unsubscribeMethodSuffix): // read the subscription id to close - resp := []SubID{} + var resp []SubID err := json.Unmarshal(r.Params, &resp) if err != nil { w.Send(false, err) diff --git a/pkg/jsonrpc/json.go b/pkg/jsonrpc/json.go index 30a1e0d..ba5bc5f 100644 --- a/pkg/jsonrpc/json.go +++ b/pkg/jsonrpc/json.go @@ -223,7 +223,7 @@ func ReadMessage(dec *jx.Decoder) ([]*Message, bool) { msgs = []*Message{} dec.Arr(func(d *jx.Decoder) error { msg := new(Message) - //err := UnmarshalMessage(msg, d) + // err := UnmarshalMessage(msg, d) raw, err := d.Raw() if err != nil { raw = []byte{} diff --git a/pkg/jsonrpc/reqresp.go b/pkg/jsonrpc/reqresp.go index 3a4aedc..67a5cbe 100644 --- a/pkg/jsonrpc/reqresp.go +++ b/pkg/jsonrpc/reqresp.go @@ -3,6 +3,8 @@ package jsonrpc import ( "context" "encoding/json" + + "github.com/go-faster/jx" ) // http.ResponseWriter interface, but for jrpc @@ -39,9 +41,12 @@ func NewRawRequest(ctx context.Context, id *ID, method string, params json.RawMe // NewRequest makes a new request func NewRequest(ctx context.Context, id *ID, method string, params any) (r *Request, err error) { - raw, err := json.Marshal(params) - if err != nil { - return nil, err + var raw json.RawMessage + if params != nil { + raw, err = json.Marshal(params) + if err != nil { + return nil, err + } } return NewRawRequest(ctx, id, method, raw), nil } @@ -64,3 +69,24 @@ func (r *Request) WithContext(ctx context.Context) *Request { r2.Peer = r.Peer return r2 } + +func (r Request) MarshalJSON() ([]byte, error) { + enc := jx.GetEncoder() + enc.Obj(func(e *jx.Encoder) { + e.FieldStart("jsonrpc") + e.Str(VersionString) + if r.ID != nil { + e.FieldStart("id") + e.Raw(*r.ID) + } + if r.Method != "" { + e.FieldStart("method") + e.Str(r.Method) + } + if r.Params != nil { + e.FieldStart("params") + e.Raw(r.Params) + } + }) + return enc.Bytes(), nil +} diff --git a/pkg/server/server.go b/pkg/server/server.go index 0327b52..eb1aad9 100644 --- a/pkg/server/server.go +++ b/pkg/server/server.go @@ -6,9 +6,10 @@ import ( "errors" "sync" + "github.com/mailgun/multibuf" + "gfx.cafe/open/jrpc/pkg/jjson" "gfx.cafe/open/jrpc/pkg/jsonrpc" - "github.com/mailgun/multibuf" ) // Server is an RPC server. -- GitLab