@ -18,12 +18,11 @@ with open('config.vars') as configfile:
DEVELOPER = os . getenv ( " DEVELOPER " , config [ ' DEVELOPER ' ] ) == " 1 "
DEVELOPER = os . getenv ( " DEVELOPER " , config [ ' DEVELOPER ' ] ) == " 1 "
@unittest . skipIf ( not DEVELOPER , " needs --dev-broadcast-interval, --dev-channelupdate-interval " )
@unittest . skipIf ( not DEVELOPER , " needs --dev-fast-gossip for fast pruning " )
def test_gossip_pruning ( node_factory , bitcoind ) :
def test_gossip_pruning ( node_factory , bitcoind ) :
""" Create channel and see it being updated in time before pruning
""" Create channel and see it being updated in time before pruning
"""
"""
opts = { ' dev-channel-update-interval ' : 5 }
l1 , l2 , l3 = node_factory . get_nodes ( 3 )
l1 , l2 , l3 = node_factory . get_nodes ( 3 , opts )
l1 . rpc . connect ( l2 . info [ ' id ' ] , ' localhost ' , l2 . port )
l1 . rpc . connect ( l2 . info [ ' id ' ] , ' localhost ' , l2 . port )
l2 . rpc . connect ( l3 . info [ ' id ' ] , ' localhost ' , l3 . port )
l2 . rpc . connect ( l3 . info [ ' id ' ] , ' localhost ' , l3 . port )
@ -38,10 +37,10 @@ def test_gossip_pruning(node_factory, bitcoind):
wait_for ( lambda : [ c [ ' active ' ] for c in l2 . rpc . listchannels ( ) [ ' channels ' ] ] == [ True ] * 4 )
wait_for ( lambda : [ c [ ' active ' ] for c in l2 . rpc . listchannels ( ) [ ' channels ' ] ] == [ True ] * 4 )
wait_for ( lambda : [ c [ ' active ' ] for c in l3 . rpc . listchannels ( ) [ ' channels ' ] ] == [ True ] * 4 )
wait_for ( lambda : [ c [ ' active ' ] for c in l3 . rpc . listchannels ( ) [ ' channels ' ] ] == [ True ] * 4 )
# All of them should send a keepalive message
# All of them should send a keepalive message (after ~60 seconds)
l1 . daemon . wait_for_logs ( [
l1 . daemon . wait_for_logs ( [
' Sending keepalive channel_update for {} ' . format ( scid1 ) ,
' Sending keepalive channel_update for {} ' . format ( scid1 ) ,
] )
] , timeout = 90 )
l2 . daemon . wait_for_logs ( [
l2 . daemon . wait_for_logs ( [
' Sending keepalive channel_update for {} ' . format ( scid1 ) ,
' Sending keepalive channel_update for {} ' . format ( scid1 ) ,
' Sending keepalive channel_update for {} ' . format ( scid2 ) ,
' Sending keepalive channel_update for {} ' . format ( scid2 ) ,
@ -50,19 +49,21 @@ def test_gossip_pruning(node_factory, bitcoind):
' Sending keepalive channel_update for {} ' . format ( scid2 ) ,
' Sending keepalive channel_update for {} ' . format ( scid2 ) ,
] )
] )
# Now kill l3, so that l2 and l1 can prune it from their view after 1 0 seconds
# Now kill l2, so that l1 and l3 will prune from their view after 9 0 seconds
l3 . stop ( )
l2 . stop ( )
l1 . daemon . wait_for_log ( " Pruning channel {} from network view " . format ( scid2 ) )
# We check every 90/4 seconds, and takes 90 seconds since last update.
l2 . daemon . wait_for_log ( " Pruning channel {} from network view " . format ( scid2 ) )
l1 . daemon . wait_for_log ( " Pruning channel {} from network view " . format ( scid2 ) ,
timeout = 120 )
l3 . daemon . wait_for_log ( " Pruning channel {} from network view " . format ( scid1 ) )
assert scid2 not in [ c [ ' short_channel_id ' ] for c in l1 . rpc . listchannels ( ) [ ' channels ' ] ]
assert scid2 not in [ c [ ' short_channel_id ' ] for c in l1 . rpc . listchannels ( ) [ ' channels ' ] ]
assert scid2 not in [ c [ ' short_channel_id ' ] for c in l2 . rpc . listchannels ( ) [ ' channels ' ] ]
assert scid1 not in [ c [ ' short_channel_id ' ] for c in l3 . rpc . listchannels ( ) [ ' channels ' ] ]
assert l3 . info [ ' id ' ] not in [ n [ ' nodeid ' ] for n in l1 . rpc . listnodes ( ) [ ' nodes ' ] ]
assert l3 . info [ ' id ' ] not in [ n [ ' nodeid ' ] for n in l1 . rpc . listnodes ( ) [ ' nodes ' ] ]
assert l3 . info [ ' id ' ] not in [ n [ ' nodeid ' ] for n in l2 . rpc . listnodes ( ) [ ' nodes ' ] ]
assert l1 . info [ ' id ' ] not in [ n [ ' nodeid ' ] for n in l3 . rpc . listnodes ( ) [ ' nodes ' ] ]
@unittest . skipIf ( not DEVELOPER , " needs --dev-broadcast-interval , --dev-no-reconnect " )
@unittest . skipIf ( not DEVELOPER , " needs --dev-fast-gossip , --dev-no-reconnect " )
def test_gossip_disable_channels ( node_factory , bitcoind ) :
def test_gossip_disable_channels ( node_factory , bitcoind ) :
""" Simple test to check that channels get disabled correctly on disconnect and
""" Simple test to check that channels get disabled correctly on disconnect and
reenabled upon reconnecting
reenabled upon reconnecting
@ -319,7 +320,7 @@ def test_gossip_jsonrpc(node_factory):
assert [ c [ ' public ' ] for c in l2 . rpc . listchannels ( ) [ ' channels ' ] ] == [ True , True ]
assert [ c [ ' public ' ] for c in l2 . rpc . listchannels ( ) [ ' channels ' ] ] == [ True , True ]
@unittest . skipIf ( not DEVELOPER , " needs DEVELOPER=1 for --dev-broadcast-interval " )
@unittest . skipIf ( not DEVELOPER , " Too slow without --dev-fast-gossip " )
def test_gossip_badsig ( node_factory ) :
def test_gossip_badsig ( node_factory ) :
""" Make sure node announcement signatures are ok.
""" Make sure node announcement signatures are ok.
@ -510,7 +511,7 @@ def test_gossip_no_empty_announcements(node_factory, bitcoind):
wait_for ( lambda : len ( l1 . rpc . listchannels ( ) [ ' channels ' ] ) == 2 )
wait_for ( lambda : len ( l1 . rpc . listchannels ( ) [ ' channels ' ] ) == 2 )
@unittest . skipIf ( not DEVELOPER , " needs DEVELOPER=1 for --dev-broadcast-interval " )
@unittest . skipIf ( not DEVELOPER , " Too slow without --dev-fast-gossip " )
def test_routing_gossip ( node_factory , bitcoind ) :
def test_routing_gossip ( node_factory , bitcoind ) :
nodes = node_factory . get_nodes ( 5 )
nodes = node_factory . get_nodes ( 5 )
@ -1295,7 +1296,7 @@ def test_gossip_store_compact_noappend(node_factory, bitcoind):
assert not l2 . daemon . is_in_log ( ' gossip_store:.*truncate ' )
assert not l2 . daemon . is_in_log ( ' gossip_store:.*truncate ' )
@unittest . skipIf ( not DEVELOPER , " updates are delayed without --dev-broadcast-interval " )
@unittest . skipIf ( not DEVELOPER , " updates are delayed without --dev-fast-gossip " )
def test_gossip_store_load_complex ( node_factory , bitcoind ) :
def test_gossip_store_load_complex ( node_factory , bitcoind ) :
l2 = setup_gossip_store_test ( node_factory , bitcoind )
l2 = setup_gossip_store_test ( node_factory , bitcoind )