pytest: Test for channel removal in test_gossip_pruning

Signed-off-by: Christian Decker <decker.christian@gmail.com>
This commit is contained in:
Christian Decker
2018-01-09 21:54:08 +01:00
committed by Rusty Russell
parent ca6c6feaad
commit 4fe83cd405

View File

@@ -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.