diff --git a/tests/test_lightningd.py b/tests/test_lightningd.py index 8339e466c..86547570d 100644 --- a/tests/test_lightningd.py +++ b/tests/test_lightningd.py @@ -3731,6 +3731,40 @@ class LightningDTests(BaseLightningDTests): l1.restart() assert len(l1.rpc.listpeers()['peers']) == 0 + def test_peerinfo(self): + l1, l2 = self.connect() + + # Gossiping but no node announcement yet + assert l1.rpc.getpeer(l2.info['id'])['state'] == "GOSSIPING" + assert 'alias' not in l1.rpc.getpeer(l2.info['id']) + assert 'color' not in l1.rpc.getpeer(l2.info['id']) + + # Fund a channel to force a node announcement + self.fund_channel(l1, l2, 10**6) + # Now proceed to funding-depth and do a full gossip round + bitcoind.generate_block(5) + l1.daemon.wait_for_logs(['Received node_announcement for node ' + l2.info['id']]) + + # With the node announcement, ensure we see that information in the peer info + assert l1.rpc.getpeer(l2.info['id'])['alias'] == l1.rpc.listnodes(l2.info['id'])['nodes'][0]['alias'] + assert l1.rpc.getpeer(l2.info['id'])['color'] == l1.rpc.listnodes(l2.info['id'])['nodes'][0]['color'] + + # Close the channel to forget the peer + l1.rpc.close(l2.info['id']) + l1.daemon.wait_for_log('Forgetting remote peer') + bitcoind.generate_block(100) + l1.daemon.wait_for_log('WIRE_ONCHAIN_ALL_IRREVOCABLY_RESOLVED') + + # Reconnect + l1.rpc.connect(l2.info['id'], 'localhost', l2.info['port']) + l1.daemon.wait_for_log('WIRE_GOSSIP_PEER_CONNECTED') + + # This time we already know about this node. So the node information appears even in + # GOSSIPING state + assert l1.rpc.getpeer(l2.info['id'])['state'] == "GOSSIPING" + assert l1.rpc.getpeer(l2.info['id'])['alias'] == l1.rpc.listnodes(l2.info['id'])['nodes'][0]['alias'] + assert l1.rpc.getpeer(l2.info['id'])['color'] == l1.rpc.listnodes(l2.info['id'])['nodes'][0]['color'] + if __name__ == '__main__': unittest.main(verbosity=2)