mirror of
https://github.com/basicswap/basicswap.git
synced 2024-11-16 15:58:17 +00:00
tests: Update test_wallet_restore
This commit is contained in:
parent
a2fa2ff9de
commit
c9e04332fc
2 changed files with 57 additions and 39 deletions
|
@ -28,7 +28,7 @@ from tests.basicswap.util import (
|
|||
from tests.basicswap.common import (
|
||||
BASE_PORT, BASE_RPC_PORT,
|
||||
BTC_BASE_PORT, BTC_BASE_RPC_PORT, BTC_BASE_TOR_PORT,
|
||||
LTC_BASE_PORT,
|
||||
LTC_BASE_PORT, LTC_BASE_RPC_PORT,
|
||||
PIVX_BASE_PORT,
|
||||
)
|
||||
from basicswap.contrib.rpcauth import generate_salt, password_to_hmac
|
||||
|
@ -45,6 +45,8 @@ BITCOIN_PORT_BASE = int(os.getenv('BITCOIN_PORT_BASE', BTC_BASE_PORT))
|
|||
BITCOIN_RPC_PORT_BASE = int(os.getenv('BITCOIN_RPC_PORT_BASE', BTC_BASE_RPC_PORT))
|
||||
BITCOIN_TOR_PORT_BASE = int(os.getenv('BITCOIN_TOR_PORT_BASE', BTC_BASE_TOR_PORT))
|
||||
|
||||
LITECOIN_RPC_PORT_BASE = int(os.getenv('LITECOIN_RPC_PORT_BASE', LTC_BASE_RPC_PORT))
|
||||
|
||||
XMR_BASE_P2P_PORT = 17792
|
||||
XMR_BASE_RPC_PORT = 29798
|
||||
XMR_BASE_WALLET_RPC_PORT = 29998
|
||||
|
@ -85,6 +87,7 @@ def run_prepare(node_id, datadir_path, bins_path, with_coins, mnemonic_in=None,
|
|||
|
||||
os.environ['PART_RPC_PORT'] = str(PARTICL_RPC_PORT_BASE)
|
||||
os.environ['BTC_RPC_PORT'] = str(BITCOIN_RPC_PORT_BASE)
|
||||
os.environ['LTC_RPC_PORT'] = str(LITECOIN_RPC_PORT_BASE)
|
||||
|
||||
os.environ['XMR_RPC_USER'] = 'xmr_user'
|
||||
os.environ['XMR_RPC_PWD'] = 'xmr_pwd'
|
||||
|
@ -296,6 +299,24 @@ class TestBase(unittest.TestCase):
|
|||
if self.delay_event.is_set():
|
||||
raise ValueError('Test stopped.')
|
||||
|
||||
def wait_for_particl_height(self, http_port, num_blocks=3):
|
||||
# Wait for height, or sequencelock is thrown off by genesis blocktime
|
||||
logging.info('Waiting for Particl chain height %d', num_blocks)
|
||||
for i in range(60):
|
||||
if self.delay_event.is_set():
|
||||
raise ValueError('Test stopped.')
|
||||
try:
|
||||
wallets = json.loads(urlopen(f'http://127.0.0.1:{http_port}/json/wallets').read())
|
||||
particl_blocks = wallets['PART']['blocks']
|
||||
print('particl_blocks', particl_blocks)
|
||||
if particl_blocks >= num_blocks:
|
||||
return
|
||||
except Exception as e:
|
||||
print('Error reading wallets', str(e))
|
||||
|
||||
self.delay_event.wait(1)
|
||||
raise ValueError(f'wait_for_particl_height failed http_port: {http_port}')
|
||||
|
||||
|
||||
class XmrTestBase(TestBase):
|
||||
@classmethod
|
||||
|
@ -349,23 +370,7 @@ class XmrTestBase(TestBase):
|
|||
self.update_thread = threading.Thread(target=updateThread, args=(xmr_addr1, self.delay_event, xmr_auth))
|
||||
self.update_thread.start()
|
||||
|
||||
# Wait for height, or sequencelock is thrown off by genesis blocktime
|
||||
num_blocks = 3
|
||||
logging.info('Waiting for Particl chain height %d', num_blocks)
|
||||
for i in range(60):
|
||||
if self.delay_event.is_set():
|
||||
raise ValueError('Test stopped.')
|
||||
try:
|
||||
wallets = json.loads(urlopen('http://127.0.0.1:12701/json/wallets').read())
|
||||
particl_blocks = wallets['PART']['blocks']
|
||||
print('particl_blocks', particl_blocks)
|
||||
if particl_blocks >= num_blocks:
|
||||
break
|
||||
except Exception as e:
|
||||
print('Error reading wallets', str(e))
|
||||
|
||||
self.delay_event.wait(1)
|
||||
assert particl_blocks >= num_blocks
|
||||
self.wait_for_particl_height(12701, num_blocks=3)
|
||||
|
||||
@classmethod
|
||||
def tearDownClass(cls):
|
||||
|
|
|
@ -45,9 +45,15 @@ from basicswap.rpc import (
|
|||
)
|
||||
from tests.basicswap.mnemonics import mnemonics
|
||||
import bin.basicswap_run as runSystem
|
||||
from bin.basicswap_prepare import LTC_RPC_PORT, BTC_RPC_PORT
|
||||
from tests.basicswap.common import (
|
||||
BTC_BASE_RPC_PORT,
|
||||
LTC_BASE_RPC_PORT,
|
||||
)
|
||||
|
||||
PORT_OFS = int(os.getenv('PORT_OFS', 1))
|
||||
TEST_PATH = os.path.expanduser(os.getenv('TEST_PATH', '~/test_basicswap1'))
|
||||
LITECOIN_RPC_PORT_BASE = int(os.getenv('LITECOIN_RPC_PORT_BASE', LTC_BASE_RPC_PORT))
|
||||
BITCOIN_RPC_PORT_BASE = int(os.getenv('BITCOIN_RPC_PORT_BASE', BTC_BASE_RPC_PORT))
|
||||
|
||||
logger = logging.getLogger()
|
||||
logger.level = logging.DEBUG
|
||||
|
@ -55,12 +61,12 @@ if not len(logger.handlers):
|
|||
logger.addHandler(logging.StreamHandler(sys.stdout))
|
||||
|
||||
|
||||
def callbtcnoderpc(node_id, method, params=[], wallet=None, base_rpc_port=BTC_RPC_PORT):
|
||||
def callbtcnoderpc(node_id, method, params=[], wallet=None, base_rpc_port=BITCOIN_RPC_PORT_BASE):
|
||||
auth = 'test_btc_{0}:test_btc_pwd_{0}'.format(node_id)
|
||||
return callrpc(base_rpc_port + node_id, auth, method, params, wallet)
|
||||
|
||||
|
||||
def callltcnoderpc(node_id, method, params=[], wallet=None, base_rpc_port=LTC_RPC_PORT):
|
||||
def callltcnoderpc(node_id, method, params=[], wallet=None, base_rpc_port=LITECOIN_RPC_PORT_BASE):
|
||||
auth = 'test_ltc_{0}:test_ltc_pwd_{0}'.format(node_id)
|
||||
return callrpc(base_rpc_port + node_id, auth, method, params, wallet)
|
||||
|
||||
|
@ -99,10 +105,18 @@ class Test(TestBase):
|
|||
with patch.object(sys, 'argv', testargs):
|
||||
runSystem.main()
|
||||
|
||||
def finalise(self, processes):
|
||||
self.delay_event.set()
|
||||
if self.update_thread:
|
||||
self.update_thread.join()
|
||||
for p in processes:
|
||||
p.terminate()
|
||||
for p in processes:
|
||||
p.join()
|
||||
|
||||
def test_wallet(self):
|
||||
processes = []
|
||||
|
||||
self.wait_seconds(5)
|
||||
for i in range(3):
|
||||
processes.append(multiprocessing.Process(target=self.run_thread, args=(i,)))
|
||||
processes[-1].start()
|
||||
|
@ -130,6 +144,8 @@ class Test(TestBase):
|
|||
self.update_thread = threading.Thread(target=updateThread, args=(self,))
|
||||
self.update_thread.start()
|
||||
|
||||
self.wait_for_particl_height(12701, num_blocks=3)
|
||||
|
||||
data = {
|
||||
'addr_from': '-1',
|
||||
'coin_from': 'part',
|
||||
|
@ -157,8 +173,8 @@ class Test(TestBase):
|
|||
|
||||
waitForNumBids(self.delay_event, 12700, 1)
|
||||
|
||||
waitForBidState(self.delay_event, 12700, bid_id, 'Completed')
|
||||
waitForBidState(self.delay_event, 12701, bid_id, 'Completed')
|
||||
waitForBidState(self.delay_event, 12700, bid_id, 'Completed', wait_for=120)
|
||||
waitForBidState(self.delay_event, 12701, bid_id, 'Completed', wait_for=120)
|
||||
|
||||
logging.info('Starting a new node on the same mnemonic as the first')
|
||||
prepare_node(3, self.used_mnemonics[0])
|
||||
|
@ -170,32 +186,29 @@ class Test(TestBase):
|
|||
|
||||
# TODO: Attempt to detect past swaps
|
||||
|
||||
ltc_original = read_json_api(12700, 'wallets/ltc')
|
||||
ltc_restored = read_json_api(12703, 'wallets/ltc')
|
||||
assert (float(ltc_original['balance']) + float(ltc_original['unconfirmed']) > 0.0)
|
||||
assert (float(ltc_original['balance']) + float(ltc_original['unconfirmed']) == float(ltc_restored['balance']) + float(ltc_restored['unconfirmed']))
|
||||
for coin in ('part', 'btc', 'ltc'):
|
||||
logging.info(f'Checking {coin} balance')
|
||||
original = read_json_api(12700, f'wallets/{coin}')
|
||||
restored = read_json_api(12703, f'wallets/{coin}')
|
||||
assert (float(original['balance']) + float(original['unconfirmed']) == float(restored['balance']) + float(restored['unconfirmed']))
|
||||
|
||||
wallets_original = read_json_api(12700, 'wallets')
|
||||
# TODO: After restoring a new deposit address should be generated, should be automated
|
||||
# Swaps should use a new key path, not the external path
|
||||
next_addr = read_json_api(12703, 'wallets/part/nextdepositaddr')
|
||||
next_addr = read_json_api(12700, 'wallets/part/nextdepositaddr')
|
||||
next_addr = read_json_api(12703, 'wallets/part/nextdepositaddr')
|
||||
wallets_restored = read_json_api(12703, 'wallets')
|
||||
for k, w in wallets_original.items():
|
||||
assert (w['deposit_address'] == wallets_restored[k]['deposit_address'])
|
||||
|
||||
logging.info('Test passed.')
|
||||
|
||||
except Exception:
|
||||
except Exception as e:
|
||||
traceback.print_exc()
|
||||
self.finalise(processes)
|
||||
logging.info('Test failed.')
|
||||
raise e
|
||||
|
||||
self.delay_event.set()
|
||||
if self.update_thread:
|
||||
self.update_thread.join()
|
||||
for p in processes:
|
||||
p.terminate()
|
||||
for p in processes:
|
||||
p.join()
|
||||
self.finalise(processes)
|
||||
logging.info('Test passed.')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
|
|
Loading…
Reference in a new issue