diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index dec489e..c62a248 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -101,6 +101,7 @@ jobs: cp -r $BIN_DIR/* ${TEST_PATH}/bin/ pytest tests/basicswap/extended/test_encrypted_xmr_reload.py - name: Run selenium tests + id: selenium_tests run: | export TEST_PATH=/tmp/test_persistent mkdir -p ${TEST_PATH}/bin @@ -126,3 +127,8 @@ jobs: echo "Running test_swap_direction.py" python tests/basicswap/selenium/test_swap_direction.py kill $TEST_NETWORK_PID + - name: Print log file on failure + if: ${{ failure() && steps.selenium_tests.conclusion == 'failure' }} + run: | + echo "=== SELENIUM BACKGROUND LOG ===" + cat /tmp/log.txt diff --git a/tests/basicswap/selenium/test_swap_direction.py b/tests/basicswap/selenium/test_swap_direction.py index b2e8163..78051ec 100644 --- a/tests/basicswap/selenium/test_swap_direction.py +++ b/tests/basicswap/selenium/test_swap_direction.py @@ -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. @@ -23,6 +23,25 @@ if not len(logger.handlers): logger.addHandler(logging.StreamHandler(sys.stdout)) +def wait_for_balance( + port: int, + coin: str, + expect_amount: float, + balance_key: str = "balance", + iterations: int = 30, + delay_time: int = 1, +) -> None: + logger.info(f"Waiting for balance, port: {port}") + for i in range(iterations): + rv_js = read_json_api(port, f"wallets/{coin}") + if float(rv_js[balance_key]) >= expect_amount: + return + time.sleep(delay_time) + + logger.warning(f"{port} wallets/{coin} {rv_js}") + raise ValueError(f"Expect {balance_key} {expect_amount}") + + def clear_offers(port_list) -> None: logger.info(f"clear_offers {port_list}") @@ -60,7 +79,11 @@ def test_swap_dir(driver): "automation_strat_id": 1, } rv = read_json_api(node_1_port, "offers/new", offer_data) - offer_1_id = rv["offer_id"] + try: + offer_1_id = rv["offer_id"] + except Exception as e: + logger.info(f"rv: {rv}") + raise e offer_data = { "addr_from": -1, @@ -72,7 +95,13 @@ def test_swap_dir(driver): "automation_strat_id": 1, } rv = read_json_api(node_1_port, "offers/new", offer_data) - offer_2_id = rv["offer_id"] + try: + offer_2_id = rv["offer_id"] + except Exception as e: + logger.info(f"rv: {rv}") + raise e + + wait_for_balance(node_2_port, "xmr", 5.0) offer_data = { "addr_from": -1, @@ -84,7 +113,11 @@ def test_swap_dir(driver): "automation_strat_id": 1, } rv = read_json_api(node_2_port, "offers/new", offer_data) - offer_3_id = rv["offer_id"] + try: + offer_3_id = rv["offer_id"] + except Exception as e: + logger.info(f"rv: {rv}") + raise e # Wait for offers to propagate for i in range(1000):