From c4203e7de6f35ed1cd1658d7c898b8b6bfaac2df Mon Sep 17 00:00:00 2001 From: Rusty Russell Date: Tue, 6 Sep 2022 09:31:50 +0930 Subject: [PATCH] pyln-client: allow 'msat' fields to be 'null' This happens with deprecated-apis and listconfigs, breaking some python plugins! Fixes: #5546 Fixes: #5563 Signed-off-by: Rusty Russell --- contrib/pyln-client/pyln/client/lightning.py | 5 +++ tests/test_misc.py | 42 ++++++++++---------- 2 files changed, 26 insertions(+), 21 deletions(-) diff --git a/contrib/pyln-client/pyln/client/lightning.py b/contrib/pyln-client/pyln/client/lightning.py index 38fc7563f4ac..0013b89a3347 100644 --- a/contrib/pyln-client/pyln/client/lightning.py +++ b/contrib/pyln-client/pyln/client/lightning.py @@ -455,6 +455,11 @@ def replace_amounts(obj): if k.endswith('msat'): if isinstance(v, list): obj[k] = [Millisatoshi(e) for e in v] + # FIXME: Deprecated "listconfigs" gives two 'null' fields: + # "lease-fee-base-msat": null, + # "channel-fee-max-base-msat": null, + elif v is None: + obj[k] = None else: obj[k] = Millisatoshi(v) else: diff --git a/tests/test_misc.py b/tests/test_misc.py index b63f84c7414e..9e656a0166a3 100644 --- a/tests/test_misc.py +++ b/tests/test_misc.py @@ -725,29 +725,29 @@ def test_address(node_factory): l2.rpc.connect(l1.info['id'], l1.daemon.opts['addr']) -@unittest.skipIf(DEPRECATED_APIS, "Tests the --allow-deprecated-apis config") def test_listconfigs(node_factory, bitcoind, chainparams): # Make extremely long entry, check it works - l1 = node_factory.get_node(options={'log-prefix': 'lightning1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'}) - - configs = l1.rpc.listconfigs() - # See utils.py - assert configs['allow-deprecated-apis'] is False - assert configs['network'] == chainparams['name'] - assert configs['ignore-fee-limits'] is False - assert configs['ignore-fee-limits'] is False - assert configs['log-prefix'] == 'lightning1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...' - - # These are aliases, but we don't print the (unofficial!) wumbo. - assert 'wumbo' not in configs - assert configs['large-channels'] is False - - # Test one at a time. - for c in configs.keys(): - if c.startswith('#') or c.startswith('plugins') or c == 'important-plugins': - continue - oneconfig = l1.rpc.listconfigs(config=c) - assert(oneconfig[c] == configs[c]) + for deprecated in (True, False): + l1 = node_factory.get_node(options={'log-prefix': 'lightning1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', + 'allow-deprecated-apis': deprecated}) + + configs = l1.rpc.listconfigs() + # See utils.py + assert configs['allow-deprecated-apis'] == deprecated + assert configs['network'] == chainparams['name'] + assert configs['ignore-fee-limits'] is False + assert configs['log-prefix'] == 'lightning1-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...' + + # These are aliases, but we don't print the (unofficial!) wumbo. + assert 'wumbo' not in configs + assert configs['large-channels'] is False + + # Test one at a time. + for c in configs.keys(): + if c.startswith('#') or c.startswith('plugins') or c == 'important-plugins': + continue + oneconfig = l1.rpc.listconfigs(config=c) + assert(oneconfig[c] == configs[c]) def test_listconfigs_plugins(node_factory, bitcoind, chainparams):