diff --git a/tests/test_misc.py b/tests/test_misc.py index 02e9c87e2..573aa8818 100644 --- a/tests/test_misc.py +++ b/tests/test_misc.py @@ -649,6 +649,46 @@ def test_multiplexed_rpc(node_factory): sock.close() +def test_malformed_rpc(node_factory): + """Test that we get a correct response to malformed RPC commands""" + l1 = node_factory.get_node() + + sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + sock.connect(l1.rpc.socket_path) + + # No ID + sock.sendall(b'{"jsonrpc":"2.0","method":"getinfo","params":[]}') + obj, _ = l1.rpc._readobj(sock, b'') + assert obj['error']['code'] == -32600 + + # No method + sock.sendall(b'{"id":1, "jsonrpc":"2.0","params":[]}') + obj, _ = l1.rpc._readobj(sock, b'') + assert obj['error']['code'] == -32600 + + # Complete crap + sock.sendall(b'[]') + obj, _ = l1.rpc._readobj(sock, b'') + assert obj['error']['code'] == -32600 + + # Bad ID + sock.sendall(b'{"id":{}, "jsonrpc":"2.0","method":"getinfo","params":[]}') + obj, _ = l1.rpc._readobj(sock, b'') + assert obj['error']['code'] == -32600 + + # Bad method + sock.sendall(b'{"id":1, "method": 12, "jsonrpc":"2.0","params":[]}') + obj, _ = l1.rpc._readobj(sock, b'') + assert obj['error']['code'] == -32600 + + # Unknown method + sock.sendall(b'{"id":1, "method": "unknown", "jsonrpc":"2.0","params":[]}') + obj, _ = l1.rpc._readobj(sock, b'') + assert obj['error']['code'] == -32601 + + sock.close() + + def test_cli(node_factory): l1 = node_factory.get_node()