Skip to content

Commit 4d8f1d3

Browse files
committed
pytest: add failing downgrade test.
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
1 parent a45c907 commit 4d8f1d3

File tree

1 file changed

+40
-19
lines changed

1 file changed

+40
-19
lines changed

tests/test_downgrade.py

Lines changed: 40 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,29 @@
77
import os
88
import subprocess
99

10+
# From the binary:
11+
# ERROR_DBVERSION = 1
12+
ERROR_DBFAIL = 2
13+
ERROR_USAGE = 3
14+
# ERROR_INTERNAL = 99
15+
16+
17+
def downgrade_cmdline(node):
18+
# lightning-downgrade understands a subset of the options
19+
# to lightningd.
20+
downgrade_opts = []
21+
for o in node.daemon.opts:
22+
if o in ('network', 'lightning-dir', 'conf', 'rpc-file', 'wallet'):
23+
if node.daemon.opts[o] is None:
24+
downgrade_opts.append(f"--{o}")
25+
else:
26+
downgrade_opts.append(f"--{o}={node.daemon.opts[o]}")
27+
28+
cmd_line = ["tools/lightning-downgrade"] + downgrade_opts
29+
if os.getenv("VALGRIND") == "1":
30+
cmd_line = ['valgrind', '-q', '--error-exitcode=7'] + cmd_line
31+
return cmd_line
32+
1033

1134
def test_downgrade(node_factory, executor):
1235
l1, l2 = node_factory.line_graph(2, opts={'may_reconnect': True}, wait_for_announce=True)
@@ -22,25 +45,7 @@ def test_downgrade(node_factory, executor):
2245
old_inv = l2.rpc.invoice(1000, 'test_downgrade1', 'test_downgrade')
2346
l1.rpc.xpay(old_inv['bolt11'])
2447

25-
# From the binary:
26-
# ERROR_DBVERSION = 1
27-
# ERROR_DBFAIL = 2
28-
ERROR_USAGE = 3
29-
# ERROR_INTERNAL = 99
30-
31-
# lightning-downgrade understands a subset of the options
32-
# to lightningd.
33-
downgrade_opts = []
34-
for o in l1.daemon.opts:
35-
if o in ('network', 'lightning-dir', 'conf', 'rpc-file', 'wallet'):
36-
if l1.daemon.opts[o] is None:
37-
downgrade_opts.append(f"--{o}")
38-
else:
39-
downgrade_opts.append(f"--{o}={l1.daemon.opts[o]}")
40-
41-
cmd_line = ["tools/lightning-downgrade"] + downgrade_opts
42-
if os.getenv("VALGRIND") == "1":
43-
cmd_line = ['valgrind', '-q', '--error-exitcode=7'] + cmd_line
48+
cmd_line = downgrade_cmdline(l1)
4449

4550
# No downgrade on live nodes!
4651
retcode = subprocess.call(cmd_line, timeout=TIMEOUT)
@@ -89,3 +94,19 @@ def test_downgrade(node_factory, executor):
8994
bias = only_one(only_one(l1.rpc.askrene_listlayers('xpay')['layers'])['biases'])
9095
assert bias['short_channel_id_dir'] == bias_scidd
9196
assert bias['bias'] == 1
97+
98+
99+
def test_downgrade_fail(node_factory, executor):
100+
"""If we have created as node bias, we cannot downgrade"""
101+
l1, l2 = node_factory.line_graph(2, opts={'may_reconnect': True}, wait_for_announce=True)
102+
103+
l1.rpc.askrene_bias_node('xpay', l2.info['id'], 'in', 1)
104+
cmd_line = downgrade_cmdline(l1)
105+
106+
l1.stop()
107+
108+
p = subprocess.Popen(cmd_line, stdout=subprocess.DEVNULL,
109+
stderr=subprocess.PIPE)
110+
_, err = p.communicate(timeout=TIMEOUT)
111+
assert p.returncode == ERROR_DBFAIL
112+
assert 'Askrene has a node bias, which is not supported in v25.09' in err.decode('utf-8')

0 commit comments

Comments
 (0)