From 9e49e6863737005a38f3b98b6589a20fb736bfdb Mon Sep 17 00:00:00 2001 From: lcd1232 <8745863+lcd1232@users.noreply.github.com> Date: Thu, 1 Apr 2021 14:03:58 +0300 Subject: [PATCH 01/10] Add response and request to context --- context.go | 33 +++++++++++++++++++++++++++++++++ context_test.go | 25 +++++++++++++++++++++++++ handler.go | 6 ++++-- 3 files changed, 62 insertions(+), 2 deletions(-) diff --git a/context.go b/context.go index fc09944..9366b7b 100644 --- a/context.go +++ b/context.go @@ -2,6 +2,7 @@ package jsonrpc import ( "context" + "net/http" "github.com/goccy/go-json" ) @@ -10,6 +11,8 @@ type ( requestIDKey struct{} metadataIDKey struct{} methodNameKey struct{} + requestKey struct{} + responseKey struct{} ) // RequestID takes request id from context. @@ -41,3 +44,33 @@ func MethodName(c context.Context) string { func WithMethodName(c context.Context, name string) context.Context { return context.WithValue(c, methodNameKey{}, name) } + +// WithRequest adds request to context. +func WithRequest(c context.Context, r *http.Request) context.Context { + return context.WithValue(c, requestKey{}, r) +} + +// GetRequest takes request from context. +func GetRequest(c context.Context) *http.Request { + v := c.Value(requestKey{}) + if r, ok := v.(*http.Request); ok { + return r + } + + return nil +} + +// WithRequest adds response to context. +func WithResponse(c context.Context, r http.ResponseWriter) context.Context { + return context.WithValue(c, responseKey{}, r) +} + +// GetResponse takes response from context. +func GetResponse(c context.Context) http.ResponseWriter { + v := c.Value(responseKey{}) + if r, ok := v.(http.ResponseWriter); ok { + return r + } + + return nil +} diff --git a/context_test.go b/context_test.go index cb7c887..67a357b 100644 --- a/context_test.go +++ b/context_test.go @@ -2,9 +2,12 @@ package jsonrpc import ( "context" + "net/http" + "net/http/httptest" "testing" "github.com/goccy/go-json" + "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -39,3 +42,25 @@ func TestMethodName(t *testing.T) { }) require.Equal(t, t.Name(), pick) } + +func TestRequest(t *testing.T) { + assert.NotPanics(t, func() { + r := GetRequest(context.Background()) + assert.Nil(t, r) + }) + c := context.Background() + r := httptest.NewRequest(http.MethodPost, "/", nil) + c = WithRequest(c, r) + assert.Equal(t, r, GetRequest(c)) +} + +func TestResponse(t *testing.T) { + assert.NotPanics(t, func() { + r := GetResponse(context.Background()) + assert.Nil(t, r) + }) + c := context.Background() + r := httptest.NewRecorder() + c = WithResponse(c, r) + assert.Equal(t, r, GetResponse(c)) +} diff --git a/handler.go b/handler.go index c748e74..c24a077 100644 --- a/handler.go +++ b/handler.go @@ -43,7 +43,7 @@ func (mr *MethodRepository) ServeHTTP(w http.ResponseWriter, r *http.Request) { resp := make([]*Response, len(rs)) for i := range rs { - resp[i] = mr.InvokeMethod(r.Context(), rs[i]) + resp[i] = mr.InvokeMethod(r.Context(), rs[i], r, w) } if err := SendResponse(w, resp, batch); err != nil { @@ -53,7 +53,7 @@ func (mr *MethodRepository) ServeHTTP(w http.ResponseWriter, r *http.Request) { } // InvokeMethod invokes JSON-RPC method. -func (mr *MethodRepository) InvokeMethod(c context.Context, r *Request) *Response { +func (mr *MethodRepository) InvokeMethod(c context.Context, r *Request, req *http.Request, w http.ResponseWriter) *Response { var md Metadata res := NewResponse(r) md, res.Error = mr.TakeMethodMetadata(r) @@ -64,6 +64,8 @@ func (mr *MethodRepository) InvokeMethod(c context.Context, r *Request) *Respons wrappedContext := WithRequestID(c, r.ID) wrappedContext = WithMethodName(wrappedContext, r.Method) wrappedContext = WithMetadata(wrappedContext, md) + wrappedContext = WithRequest(wrappedContext, req) + wrappedContext = WithResponse(wrappedContext, w) res.Result, res.Error = md.Handler.ServeJSONRPC(wrappedContext, r.Params) if res.Error != nil { res.Result = nil From cbc8b7349fdebe58d76cfc864cb65fda175efa85 Mon Sep 17 00:00:00 2001 From: lcd1232 <8745863+lcd1232@users.noreply.github.com> Date: Thu, 1 Apr 2021 15:37:12 +0300 Subject: [PATCH 02/10] Fix comment --- context.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/context.go b/context.go index 9366b7b..2f7fee5 100644 --- a/context.go +++ b/context.go @@ -60,7 +60,7 @@ func GetRequest(c context.Context) *http.Request { return nil } -// WithRequest adds response to context. +// WithResponse adds response to context. func WithResponse(c context.Context, r http.ResponseWriter) context.Context { return context.WithValue(c, responseKey{}, r) } From a10df35301142eee054428db482caffd5a55b862 Mon Sep 17 00:00:00 2001 From: lcd1232 <8745863+lcd1232@users.noreply.github.com> Date: Thu, 8 Apr 2021 12:06:33 +0300 Subject: [PATCH 03/10] Add failed test --- handler.go | 3 +++ method.go | 9 +++++---- method_test.go | 8 ++++++++ 3 files changed, 16 insertions(+), 4 deletions(-) diff --git a/handler.go b/handler.go index c24a077..4656cb6 100644 --- a/handler.go +++ b/handler.go @@ -19,6 +19,9 @@ type Handler interface { // jsonrpc.Handler that calls f. type HandlerFunc func(c context.Context, params *json.RawMessage) (result interface{}, err *Error) +// MiddlewareFunc defines a function to process middleware. +type MiddlewareFunc func(HandlerFunc) HandlerFunc + // ServeJSONRPC calls f(w, r). func (f HandlerFunc) ServeJSONRPC(c context.Context, params *json.RawMessage) (result interface{}, err *Error) { return f(c, params) diff --git a/method.go b/method.go index 241d824..74738f8 100644 --- a/method.go +++ b/method.go @@ -13,9 +13,10 @@ type ( } // Metadata has method meta data. Metadata struct { - Handler Handler - Params interface{} - Result interface{} + Middlewares []MiddlewareFunc + Handler Handler + Params interface{} + Result interface{} } ) @@ -53,7 +54,7 @@ func (mr *MethodRepository) TakeMethod(r *Request) (Handler, *Error) { } // RegisterMethod registers jsonrpc.Func to MethodRepository. -func (mr *MethodRepository) RegisterMethod(method string, h Handler, params, result interface{}) error { +func (mr *MethodRepository) RegisterMethod(method string, h Handler, params, result interface{}, middlewares ...MiddlewareFunc) error { if method == "" || h == nil { return errors.New("jsonrpc: method name and function should not be empty") } diff --git a/method_test.go b/method_test.go index fb41c9d..d14a294 100644 --- a/method_test.go +++ b/method_test.go @@ -45,6 +45,14 @@ func TestRegisterMethod(t *testing.T) { err = mr.RegisterMethod("test", SampleHandler(), nil, nil) require.NoError(t, err) + + err = mr.RegisterMethod("test", SampleHandler(), nil, nil, nil) + require.NoError(t, err) + assert.Len(t, mr.r["test"].Middlewares, 1) + + err = mr.RegisterMethod("test", SampleHandler(), nil, nil, nil, nil) + require.NoError(t, err) + assert.Len(t, mr.r["test"].Middlewares, 2) } func TestMethods(t *testing.T) { From e6ffc077bfc423754cf11b675172016f02b4eda9 Mon Sep 17 00:00:00 2001 From: lcd1232 <8745863+lcd1232@users.noreply.github.com> Date: Thu, 8 Apr 2021 12:07:15 +0300 Subject: [PATCH 04/10] Pass test --- method.go | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/method.go b/method.go index 74738f8..86d5a1d 100644 --- a/method.go +++ b/method.go @@ -60,9 +60,10 @@ func (mr *MethodRepository) RegisterMethod(method string, h Handler, params, res } mr.m.Lock() mr.r[method] = Metadata{ - Handler: h, - Params: params, - Result: result, + Handler: h, + Params: params, + Result: result, + Middlewares: middlewares, } mr.m.Unlock() return nil From 03767a3970bec22a1d8987884d5efb179b908f6e Mon Sep 17 00:00:00 2001 From: lcd1232 <8745863+lcd1232@users.noreply.github.com> Date: Thu, 8 Apr 2021 12:44:24 +0300 Subject: [PATCH 05/10] Add failed test --- handler_test.go | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/handler_test.go b/handler_test.go index c098ad7..9ab7db4 100644 --- a/handler_test.go +++ b/handler_test.go @@ -69,3 +69,41 @@ func TestHandler(t *testing.T) { require.NoError(t, err) assert.NotNil(t, res.Error) } + +func TestInvokeMethodMiddlewares(t *testing.T) { + rec := httptest.NewRecorder() + req := httptest.NewRequest(http.MethodPost, "/", nil) + ctx := context.Background() + id := json.RawMessage("test") + r := &Request{ + Version: "2.0", + Method: "test", + ID: &id, + } + + mr := NewMethodRepository() + err := mr.RegisterMethod("test", HandlerFunc(func(c context.Context, params *json.RawMessage) (result interface{}, err *Error) { + v := c.Value("key1") + require.NotNil(t, v) + v = c.Value("key2") + require.NotNil(t, v) + return nil, nil + }), nil, nil, func(next HandlerFunc) HandlerFunc { + return func(c context.Context, params *json.RawMessage) (result interface{}, err *Error) { + c = context.WithValue(c, "key1", "value1") + return next(c, params) + } + }, func(next HandlerFunc) HandlerFunc { + return func(c context.Context, params *json.RawMessage) (result interface{}, err *Error) { + v := c.Value("key1") + require.NotNil(t, v) + c = context.WithValue(c, "key2", "value2") + return next(c, params) + } + }) + require.NoError(t, err) + + resp := mr.InvokeMethod(ctx, r, req, rec) + require.Nil(t, resp.Error) + require.NotNil(t, resp.Result) +} From bbbf7ceef06307bc4547a7ad8b48b4d57f3d47f1 Mon Sep 17 00:00:00 2001 From: lcd1232 <8745863+lcd1232@users.noreply.github.com> Date: Thu, 8 Apr 2021 12:47:15 +0300 Subject: [PATCH 06/10] Pass test --- handler.go | 10 +++++++++- handler_test.go | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/handler.go b/handler.go index 4656cb6..9dcb276 100644 --- a/handler.go +++ b/handler.go @@ -55,6 +55,13 @@ func (mr *MethodRepository) ServeHTTP(w http.ResponseWriter, r *http.Request) { } } +func applyMiddleware(h Handler, middleware ...MiddlewareFunc) Handler { + for i := len(middleware) - 1; i >= 0; i-- { + h = middleware[i](h.ServeJSONRPC) + } + return h +} + // InvokeMethod invokes JSON-RPC method. func (mr *MethodRepository) InvokeMethod(c context.Context, r *Request, req *http.Request, w http.ResponseWriter) *Response { var md Metadata @@ -69,7 +76,8 @@ func (mr *MethodRepository) InvokeMethod(c context.Context, r *Request, req *htt wrappedContext = WithMetadata(wrappedContext, md) wrappedContext = WithRequest(wrappedContext, req) wrappedContext = WithResponse(wrappedContext, w) - res.Result, res.Error = md.Handler.ServeJSONRPC(wrappedContext, r.Params) + handler := applyMiddleware(md.Handler, md.Middlewares...) + res.Result, res.Error = handler.ServeJSONRPC(wrappedContext, r.Params) if res.Error != nil { res.Result = nil } diff --git a/handler_test.go b/handler_test.go index 9ab7db4..28ab4ad 100644 --- a/handler_test.go +++ b/handler_test.go @@ -87,7 +87,7 @@ func TestInvokeMethodMiddlewares(t *testing.T) { require.NotNil(t, v) v = c.Value("key2") require.NotNil(t, v) - return nil, nil + return "value3", nil }), nil, nil, func(next HandlerFunc) HandlerFunc { return func(c context.Context, params *json.RawMessage) (result interface{}, err *Error) { c = context.WithValue(c, "key1", "value1") From cd8db50c827ded1cec52783ecb558287ebd4bc75 Mon Sep 17 00:00:00 2001 From: lcd1232 <8745863+lcd1232@users.noreply.github.com> Date: Thu, 30 Sep 2021 15:44:18 +0300 Subject: [PATCH 07/10] Add failed test --- handler.go | 7 ----- method.go | 5 ++-- middleware.go | 14 ++++++++++ middleware_test.go | 64 ++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 81 insertions(+), 9 deletions(-) create mode 100644 middleware.go create mode 100644 middleware_test.go diff --git a/handler.go b/handler.go index 9dcb276..e30023a 100644 --- a/handler.go +++ b/handler.go @@ -55,13 +55,6 @@ func (mr *MethodRepository) ServeHTTP(w http.ResponseWriter, r *http.Request) { } } -func applyMiddleware(h Handler, middleware ...MiddlewareFunc) Handler { - for i := len(middleware) - 1; i >= 0; i-- { - h = middleware[i](h.ServeJSONRPC) - } - return h -} - // InvokeMethod invokes JSON-RPC method. func (mr *MethodRepository) InvokeMethod(c context.Context, r *Request, req *http.Request, w http.ResponseWriter) *Response { var md Metadata diff --git a/method.go b/method.go index 86d5a1d..172b7bf 100644 --- a/method.go +++ b/method.go @@ -8,8 +8,9 @@ import ( type ( // A MethodRepository has JSON-RPC method functions. MethodRepository struct { - m sync.RWMutex - r map[string]Metadata + middlewares []MiddlewareFunc + m sync.RWMutex + r map[string]Metadata } // Metadata has method meta data. Metadata struct { diff --git a/middleware.go b/middleware.go new file mode 100644 index 0000000..41bc582 --- /dev/null +++ b/middleware.go @@ -0,0 +1,14 @@ +package jsonrpc + +// UseMiddleware adds middlewares +func (mr *MethodRepository) UseMiddleware(middlewares ...MiddlewareFunc) { + mr.middlewares = append(mr.middlewares, middlewares...) +} + +// applyMiddleware applies middlewares to Handler +func applyMiddleware(h Handler, middleware ...MiddlewareFunc) Handler { + for i := len(middleware) - 1; i >= 0; i-- { + h = middleware[i](h.ServeJSONRPC) + } + return h +} diff --git a/middleware_test.go b/middleware_test.go new file mode 100644 index 0000000..08e5471 --- /dev/null +++ b/middleware_test.go @@ -0,0 +1,64 @@ +package jsonrpc + +import ( + "context" + "net/http" + "net/http/httptest" + "testing" + + "github.com/goccy/go-json" + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestUseMiddleware(t *testing.T) { + mr := NewMethodRepository() + assert.Len(t, mr.middlewares, 0) + mr.UseMiddleware(nil) + assert.Len(t, mr.middlewares, 1) + mr.UseMiddleware(nil, nil) + assert.Len(t, mr.middlewares, 3) +} + +func TestMiddlewareOrder(t *testing.T) { + key := "key" + mw := func(want int) MiddlewareFunc { + return func(next HandlerFunc) HandlerFunc { + return func(c context.Context, params *json.RawMessage) (result interface{}, err *Error) { + got := c.Value(key) + v, ok := got.(int) + if assert.True(t, ok) { + assert.Equal(t, want, v) + } + + c = context.WithValue(c, key, v+1) + return next(c, params) + } + } + } + + mr := NewMethodRepository() + mr.UseMiddleware(mw(3), mw(2)) + + rec := httptest.NewRecorder() + req := httptest.NewRequest(http.MethodPost, "/", nil) + ctx := context.Background() + id := json.RawMessage("test") + r := &Request{ + Version: "2.0", + Method: "test", + ID: &id, + } + + err := mr.RegisterMethod("test", HandlerFunc(func(c context.Context, params *json.RawMessage) (result interface{}, err *Error) { + got := c.Value(key) + v, ok := got.(int) + require.True(t, ok) + assert.Equal(t, 4, v) + return nil, nil + }), nil, nil, mw(1), mw(0)) + require.NoError(t, err) + + resp := mr.InvokeMethod(ctx, r, req, rec) + require.Nil(t, resp.Error) +} From 06330bd873b5bcb18febe885d0a0473eae36386c Mon Sep 17 00:00:00 2001 From: lcd1232 <8745863+lcd1232@users.noreply.github.com> Date: Fri, 15 Oct 2021 15:18:22 +0300 Subject: [PATCH 08/10] Pass test --- method.go | 7 ++++++- middleware_test.go | 29 ++++++++++++++--------------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/method.go b/method.go index 172b7bf..8c9f640 100644 --- a/method.go +++ b/method.go @@ -59,12 +59,17 @@ func (mr *MethodRepository) RegisterMethod(method string, h Handler, params, res if method == "" || h == nil { return errors.New("jsonrpc: method name and function should not be empty") } + + m := make([]MiddlewareFunc, 0, len(mr.middlewares)+len(middlewares)) + m = append(m, mr.middlewares...) + m = append(m, middlewares...) + mr.m.Lock() mr.r[method] = Metadata{ Handler: h, Params: params, Result: result, - Middlewares: middlewares, + Middlewares: m, } mr.m.Unlock() return nil diff --git a/middleware_test.go b/middleware_test.go index 08e5471..9be64dd 100644 --- a/middleware_test.go +++ b/middleware_test.go @@ -1,6 +1,7 @@ package jsonrpc import ( + "bytes" "context" "net/http" "net/http/httptest" @@ -21,24 +22,19 @@ func TestUseMiddleware(t *testing.T) { } func TestMiddlewareOrder(t *testing.T) { - key := "key" - mw := func(want int) MiddlewareFunc { + buf := bytes.Buffer{} + mw := func(s string) MiddlewareFunc { return func(next HandlerFunc) HandlerFunc { return func(c context.Context, params *json.RawMessage) (result interface{}, err *Error) { - got := c.Value(key) - v, ok := got.(int) - if assert.True(t, ok) { - assert.Equal(t, want, v) - } - - c = context.WithValue(c, key, v+1) + buf.WriteString(s) return next(c, params) } } } mr := NewMethodRepository() - mr.UseMiddleware(mw(3), mw(2)) + mr.UseMiddleware(mw("-1"), mw("1")) + mr.UseMiddleware(mw("2")) rec := httptest.NewRecorder() req := httptest.NewRequest(http.MethodPost, "/", nil) @@ -51,14 +47,17 @@ func TestMiddlewareOrder(t *testing.T) { } err := mr.RegisterMethod("test", HandlerFunc(func(c context.Context, params *json.RawMessage) (result interface{}, err *Error) { - got := c.Value(key) - v, ok := got.(int) - require.True(t, ok) - assert.Equal(t, 4, v) return nil, nil - }), nil, nil, mw(1), mw(0)) + }), + nil, + nil, + mw("3"), + mw("4"), + mw("5"), + ) require.NoError(t, err) resp := mr.InvokeMethod(ctx, r, req, rec) require.Nil(t, resp.Error) + assert.Equal(t, "-112345", buf.String()) } From 502e11657b6919f832d2e8dc3de24426fac8ee08 Mon Sep 17 00:00:00 2001 From: lcd1232 <8745863+lcd1232@users.noreply.github.com> Date: Fri, 15 Oct 2021 15:37:10 +0300 Subject: [PATCH 09/10] Remove WithRequest/WithResponse --- context.go | 33 --------------------------------- context_test.go | 25 ------------------------- handler.go | 2 -- 3 files changed, 60 deletions(-) diff --git a/context.go b/context.go index 2f7fee5..fc09944 100644 --- a/context.go +++ b/context.go @@ -2,7 +2,6 @@ package jsonrpc import ( "context" - "net/http" "github.com/goccy/go-json" ) @@ -11,8 +10,6 @@ type ( requestIDKey struct{} metadataIDKey struct{} methodNameKey struct{} - requestKey struct{} - responseKey struct{} ) // RequestID takes request id from context. @@ -44,33 +41,3 @@ func MethodName(c context.Context) string { func WithMethodName(c context.Context, name string) context.Context { return context.WithValue(c, methodNameKey{}, name) } - -// WithRequest adds request to context. -func WithRequest(c context.Context, r *http.Request) context.Context { - return context.WithValue(c, requestKey{}, r) -} - -// GetRequest takes request from context. -func GetRequest(c context.Context) *http.Request { - v := c.Value(requestKey{}) - if r, ok := v.(*http.Request); ok { - return r - } - - return nil -} - -// WithResponse adds response to context. -func WithResponse(c context.Context, r http.ResponseWriter) context.Context { - return context.WithValue(c, responseKey{}, r) -} - -// GetResponse takes response from context. -func GetResponse(c context.Context) http.ResponseWriter { - v := c.Value(responseKey{}) - if r, ok := v.(http.ResponseWriter); ok { - return r - } - - return nil -} diff --git a/context_test.go b/context_test.go index 67a357b..cb7c887 100644 --- a/context_test.go +++ b/context_test.go @@ -2,12 +2,9 @@ package jsonrpc import ( "context" - "net/http" - "net/http/httptest" "testing" "github.com/goccy/go-json" - "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" ) @@ -42,25 +39,3 @@ func TestMethodName(t *testing.T) { }) require.Equal(t, t.Name(), pick) } - -func TestRequest(t *testing.T) { - assert.NotPanics(t, func() { - r := GetRequest(context.Background()) - assert.Nil(t, r) - }) - c := context.Background() - r := httptest.NewRequest(http.MethodPost, "/", nil) - c = WithRequest(c, r) - assert.Equal(t, r, GetRequest(c)) -} - -func TestResponse(t *testing.T) { - assert.NotPanics(t, func() { - r := GetResponse(context.Background()) - assert.Nil(t, r) - }) - c := context.Background() - r := httptest.NewRecorder() - c = WithResponse(c, r) - assert.Equal(t, r, GetResponse(c)) -} diff --git a/handler.go b/handler.go index e30023a..3f6d75d 100644 --- a/handler.go +++ b/handler.go @@ -67,8 +67,6 @@ func (mr *MethodRepository) InvokeMethod(c context.Context, r *Request, req *htt wrappedContext := WithRequestID(c, r.ID) wrappedContext = WithMethodName(wrappedContext, r.Method) wrappedContext = WithMetadata(wrappedContext, md) - wrappedContext = WithRequest(wrappedContext, req) - wrappedContext = WithResponse(wrappedContext, w) handler := applyMiddleware(md.Handler, md.Middlewares...) res.Result, res.Error = handler.ServeJSONRPC(wrappedContext, r.Params) if res.Error != nil { From ff71991b9b8a28f12d57897e0a163f850388be82 Mon Sep 17 00:00:00 2001 From: lcd1232 <8745863+lcd1232@users.noreply.github.com> Date: Fri, 15 Oct 2021 15:38:58 +0300 Subject: [PATCH 10/10] Remove old code --- handler.go | 4 ++-- handler_test.go | 4 +--- middleware_test.go | 6 +----- 3 files changed, 4 insertions(+), 10 deletions(-) diff --git a/handler.go b/handler.go index 3f6d75d..886766a 100644 --- a/handler.go +++ b/handler.go @@ -46,7 +46,7 @@ func (mr *MethodRepository) ServeHTTP(w http.ResponseWriter, r *http.Request) { resp := make([]*Response, len(rs)) for i := range rs { - resp[i] = mr.InvokeMethod(r.Context(), rs[i], r, w) + resp[i] = mr.InvokeMethod(r.Context(), rs[i]) } if err := SendResponse(w, resp, batch); err != nil { @@ -56,7 +56,7 @@ func (mr *MethodRepository) ServeHTTP(w http.ResponseWriter, r *http.Request) { } // InvokeMethod invokes JSON-RPC method. -func (mr *MethodRepository) InvokeMethod(c context.Context, r *Request, req *http.Request, w http.ResponseWriter) *Response { +func (mr *MethodRepository) InvokeMethod(c context.Context, r *Request) *Response { var md Metadata res := NewResponse(r) md, res.Error = mr.TakeMethodMetadata(r) diff --git a/handler_test.go b/handler_test.go index 28ab4ad..920c572 100644 --- a/handler_test.go +++ b/handler_test.go @@ -71,8 +71,6 @@ func TestHandler(t *testing.T) { } func TestInvokeMethodMiddlewares(t *testing.T) { - rec := httptest.NewRecorder() - req := httptest.NewRequest(http.MethodPost, "/", nil) ctx := context.Background() id := json.RawMessage("test") r := &Request{ @@ -103,7 +101,7 @@ func TestInvokeMethodMiddlewares(t *testing.T) { }) require.NoError(t, err) - resp := mr.InvokeMethod(ctx, r, req, rec) + resp := mr.InvokeMethod(ctx, r) require.Nil(t, resp.Error) require.NotNil(t, resp.Result) } diff --git a/middleware_test.go b/middleware_test.go index 9be64dd..23cb06d 100644 --- a/middleware_test.go +++ b/middleware_test.go @@ -3,8 +3,6 @@ package jsonrpc import ( "bytes" "context" - "net/http" - "net/http/httptest" "testing" "github.com/goccy/go-json" @@ -36,8 +34,6 @@ func TestMiddlewareOrder(t *testing.T) { mr.UseMiddleware(mw("-1"), mw("1")) mr.UseMiddleware(mw("2")) - rec := httptest.NewRecorder() - req := httptest.NewRequest(http.MethodPost, "/", nil) ctx := context.Background() id := json.RawMessage("test") r := &Request{ @@ -57,7 +53,7 @@ func TestMiddlewareOrder(t *testing.T) { ) require.NoError(t, err) - resp := mr.InvokeMethod(ctx, r, req, rec) + resp := mr.InvokeMethod(ctx, r) require.Nil(t, resp.Error) assert.Equal(t, "-112345", buf.String()) }