mirror of
https://github.com/JoinMarket-Org/joinmarket-clientserver.git
synced 2026-08-17 13:07:51 +02:00
109 lines
4.2 KiB
Python
109 lines
4.2 KiB
Python
from __future__ import (absolute_import, division,
|
|
print_function, unicode_literals)
|
|
from builtins import *
|
|
import pytest
|
|
import os
|
|
import time
|
|
import subprocess
|
|
|
|
bitcoin_path = None
|
|
bitcoin_conf = None
|
|
bitcoin_rpcpassword = None
|
|
bitcoin_rpcusername = None
|
|
miniircd_procs = []
|
|
|
|
def local_command(command, bg=False, redirect=''):
|
|
if redirect == 'NULL':
|
|
if OS == 'Windows':
|
|
command.append(' > NUL 2>&1')
|
|
elif OS == 'Linux':
|
|
command.extend(['>', '/dev/null', '2>&1'])
|
|
else:
|
|
print("OS not recognised, quitting.")
|
|
elif redirect:
|
|
command.extend(['>', redirect])
|
|
|
|
if bg:
|
|
#using subprocess.PIPE seems to cause problems
|
|
FNULL = open(os.devnull, 'w')
|
|
return subprocess.Popen(command,
|
|
stdout=FNULL,
|
|
stderr=subprocess.STDOUT,
|
|
close_fds=True)
|
|
else:
|
|
#in case of foreground execution, we can use the output; if not
|
|
#it doesn't matter
|
|
return subprocess.check_output(command)
|
|
|
|
def root_path():
|
|
# returns the directory in which this file is contained
|
|
return os.path.dirname(os.path.realpath(__file__))
|
|
|
|
def pytest_addoption(parser):
|
|
parser.addoption("--btcroot", action="store", default='',
|
|
help="the fully qualified path to the directory containing "+\
|
|
"the bitcoin binaries, e.g. /home/user/bitcoin/bin/")
|
|
parser.addoption("--btcconf", action="store",
|
|
default=os.path.join(root_path(), 'test/bitcoin.conf'),
|
|
help="the fully qualified path to the location of the "+\
|
|
"bitcoin configuration file you use for testing, e.g. "+\
|
|
"/home/user/.bitcoin/bitcoin.conf")
|
|
parser.addoption("--btcpwd",
|
|
action="store",
|
|
help="the RPC password for your test bitcoin instance")
|
|
parser.addoption("--btcuser",
|
|
action="store",
|
|
default='bitcoinrpc',
|
|
help="the RPC username for your test bitcoin instance (default=bitcoinrpc)")
|
|
parser.addoption("--nirc",
|
|
type="int",
|
|
action="store",
|
|
default=1,
|
|
help="the number of local miniircd instances")
|
|
|
|
def teardown():
|
|
#didn't find a stop command in miniircd, so just kill
|
|
global miniircd_procs
|
|
for m in miniircd_procs:
|
|
m.kill()
|
|
#shut down bitcoin and remove the regtest dir
|
|
local_command([bitcoin_path + "bitcoin-cli", "-regtest", "-rpcuser=" + bitcoin_rpcusername,
|
|
"-rpcpassword=" + bitcoin_rpcpassword, "stop"])
|
|
#note, it is better to clean out ~/.bitcoin/regtest but too
|
|
#dangerous to automate it here perhaps
|
|
|
|
|
|
@pytest.fixture(scope="session", autouse=True)
|
|
def setup(request):
|
|
request.addfinalizer(teardown)
|
|
|
|
global bitcoin_conf, bitcoin_path, bitcoin_rpcpassword, bitcoin_rpcusername
|
|
bitcoin_path = request.config.getoption("--btcroot")
|
|
bitcoin_conf = request.config.getoption("--btcconf")
|
|
print("Here is the bitcoin_conf path:")
|
|
print(bitcoin_conf)
|
|
bitcoin_rpcpassword = request.config.getoption("--btcpwd")
|
|
bitcoin_rpcusername = request.config.getoption("--btcuser")
|
|
|
|
#start up miniircd
|
|
#minor bug in miniircd (seems); need *full* unqualified path for motd file
|
|
cwd = os.getcwd()
|
|
n_irc = request.config.getoption("--nirc")
|
|
global miniircd_procs
|
|
for i in range(n_irc):
|
|
miniircd_proc = local_command(
|
|
["./miniircd/miniircd", "--ports=" + str(6667+i),
|
|
"--motd=" + cwd + "/miniircd/testmotd"],
|
|
bg=True)
|
|
miniircd_procs.append(miniircd_proc)
|
|
#start up regtest blockchain
|
|
btc_proc = subprocess.call([bitcoin_path + "bitcoind", "-regtest",
|
|
"-daemon", "-conf=" + bitcoin_conf])
|
|
time.sleep(3)
|
|
#generate blocks; segwit activates around block 500-600
|
|
for i in range(2):
|
|
local_command([bitcoin_path + "bitcoin-cli", "-regtest",
|
|
"-rpcuser=" + bitcoin_rpcusername,
|
|
"-rpcpassword=" + bitcoin_rpcpassword, "generate", "301"])
|
|
time.sleep(1)
|
|
|