json_connect: separate port arg so we can parse IPv6 addresses.

Fixes: #391
Signed-off-by: Rusty Russell <rusty@rustcorp.com.au>
This commit is contained in:
Rusty Russell
2017-12-04 19:42:22 +10:30
committed by Christian Decker
parent 0069787eb6
commit af5dbbc9f8
3 changed files with 68 additions and 59 deletions

View File

@@ -217,7 +217,7 @@ class LightningDTests(BaseLightningDTests):
def connect(self):
l1 = self.node_factory.get_node()
l2 = self.node_factory.get_node()
ret = l1.rpc.connect(l2.info['id'], 'localhost:{}'.format(l2.info['port']))
ret = l1.rpc.connect(l2.info['id'], 'localhost', l2.info['port'])
assert ret['id'] == l2.info['id']
@@ -262,7 +262,8 @@ class LightningDTests(BaseLightningDTests):
for i in range(len(nodes)-1):
nodes[i].rpc.connect(
nodes[i+1].info['id'],
'localhost:{}'.format(nodes[i+1].info['port'])
'localhost',
nodes[i+1].info['port']
)
self.fund_channel(nodes[i], nodes[i+1], 10**6)
@@ -701,7 +702,7 @@ class LightningDTests(BaseLightningDTests):
# l1 asks for a too-long locktime
l1 = self.node_factory.get_node(options=['--locktime-blocks=100'])
l2 = self.node_factory.get_node(options=['--max-locktime-blocks=99'])
ret = l1.rpc.connect(l2.info['id'], 'localhost:{}'.format(l2.info['port']))
ret = l1.rpc.connect(l2.info['id'], 'localhost', l2.info['port'])
assert ret['id'] == l2.info['id']
@@ -792,7 +793,7 @@ class LightningDTests(BaseLightningDTests):
l1 = self.node_factory.get_node(disconnect=disconnects)
l2 = self.node_factory.get_node()
l1.rpc.connect(l2.info['id'], 'localhost:{}'.format(l2.info['port']))
l1.rpc.connect(l2.info['id'], 'localhost', l2.info['port'])
# Like fundchannel, but we'll probably fail before CHANNELD_NORMAL.
addr = l1.rpc.newaddr()['address']
@@ -834,7 +835,7 @@ class LightningDTests(BaseLightningDTests):
l1 = self.node_factory.get_node(disconnect=disconnects)
l2 = self.node_factory.get_node()
l1.rpc.connect(l2.info['id'], 'localhost:{}'.format(l2.info['port']))
l1.rpc.connect(l2.info['id'], 'localhost', l2.info['port'])
self.fund_channel(l1, l2, 10**6)
# Must be dust!
@@ -887,7 +888,7 @@ class LightningDTests(BaseLightningDTests):
l1 = self.node_factory.get_node(disconnect=disconnects)
l2 = self.node_factory.get_node()
l1.rpc.connect(l2.info['id'], 'localhost:{}'.format(l2.info['port']))
l1.rpc.connect(l2.info['id'], 'localhost', l2.info['port'])
self.fund_channel(l1, l2, 10**6)
rhash = l2.rpc.invoice(10**8, 'onchain_timeout', 'desc')['rhash']
@@ -944,8 +945,8 @@ class LightningDTests(BaseLightningDTests):
l3 = self.node_factory.get_node()
# l2 connects to both, so l1 can't reconnect and thus l2 drops to chain
l2.rpc.connect(l1.info['id'], 'localhost:{}'.format(l1.info['port']))
l2.rpc.connect(l3.info['id'], 'localhost:{}'.format(l3.info['port']))
l2.rpc.connect(l1.info['id'], 'localhost', l1.info['port'])
l2.rpc.connect(l3.info['id'], 'localhost', l3.info['port'])
self.fund_channel(l2, l1, 10**6)
self.fund_channel(l2, l3, 10**6)
@@ -1017,7 +1018,7 @@ class LightningDTests(BaseLightningDTests):
l1 = self.node_factory.get_node(disconnect=['=WIRE_COMMITMENT_SIGNED-nocommit'], may_fail=True)
l2 = self.node_factory.get_node(disconnect=['=WIRE_COMMITMENT_SIGNED-nocommit'])
l1.rpc.connect(l2.info['id'], 'localhost:{}'.format(l2.info['port']))
l1.rpc.connect(l2.info['id'], 'localhost', l2.info['port'])
self.fund_channel(l1, l2, 10**6)
# Now, this will get stuck due to l1 commit being disabled..
@@ -1076,7 +1077,7 @@ class LightningDTests(BaseLightningDTests):
l1 = self.node_factory.get_node(disconnect=['=WIRE_COMMITMENT_SIGNED*3-nocommit'], may_fail=True)
l2 = self.node_factory.get_node(disconnect=['=WIRE_COMMITMENT_SIGNED*3-nocommit'])
l1.rpc.connect(l2.info['id'], 'localhost:{}'.format(l2.info['port']))
l1.rpc.connect(l2.info['id'], 'localhost', l2.info['port'])
self.fund_channel(l1, l2, 10**6)
# Move some across to l2.
@@ -1139,7 +1140,7 @@ class LightningDTests(BaseLightningDTests):
l1 = self.node_factory.get_node()
l2 = self.node_factory.get_node(disconnect=disconnects)
l1.rpc.connect(l2.info['id'], 'localhost:{}'.format(l2.info['port']))
l1.rpc.connect(l2.info['id'], 'localhost', l2.info['port'])
self.fund_channel(l1, l2, 10**6)
# This will fail at l2's end.
@@ -1175,7 +1176,7 @@ class LightningDTests(BaseLightningDTests):
l1 = self.node_factory.get_node()
l2 = self.node_factory.get_node(disconnect=disconnects)
l1.rpc.connect(l2.info['id'], 'localhost:{}'.format(l2.info['port']))
l1.rpc.connect(l2.info['id'], 'localhost', l2.info['port'])
self.fund_channel(l1, l2, 10**6)
# This will fail at l2's end.
@@ -1217,7 +1218,7 @@ class LightningDTests(BaseLightningDTests):
l1 = self.node_factory.get_node()
l2 = self.node_factory.get_node(disconnect=disconnects)
l1.rpc.connect(l2.info['id'], 'localhost:{}'.format(l2.info['port']))
l1.rpc.connect(l2.info['id'], 'localhost', l2.info['port'])
self.fund_channel(l2, l1, 10**6)
# This will fail at l2's end.
@@ -1329,11 +1330,11 @@ class LightningDTests(BaseLightningDTests):
l1 = self.node_factory.get_node(disconnect=disconnects)
l2 = self.node_factory.get_node()
l3 = self.node_factory.get_node()
l1.rpc.connect(l2.info['id'], 'localhost:{}'.format(l2.info['port']))
l1.rpc.connect(l2.info['id'], 'localhost', l2.info['port'])
l1.openchannel(l2, 20000)
# Now open new channels and everybody should sync
l2.rpc.connect(l3.info['id'], 'localhost:{}'.format(l3.info['port']))
l2.rpc.connect(l3.info['id'], 'localhost', l3.info['port'])
l2.openchannel(l3, 20000)
# Settle the gossip
@@ -1345,8 +1346,8 @@ class LightningDTests(BaseLightningDTests):
l2 = self.node_factory.get_node()
l3 = self.node_factory.get_node()
l1.rpc.connect(l2.info['id'], 'localhost:{}'.format(l2.info['port']))
l1.rpc.connect(l3.info['id'], 'localhost:{}'.format(l3.info['port']))
l1.rpc.connect(l2.info['id'], 'localhost', l2.info['port'])
l1.rpc.connect(l3.info['id'], 'localhost', l3.info['port'])
self.fund_channel(l1, l2, 10**6)
self.fund_channel(l1, l3, 10**6)
@@ -1358,7 +1359,7 @@ class LightningDTests(BaseLightningDTests):
for i in range(len(nodes)-1):
src, dst = nodes[i], nodes[i+1]
src.rpc.connect(dst.info['id'], 'localhost:{}'.format(dst.info['port']))
src.rpc.connect(dst.info['id'], 'localhost', dst.info['port'])
src.openchannel(dst, 20000)
# Allow announce messages.
@@ -1397,7 +1398,7 @@ class LightningDTests(BaseLightningDTests):
# Connect 1 -> 2 -> 3.
l1,l2 = self.connect()
l3 = self.node_factory.get_node()
ret = l2.rpc.connect(l3.info['id'], 'localhost:{}'.format(l3.info['port']))
ret = l2.rpc.connect(l3.info['id'], 'localhost', l3.info['port'])
assert ret['id'] == l3.info['id']
@@ -1489,13 +1490,13 @@ class LightningDTests(BaseLightningDTests):
l2 = self.node_factory.get_node(options=['--cltv-delta=20', '--fee-base=200', '--fee-per-satoshi=2000'])
l3 = self.node_factory.get_node(options=['--cltv-delta=30', '--cltv-final=9', '--fee-base=300', '--fee-per-satoshi=3000'])
ret = l1.rpc.connect(l2.info['id'], 'localhost:{}'.format(l2.info['port']))
ret = l1.rpc.connect(l2.info['id'], 'localhost', l2.info['port'])
assert ret['id'] == l2.info['id']
l1.daemon.wait_for_log('WIRE_GOSSIPCTL_HANDLE_PEER')
l2.daemon.wait_for_log('WIRE_GOSSIPCTL_HANDLE_PEER')
ret = l2.rpc.connect(l3.info['id'], 'localhost:{}'.format(l3.info['port']))
ret = l2.rpc.connect(l3.info['id'], 'localhost', l3.info['port'])
assert ret['id'] == l3.info['id']
l2.daemon.wait_for_log('WIRE_GOSSIPCTL_HANDLE_PEER')
@@ -1588,13 +1589,13 @@ class LightningDTests(BaseLightningDTests):
l2 = self.node_factory.get_node(options=['--cltv-delta=20', '--fee-base=200', '--fee-per-satoshi=2000'])
l3 = self.node_factory.get_node(options=['--cltv-delta=30', '--cltv-final=9', '--fee-base=300', '--fee-per-satoshi=3000'])
ret = l1.rpc.connect(l2.info['id'], 'localhost:{}'.format(l2.info['port']))
ret = l1.rpc.connect(l2.info['id'], 'localhost', l2.info['port'])
assert ret['id'] == l2.info['id']
l1.daemon.wait_for_log('WIRE_GOSSIPCTL_HANDLE_PEER')
l2.daemon.wait_for_log('WIRE_GOSSIPCTL_HANDLE_PEER')
ret = l2.rpc.connect(l3.info['id'], 'localhost:{}'.format(l3.info['port']))
ret = l2.rpc.connect(l3.info['id'], 'localhost', l3.info['port'])
assert ret['id'] == l3.info['id']
l2.daemon.wait_for_log('WIRE_GOSSIPCTL_HANDLE_PEER')
@@ -1642,7 +1643,7 @@ class LightningDTests(BaseLightningDTests):
options=['--no-reconnect'])
l2 = self.node_factory.get_node()
l1.rpc.connect(l2.info['id'], 'localhost:{}'.format(l2.info['port']))
l1.rpc.connect(l2.info['id'], 'localhost', l2.info['port'])
chanid = self.fund_channel(l1, l2, 10**6)
# Wait for route propagation.
@@ -1682,7 +1683,7 @@ class LightningDTests(BaseLightningDTests):
options=['--no-reconnect'])
l2 = self.node_factory.get_node()
l1.rpc.connect(l2.info['id'], 'localhost:{}'.format(l2.info['port']))
l1.rpc.connect(l2.info['id'], 'localhost', l2.info['port'])
chanid = self.fund_channel(l1, l2, 10**6)
# Wait for route propagation.
@@ -1721,7 +1722,7 @@ class LightningDTests(BaseLightningDTests):
'+WIRE_INIT']
l1 = self.node_factory.get_node(disconnect=disconnects)
l2 = self.node_factory.get_node()
l1.rpc.connect(l2.info['id'], 'localhost:{}'.format(l2.info['port']))
l1.rpc.connect(l2.info['id'], 'localhost', l2.info['port'])
# Should have 3 connect fails.
for d in disconnects:
@@ -1745,7 +1746,7 @@ class LightningDTests(BaseLightningDTests):
l1.rpc.addfunds(tx)
for d in disconnects:
l1.rpc.connect(l2.info['id'], 'localhost:{}'.format(l2.info['port']))
l1.rpc.connect(l2.info['id'], 'localhost', l2.info['port'])
self.assertRaises(ValueError, l1.rpc.fundchannel, l2.info['id'], 20000)
assert l1.rpc.getpeer(l2.info['id']) == None
@@ -1764,7 +1765,7 @@ class LightningDTests(BaseLightningDTests):
l1.rpc.addfunds(tx)
for d in disconnects:
l1.rpc.connect(l2.info['id'], 'localhost:{}'.format(l2.info['port']))
l1.rpc.connect(l2.info['id'], 'localhost', l2.info['port'])
self.assertRaises(ValueError, l1.rpc.fundchannel, l2.info['id'], 20000)
assert l1.rpc.getpeer(l2.info['id']) == None
@@ -1781,7 +1782,7 @@ class LightningDTests(BaseLightningDTests):
tx = l1.bitcoin.rpc.getrawtransaction(txid)
l1.rpc.addfunds(tx)
l1.rpc.connect(l2.info['id'], 'localhost:{}'.format(l2.info['port']))
l1.rpc.connect(l2.info['id'], 'localhost', l2.info['port'])
self.assertRaises(ValueError, l1.rpc.fundchannel, l2.info['id'], 20000)
# Fundee remembers, funder doesn't.
@@ -1800,7 +1801,7 @@ class LightningDTests(BaseLightningDTests):
tx = l1.bitcoin.rpc.getrawtransaction(txid)
l1.rpc.addfunds(tx)
l1.rpc.connect(l2.info['id'], 'localhost:{}'.format(l2.info['port']))
l1.rpc.connect(l2.info['id'], 'localhost', l2.info['port'])
l1.rpc.fundchannel(l2.info['id'], 20000)
# They haven't forgotten each other.
@@ -1824,7 +1825,7 @@ class LightningDTests(BaseLightningDTests):
disconnects = ['0WIRE_ACCEPT_CHANNEL']
l1 = self.node_factory.get_node()
l2 = self.node_factory.get_node(disconnect=disconnects)
l1.rpc.connect(l2.info['id'], 'localhost:{}'.format(l2.info['port']))
l1.rpc.connect(l2.info['id'], 'localhost', l2.info['port'])
addr = l1.rpc.newaddr()['address']
txid = l1.bitcoin.rpc.sendtoaddress(addr, 20000 / 10**6)
@@ -1836,7 +1837,7 @@ class LightningDTests(BaseLightningDTests):
assert l1.rpc.getpeer(l2.info['id']) == None
# Reconnect.
l1.rpc.connect(l2.info['id'], 'localhost:{}'.format(l2.info['port']))
l1.rpc.connect(l2.info['id'], 'localhost', l2.info['port'])
# We should get a message about reconnecting.
l2.daemon.wait_for_log('Peer has reconnected, state OPENINGD')
@@ -1856,7 +1857,7 @@ class LightningDTests(BaseLightningDTests):
'+WIRE_FUNDING_LOCKED']
l1 = self.node_factory.get_node(disconnect=disconnects)
l2 = self.node_factory.get_node()
ret = l1.rpc.connect(l2.info['id'], 'localhost:{}'.format(l2.info['port']))
ret = l1.rpc.connect(l2.info['id'], 'localhost', l2.info['port'])
self.fund_channel(l1, l2, 10**6)
@@ -1869,7 +1870,7 @@ class LightningDTests(BaseLightningDTests):
l1 = self.node_factory.get_node(disconnect=disconnects)
l2 = self.node_factory.get_node()
ret = l1.rpc.connect(l2.info['id'], 'localhost:{}'.format(l2.info['port']))
ret = l1.rpc.connect(l2.info['id'], 'localhost', l2.info['port'])
self.fund_channel(l1, l2, 10**6)
@@ -1897,7 +1898,7 @@ class LightningDTests(BaseLightningDTests):
'+WIRE_REVOKE_AND_ACK']
l1 = self.node_factory.get_node(disconnect=disconnects)
l2 = self.node_factory.get_node()
ret = l1.rpc.connect(l2.info['id'], 'localhost:{}'.format(l2.info['port']))
ret = l1.rpc.connect(l2.info['id'], 'localhost', l2.info['port'])
self.fund_channel(l1, l2, 10**6)
@@ -1923,7 +1924,7 @@ class LightningDTests(BaseLightningDTests):
'+WIRE_REVOKE_AND_ACK']
l1 = self.node_factory.get_node()
l2 = self.node_factory.get_node(disconnect=disconnects)
ret = l1.rpc.connect(l2.info['id'], 'localhost:{}'.format(l2.info['port']))
ret = l1.rpc.connect(l2.info['id'], 'localhost', l2.info['port'])
self.fund_channel(l1, l2, 10**6)
@@ -1953,7 +1954,7 @@ class LightningDTests(BaseLightningDTests):
'+WIRE_REVOKE_AND_ACK']
l1 = self.node_factory.get_node()
l2 = self.node_factory.get_node(disconnect=disconnects)
ret = l1.rpc.connect(l2.info['id'], 'localhost:{}'.format(l2.info['port']))
ret = l1.rpc.connect(l2.info['id'], 'localhost', l2.info['port'])
self.fund_channel(l1, l2, 10**6)
@@ -1974,7 +1975,7 @@ class LightningDTests(BaseLightningDTests):
'+WIRE_SHUTDOWN']
l1 = self.node_factory.get_node(disconnect=disconnects)
l2 = self.node_factory.get_node()
l1.rpc.connect(l2.info['id'], 'localhost:{}'.format(l2.info['port']))
l1.rpc.connect(l2.info['id'], 'localhost', l2.info['port'])
self.fund_channel(l1, l2, 10**6)
self.pay(l1,l2,200000000)
@@ -2002,7 +2003,7 @@ class LightningDTests(BaseLightningDTests):
'+WIRE_CLOSING_SIGNED']
l1 = self.node_factory.get_node(disconnect=disconnects)
l2 = self.node_factory.get_node()
l1.rpc.connect(l2.info['id'], 'localhost:{}'.format(l2.info['port']))
l1.rpc.connect(l2.info['id'], 'localhost', l2.info['port'])
self.fund_channel(l1, l2, 10**6)
self.pay(l1,l2,200000000)
@@ -2123,7 +2124,7 @@ class LightningDTests(BaseLightningDTests):
# check that HTLCs reloaded from the DB work.
l1 = self.node_factory.get_node()
l2 = self.node_factory.get_node(disconnect=['=WIRE_COMMITMENT_SIGNED-nocommit'])
l1.rpc.connect(l2.info['id'], 'localhost:{}'.format(l2.info['port']))
l1.rpc.connect(l2.info['id'], 'localhost', l2.info['port'])
# Neither node should have a channel open, they are just connected
for n in (l1, l2):
@@ -2181,8 +2182,8 @@ class LightningDTests(BaseLightningDTests):
l3 = self.node_factory.get_node()
# l2 connects to both, so l1 can't reconnect and thus l2 drops to chain
l2.rpc.connect(l1.info['id'], 'localhost:{}'.format(l1.info['port']))
l2.rpc.connect(l3.info['id'], 'localhost:{}'.format(l3.info['port']))
l2.rpc.connect(l1.info['id'], 'localhost', l1.info['port'])
l2.rpc.connect(l3.info['id'], 'localhost', l3.info['port'])
self.fund_channel(l2, l1, 10**6)
self.fund_channel(l2, l3, 10**6)
@@ -2300,7 +2301,7 @@ class LightningDTests(BaseLightningDTests):
disconnects = ['+WIRE_COMMITMENT_SIGNED']
l1 = self.node_factory.get_node(disconnect=disconnects)
l2 = self.node_factory.get_node()
l1.rpc.connect(l2.info['id'], 'localhost:{}'.format(l2.info['port']))
l1.rpc.connect(l2.info['id'], 'localhost', l2.info['port'])
self.fund_channel(l1, l2, 10**6)