mirror of
https://github.com/aljazceru/lightning.git
synced 2025-12-19 15:14:23 +01:00
pytest: Test for channel removal in test_gossip_pruning
Signed-off-by: Christian Decker <decker.christian@gmail.com>
This commit is contained in:
committed by
Rusty Russell
parent
ca6c6feaad
commit
4fe83cd405
@@ -1413,6 +1413,7 @@ class LightningDTests(BaseLightningDTests):
|
|||||||
assert [c['active'] for c in l2.rpc.getchannels()['channels']] == [True, True]
|
assert [c['active'] for c in l2.rpc.getchannels()['channels']] == [True, True]
|
||||||
assert [c['public'] for c in l2.rpc.getchannels()['channels']] == [True, True]
|
assert [c['public'] for c in l2.rpc.getchannels()['channels']] == [True, True]
|
||||||
|
|
||||||
|
@unittest.skipIf(not DEVELOPER, "needs DEVELOPER=1 for --dev-broadcast-interval")
|
||||||
def test_gossip_pruning(self):
|
def test_gossip_pruning(self):
|
||||||
""" Create channel and see it being updated in time before pruning
|
""" Create channel and see it being updated in time before pruning
|
||||||
"""
|
"""
|
||||||
@@ -1427,18 +1428,41 @@ class LightningDTests(BaseLightningDTests):
|
|||||||
scid1 = self.fund_channel(l1, l2, 10**6)
|
scid1 = self.fund_channel(l1, l2, 10**6)
|
||||||
scid2 = self.fund_channel(l2, l3, 10**6)
|
scid2 = self.fund_channel(l2, l3, 10**6)
|
||||||
|
|
||||||
# Channels should be activated locally
|
|
||||||
wait_for(lambda: [c['active'] for c in l1.rpc.getchannels()['channels']] == [True])
|
|
||||||
wait_for(lambda: [c['active'] for c in l2.rpc.getchannels()['channels']] == [True, True])
|
|
||||||
wait_for(lambda: [c['active'] for c in l3.rpc.getchannels()['channels']] == [True])
|
|
||||||
|
|
||||||
l1.bitcoin.rpc.generate(6)
|
l1.bitcoin.rpc.generate(6)
|
||||||
|
|
||||||
|
# Channels should be activated locally
|
||||||
|
wait_for(lambda: [c['active'] for c in l1.rpc.getchannels()['channels']] == [True]*4)
|
||||||
|
wait_for(lambda: [c['active'] for c in l2.rpc.getchannels()['channels']] == [True]*4)
|
||||||
|
wait_for(lambda: [c['active'] for c in l3.rpc.getchannels()['channels']] == [True]*4)
|
||||||
|
|
||||||
# All of them should send a keepalive message
|
# All of them should send a keepalive message
|
||||||
l1.daemon.wait_for_log('Sending keepalive channel_update for {}'.format(scid1))
|
l1.daemon.wait_for_logs([
|
||||||
l2.daemon.wait_for_log('Sending keepalive channel_update for {}'.format(scid1))
|
'Sending keepalive channel_update for {}'.format(scid1),
|
||||||
l2.daemon.wait_for_log('Sending keepalive channel_update for {}'.format(scid2))
|
])
|
||||||
l3.daemon.wait_for_log('Sending keepalive channel_update for {}'.format(scid2))
|
l2.daemon.wait_for_logs([
|
||||||
|
'Sending keepalive channel_update for {}'.format(scid1),
|
||||||
|
'Sending keepalive channel_update for {}'.format(scid2),
|
||||||
|
])
|
||||||
|
l3.daemon.wait_for_logs([
|
||||||
|
'Sending keepalive channel_update for {}'.format(scid2),
|
||||||
|
])
|
||||||
|
|
||||||
|
# Now kill l3, so that l2 and l1 can prune it from their view after 10 seconds
|
||||||
|
time.sleep(1)
|
||||||
|
l3.stop()
|
||||||
|
|
||||||
|
l1.daemon.wait_for_logs([
|
||||||
|
"Pruning channel {}/{} from network view".format(scid2, 0),
|
||||||
|
"Pruning channel {}/{} from network view".format(scid2, 1),
|
||||||
|
])
|
||||||
|
|
||||||
|
l2.daemon.wait_for_logs([
|
||||||
|
"Pruning channel {}/{} from network view".format(scid2, 0),
|
||||||
|
"Pruning channel {}/{} from network view".format(scid2, 1),
|
||||||
|
])
|
||||||
|
|
||||||
|
assert scid2 not in [c['short_channel_id'] for c in l1.rpc.getchannels()['channels']]
|
||||||
|
assert scid2 not in [c['short_channel_id'] for c in l2.rpc.getchannels()['channels']]
|
||||||
|
|
||||||
def ping_tests(self, l1, l2):
|
def ping_tests(self, l1, l2):
|
||||||
# 0-byte pong gives just type + length field.
|
# 0-byte pong gives just type + length field.
|
||||||
|
|||||||
Reference in New Issue
Block a user