diff options
author | Russell Yanofsky <russ@yanofsky.org> | 2017-12-20 18:38:40 -0500 |
---|---|---|
committer | John Newbery <john@johnnewbery.com> | 2018-01-08 15:17:14 -0500 |
commit | fcfb952bca922682e61c77e59a59f4e7fa6619c7 (patch) | |
tree | 3d9f1a26add16cbfbbc6961d7e8248a45f05d472 | |
parent | 45173fa6fca9537abb0a0554f731d14b9f89c456 (diff) |
Improve TestNodeCLI output parsing
Parse JSONRPCException errors, and avoid JSON decode exception if RPC method
returns a plain string.
-rwxr-xr-x | test/functional/test_framework/test_node.py | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/test/functional/test_framework/test_node.py b/test/functional/test_framework/test_node.py index a9248c764e..66f99f3011 100755 --- a/test/functional/test_framework/test_node.py +++ b/test/functional/test_framework/test_node.py @@ -10,6 +10,7 @@ import http.client import json import logging import os +import re import subprocess import time @@ -22,6 +23,9 @@ from .util import ( p2p_port, ) +# For Python 3.4 compatibility +JSONDecodeError = getattr(json, "JSONDecodeError", ValueError) + BITCOIND_PROC_WAIT_TIMEOUT = 60 class TestNode(): @@ -222,6 +226,13 @@ class TestNodeCLI(): cli_stdout, cli_stderr = process.communicate(input=self.input) returncode = process.poll() if returncode: + match = re.match(r'error code: ([-0-9]+)\nerror message:\n(.*)', cli_stderr) + if match: + code, message = match.groups() + raise JSONRPCException(dict(code=int(code), message=message)) # Ignore cli_stdout, raise with cli_stderr raise subprocess.CalledProcessError(returncode, self.binary, output=cli_stderr) - return json.loads(cli_stdout, parse_float=decimal.Decimal) + try: + return json.loads(cli_stdout, parse_float=decimal.Decimal) + except JSONDecodeError: + return cli_stdout.rstrip("\n") |