From 0c5f8a3a15af7a336c250935d52361adba81dc42 Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Wed, 5 Dec 2018 12:32:07 +1030 Subject: [PATCH] pytest: add test for check command. Signed-off-by: Rusty Russell Signed-off-by: Mark Beckwith --- tests/test_misc.py | 65 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) diff --git a/tests/test_misc.py b/tests/test_misc.py index 67c1e51c0..8d91b5251 100644 --- a/tests/test_misc.py +++ b/tests/test_misc.py @@ -1070,3 +1070,68 @@ def test_json_error(node_factory): # Should not corrupt following RPC l1.rpc.getinfo() + + +def test_check_command(node_factory): + l1 = node_factory.get_node() + + l1.rpc.check(command_to_check='help') + l1.rpc.check(command_to_check='help', command='check') + # Note: this just checks form, not whether it's valid! + l1.rpc.check(command_to_check='help', command='badcommand') + with pytest.raises(RpcError, match=r'is invalid'): + l1.rpc.check(command_to_check='badcommand') + with pytest.raises(RpcError, match=r'unknown parameter'): + l1.rpc.check(command_to_check='help', badarg='x') + + # Ensures we have compulsory parameters. + with pytest.raises(RpcError, match=r'missing required parameter'): + l1.rpc.check(command_to_check='connect') + # Even with optional parameters. + with pytest.raises(RpcError, match=r'missing required parameter'): + l1.rpc.check(command_to_check='connect', host='x', port=77) + # Makes sure parameter types are correct. + with pytest.raises(RpcError, match=r'should be an integer'): + l1.rpc.check(command_to_check='connect', id='test', host='x', port="abcd") + + # FIXME: python wrapper doesn't let us test array params. + sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + sock.connect(l1.rpc.socket_path) + + sock.sendall(b'{"id":1, "jsonrpc":"2.0","method":"check","params":["help"]}') + obj, _ = l1.rpc._readobj(sock, b'') + assert obj['id'] == 1 + assert 'result' in obj + assert 'error' not in obj + + sock.sendall(b'{"id":1, "jsonrpc":"2.0","method":"check","params":["help", "check"]}') + obj, _ = l1.rpc._readobj(sock, b'') + assert obj['id'] == 1 + assert 'result' in obj + assert 'error' not in obj + + sock.sendall(b'{"id":1, "jsonrpc":"2.0","method":"check","params":["help", "a", "b"]}') + obj, _ = l1.rpc._readobj(sock, b'') + assert obj['id'] == 1 + assert 'result' not in obj + assert 'error' in obj + + sock.sendall(b'{"id":1, "jsonrpc":"2.0","method":"check","params":["badcommand"]}') + obj, _ = l1.rpc._readobj(sock, b'') + assert obj['id'] == 1 + assert 'result' not in obj + assert 'error' in obj + + sock.sendall(b'{"id":1, "jsonrpc":"2.0","method":"check","params":["connect"]}') + obj, _ = l1.rpc._readobj(sock, b'') + assert obj['id'] == 1 + assert 'result' not in obj + assert 'error' in obj + + sock.sendall(b'{"id":1, "jsonrpc":"2.0","method":"check","params":["connect", "test", "x", "abcd"]}') + obj, _ = l1.rpc._readobj(sock, b'') + assert obj['id'] == 1 + assert 'result' not in obj + assert 'error' in obj + + sock.close()