test: fix Dash tests

This commit is contained in:
tecnovert
2026-06-06 20:45:01 +02:00
parent 7655f1ad81
commit 554d362a45
21 changed files with 95 additions and 93 deletions
+1 -2
View File
@@ -1,4 +1,3 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright (c) 2020-2024 tecnovert
@@ -163,7 +162,7 @@ def prepare_balance(
post_json["type_to"] = type_to
json_rv = read_json_api(
port_take_from_node,
"wallets/{}/withdraw".format(coin_ticker.lower()),
f"wallets/{coin_ticker.lower()}/withdraw",
post_json,
)
assert len(json_rv["txid"]) == 64
-1
View File
@@ -1,4 +1,3 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright (c) 2020-2024 tecnovert
+14 -11
View File
@@ -175,6 +175,7 @@ def prepareDir(datadir, nodeId, network_key, network_pubkey):
"datadir": node_dir,
"bindir": cfg.PARTICL_BINDIR,
"blocks_confirmed": 2, # Faster testing
"wallet_name": "bsx_wallet",
},
"dash": {
"connection_type": "rpc",
@@ -184,6 +185,7 @@ def prepareDir(datadir, nodeId, network_key, network_pubkey):
"bindir": DASH_BINDIR,
"use_csv": True,
"use_segwit": False,
"wallet_name": "bsx_wallet",
},
"bitcoin": {
"connection_type": "rpc",
@@ -192,6 +194,7 @@ def prepareDir(datadir, nodeId, network_key, network_pubkey):
"datadir": btcdatadir,
"bindir": cfg.BITCOIN_BINDIR,
"use_segwit": True,
"wallet_name": "bsx_wallet",
},
},
"check_progress_seconds": 2,
@@ -285,7 +288,7 @@ class Test(unittest.TestCase):
@classmethod
def setUpClass(cls):
super(Test, cls).setUpClass()
super().setUpClass()
k = PrivateKey()
cls.network_key = toWIF(PREFIX_SECRET_KEY_REGTEST, k.secret)
@@ -409,15 +412,15 @@ class Test(unittest.TestCase):
waitForRPC(dashRpc, delay_event, rpc_command="getblockchaininfo")
if len(dashRpc("listwallets")) < 1:
dashRpc("createwallet wbsx_wallet")
dashRpc("createwallet bsx_wallet")
sc.start()
waitForRPC(dashRpc, delay_event)
num_blocks = 500
logging.info("Mining %d dash blocks", num_blocks)
logging.info(f"Mining {num_blocks} dash blocks")
cls.dash_addr = dashRpc("getnewaddress mining_addr")
dashRpc("generatetoaddress {} {}".format(num_blocks, cls.dash_addr))
dashRpc(f"generatetoaddress {num_blocks} {cls.dash_addr}")
ro = dashRpc("getblockchaininfo")
try:
@@ -431,8 +434,8 @@ class Test(unittest.TestCase):
waitForRPC(btcRpc, delay_event)
cls.btc_addr = btcRpc("getnewaddress mining_addr bech32")
logging.info("Mining %d Bitcoin blocks to %s", num_blocks, cls.btc_addr)
btcRpc("generatetoaddress {} {}".format(num_blocks, cls.btc_addr))
logging.info(f"Mining {num_blocks} Bitcoin blocks to {cls.btc_addr}")
btcRpc(f"generatetoaddress {num_blocks} {cls.btc_addr}")
ro = btcRpc("getblockchaininfo")
checkForks(ro)
@@ -449,7 +452,7 @@ class Test(unittest.TestCase):
# Wait for height, or sequencelock is thrown off by genesis blocktime
num_blocks = 3
logging.info("Waiting for Particl chain height %d", num_blocks)
logging.info(f"Waiting for Particl chain height {num_blocks}")
for i in range(60):
particl_blocks = cls.swap_clients[0].callrpc("getblockcount")
print("particl_blocks", particl_blocks)
@@ -473,7 +476,7 @@ class Test(unittest.TestCase):
cls.swap_clients.clear()
cls.daemons.clear()
super(Test, cls).tearDownClass()
super().tearDownClass()
def test_02_part_dash(self):
logging.info("---------- Test PART to DASH")
@@ -683,9 +686,9 @@ class Test(unittest.TestCase):
offer_id = swap_clients[0].postOffer(
Coins.DASH,
Coins.BTC,
0.001 * COIN,
0.01 * COIN,
1.0 * COIN,
0.001 * COIN,
0.01 * COIN,
SwapTypes.SELLER_FIRST,
)
@@ -709,7 +712,7 @@ class Test(unittest.TestCase):
del swap_clients[0].getChainClientSettings(Coins.DASH)["override_feerate"]
def test_08_wallet(self):
logging.info("---------- Test {} wallet".format(self.test_coin_from.name))
logging.info(f"---------- Test {self.test_coin_from.name} wallet")
logging.info("Test withdrawal")
addr = dashRpc('getnewaddress "Withdrawal test"')
+2 -2
View File
@@ -747,14 +747,14 @@ class Test(BaseTest):
@classmethod
def tearDownClass(cls):
logging.info("Finalising Decred Test")
super(Test, cls).tearDownClass()
super().tearDownClass()
stopDaemons(cls.dcr_daemons)
cls.dcr_daemons.clear()
@classmethod
def coins_loop(cls):
super(Test, cls).coins_loop()
super().coins_loop()
ci0 = cls.swap_clients[0].ci(cls.test_coin)
num_passed: int = 0
+4 -2
View File
@@ -179,6 +179,7 @@ class Test(TestFunctions):
@classmethod
def prepareExtraCoins(cls):
super().prepareExtraCoins()
if cls.restore_instance:
void_block_rewards_pubkey = cls.getRandomPubkey()
cls.doge_addr = (
@@ -232,7 +233,7 @@ class Test(TestFunctions):
@classmethod
def tearDownClass(cls):
logging.info("Finalising DOGE Test")
super(Test, cls).tearDownClass()
super().tearDownClass()
stopDaemons(cls.doge_daemons)
cls.doge_daemons.clear()
@@ -251,11 +252,12 @@ class Test(TestFunctions):
"use_segwit": False,
"blocks_confirmed": 1,
"min_relay_fee": 0.01, # RECOMMENDED_MIN_TX_FEE
"wallet_name": "bsx_wallet",
}
@classmethod
def coins_loop(cls):
super(Test, cls).coins_loop()
super().coins_loop()
if cls.pause_chain:
return
ci0 = cls.swap_clients[0].ci(cls.test_coin)
@@ -1,7 +1,7 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright (c) 2024 The Basicswap developers
# Copyright (c) 2024-2026 The Basicswap developers
# Distributed under the MIT software license, see the accompanying
# file LICENSE or http://www.opensource.org/licenses/mit-license.php.
@@ -12,7 +12,7 @@ mkdir -p ${TEST_PATH}/bin
cp -r ~/tmp/basicswap_bin/* ${TEST_PATH}/bin
export PYTHONPATH=$(pwd)
export TEST_COINS_LIST='bitcoin,dogecoin'
python tests/basicswap/extended/test_doge.py
python tests/basicswap/extended/test_doge_with_prepare.py
"""
@@ -27,11 +27,9 @@ from tests.basicswap.extended.test_xmr_persistent import (
BaseTestWithPrepare,
UI_PORT,
)
from tests.basicswap.extended.test_scripts import (
wait_for_offers,
)
from tests.basicswap.util import (
read_json_api,
wait_for_offers,
)
logger = logging.getLogger()
@@ -50,11 +48,11 @@ def wait_for_bid(
bid = read_json_api(UI_PORT + node_id, f"bids/{bid_id}")
if "state" not in bid:
if "bid_state" not in bid:
continue
if state is None:
return
if bid["state"].lower() == state.lower():
if bid["bid_state"].lower() == state.lower():
return
raise ValueError("wait_for_bid failed")
@@ -101,8 +99,8 @@ def prepare_balance(
class DOGETest(BaseTestWithPrepare):
__test__ = True
def test_a(self):
amount_from = 10.0
offer_json = {
"coin_from": "btc",
@@ -114,10 +112,8 @@ class DOGETest(BaseTestWithPrepare):
"automation_strat_id": 1,
}
offer_id = read_json_api(UI_PORT + 0, "offers/new", offer_json)["offer_id"]
logging.debug(f"offer_id {offer_id}")
prepare_balance(self.delay_event, 1, 0, "DOGE", 1000.0)
wait_for_offers(self.delay_event, 1, 1, offer_id)
post_json = {"offer_id": offer_id, "amount_from": amount_from}
+1 -1
View File
@@ -104,7 +104,7 @@ def prepareDataDir(
fp.write("debug=1\n")
fp.write("debugexclude=libevent\n")
fp.write("fallbackfee=0.01\n")
fp.write("fallbackfee=0.0002\n")
fp.write("acceptnonstdtxn=0\n")
"""
+1 -3
View File
@@ -29,6 +29,7 @@ import unittest
from tests.basicswap.util import (
read_json_api,
waitForServer,
UI_PORT,
)
logger = logging.getLogger()
@@ -37,9 +38,6 @@ if not len(logger.handlers):
logger.addHandler(logging.StreamHandler(sys.stdout))
PORT_OFS = int(os.getenv("PORT_OFS", 1))
UI_PORT = 12700 + PORT_OFS
ELECTRUM_PATH = os.getenv("ELECTRUM_PATH")
ELECTRUM_DATADIR = os.getenv("ELECTRUM_DATADIR")
+8 -7
View File
@@ -2,7 +2,7 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2022-2023 tecnovert
# Copyright (c) 2024-2025 The Basicswap developers
# Copyright (c) 2024-2026 The Basicswap developers
# Distributed under the MIT software license, see the accompanying
# file LICENSE or http://www.opensource.org/licenses/mit-license.php.
@@ -147,6 +147,7 @@ def prepareDir(datadir, nodeId, network_key, network_pubkey):
fp.write("acceptnonstdtxn=0\n")
fp.write("minstakeinterval=5\n")
fp.write("stakethreadconddelayms=1000\n")
fp.write("smsgsregtestadjust=0\n")
for i in range(0, NUM_NODES):
@@ -293,7 +294,7 @@ class Test(unittest.TestCase):
@classmethod
def setUpClass(cls):
super(Test, cls).setUpClass()
super().setUpClass()
k = PrivateKey()
cls.network_key = toWIF(PREFIX_SECRET_KEY_REGTEST, k.secret)
@@ -473,7 +474,7 @@ class Test(unittest.TestCase):
cls.swap_clients.clear()
cls.daemons.clear()
super(Test, cls).tearDownClass()
super().tearDownClass()
def test_02_part_pivx(self):
logging.info("---------- Test PART to PIVX")
@@ -500,7 +501,7 @@ class Test(unittest.TestCase):
wait_for_in_progress(delay_event, swap_clients[1], bid_id, sent=True)
wait_for_bid(
delay_event, swap_clients[0], bid_id, BidStates.SWAP_COMPLETED, wait_for=60
delay_event, swap_clients[0], bid_id, BidStates.SWAP_COMPLETED, wait_for=80
)
wait_for_bid(
delay_event,
@@ -508,7 +509,7 @@ class Test(unittest.TestCase):
bid_id,
BidStates.SWAP_COMPLETED,
sent=True,
wait_for=60,
wait_for=80,
)
js_0 = read_json_api(1800)
@@ -548,7 +549,7 @@ class Test(unittest.TestCase):
wait_for=60,
)
wait_for_bid(
delay_event, swap_clients[1], bid_id, BidStates.SWAP_COMPLETED, wait_for=60
delay_event, swap_clients[1], bid_id, BidStates.SWAP_COMPLETED, wait_for=80
)
js_0 = read_json_api(1800)
@@ -580,7 +581,7 @@ class Test(unittest.TestCase):
wait_for_in_progress(delay_event, swap_clients[1], bid_id, sent=True)
wait_for_bid(
delay_event, swap_clients[0], bid_id, BidStates.SWAP_COMPLETED, wait_for=60
delay_event, swap_clients[0], bid_id, BidStates.SWAP_COMPLETED, wait_for=80
)
wait_for_bid(
delay_event,
+3 -17
View File
@@ -2,7 +2,7 @@
# -*- coding: utf-8 -*-
# Copyright (c) 2023-2024 tecnovert
# Copyright (c) 2024-2025 The Basicswap developers
# Copyright (c) 2024-2026 The Basicswap developers
# Distributed under the MIT software license, see the accompanying
# file LICENSE or http://www.opensource.org/licenses/mit-license.php.
@@ -36,6 +36,8 @@ from tests.basicswap.common import (
from tests.basicswap.util import (
read_json_api,
waitForServer,
wait_for_offers,
UI_PORT,
)
logger = logging.getLogger()
@@ -44,10 +46,6 @@ if not len(logger.handlers):
logger.addHandler(logging.StreamHandler(sys.stdout))
PORT_OFS = int(os.getenv("PORT_OFS", 1))
UI_PORT = 12700 + PORT_OFS
class HttpHandler(BaseHTTPRequestHandler):
def js_response(self, url_split, post_string, is_json):
@@ -131,18 +129,6 @@ def clear_offers(delay_event, node_id) -> None:
raise ValueError("clear_offers failed")
def wait_for_offers(delay_event, node_id, num_offers, offer_id=None) -> None:
logging.info(f"Waiting for {num_offers} offers on node {node_id}")
for i in range(20):
delay_event.wait(1)
offers = read_json_api(
UI_PORT + node_id, "offers" if offer_id is None else f"offers/{offer_id}"
)
if len(offers) >= num_offers:
return
raise ValueError("wait_for_offers failed")
def wait_for_bids(delay_event, node_id, num_bids, offer_id=None) -> None:
logging.info(f"Waiting for {num_bids} bids on node {node_id}")
for i in range(20):
@@ -59,6 +59,8 @@ from tests.basicswap.util import (
make_boolean,
read_json_api,
waitForServer,
PORT_OFS,
UI_PORT,
)
from tests.basicswap.common_xmr import (
prepare_nodes,
@@ -73,9 +75,6 @@ import basicswap.bin.run as runSystem
test_path = os.path.expanduser(os.getenv("TEST_PATH", "/tmp/test_persistent"))
RESET_TEST = make_boolean(os.getenv("RESET_TEST", "true"))
PORT_OFS = int(os.getenv("PORT_OFS", 1))
UI_PORT = 12700 + PORT_OFS
PARTICL_RPC_PORT_BASE = int(os.getenv("PARTICL_RPC_PORT_BASE", BASE_RPC_PORT))
BITCOIN_RPC_PORT_BASE = int(os.getenv("BITCOIN_RPC_PORT_BASE", BTC_BASE_RPC_PORT))
LITECOIN_RPC_PORT_BASE = int(os.getenv("LITECOIN_RPC_PORT_BASE", LTC_BASE_RPC_PORT))
-1
View File
@@ -1,4 +1,3 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright (c) 2020 tecnovert
-1
View File
@@ -1,4 +1,3 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright (c) 2023 tecnovert
+4 -12
View File
@@ -306,11 +306,7 @@ class TestFunctions(BaseTest):
def do_test_02_leader_recover_a_lock_tx(
self, coin_from: Coins, coin_to: Coins, lock_value: int = 32
) -> None:
logging.info(
"---------- Test {} to {} leader recovers coin a lock tx".format(
coin_from.name, coin_to.name
)
)
logging.info(f"---------- Test {coin_from.name} to {coin_to.name} leader recovers coin a lock tx")
id_offerer: int = self.node_a_id
id_bidder: int = self.node_b_id
@@ -499,23 +495,19 @@ class TestFunctions(BaseTest):
# Test manually redeeming the no-script lock tx
offerer_key = read_json_api(
1800 + id_offerer,
"bids/{}".format(bid_id.hex()),
f"bids/{bid_id.hex()}",
{"chainbkeysplit": True},
)["splitkey"]
data = {"spendchainblocktx": True, "remote_key": offerer_key}
redeemed_txid = read_json_api(
1800 + id_bidder, "bids/{}".format(bid_id.hex()), data
1800 + id_bidder, f"bids/{bid_id.hex()}", data
)["txid"]
assert len(redeemed_txid) == 64
def do_test_04_follower_recover_b_lock_tx(
self, coin_from, coin_to, lock_value: int = 32
):
logging.info(
"---------- Test {} to {} follower recovers coin b lock tx".format(
coin_from.name, coin_to.name
)
)
logging.info(f"---------- Test {coin_from.name} to {coin_to.name} follower recovers coin b lock tx")
id_offerer: int = self.node_a_id
id_bidder: int = self.node_b_id
+1 -1
View File
@@ -815,7 +815,7 @@ class BaseTest(unittest.TestCase):
.pubkey_to_address(void_block_rewards_pubkey)
)
logging.info(
"Mining %d Litecoin blocks to %s", num_blocks, cls.ltc_addr
f"Mining {num_blocks} Litecoin blocks to {cls.ltc_addr}"
)
callnoderpc(
0,
+19 -2
View File
@@ -1,4 +1,3 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# Copyright (c) 2022-2024 tecnovert
@@ -7,9 +6,15 @@
# file LICENSE.txt or http://www.opensource.org/licenses/mit-license.php.
import json
import logging
import os
import urllib
from urllib.request import urlopen
PORT_OFS = int(os.getenv("PORT_OFS", 1))
UI_PORT = 12700 + PORT_OFS
REQUIRED_SETTINGS = {
"blocks_confirmed": 1,
"conf_target": 1,
@@ -67,5 +72,17 @@ def waitForServer(delay_event, port, wait_for=40):
_ = read_json_api(port)
return
except Exception as e:
print("waitForServer, error:", str(e))
logging.error(f"waitForServer: {e}")
raise ValueError("waitForServer failed")
def wait_for_offers(delay_event, node_id, num_offers, offer_id=None) -> None:
logging.info(f"Waiting for {num_offers} offers on node {node_id}")
for i in range(20):
delay_event.wait(1)
offers = read_json_api(
UI_PORT + node_id, "offers" if offer_id is None else f"offers/{offer_id}"
)
if len(offers) >= num_offers:
return
raise ValueError("wait_for_offers failed")