From f906b1aebb6dc268be659864efe6c8382399f1df Mon Sep 17 00:00:00 2001 From: tecnovert Date: Fri, 16 Aug 2019 00:31:39 +0200 Subject: [PATCH] tests: Use multiprocess. --- bin/basicswap_prepare.py | 6 +++--- bin/basicswap_run.py | 15 +++++---------- tests/basicswap/test_reload.py | 28 ++++++++++++++++++++-------- 3 files changed, 28 insertions(+), 21 deletions(-) diff --git a/bin/basicswap_prepare.py b/bin/basicswap_prepare.py index 5c6ef60..b3df484 100644 --- a/bin/basicswap_prepare.py +++ b/bin/basicswap_prepare.py @@ -217,9 +217,9 @@ def prepareDataDir(coin, settings, data_dir, chain, particl_mnemonic): if coin == 'particl': fp.write('debugexclude=libevent\n') fp.write('zmqpubsmsg=tcp://127.0.0.1:{}\n'.format(settings['zmqport'])) - fp.write('spentindex=1') - fp.write('txindex=1') - fp.write('staking=0') + fp.write('spentindex=1\n') + fp.write('txindex=1\n') + fp.write('staking=0\n') if particl_mnemonic == 'none': fp.write('createdefaultmasterkey=1') diff --git a/bin/basicswap_run.py b/bin/basicswap_run.py index 5833702..73db203 100644 --- a/bin/basicswap_run.py +++ b/bin/basicswap_run.py @@ -34,6 +34,7 @@ swap_client = None def signal_handler(sig, frame): + global swap_client logger.info('Signal %d detected, ending program.' % (sig)) if swap_client is not None: swap_client.stopRunning() @@ -47,7 +48,7 @@ def startDaemon(node_dir, bin_dir, daemon_bin, opts=[]): return subprocess.Popen(args, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) -def runClient(fp, data_dir, chain, test_mode): +def runClient(fp, data_dir, chain): global swap_client settings_path = os.path.join(data_dir, 'basicswap.json') pids_path = os.path.join(data_dir, '.pids') @@ -90,10 +91,8 @@ def runClient(fp, data_dir, chain, test_mode): for p in pids: fd.write('{}:{}\n'.format(*p)) - if not test_mode: - # Signal only works in main thread - signal.signal(signal.SIGINT, signal_handler) - signal.signal(signal.SIGTERM, signal_handler) + signal.signal(signal.SIGINT, signal_handler) + signal.signal(signal.SIGTERM, signal_handler) swap_client.start() if 'htmlhost' in settings: @@ -163,7 +162,6 @@ def printHelp(): def main(): data_dir = None chain = 'mainnet' - test_mode = False for v in sys.argv[1:]: if len(v) < 2 or v[0] != '-': @@ -184,9 +182,6 @@ def main(): printHelp() return 0 - if name == 'testmode': - test_mode = True - continue if name == 'testnet': chain = 'testnet' continue @@ -212,7 +207,7 @@ def main(): with open(os.path.join(data_dir, 'basicswap.log'), 'a') as fp: logger.info(os.path.basename(sys.argv[0]) + ', version: ' + __version__ + '\n\n') - runClient(fp, data_dir, chain, test_mode) + runClient(fp, data_dir, chain) logger.info('Done.') return swap_client.fail_code if swap_client is not None else 0 diff --git a/tests/basicswap/test_reload.py b/tests/basicswap/test_reload.py index a2eb34c..3da419f 100644 --- a/tests/basicswap/test_reload.py +++ b/tests/basicswap/test_reload.py @@ -20,9 +20,9 @@ import time import unittest import logging import shutil -import threading import json import traceback +import multiprocessing from unittest.mock import patch from urllib.request import urlopen from urllib import parse @@ -31,6 +31,9 @@ from urllib import parse import bin.basicswap_prepare as prepareSystem import bin.basicswap_run as runSystem test_path = os.path.expanduser('~/test_basicswap1') +PARTICL_PORT_BASE = 11938 +BITCOIN_PORT_BASE = 10938 + logger = logging.getLogger() logger.level = logging.DEBUG @@ -66,7 +69,8 @@ class Test(unittest.TestCase): shutil.rmtree(client_path) except Exception as ex: logger.warning('setUpClass %s', str(ex)) - testargs = ['basicswap-prepare', + testargs = [ + 'basicswap-prepare', '-datadir="{}"'.format(client_path), '-bindir="{}"'.format(test_path + '/bin'), '-portoffset={}'.format(i), @@ -75,18 +79,25 @@ class Test(unittest.TestCase): with patch.object(sys, 'argv', testargs): prepareSystem.main() + with open(os.path.join(client_path, 'particl', 'particl.conf'), 'a') as fp: + fp.write('port={}\n'.format(PARTICL_PORT_BASE + i)) + with open(os.path.join(client_path, 'bitcoin', 'bitcoin.conf'), 'a') as fp: + fp.write('port={}\n'.format(BITCOIN_PORT_BASE + i)) + assert(os.path.exists(config_path)) def run_thread(self, client_id): client_path = os.path.join(test_path, 'client{}'.format(client_id)) - testargs = ['basicswap-run', '-datadir=' + client_path, '-regtest', '-testmode'] + testargs = ['basicswap-run', '-datadir=' + client_path, '-regtest'] with patch.object(sys, 'argv', testargs): runSystem.main() def test_reload(self): + processes = [] - thread0 = threading.Thread(target=self.run_thread, args=(0,)) - thread0.start() + for i in range(3): + processes.append(multiprocessing.Process(target=self.run_thread, args=(i,))) + processes[-1].start() try: waitForServer() @@ -107,9 +118,10 @@ class Test(unittest.TestCase): logger.warning('TODO') time.sleep(5) - runSystem.swap_client.stopRunning() - - thread0.join() + for p in processes: + p.terminate() + for p in processes: + p.join() if __name__ == '__main__':