Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
103 commits
Select commit Hold shift + click to select a range
37cf876
feat(tests): add docker-compose infrastructure for test nodes
shamardy Dec 4, 2025
d8f614d
feat(tests): add docker test harness support for compose mode
shamardy Dec 4, 2025
43235ee
fix(tests): add required env vars to docker-compose test nodes
shamardy Dec 4, 2025
af8d5cd
feat(tests): add health checks when loading docker env metadata
shamardy Dec 4, 2025
dac3d28
ci(tests): use docker-compose for docker test nodes
shamardy Dec 4, 2025
b35eac9
docs(tests): update docker test documentation
shamardy Dec 4, 2025
9083e1b
ci(docker-tests): split SLP tests into separate feature-flagged job
shamardy Dec 4, 2025
951d36d
fix(ci): add skip env vars for SLP-only docker test job
shamardy Dec 4, 2025
b470973
fix(docker-tests): copy coin config files in compose mode
shamardy Dec 4, 2025
9316a37
fix(ci): use test filtering for SLP docker tests
shamardy Dec 4, 2025
3dadd27
fix(docker-tests): move cross-chain swap tests to separate module
shamardy Dec 4, 2025
8db6ddb
fix(docker-tests): correct volume mount paths for cosmos/sia nodes
shamardy Dec 4, 2025
3390cf1
fix(docker): remove healthchecks from Cosmos containers
shamardy Dec 4, 2025
195b52d
ci(docker-tests): split Sia tests into separate feature-flagged job
shamardy Dec 4, 2025
5a08df9
fix(docker-tests): copy ZOMBIE config in compose mode
shamardy Dec 4, 2025
f0e4d70
fix(docker): add network config arg to Sia container in compose mode
shamardy Dec 4, 2025
93384b3
fix(sia-tests): mine enough blocks for maturity in balance test
shamardy Dec 5, 2025
8864b8d
fix(docker): remove Sia persistent volume to match testcontainers beh…
shamardy Dec 5, 2025
07ee581
docs(ai): add fmt and clippy reminders to common pitfalls
shamardy Dec 5, 2025
4840604
debug(sia): add logging to diagnose CI test failure
shamardy Dec 5, 2025
fe1caa5
fix(sia-tests): add indexer delay for address balance test
shamardy Dec 5, 2025
551c208
feat(docker-tests): add ETH test split with docker-tests-eth feature
shamardy Dec 5, 2025
dca59c1
fix(docker-tests): add missing import and remove unused code in eth_d…
shamardy Dec 5, 2025
b047473
fix(docker-tests): move ETH-only helpers to eth_docker_tests module
shamardy Dec 5, 2025
d8e94cb
feat(docker-tests): add roadmap and plan for docker tests refactor an…
shamardy Dec 6, 2025
c89a444
fix(docker-tests): replace tautological assertions in watcher test
shamardy Dec 6, 2025
4bcd8aa
fix(docker-tests): use metadata RPC URL for Geth health check
shamardy Dec 6, 2025
f641ce6
fix(docker-tests): use stable path for Qtum config in compose mode
shamardy Dec 6, 2025
9b7ac8e
refactor(docker-tests): centralize metadata file path resolution
shamardy Dec 6, 2025
caf86c2
feat(docker-tests): add semantic Geth contract bytecode validation
shamardy Dec 6, 2025
0b956e4
refactor(docker-tests): add container service name constants and labe…
shamardy Dec 6, 2025
b436f31
refactor(docker-tests): centralize ETH contract address formatting wi…
shamardy Dec 6, 2025
fc68be0
refactor(docker-tests): reorganize helpers and fix critical issues
shamardy Dec 6, 2025
d92d0ee
refactor(docker-tests): move qtum_docker_node to helper layer
shamardy Dec 7, 2025
21d5547
feat(docker-tests): implement module gating with feature flags
shamardy Dec 8, 2025
ed44192
refactor(docker-tests): extract UTXO swap tests to dedicated module
shamardy Dec 8, 2025
4029351
refactor(docker-tests): extract trade preimage tests to UTXO module
shamardy Dec 9, 2025
58ed592
refactor(docker-tests): extract UTXO ordermatching tests to dedicated…
shamardy Dec 9, 2025
664e235
docs(docker-tests): sync documentation with current code state
shamardy Dec 9, 2025
12c37d0
refactor(docker-tests): extract ETH-only tests and fix test categoriz…
shamardy Dec 9, 2025
ec2edfb
refactor(docker-tests): audit and fix test module placement
shamardy Dec 9, 2025
20b9ae7
docs(docker-tests): complete Phase 2.4 feature gate verification
shamardy Dec 9, 2025
7eb4a17
ci(docker-tests): add Phase 3 CI jobs for split test suites
shamardy Dec 9, 2025
701c0fe
fix(docker-tests): gate Sia tests on docker-tests-sia feature
shamardy Dec 9, 2025
af9ca60
fix(ci): add UTXO nodes to Sia docker tests job
shamardy Dec 9, 2025
b5617aa
docs(docker-tests): document cross-dependency issues blocking Phase 3…
shamardy Dec 9, 2025
b254bc3
fix(docker-tests): add runtime guards to trade_base_rel for chain iso…
shamardy Dec 10, 2025
a5e5464
docs(docker-tests): add Phase 8 for final documentation update
shamardy Dec 10, 2025
a5789ce
docs(docker-tests): update plan with CI failure analysis and resoluti…
shamardy Dec 10, 2025
ca14021
fix(ci): add UTXO nodes to QRC20 docker tests job
shamardy Dec 10, 2025
e2122de
fix(ci): add zcash params fetch to QRC20 and Sia docker tests jobs
shamardy Dec 10, 2025
9e6f4e5
fix(docker-tests): fix swap contract address case sensitivity in ETH …
shamardy Dec 10, 2025
47d6426
refactor(swap): remove unused reward_amount field from TakerSwapMut
shamardy Dec 10, 2025
e072f61
fix(watcher): remove upper bound check for non-exact reward validation
shamardy Dec 11, 2025
7e71d59
fix(watcher): apply reward overpay factor at payment time for gas vol…
shamardy Dec 11, 2025
31060d7
refactor(swap): remove unused watcher_reward from extract_secret and …
shamardy Dec 11, 2025
d67bdbb
fix(clippy): remove unfulfilled ptr_offset_with_cast lint expectation
shamardy Dec 11, 2025
bebfbca
fix(clippy): add workarounds for Rust 1.92 unused_assignments false p…
shamardy Dec 11, 2025
99d71f8
feat(watchers): gate ETH watcher code and tests behind feature flags
shamardy Dec 12, 2025
93879c6
fix(ci): use correct env var for disabling ETH docker in watchers tests
shamardy Dec 12, 2025
768cc86
fix(watchers): gate ETH-specific code in shared test helpers behind f…
shamardy Dec 12, 2025
1aeb5f2
feat(ci): add docker-tests-all feature and remove monolithic job
shamardy Dec 12, 2025
c14d5f9
refactor(tests): extract docker test runner to dedicated module
shamardy Dec 13, 2025
64d99e5
chore(ci): remove unused _KDF_NO_*_DOCKER env vars from workflows
shamardy Dec 13, 2025
fb1e059
fix(tests): add docker-tests-integration to runner cfg gates
shamardy Dec 13, 2025
c17ce79
docs(plans): update docker-tests-split with Phase 7 validation results
shamardy Dec 13, 2025
753fc5d
refactor(docker-tests): consolidate helpers and remove ReuseMetadata …
shamardy Dec 14, 2025
c64e59e
refactor(ci): split ordermatch tests and add workflow display names
shamardy Dec 14, 2025
912a56f
refactor(ci): convert unit and integration tests to matrix jobs
shamardy Dec 14, 2025
fc7770e
refactor(ci): extract docker tests to reusable workflow
shamardy Dec 14, 2025
d9643fe
refactor(ci): use matrix for docker tests instead of reusable workflow
shamardy Dec 14, 2025
19e514d
fix(docker-tests): resolve feature gate and import errors for Sia, Or…
shamardy Dec 14, 2025
51c59f5
fix(docker-tests): ordermatch tests don't need ETH containers
shamardy Dec 14, 2025
985a96e
fix(docker-tests): add feature gates to eliminate unused item warnings
shamardy Dec 15, 2025
2763d4b
fix(docker-tests): eliminate warnings by reorganizing code
shamardy Dec 15, 2025
4d1e725
fix(docker-tests): eliminate tendermint and integration feature warnings
shamardy Dec 15, 2025
0237dff
fix(docker-tests): fix integration feature warnings and UTXO setup
shamardy Dec 15, 2025
f4fc47f
fix(docker-tests): migrate swap v2 tests from Sepolia to local Geth
shamardy Dec 16, 2025
a89b296
chore(docker-tests): migrate docker images to gleec organization
shamardy Dec 16, 2025
1a4f298
docs(docker-tests): complete Phase 7 documentation update
shamardy Dec 16, 2025
9c8ccbd
fix(docker-tests): use tolerance for QRC20 max taker vol balance check
shamardy Dec 16, 2025
ad7ebf6
chore(docker-tests): cleanup stale comments and documentation
shamardy Dec 16, 2025
cc1ee1f
refactor(docker-tests): split runner and extract SLP helpers
shamardy Dec 16, 2025
12eb5ab
refactor(docker-tests): make SLP self-contained and simplify utxo.rs
shamardy Dec 16, 2025
9d713e4
fix(tests): update extract_secret test to match new error message
shamardy Dec 16, 2025
825e8d3
Merge branch 'dev' into tests/split-docker-tests
shamardy Dec 16, 2025
2c30210
fix(tests): make test_antispam_scan_endpoints less flaky
shamardy Dec 16, 2025
cdd6d7c
test(ci): ignore flaky Electrum and orderbook sync tests
shamardy Dec 16, 2025
3111a82
fix(tests): replace fixed sleeps with condition-based polling in bloc…
shamardy Dec 16, 2025
25f2179
fix(tests): update BTC SPV starting header to Dec 2024
shamardy Dec 16, 2025
e0695ee
refactor(tests): rename docker-tests-swaps-utxo to docker-tests-swaps
shamardy Dec 31, 2025
dda7c87
test(nft): exclude flaky external API tests from WASM and ignore on n…
shamardy Jan 2, 2026
e16abb3
fix(docker): remove unused qtum-data and zombie-data volumes
shamardy Jan 2, 2026
c63f886
refactor(docker-tests): remove unnecessary fallback in resolve_compos…
shamardy Jan 2, 2026
4b90282
fix(tests): use approximate comparison in test_update_maker_order
shamardy Jan 2, 2026
2a4db4c
fix(ci): add --skip-sia to Tendermint docker tests
shamardy Jan 2, 2026
5282d49
docs(docker-tests): update setup instructions
shamardy Jan 2, 2026
3bf085e
test(coins): ignore lp_price tests requiring external API
shamardy Jan 2, 2026
f523d79
chore(ci): use consistent fetch-params permalink
shamardy Jan 2, 2026
a5339a2
revert(ci): use v0.8.1 for fetch-params (testblockchain needs sprout …
shamardy Jan 2, 2026
022423f
fix(tests): batch order removals to avoid history timeout flakiness
shamardy Jan 2, 2026
f6d4017
style(test_helpers): apply cargo fmt formatting
shamardy Jan 7, 2026
56d87ad
fix(tests): use activation addresses for ETH HD message signing test
shamardy Jan 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
222 changes: 222 additions & 0 deletions .docker/test-nodes.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,222 @@
# Docker Compose file for KDF test nodes
#
# Usage:
# Start all nodes: docker compose -f .docker/test-nodes.yml up -d
# Start specific: docker compose -f .docker/test-nodes.yml --profile utxo up -d
# Stop all: docker compose -f .docker/test-nodes.yml down -v
# View logs: docker compose -f .docker/test-nodes.yml logs -f <service>
#
# Profiles:
# - utxo: MYCOIN, MYCOIN1 (basic UTXO testing)
# - slp: FORSLP (BCH/SLP token testing)
# - qrc20: QTUM (Qtum/QRC20 testing)
# - evm: GETH (Ethereum/ERC20 testing)
# - zombie: ZOMBIE (Zcash-based testing)
# - cosmos: NUCLEUS, ATOM, IBC-RELAYER (Tendermint/IBC testing)
# - sia: SIA (Sia testing)
#
# Node groups are controlled via compose profiles (see above).
#
# For CI/local reuse:
# KDF_DOCKER_COMPOSE_ENV=1 - Test harness attaches to running containers

name: kdf-test-nodes

services:
# ============================================================================
# UTXO Test Nodes
# ============================================================================

mycoin:
image: docker.io/gleec/testblockchain:multiarch
profiles: ["utxo", "all"]
container_name: kdf-mycoin
ports:
- "8000:8000"
environment:
- CHAIN=MYCOIN
- CLIENTS=2
- COIN=Komodo
- COIN_RPC_PORT=8000
- DAEMON_URL=http://test:test@127.0.0.1:7000
- TEST_ADDY=R9imXLs1hEcU9KbFDQq2hJEEJ1P5UoekaF
- TEST_WIF=UqqW7f766rADem9heD8vSBvvrdfJb3zg5r8du9rJxPtccjWf7RG9
- TEST_PUBKEY=021607076d7a2cb148d542fb9644c04ffc22d2cca752f80755a0402a24c567b17a
volumes:
- ${ZCASH_PARAMS_PATH:-~/.zcash-params}:/root/.zcash-params:ro
healthcheck:
test: ["CMD", "curl", "-sf", "http://localhost:8000"]
interval: 5s
timeout: 3s
retries: 30
start_period: 10s

mycoin1:
image: docker.io/gleec/testblockchain:multiarch
profiles: ["utxo", "all"]
container_name: kdf-mycoin1
ports:
- "8001:8001"
environment:
- CHAIN=MYCOIN1
- CLIENTS=2
- COIN=Komodo
- COIN_RPC_PORT=8001
- DAEMON_URL=http://test:test@127.0.0.1:7000
- TEST_ADDY=R9imXLs1hEcU9KbFDQq2hJEEJ1P5UoekaF
- TEST_WIF=UqqW7f766rADem9heD8vSBvvrdfJb3zg5r8du9rJxPtccjWf7RG9
- TEST_PUBKEY=021607076d7a2cb148d542fb9644c04ffc22d2cca752f80755a0402a24c567b17a
volumes:
- ${ZCASH_PARAMS_PATH:-~/.zcash-params}:/root/.zcash-params:ro
healthcheck:
test: ["CMD", "curl", "-sf", "http://localhost:8001"]
interval: 5s
timeout: 3s
retries: 30
start_period: 10s

# ============================================================================
# BCH/SLP Test Node
# ============================================================================

forslp:
image: docker.io/gleec/testblockchain:multiarch
profiles: ["slp", "all"]
container_name: kdf-forslp
ports:
- "10000:10000"
environment:
- CHAIN=FORSLP
- CLIENTS=2
- COIN=Komodo
- COIN_RPC_PORT=10000
- DAEMON_URL=http://test:test@127.0.0.1:7000
- TEST_ADDY=R9imXLs1hEcU9KbFDQq2hJEEJ1P5UoekaF
- TEST_WIF=UqqW7f766rADem9heD8vSBvvrdfJb3zg5r8du9rJxPtccjWf7RG9
- TEST_PUBKEY=021607076d7a2cb148d542fb9644c04ffc22d2cca752f80755a0402a24c567b17a
volumes:
- ${ZCASH_PARAMS_PATH:-~/.zcash-params}:/root/.zcash-params:ro
healthcheck:
test: ["CMD", "curl", "-sf", "http://localhost:10000"]
interval: 5s
timeout: 3s
retries: 30
start_period: 10s

# ============================================================================
# Qtum/QRC20 Test Node
# ============================================================================

qtum:
image: docker.io/gleec/qtumregtest:latest
profiles: ["qrc20", "all"]
container_name: kdf-qtum
ports:
- "9000:9000"
environment:
- CLIENTS=2
- COIN_RPC_PORT=9000
- ADDRESS_LABEL=MM2_ADDRESS_LABEL
- FILL_MEMPOOL=true
healthcheck:
test: ["CMD-SHELL", "qtum-cli -rpcport=9000 getblockchaininfo || exit 1"]
interval: 5s
timeout: 3s
retries: 30
start_period: 15s

# ============================================================================
# Ethereum/Geth Dev Node
# ============================================================================

geth:
image: docker.io/ethereum/client-go:stable
profiles: ["evm", "all"]
container_name: kdf-geth
ports:
- "8545:8545"
command: ["--dev", "--http", "--http.addr=0.0.0.0", "--http.api=eth,net,web3,personal,debug", "--http.corsdomain=*"]
healthcheck:
test: ["CMD-SHELL", "wget -qO- http://localhost:8545 --post-data='{\"jsonrpc\":\"2.0\",\"method\":\"eth_blockNumber\",\"params\":[],\"id\":1}' --header='Content-Type: application/json' || exit 1"]
interval: 3s
timeout: 3s
retries: 30
start_period: 5s

# ============================================================================
# Zcash-based (Zombie) Test Node
# ============================================================================

zombie:
image: docker.io/gleec/zombietestrunner:multiarch
profiles: ["zombie", "all"]
container_name: kdf-zombie
ports:
- "7090:7090"
environment:
- COIN_RPC_PORT=7090
volumes:
- ${ZCASH_PARAMS_PATH:-~/.zcash-params}:/root/.zcash-params:ro
healthcheck:
test: ["CMD", "curl", "-sf", "http://localhost:7090"]
interval: 5s
timeout: 3s
retries: 60
start_period: 30s

# ============================================================================
# Cosmos/Tendermint Test Nodes (use host network for IBC)
# ============================================================================

nucleus:
image: docker.io/gleec/nucleusd:latest
profiles: ["cosmos", "all"]
container_name: kdf-nucleus
network_mode: host
volumes:
- ${KDF_CONTAINER_RUNTIME_DIR:-./container-runtime}/nucleus-testnet-data:/root/.nucleus

atom:
image: docker.io/gleec/gaiad:kdf-ci
profiles: ["cosmos", "all"]
container_name: kdf-atom
network_mode: host
volumes:
- ${KDF_CONTAINER_RUNTIME_DIR:-./container-runtime}/atom-testnet-data:/root/.gaia

ibc-relayer:
image: docker.io/gleec/ibc-relayer:kdf-ci
profiles: ["cosmos", "all"]
container_name: kdf-ibc-relayer
network_mode: host
volumes:
- ${KDF_CONTAINER_RUNTIME_DIR:-./container-runtime}/ibc-relayer-data:/root/.relayer
depends_on:
nucleus:
condition: service_started
atom:
condition: service_started

# ============================================================================
# Sia Test Node
# ============================================================================

sia:
image: ghcr.io/siafoundation/walletd:latest
profiles: ["sia", "all"]
container_name: kdf-sia
ports:
- "9980:9980"
environment:
- WALLETD_CONFIG_FILE=/config/walletd.yml
command: ["-network=/config/ci_network.json", "-debug"]
volumes:
- ${KDF_CONTAINER_RUNTIME_DIR:-./container-runtime}/sia-config:/config:ro
# No persistent volume for /data - use ephemeral storage like testcontainers
# to ensure fresh state each run and avoid address indexer lag issues
healthcheck:
test: ["CMD-SHELL", "wget -qO- --header='Authorization: Basic cGFzc3dvcmQ=' http://localhost:9980/api/state || exit 1"]
interval: 5s
timeout: 3s
retries: 30
start_period: 10s
Loading