Skip to content

feat(test): add interop test harness for CLN, LND, Eclair #204

feat(test): add interop test harness for CLN, LND, Eclair

feat(test): add interop test harness for CLN, LND, Eclair #204

name: CI Checks - CLN Integration Tests
on: [push, pull_request]
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
check-cln:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Create temporary directory for CLN data
run: echo "CLN_DATA_DIR=$(mktemp -d)" >> $GITHUB_ENV
- name: Start bitcoind, electrs, and lightningd
run: docker compose -p ldk-node -f tests/docker/docker-compose-cln.yml up -d
- name: Wait for bitcoind to be healthy
run: |
for i in $(seq 1 30); do
if docker compose -p ldk-node -f tests/docker/docker-compose-cln.yml exec bitcoin bitcoin-cli -regtest -rpcuser=user -rpcpassword=pass getblockchaininfo > /dev/null 2>&1; then
echo "bitcoind is ready"
exit 0
fi
echo "Waiting for bitcoind... ($i/30)"
sleep 2
done
echo "ERROR: bitcoind not ready"
exit 1
- name: Mine initial block for CLN
run: |
docker compose -p ldk-node -f tests/docker/docker-compose-cln.yml exec bitcoin bitcoin-cli -regtest -rpcuser=user -rpcpassword=pass createwallet miner
ADDR=$(docker compose -p ldk-node -f tests/docker/docker-compose-cln.yml exec bitcoin bitcoin-cli -regtest -rpcuser=user -rpcpassword=pass -rpcwallet=miner getnewaddress)
docker compose -p ldk-node -f tests/docker/docker-compose-cln.yml exec bitcoin bitcoin-cli -regtest -rpcuser=user -rpcpassword=pass generatetoaddress 1 "$ADDR"
docker compose -p ldk-node -f tests/docker/docker-compose-cln.yml exec bitcoin bitcoin-cli -regtest -rpcuser=user -rpcpassword=pass unloadwallet miner
- name: Start lightningd
run: docker compose -p ldk-node -f tests/docker/docker-compose-cln.yml up -d cln
env:
CLN_DATA_DIR: ${{ env.CLN_DATA_DIR }}
- name: Wait for CLN to be ready
run: |
for i in $(seq 1 30); do
if docker compose -p ldk-node -f tests/docker/docker-compose-cln.yml exec cln test -S /root/.lightning/regtest/lightning-rpc 2>/dev/null; then
echo "CLN RPC socket found"
break
fi
echo "Waiting for CLN RPC socket... ($i/30)"
sleep 2
done
docker compose -p ldk-node -f tests/docker/docker-compose-cln.yml exec cln test -S /root/.lightning/regtest/lightning-rpc || {
echo "ERROR: CLN RPC socket not found after 60 seconds"
docker compose -p ldk-node -f tests/docker/docker-compose-cln.yml logs cln
exit 1
}
- name: Set permissions for CLN data directory
run: |
sudo chown -R $(id -u):$(id -g) $CLN_DATA_DIR
sudo chmod -R u+rwX,go+rX $CLN_DATA_DIR
env:
CLN_DATA_DIR: ${{ env.CLN_DATA_DIR }}
- name: Run CLN integration tests
run: CLN_SOCKET_PATH=$CLN_DATA_DIR/regtest/lightning-rpc
RUSTFLAGS="--cfg cln_test" cargo test --test integration_tests_cln -- --show-output --test-threads=1
env:
CLN_DATA_DIR: ${{ env.CLN_DATA_DIR }}