diff --git a/json_rpc/router.nim b/json_rpc/router.nim index d598452..09bb990 100644 --- a/json_rpc/router.nim +++ b/json_rpc/router.nim @@ -81,7 +81,7 @@ proc route*(router: RpcRouter, node: JsonNode): Future[StringOfJson] {.async, gc let res = await rpcProc(if params == nil: newJArray() else: params) return wrapReply(id, res) except InvalidRequest as err: - return wrapError(err.code, err.msg) + return wrapError(err.code, err.msg, id) except CatchableError as err: debug "Error occurred within RPC", methodName = methodName, err = err.msg return wrapError( diff --git a/tests/testserverclient.nim b/tests/testserverclient.nim index 4845a27..2f012c9 100644 --- a/tests/testserverclient.nim +++ b/tests/testserverclient.nim @@ -13,6 +13,9 @@ proc setupServer*(srv: RpcServer) = srv.rpc("myError") do(input: string, data: array[0..3, int]): raise (ref ValueError)(msg: "someMessage") + srv.rpc("invalidRequest") do(): + raise (ref InvalidRequest)(code: -32001, msg: "Unknown payload") + suite "Socket Server/Client RPC": var srv = newRpcSocketServer(["localhost:8545"]) var client = newRpcSocketClient() @@ -33,6 +36,13 @@ suite "Socket Server/Client RPC": expect(CatchableError): # The error type wont be translated discard waitFor client.call("myError", %[%"abc", %[1, 2, 3, 4]]) + test "Invalid request exception": + try: + discard waitFor client.call("invalidRequest", %[]) + check false + except CatchableError as e: + check e.msg == """{"code":-32001,"message":"Unknown payload","data":null}""" + srv.stop() waitFor srv.closeWait() @@ -56,6 +66,13 @@ suite "Websocket Server/Client RPC": expect(CatchableError): # The error type wont be translated discard waitFor client.call("myError", %[%"abc", %[1, 2, 3, 4]]) + test "Invalid request exception": + try: + discard waitFor client.call("invalidRequest", %[]) + check false + except CatchableError as e: + check e.msg == """{"code":-32001,"message":"Unknown payload","data":null}""" + srv.stop() waitFor srv.closeWait() @@ -81,5 +98,12 @@ suite "Websocket Server/Client RPC with Compression": expect(CatchableError): # The error type wont be translated discard waitFor client.call("myError", %[%"abc", %[1, 2, 3, 4]]) + test "Invalid request exception": + try: + discard waitFor client.call("invalidRequest", %[]) + check false + except CatchableError as e: + check e.msg == """{"code":-32001,"message":"Unknown payload","data":null}""" + srv.stop() waitFor srv.closeWait()