mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-01-18 05:12:45 +01:00
features: split expected feature bits into node/peer sets
The new `keysend` plugin modifies the node features that we send to peers. This commit breaks out the 'expected_features' we use for tests to encompass this differentiation.
This commit is contained in:
parent
9f298330b2
commit
d6d26dd056
@ -6,7 +6,7 @@ from flaky import flaky # noqa: F401
|
||||
from pyln.client import RpcError, Millisatoshi
|
||||
from utils import (
|
||||
DEVELOPER, only_one, wait_for, sync_blockheight, VALGRIND, TIMEOUT,
|
||||
SLOW_MACHINE, expected_features
|
||||
SLOW_MACHINE, expected_peer_features, expected_node_features
|
||||
)
|
||||
from bitcoin.core import CMutableTransaction, CMutableTxOut
|
||||
|
||||
@ -1558,7 +1558,8 @@ def test_forget_channel(node_factory):
|
||||
|
||||
def test_peerinfo(node_factory, bitcoind):
|
||||
l1, l2 = node_factory.line_graph(2, fundchannel=False, opts={'may_reconnect': True})
|
||||
lfeatures = expected_features()
|
||||
lfeatures = expected_peer_features()
|
||||
nfeatures = expected_node_features()
|
||||
# Gossiping but no node announcement yet
|
||||
assert l1.rpc.getpeer(l2.info['id'])['connected']
|
||||
assert len(l1.rpc.getpeer(l2.info['id'])['channels']) == 0
|
||||
@ -1576,11 +1577,11 @@ def test_peerinfo(node_factory, bitcoind):
|
||||
nodes2 = l2.rpc.listnodes(l2.info['id'])['nodes']
|
||||
peer1 = l1.rpc.getpeer(l2.info['id'])
|
||||
peer2 = l2.rpc.getpeer(l1.info['id'])
|
||||
assert only_one(nodes1)['features'] == peer1['features']
|
||||
assert only_one(nodes2)['features'] == peer2['features']
|
||||
|
||||
assert l1.rpc.getpeer(l2.info['id'])['features'] == lfeatures
|
||||
assert l2.rpc.getpeer(l1.info['id'])['features'] == lfeatures
|
||||
# peer features != to node features now because of keysend, which adds a node feature
|
||||
assert only_one(nodes1)['features'] == nfeatures
|
||||
assert only_one(nodes2)['features'] == nfeatures
|
||||
assert peer1['features'] == lfeatures
|
||||
assert peer2['features'] == lfeatures
|
||||
|
||||
# If it reconnects after db load, it should know features.
|
||||
l1.restart()
|
||||
@ -1813,7 +1814,7 @@ def test_dataloss_protection(node_factory, bitcoind):
|
||||
l2 = node_factory.get_node(may_reconnect=True, options={'log-level': 'io'},
|
||||
feerates=(7500, 7500, 7500, 7500), allow_broken_log=True)
|
||||
|
||||
lf = expected_features()
|
||||
lf = expected_peer_features()
|
||||
|
||||
l1.rpc.connect(l2.info['id'], 'localhost', l2.port)
|
||||
# l1 should send out WIRE_INIT (0010)
|
||||
@ -2236,7 +2237,7 @@ def test_pay_disconnect_stress(node_factory, executor):
|
||||
|
||||
|
||||
def test_wumbo_channels(node_factory, bitcoind):
|
||||
f = bytes.fromhex(expected_features())
|
||||
f = bytes.fromhex(expected_peer_features())
|
||||
|
||||
# OPT_LARGE_CHANNELS = 18 (19 for us). 0x080000
|
||||
f = (f[:-3] + bytes([f[-3] | 0x08]) + f[-2:]).hex()
|
||||
|
@ -4,7 +4,7 @@ from fixtures import * # noqa: F401,F403
|
||||
from fixtures import TEST_NETWORK
|
||||
from pyln.client import RpcError
|
||||
from utils import (
|
||||
wait_for, TIMEOUT, only_one, sync_blockheight, expected_features
|
||||
wait_for, TIMEOUT, only_one, sync_blockheight, expected_node_features
|
||||
)
|
||||
|
||||
import json
|
||||
@ -1029,7 +1029,7 @@ def test_node_reannounce(node_factory, bitcoind):
|
||||
wait_for(lambda: 'alias' in only_one(l2.rpc.listnodes(l1.info['id'])['nodes']))
|
||||
assert only_one(l2.rpc.listnodes(l1.info['id'])['nodes'])['alias'].startswith('JUNIORBEAM')
|
||||
|
||||
lfeatures = expected_features()
|
||||
lfeatures = expected_node_features()
|
||||
|
||||
# Make sure it gets features correct.
|
||||
assert only_one(l2.rpc.listnodes(l1.info['id'])['nodes'])['features'] == lfeatures
|
||||
|
@ -6,7 +6,7 @@ from pyln.client import RpcError, Millisatoshi
|
||||
from pyln.proto import Invoice
|
||||
from utils import (
|
||||
DEVELOPER, only_one, sync_blockheight, TIMEOUT, wait_for, TEST_NETWORK,
|
||||
DEPRECATED_APIS, expected_features
|
||||
DEPRECATED_APIS, expected_peer_features, expected_node_features
|
||||
)
|
||||
|
||||
import json
|
||||
@ -946,7 +946,7 @@ def test_plugin_feature_announce(node_factory):
|
||||
# Check the featurebits we've set in the `init` message from
|
||||
# feature-test.py. (1 << 101) results in 13 bytes featutebits (000d) and
|
||||
# has a leading 0x20.
|
||||
assert l1.daemon.is_in_log(r'\[OUT\] 001000.*000d20{:0>24}'.format(expected_features()))
|
||||
assert l1.daemon.is_in_log(r'\[OUT\] 001000.*000d20{:0>24}'.format(expected_peer_features()))
|
||||
|
||||
# Check the invoice featurebit we set in feature-test.py
|
||||
inv = l1.rpc.invoice(123, 'lbl', 'desc')['bolt11']
|
||||
@ -1176,8 +1176,8 @@ def test_feature_set(node_factory):
|
||||
l1 = node_factory.get_node(options={"plugin": plugin})
|
||||
|
||||
fs = l1.rpc.call('getfeatureset')
|
||||
assert fs['init'] == expected_features()
|
||||
assert fs['node'] == expected_features()
|
||||
assert fs['init'] == expected_peer_features()
|
||||
assert fs['node'] == expected_node_features()
|
||||
assert fs['channel'] == ''
|
||||
assert 'invoice' in fs
|
||||
|
||||
|
@ -6,7 +6,15 @@ EXPERIMENTAL_FEATURES = env("EXPERIMENTAL_FEATURES", "0") == "1"
|
||||
COMPAT = env("COMPAT", "1") == "1"
|
||||
|
||||
|
||||
def expected_features():
|
||||
"""Return the expected features hexstring for this configuration"""
|
||||
def expected_peer_features():
|
||||
"""Return the expected peer features hexstring for this configuration"""
|
||||
# features 1, 3, 7, 9, 11, 13, 15 and 17 (0x02aaa2).
|
||||
return "02aaa2"
|
||||
|
||||
|
||||
# With the addition of the keysend plugin, we now send a different set of
|
||||
# features for the 'node' and the 'peer' feature sets
|
||||
def expected_node_features():
|
||||
"""Return the expected node features hexstring for this configuration"""
|
||||
# features 1, 3, 7, 9, 11, 13, 15, 17 and 55 (0x8000000002aaa2).
|
||||
return "8000000002aaa2"
|
||||
|
Loading…
Reference in New Issue
Block a user