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