@ -130,6 +130,8 @@ class NodeFactory(object):
daemon . env [ " LIGHTNINGD_DEV_MEMLEAK " ] = " 1 "
daemon . env [ " LIGHTNINGD_DEV_MEMLEAK " ] = " 1 "
if VALGRIND :
if VALGRIND :
daemon . env [ " LIGHTNINGD_DEV_NO_BACKTRACE " ] = " 1 "
daemon . env [ " LIGHTNINGD_DEV_NO_BACKTRACE " ] = " 1 "
if not may_reconnect :
daemon . opts [ " dev-no-reconnect " ] = None
if fake_bitcoin_cli :
if fake_bitcoin_cli :
cli = os . path . join ( lightning_dir , " fake-bitcoin-cli " )
cli = os . path . join ( lightning_dir , " fake-bitcoin-cli " )
@ -243,7 +245,8 @@ class BaseLightningDTests(unittest.TestCase):
return 1 if errors else 0
return 1 if errors else 0
def checkReconnect ( self , node ) :
def checkReconnect ( self , node ) :
if node . may_reconnect :
# Without DEVELOPER, we can't suppress reconnection.
if node . may_reconnect or not DEVELOPER :
return 0
return 0
if node . daemon . is_in_log ( ' Peer has reconnected ' ) :
if node . daemon . is_in_log ( ' Peer has reconnected ' ) :
return 1
return 1
@ -277,16 +280,9 @@ class BaseLightningDTests(unittest.TestCase):
class LightningDTests ( BaseLightningDTests ) :
class LightningDTests ( BaseLightningDTests ) :
def connect ( self ) :
def connect ( self , may_reconnect = False ) :
# Better to have clear failure because they didn't reconnect, than
l1 = self . node_factory . get_node ( may_reconnect = may_reconnect )
# catch it at the end that we had an unexpected reconnect.
l2 = self . node_factory . get_node ( may_reconnect = may_reconnect )
if DEVELOPER :
opts = { ' dev-no-reconnect ' : None }
else :
opts = None
l1 = self . node_factory . get_node ( options = opts )
l2 = self . node_factory . get_node ( options = opts )
ret = l1 . rpc . connect ( l2 . info [ ' id ' ] , ' localhost ' , l2 . info [ ' port ' ] )
ret = l1 . rpc . connect ( l2 . info [ ' id ' ] , ' localhost ' , l2 . info [ ' port ' ] )
assert ret [ ' id ' ] == l2 . info [ ' id ' ]
assert ret [ ' id ' ] == l2 . info [ ' id ' ]
@ -332,21 +328,6 @@ class LightningDTests(BaseLightningDTests):
decoded2 = bitcoind . rpc . decoderawtransaction ( tx )
decoded2 = bitcoind . rpc . decoderawtransaction ( tx )
raise ValueError ( " Can ' t find {} payment in {} (1= {} 2= {} ) " . format ( amount , tx , decoded , decoded2 ) )
raise ValueError ( " Can ' t find {} payment in {} (1= {} 2= {} ) " . format ( amount , tx , decoded , decoded2 ) )
def line_graph ( self , n = 2 ) :
""" Build a line graph of the specified length and fund it.
"""
nodes = [ self . node_factory . get_node ( ) for _ in range ( n ) ]
for i in range ( len ( nodes ) - 1 ) :
nodes [ i ] . rpc . connect (
nodes [ i + 1 ] . info [ ' id ' ] ,
' localhost ' ,
nodes [ i + 1 ] . info [ ' port ' ]
)
self . fund_channel ( nodes [ i ] , nodes [ i + 1 ] , 10 * * 6 )
return nodes
def pay ( self , lsrc , ldst , amt , label = None , async = False ) :
def pay ( self , lsrc , ldst , amt , label = None , async = False ) :
if not label :
if not label :
label = ' ' . join ( random . choice ( string . ascii_letters + string . digits ) for _ in range ( 20 ) )
label = ' ' . join ( random . choice ( string . ascii_letters + string . digits ) for _ in range ( 20 ) )
@ -1268,9 +1249,7 @@ class LightningDTests(BaseLightningDTests):
wait_forget_channels ( l2 )
wait_forget_channels ( l2 )
def test_closing_while_disconnected ( self ) :
def test_closing_while_disconnected ( self ) :
l1 = self . node_factory . get_node ( may_reconnect = True )
l1 , l2 = self . connect ( may_reconnect = True )
l2 = self . node_factory . get_node ( may_reconnect = True )
l1 . rpc . connect ( l2 . info [ ' id ' ] , ' localhost ' , l2 . info [ ' port ' ] )
self . fund_channel ( l1 , l2 , 10 * * 6 )
self . fund_channel ( l1 , l2 , 10 * * 6 )
self . pay ( l1 , l2 , 200000000 )
self . pay ( l1 , l2 , 200000000 )
@ -2260,7 +2239,8 @@ class LightningDTests(BaseLightningDTests):
wait_forget_channels ( l2 )
wait_forget_channels ( l2 )
def test_gossip_jsonrpc ( self ) :
def test_gossip_jsonrpc ( self ) :
l1 , l2 = self . line_graph ( n = 2 )
l1 , l2 = self . connect ( )
self . fund_channel ( l1 , l2 , 10 * * 6 )
# Shouldn't send announce signatures until 6 deep.
# Shouldn't send announce signatures until 6 deep.
assert not l1 . daemon . is_in_log ( ' peer_out WIRE_ANNOUNCEMENT_SIGNATURES ' )
assert not l1 . daemon . is_in_log ( ' peer_out WIRE_ANNOUNCEMENT_SIGNATURES ' )
@ -3968,8 +3948,8 @@ class LightningDTests(BaseLightningDTests):
@unittest . skipIf ( not DEVELOPER , " needs DEVELOPER=1 for --dev-broadcast-interval " )
@unittest . skipIf ( not DEVELOPER , " needs DEVELOPER=1 for --dev-broadcast-interval " )
def test_channel_reenable ( self ) :
def test_channel_reenable ( self ) :
l1 , l2 = self . line_graph ( n = 2 )
l1 , l2 = self . connect ( may_reconnect = True )
l1 . may_reconnect = l2 . may_reconnect = True
self . fund_channel ( l1 , l2 , 10 * * 6 )
l1 . bitcoin . generate_block ( 6 )
l1 . bitcoin . generate_block ( 6 )
l1 . daemon . wait_for_log ( ' Received node_announcement for node {} ' . format ( l2 . info [ ' id ' ] ) )
l1 . daemon . wait_for_log ( ' Received node_announcement for node {} ' . format ( l2 . info [ ' id ' ] ) )