def bitcoind(directory, teardown_checks): chaind = network_daemons[env('TEST_NETWORK', 'regtest')] bitcoind = chaind(bitcoin_dir=directory) try: bitcoind.start() except Exception: bitcoind.stop() raise info = bitcoind.rpc.getnetworkinfo() # FIXME: include liquid-regtest in this check after elementsd has been # updated if info['version'] < 200100 and env('TEST_NETWORK') != 'liquid-regtest': bitcoind.rpc.stop() raise ValueError( "bitcoind is too old. At least version 20100 (v0.20.1)" " is needed, current version is {}".format(info['version'])) elif info['version'] < 160000: bitcoind.rpc.stop() raise ValueError( "elementsd is too old. At least version 160000 (v0.16.0)" " is needed, current version is {}".format(info['version'])) # Make sure we have a wallet, starting with 0.21 there is no default wallet # anymore. # FIXME: if we update the testsuite to use the upcoming 0.21 release we # could switch to descriptor wallets and speed bitcoind operations # consequently. if not bitcoind.rpc.listwallets(): bitcoind.rpc.createwallet("lightningd-tests") info = bitcoind.rpc.getblockchaininfo() # Make sure we have some spendable funds if info['blocks'] < 101: bitcoind.generate_block(101 - info['blocks']) elif bitcoind.rpc.getwalletinfo()['balance'] < 1: logging.debug("Insufficient balance, generating 1 block") bitcoind.generate_block(1) yield bitcoind try: bitcoind.stop() except Exception: bitcoind.proc.kill() bitcoind.proc.wait()
def chainparams(): """Return the chainparams for the TEST_NETWORK. - chain_hash is in network byte order, not the RPC return order. - example_addr doesn't belong to any node in the test (randomly generated) """ chainparams = { 'regtest': { "bip173_prefix": "bcrt", "elements": False, "name": "regtest", "p2sh_prefix": '2', "elements": False, "example_addr": "bcrt1qeyyk6sl5pr49ycpqyckvmttus5ttj25pd0zpvg", "feeoutput": False, "chain_hash": '06226e46111a0b59caaf126043eb5bbf28c34f3a5e332a1fc7b2b73cf188910f', }, 'liquid-regtest': { "bip173_prefix": "ert", "elements": True, "name": "liquid-regtest", "p2sh_prefix": 'X', "elements": True, "example_addr": "ert1qjsesxflhs3632syhcz7llpfx20p5tr0kpllfve", "feeoutput": True, "chain_hash": "9f87eb580b9e5f11dc211e9fb66abb3699999044f8fe146801162393364286c6", } } return chainparams[env('TEST_NETWORK', 'regtest')]
def bitcoind(directory, teardown_checks): chaind = network_daemons[env('TEST_NETWORK', 'regtest')] bitcoind = chaind(bitcoin_dir=directory) try: bitcoind.start() except Exception: bitcoind.stop() raise info = bitcoind.rpc.getnetworkinfo() if info['version'] < 160000: bitcoind.rpc.stop() raise ValueError("bitcoind is too old. At least version 16000 (v0.16.0)" " is needed, current version is {}".format(info['version'])) info = bitcoind.rpc.getblockchaininfo() # Make sure we have some spendable funds if info['blocks'] < 101: bitcoind.generate_block(101 - info['blocks']) elif bitcoind.rpc.getwalletinfo()['balance'] < 1: logging.debug("Insufficient balance, generating 1 block") bitcoind.generate_block(1) yield bitcoind try: bitcoind.stop() except Exception: bitcoind.proc.kill() bitcoind.proc.wait()
def chainparams(): chainparams = { 'regtest': { "bip173_prefix": "bcrt", "elements": False, "name": "regtest", "p2sh_prefix": '2', "elements": False, "example_addr": "bcrt1qeyyk6sl5pr49ycpqyckvmttus5ttj25pd0zpvg", "feeoutput": False, }, 'liquid-regtest': { "bip173_prefix": "ert", "elements": True, "name": "liquid-regtest", "p2sh_prefix": 'X', "elements": True, "example_addr": "ert1qq8adjz4u6enf0cjey9j8yt0y490tact9fahkwf", "feeoutput": True, } } return chainparams[env('TEST_NETWORK', 'regtest')]
from pyln.testing.utils import TEST_NETWORK, TIMEOUT, VALGRIND, DEVELOPER, DEPRECATED_APIS # noqa: F401 from pyln.testing.utils import env, only_one, wait_for, write_config, TailableProc, sync_blockheight, wait_channel_quiescent, get_tx_p2wsh_outnum # noqa: F401 import bitstring from pyln.client import Millisatoshi EXPERIMENTAL_FEATURES = env("EXPERIMENTAL_FEATURES", "0") == "1" COMPAT = env("COMPAT", "1") == "1" EXPERIMENTAL_DUAL_FUND = env("EXPERIMENTAL_DUAL_FUND", "0") == "1" def hex_bits(features): # We always to full bytes flen = (max(features + [0]) + 7) // 8 * 8 res = bitstring.BitArray(length=flen) # Big endian sucketh. for f in features: res[flen - 1 - f] = 1 return res.hex def expected_peer_features(wumbo_channels=False, extra=[]): """Return the expected peer features hexstring for this configuration""" features = [1, 5, 7, 9, 11, 13, 15, 17] if EXPERIMENTAL_FEATURES: # OPT_ONION_MESSAGES features += [103] # option_anchor_outputs features += [21] # option_shutdown_anysegwit features += [27] if wumbo_channels:
#!/usr/bin/env python3 """Plugin to test openchannel_hook Will simply reject any channel with message "reject on principle". Useful fot testing chained hook. """ from pyln.client import Plugin from pyln.testing.utils import env EXPERIMENTAL_FEATURES = env("EXPERIMENTAL_FEATURES", "0") == "1" plugin = Plugin() @plugin.hook('openchannel') def on_openchannel(openchannel, plugin, **kwargs): msg = "reject on principle" plugin.log(msg) return {'result': 'reject', 'error_message': msg} if EXPERIMENTAL_FEATURES: @plugin.hook('openchannel2') def on_openchannel2(openchannel2, plugin, **kwargs): msg = "reject on principle" plugin.log(msg) return {'result': 'reject', 'error_message': msg}
from fixtures import * # noqa: F401,F403 from pathlib import Path from pyln.testing.utils import env, TEST_NETWORK, wait_for from ephemeral_port_reserve import reserve import grpc import pytest import subprocess # Skip the entire module if we don't have Rust. pytestmark = pytest.mark.skipif( env('RUST') != '1', reason='RUST is not enabled skipping rust-dependent tests') def wait_for_grpc_start(node): """This can happen before "public key" which start() swallows""" wait_for(lambda: node.daemon.is_in_log(r'serving grpc on 0.0.0.0:')) def test_rpc_client(node_factory): l1 = node_factory.get_node() bin_path = Path.cwd() / "target" / "debug" / "examples" / "cln-rpc-getinfo" rpc_path = Path(l1.daemon.lightning_dir) / TEST_NETWORK / "lightning-rpc" out = subprocess.check_output([bin_path, rpc_path], stderr=subprocess.STDOUT) assert ( b'0266e4598d1d3c415f572a8488830b60f7e744ed9235eb0b1ba93283b315c03518' in out) def test_plugin_start(node_factory):