From 334382bfd52e0805fc593107b635c766293159ae Mon Sep 17 00:00:00 2001 From: "M. J. Fromberger" Date: Sat, 23 Oct 2021 08:54:49 -0700 Subject: [PATCH] Consolidate common errors. --- base.go | 4 ++-- error.go | 3 +++ internal_test.go | 4 ++-- jrpc2_test.go | 4 ++-- 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/base.go b/base.go index 2052a7d..e4f8f57 100644 --- a/base.go +++ b/base.go @@ -242,10 +242,10 @@ func (j *jmessages) parseJSON(data []byte) error { if len(data) == 0 || data[0] != '[' { msgs = append(msgs, nil) if err := json.Unmarshal(data, &msgs[0]); err != nil { - return Errorf(code.ParseError, "invalid request message") + return errInvalidRequest } } else if err := json.Unmarshal(data, &msgs); err != nil { - return Errorf(code.ParseError, "invalid request batch") + return errInvalidRequest } else { batch = true } diff --git a/error.go b/error.go index b2e1cfe..39c9a54 100644 --- a/error.go +++ b/error.go @@ -44,6 +44,9 @@ var errClientStopped = errors.New("the client has been stopped") // errEmptyMethod is the error reported for an empty request method name. var errEmptyMethod = &Error{Code: code.InvalidRequest, Message: "empty method name"} +// errInvalidRequest is the error reported for an invalid request object or batch. +var errInvalidRequest = &Error{Code: code.ParseError, Message: "invalid request value"} + // errChannelClosed is the error reported to a pending callback when the client // channel has closed before the call completed. var errChannelClosed = &Error{Code: code.Cancelled, Message: "client channel terminated"} diff --git a/internal_test.go b/internal_test.go index bf081ea..7c765ed 100644 --- a/internal_test.go +++ b/internal_test.go @@ -52,10 +52,10 @@ func TestParseRequests(t *testing.T) { }, ErrInvalidVersion}, // A broken request. - {`{`, nil, Errorf(code.ParseError, "invalid request message")}, + {`{`, nil, Errorf(code.ParseError, "invalid request value")}, // A broken batch. - {`["bad"{]`, nil, Errorf(code.ParseError, "invalid request batch")}, + {`["bad"{]`, nil, Errorf(code.ParseError, "invalid request value")}, } for _, test := range tests { got, err := ParseRequests([]byte(test.input)) diff --git a/jrpc2_test.go b/jrpc2_test.go index f3e9c6a..c7eb95b 100644 --- a/jrpc2_test.go +++ b/jrpc2_test.go @@ -652,11 +652,11 @@ func TestServer_nonLibraryClient(t *testing.T) { // A broken batch request should report a single top-level error. {`[{"jsonrpc":"2.0", "method":"A", "id": 1}, {"jsonrpc":"2.0"]`, // N.B. syntax error - `{"jsonrpc":"2.0","id":null,"error":{"code":-32700,"message":"invalid request batch"}}`}, + `{"jsonrpc":"2.0","id":null,"error":{"code":-32700,"message":"invalid request value"}}`}, // A broken single request should report a top-level error. {`{"bogus"][++`, - `{"jsonrpc":"2.0","id":null,"error":{"code":-32700,"message":"invalid request message"}}`}, + `{"jsonrpc":"2.0","id":null,"error":{"code":-32700,"message":"invalid request value"}}`}, // Various invalid ID checks. {`{"jsonrpc":"2.0", "id":[], "method":"X"}`, invalidIDMessage}, // invalid ID: array