mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-03-04 11:08:03 +01:00
pytest: fix flakes in test_gossip_query_channel_range
Nodes now spray their own gossip at the start; this can race with our query, and they can give us gossip we didn't ask for. The fix is to always query an uninvolved node: in this case, we only connected l3 and l4 to test zlib, which is gone, so now we can remove that and simply always query l4. ``` 2022-05-23T01:32:53.4695809Z # reply_channel_range == 264 2022-05-23T01:32:53.4696416Z > assert msgs == ['0108' 2022-05-23T01:32:53.4696835Z # blockhash 2022-05-23T01:32:53.4697328Z + genesis_blockhash 2022-05-23T01:32:53.4697841Z # first_blocknum, number_of_blocks, complete 2022-05-23T01:32:53.4698685Z + format(0, '08x') + format(65535, '08x') + '01' 2022-05-23T01:32:53.4699245Z # encoded_short_ids 2022-05-23T01:32:53.4699859Z + format(len(encoded) // 2, '04x') 2022-05-23T01:32:53.4700255Z + encoded] 2022-05-23T01:32:53.4700799Z E AssertionError: assert ['0100194b419...700000010000'] == ['010806226e4...700000010000'] 2022-05-23T01:32:53.4710678Z E At index 0 diff: '0100194b4190af98beedf231901aeda2dcee0e757dd5327219aa007ea6027e769c98665f49e0f99e03b91e80896ed01cd9c4b157c77e908852097d2ba753c6ca01ae41a90a81c9f492c770d9dd35010c702c7c564045cf85a4bf6efaf25cceb9b81b56d1526429d3c60bf1c7ed6a835720730fd7ad1851a937d18aecf8bc3400dd4e0a30d5c4d65999ac39ae6eb3b98d27e3157973598256d2dd4718cd39010a3612580e7f3bba9eda0fb595976f955e345b6affa62fd556f7257a30d54dd87743dc38585e7c31e1ca80b42cf803bd4c1aaa3127351c95de8a4198c46eb0bd7b4ce175a4b51fcaf9676b01806d237758494fcf3d1558279060a0c3b84806a3330c41000006226e46111a0b59caaf126043eb5bbf28c34f3a5e332a1fc7b2b73cf188910f0000700000010000035d2b1192dfba134e10e540875d366ebc8bc353d5aa766b80c090b39c3a5d885d0382ce59ebf18be7d84677c2e35f23294b9992ceca95491fcf8a56c6cb2d9de19903c47b1b2afcfd68c7b86c0976adb9a4f0835bc78242fced745d78433497a867d6021c29746e4136ddff456483df3980c2d0d5f31c93ef5ded564f7294a10d7414aa' != '010806226e46111a0b59caaf126043eb5bbf28c34f3a5e332a1fc7b2b73cf188910f000000000000ffff01001900000068000001000100006900000100000000700000010000' ``` Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
parent
aefcea44a3
commit
930860c781
1 changed files with 16 additions and 45 deletions
|
@ -704,9 +704,8 @@ def test_gossip_query_channel_range(node_factory, bitcoind, chainparams):
|
||||||
num_blocks=6,
|
num_blocks=6,
|
||||||
wait_for_mempool=1)
|
wait_for_mempool=1)
|
||||||
|
|
||||||
# Make sure l2 has received all the gossip.
|
# Make sure l4 has received all the gossip.
|
||||||
l2.daemon.wait_for_logs(['Received node_announcement for node ' + l1.info['id'],
|
l4.daemon.wait_for_logs(['Received node_announcement for node ' + n.info['id'] for n in (l1, l2, l3)])
|
||||||
'Received node_announcement for node ' + l3.info['id']])
|
|
||||||
|
|
||||||
scid12 = only_one(l1.rpc.listpeers(l2.info['id'])['peers'])['channels'][0]['short_channel_id']
|
scid12 = only_one(l1.rpc.listpeers(l2.info['id'])['peers'])['channels'][0]['short_channel_id']
|
||||||
scid23 = only_one(l3.rpc.listpeers(l2.info['id'])['peers'])['channels'][0]['short_channel_id']
|
scid23 = only_one(l3.rpc.listpeers(l2.info['id'])['peers'])['channels'][0]['short_channel_id']
|
||||||
|
@ -715,8 +714,8 @@ def test_gossip_query_channel_range(node_factory, bitcoind, chainparams):
|
||||||
|
|
||||||
assert block23 == block12 + 1
|
assert block23 == block12 + 1
|
||||||
|
|
||||||
# Asks l2 for all channels, gets both.
|
# Asks l4 for all channels, gets both.
|
||||||
msgs = l2.query_gossip('query_channel_range',
|
msgs = l4.query_gossip('query_channel_range',
|
||||||
chainparams['chain_hash'],
|
chainparams['chain_hash'],
|
||||||
0, 1000000,
|
0, 1000000,
|
||||||
filters=['0109', '0012'])
|
filters=['0109', '0012'])
|
||||||
|
@ -735,7 +734,7 @@ def test_gossip_query_channel_range(node_factory, bitcoind, chainparams):
|
||||||
+ encoded]
|
+ encoded]
|
||||||
|
|
||||||
# Does not include scid12
|
# Does not include scid12
|
||||||
msgs = l2.query_gossip('query_channel_range',
|
msgs = l4.query_gossip('query_channel_range',
|
||||||
genesis_blockhash,
|
genesis_blockhash,
|
||||||
0, block12,
|
0, block12,
|
||||||
filters=['0109', '0012'])
|
filters=['0109', '0012'])
|
||||||
|
@ -749,7 +748,7 @@ def test_gossip_query_channel_range(node_factory, bitcoind, chainparams):
|
||||||
'000100']
|
'000100']
|
||||||
|
|
||||||
# Does include scid12
|
# Does include scid12
|
||||||
msgs = l2.query_gossip('query_channel_range',
|
msgs = l4.query_gossip('query_channel_range',
|
||||||
genesis_blockhash,
|
genesis_blockhash,
|
||||||
0, block12 + 1,
|
0, block12 + 1,
|
||||||
filters=['0109', '0012'])
|
filters=['0109', '0012'])
|
||||||
|
@ -768,7 +767,7 @@ def test_gossip_query_channel_range(node_factory, bitcoind, chainparams):
|
||||||
+ encoded]
|
+ encoded]
|
||||||
|
|
||||||
# Doesn't include scid23
|
# Doesn't include scid23
|
||||||
msgs = l2.query_gossip('query_channel_range',
|
msgs = l4.query_gossip('query_channel_range',
|
||||||
genesis_blockhash,
|
genesis_blockhash,
|
||||||
0, block23,
|
0, block23,
|
||||||
filters=['0109', '0012'])
|
filters=['0109', '0012'])
|
||||||
|
@ -787,7 +786,7 @@ def test_gossip_query_channel_range(node_factory, bitcoind, chainparams):
|
||||||
+ encoded]
|
+ encoded]
|
||||||
|
|
||||||
# Does include scid23
|
# Does include scid23
|
||||||
msgs = l2.query_gossip('query_channel_range',
|
msgs = l4.query_gossip('query_channel_range',
|
||||||
genesis_blockhash,
|
genesis_blockhash,
|
||||||
block12, block23 - block12 + 1,
|
block12, block23 - block12 + 1,
|
||||||
filters=['0109', '0012'])
|
filters=['0109', '0012'])
|
||||||
|
@ -806,7 +805,7 @@ def test_gossip_query_channel_range(node_factory, bitcoind, chainparams):
|
||||||
+ encoded]
|
+ encoded]
|
||||||
|
|
||||||
# Only includes scid23
|
# Only includes scid23
|
||||||
msgs = l2.query_gossip('query_channel_range',
|
msgs = l4.query_gossip('query_channel_range',
|
||||||
genesis_blockhash,
|
genesis_blockhash,
|
||||||
block23, 1,
|
block23, 1,
|
||||||
filters=['0109', '0012'])
|
filters=['0109', '0012'])
|
||||||
|
@ -825,7 +824,7 @@ def test_gossip_query_channel_range(node_factory, bitcoind, chainparams):
|
||||||
+ encoded]
|
+ encoded]
|
||||||
|
|
||||||
# Past both
|
# Past both
|
||||||
msgs = l2.query_gossip('query_channel_range',
|
msgs = l4.query_gossip('query_channel_range',
|
||||||
genesis_blockhash,
|
genesis_blockhash,
|
||||||
block23 + 1, 1000000,
|
block23 + 1, 1000000,
|
||||||
filters=['0109', '0012'])
|
filters=['0109', '0012'])
|
||||||
|
@ -838,16 +837,16 @@ def test_gossip_query_channel_range(node_factory, bitcoind, chainparams):
|
||||||
# encoded_short_ids
|
# encoded_short_ids
|
||||||
+ '000100']
|
+ '000100']
|
||||||
|
|
||||||
# Make l2 split reply into two (technically async)
|
# Make l4 split reply into two (technically async)
|
||||||
l2.rpc.dev_set_max_scids_encode_size(max=9)
|
l4.rpc.dev_set_max_scids_encode_size(max=9)
|
||||||
l2.daemon.wait_for_log('Set max_scids_encode_bytes to 9')
|
l4.daemon.wait_for_log('Set max_scids_encode_bytes to 9')
|
||||||
|
|
||||||
msgs = l2.query_gossip('query_channel_range',
|
msgs = l4.query_gossip('query_channel_range',
|
||||||
genesis_blockhash,
|
genesis_blockhash,
|
||||||
0, 1000000,
|
0, 1000000,
|
||||||
filters=['0109', '0012'])
|
filters=['0109', '0012'])
|
||||||
# It should definitely have split
|
# It should definitely have split
|
||||||
l2.daemon.wait_for_log('reply_channel_range: splitting 0-1 of 2')
|
l4.daemon.wait_for_log('reply_channel_range: splitting 0-1 of 2')
|
||||||
|
|
||||||
start = 0
|
start = 0
|
||||||
scids = '00'
|
scids = '00'
|
||||||
|
@ -867,40 +866,12 @@ def test_gossip_query_channel_range(node_factory, bitcoind, chainparams):
|
||||||
assert scids == encoded
|
assert scids == encoded
|
||||||
|
|
||||||
# Test overflow case doesn't split forever; should still only get 2 for this
|
# Test overflow case doesn't split forever; should still only get 2 for this
|
||||||
msgs = l2.query_gossip('query_channel_range',
|
msgs = l4.query_gossip('query_channel_range',
|
||||||
genesis_blockhash,
|
genesis_blockhash,
|
||||||
1, 429496000,
|
1, 429496000,
|
||||||
filters=['0109', '0012'])
|
filters=['0109', '0012'])
|
||||||
assert len(msgs) == 2
|
assert len(msgs) == 2
|
||||||
|
|
||||||
# This used to be large enough for zlib to kick in, but no longer!
|
|
||||||
scid34, _ = l3.fundchannel(l4, 10**5)
|
|
||||||
mine_funding_to_announce(bitcoind, [l1, l2, l3, l4])
|
|
||||||
l2.daemon.wait_for_log('Received node_announcement for node ' + l4.info['id'])
|
|
||||||
|
|
||||||
# Restore infinite encode size.
|
|
||||||
l2.rpc.dev_set_max_scids_encode_size(max=(2**32 - 1))
|
|
||||||
l2.daemon.wait_for_log('Set max_scids_encode_bytes to {}'
|
|
||||||
.format(2**32 - 1))
|
|
||||||
|
|
||||||
msgs = l2.query_gossip('query_channel_range',
|
|
||||||
genesis_blockhash,
|
|
||||||
0, 65535,
|
|
||||||
filters=['0109', '0012'])
|
|
||||||
encoded = subprocess.run(['devtools/mkencoded', '--scids', '00', scid12, scid23, scid34],
|
|
||||||
check=True,
|
|
||||||
timeout=TIMEOUT,
|
|
||||||
stdout=subprocess.PIPE).stdout.strip().decode()
|
|
||||||
# reply_channel_range == 264
|
|
||||||
assert msgs == ['0108'
|
|
||||||
# blockhash
|
|
||||||
+ genesis_blockhash
|
|
||||||
# first_blocknum, number_of_blocks, complete
|
|
||||||
+ format(0, '08x') + format(65535, '08x') + '01'
|
|
||||||
# encoded_short_ids
|
|
||||||
+ format(len(encoded) // 2, '04x')
|
|
||||||
+ encoded]
|
|
||||||
|
|
||||||
|
|
||||||
# Long test involving 4 lightningd instances.
|
# Long test involving 4 lightningd instances.
|
||||||
@pytest.mark.developer("needs DEVELOPER=1")
|
@pytest.mark.developer("needs DEVELOPER=1")
|
||||||
|
|
Loading…
Add table
Reference in a new issue