diff --git a/tests/test_gossip.py b/tests/test_gossip.py index 59a9514ba..5780c3583 100644 --- a/tests/test_gossip.py +++ b/tests/test_gossip.py @@ -2226,6 +2226,51 @@ def test_gossip_private_updates(node_factory, bitcoind): wait_for(lambda: l1.daemon.is_in_log(r'gossip_store_compact_offline: 5 deleted, 3 copied')) +@pytest.mark.xfail(strict=True) +def test_gossip_not_dying(node_factory, bitcoind): + l1 = node_factory.get_node() + l2, l3 = node_factory.line_graph(2, wait_for_announce=True) + + l1.rpc.connect(l2.info['id'], 'localhost', l2.port) + # Wait until it sees all the updates, node announcments. + wait_for(lambda: len([n for n in l1.rpc.listnodes()['nodes'] if 'alias' in n]) + + len(l1.rpc.listchannels()['channels']) == 4) + + def get_gossip(node): + out = subprocess.run(['devtools/gossipwith', + '--initial-sync', + '--timeout-after=2', + '{}@localhost:{}'.format(node.info['id'], node.port)], + check=True, + timeout=TIMEOUT, stdout=subprocess.PIPE).stdout + + msgs = [] + while len(out): + l, t = struct.unpack('>HH', out[0:4]) + msg = out[2:2 + l] + out = out[2 + l:] + + # Ignore pings, timestamp_filter + if t == 265 or t == 18: + continue + # channel_announcement node_announcement or channel_update + assert t == 256 or t == 257 or t == 258 + msgs.append(msg) + + return msgs + + assert len(get_gossip(l1)) == 5 + + # Close l2->l3, mine block. + l2.rpc.close(l3.info['id']) + bitcoind.generate_block(1, wait_for_mempool=1) + + l1.daemon.wait_for_log("closing soon due to the funding outpoint being spent") + + # We won't gossip the dead channel any more (but we still propagate node_announcement) + assert len(get_gossip(l1)) == 2 + + @pytest.mark.skip("Zombie research had unexpected side effects") @pytest.mark.developer("Needs --dev-fast-gossip, --dev-fast-gossip-prune") def test_channel_resurrection(node_factory, bitcoind):