diff --git a/tests/test_pay.py b/tests/test_pay.py index dae4051ad..63b3b668f 100644 --- a/tests/test_pay.py +++ b/tests/test_pay.py @@ -1465,11 +1465,12 @@ def test_setchannelfee_usage(node_factory, bitcoind): result = l1.rpc.setchannelfee(scid, 1337, 137) # check result format - assert(re.match('^[0-9a-f]{64}$', result['channel_id'])) - assert(result['peer_id'] == l2.info['id']) - assert(result['short_channel_id'] == scid) assert(result['base'] == 1337) assert(result['ppm'] == 137) + assert(len(result['channels']) == 1) + assert(re.match('^[0-9a-f]{64}$', result['channels'][0]['channel_id'])) + assert(result['channels'][0]['peer_id'] == l2.info['id']) + assert(result['channels'][0]['short_channel_id'] == scid) # check if custom values made it into the database db_fees = l1.db_query( @@ -1484,15 +1485,17 @@ def test_setchannelfee_usage(node_factory, bitcoind): # also test with named and missing paramters result = l1.rpc.setchannelfee(ppm=42, id=scid) - assert(re.match('^[0-9a-f]{64}$', result['channel_id'])) - assert(result['short_channel_id'] == scid) assert(result['base'] == DEF_BASE) assert(result['ppm'] == 42) + assert(len(result['channels']) == 1) + assert(re.match('^[0-9a-f]{64}$', result['channels'][0]['channel_id'])) + assert(result['channels'][0]['short_channel_id'] == scid) result = l1.rpc.setchannelfee(base=42, id=scid) - assert(re.match('^[0-9a-f]{64}$', result['channel_id'])) - assert(result['short_channel_id'] == scid) assert(result['base'] == 42) assert(result['ppm'] == DEF_PPM) + assert(len(result['channels']) == 1) + assert(re.match('^[0-9a-f]{64}$', result['channels'][0]['channel_id'])) + assert(result['channels'][0]['short_channel_id'] == scid) # check if negative fees raise error and DB keeps values # JSONRPC2_INVALID_PARAMS := -32602 @@ -1522,10 +1525,11 @@ def test_setchannelfee_usage(node_factory, bitcoind): # check also peer id can be used result = l1.rpc.setchannelfee(l2.info['id'], 42, 43) - assert(result['peer_id'] == l2.info['id']) - assert(result['short_channel_id'] == scid) assert(result['base'] == 42) assert(result['ppm'] == 43) + assert(len(result['channels']) == 1) + assert(result['channels'][0]['peer_id'] == l2.info['id']) + assert(result['channels'][0]['short_channel_id'] == scid) db_fees = l1.db_query( 'SELECT feerate_base, feerate_ppm FROM channels ' 'WHERE hex(short_channel_id)="' + scid_hex + '";') @@ -1580,8 +1584,8 @@ def test_setchannelfee_state(node_factory, bitcoind): # try setting the fee in state AWAITING_LOCKIN should be possible # assert(l1.channel_state(l2) == "CHANNELD_AWAITING_LOCKIN") result = l1.rpc.setchannelfee(l2.info['id'], 42, 0) - assert(result['peer_id'] == l2.info['id']) - # cid = result['channel_id'] + assert(result['channels'][0]['peer_id'] == l2.info['id']) + # cid = result['channels'][0]['channel_id'] # test routing correct new fees once routing is established bitcoind.generate_block(6) @@ -1756,3 +1760,41 @@ def test_setchannelfee_restart(node_factory, bitcoind): result = l1.rpc.pay(inv) assert result['status'] == 'complete' assert result['msatoshi_sent'] == 5002020 + + +def test_setchannelfee_all(node_factory, bitcoind): + # TEST SETUP + # + # [l1]----> [l2] + # | + # o-----> [l3] + DEF_BASE = 10 + DEF_PPM = 100 + + l1 = node_factory.get_node(options={'fee-base': DEF_BASE, 'fee-per-satoshi': DEF_PPM}) + l2 = node_factory.get_node(options={'fee-base': DEF_BASE, 'fee-per-satoshi': DEF_PPM}) + l3 = node_factory.get_node(options={'fee-base': DEF_BASE, 'fee-per-satoshi': DEF_PPM}) + l1.rpc.connect(l2.info['id'], 'localhost', l2.port) + l1.rpc.connect(l3.info['id'], 'localhost', l3.port) + l1.fund_channel(l2, 1000000) + l1.fund_channel(l3, 1000000) + + # get short channel id + scid2 = l1.get_channel_scid(l2) + scid3 = l1.get_channel_scid(l3) + + # now try to set all (two) channels using wildcard syntax + result = l1.rpc.setchannelfee("all", 0xDEAD, 0xBEEF) + + wait_for(lambda: [c['base_fee_millisatoshi'] for c in l1.rpc.listchannels(scid2)['channels']] == [DEF_BASE, 0xDEAD]) + wait_for(lambda: [c['fee_per_millionth'] for c in l1.rpc.listchannels(scid2)['channels']] == [DEF_PPM, 0xBEEF]) + wait_for(lambda: [c['base_fee_millisatoshi'] for c in l1.rpc.listchannels(scid3)['channels']] == [0xDEAD, DEF_BASE]) + wait_for(lambda: [c['fee_per_millionth'] for c in l1.rpc.listchannels(scid3)['channels']] == [0xBEEF, DEF_PPM]) + + assert len(result['channels']) == 2 + assert result['base'] == 0xDEAD + assert result['ppm'] == 0xBEEF + assert result['channels'][0]['peer_id'] == l2.info['id'] + assert result['channels'][0]['short_channel_id'] == scid2 + assert result['channels'][1]['peer_id'] == l3.info['id'] + assert result['channels'][1]['short_channel_id'] == scid3