From 687450fcebecc24c01333b6c9f7d3801297f82e9 Mon Sep 17 00:00:00 2001 From: Kenny Joseph Date: Tue, 14 Apr 2026 15:34:35 -0400 Subject: [PATCH 1/4] tweak docker files and ci.sh script for local BCN testing --- .gitignore | 1 + Dockerfile | 79 ++++++++++++++++++----------------- bitcore-test.config.js | 5 ++- ci.sh | 26 +++++++++++- docker-compose.test.local.yml | 4 +- docker-compose.yml | 2 +- 6 files changed, 75 insertions(+), 42 deletions(-) diff --git a/.gitignore b/.gitignore index 765e751187e..b1e7c1ebfa6 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,4 @@ Session.vim *~ ts_build bitcore-lib.js +bitcore-test.local.config.json diff --git a/Dockerfile b/Dockerfile index d56abc3e333..6da6da5df87 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:18-bullseye +FROM node:22-bookworm # Install Chrome @@ -21,61 +21,64 @@ RUN set -x \ && google-chrome --version -RUN npm i -g npm@8.19.3 +# RUN npm i -g npm@8.19.3 WORKDIR /bitcore -# Add source -COPY lerna.json ./ -COPY package*.json ./ +# # Add source +# COPY lerna.json ./ +# COPY package*.json ./ -COPY ./packages/bitcore-cli/package.json ./packages/bitcore-cli/package.json -COPY ./packages/bitcore-cli/package-lock.json ./packages/bitcore-cli/package-lock.json +# COPY ./packages/bitcore-cli/package.json ./packages/bitcore-cli/package.json +# COPY ./packages/bitcore-cli/package-lock.json ./packages/bitcore-cli/package-lock.json -COPY ./packages/bitcore-client/package.json ./packages/bitcore-client/package.json -COPY ./packages/bitcore-client/package-lock.json ./packages/bitcore-client/package-lock.json +# COPY ./packages/bitcore-client/package.json ./packages/bitcore-client/package.json +# COPY ./packages/bitcore-client/package-lock.json ./packages/bitcore-client/package-lock.json -COPY ./packages/bitcore-build/package.json ./packages/bitcore-build/package.json -COPY ./packages/bitcore-build/package-lock.json ./packages/bitcore-build/package-lock.json +# COPY ./packages/bitcore-build/package.json ./packages/bitcore-build/package.json +# COPY ./packages/bitcore-build/package-lock.json ./packages/bitcore-build/package-lock.json -COPY ./packages/bitcore-lib-cash/package.json ./packages/bitcore-lib-cash/package.json -COPY ./packages/bitcore-lib-cash/package-lock.json ./packages/bitcore-lib-cash/package-lock.json +# COPY ./packages/bitcore-lib-cash/package.json ./packages/bitcore-lib-cash/package.json +# COPY ./packages/bitcore-lib-cash/package-lock.json ./packages/bitcore-lib-cash/package-lock.json -COPY ./packages/bitcore-lib/package.json ./packages/bitcore-lib/package.json -COPY ./packages/bitcore-lib/package-lock.json ./packages/bitcore-lib/package-lock.json +# COPY ./packages/bitcore-lib/package.json ./packages/bitcore-lib/package.json +# COPY ./packages/bitcore-lib/package-lock.json ./packages/bitcore-lib/package-lock.json -COPY ./packages/bitcore-mnemonic/package.json ./packages/bitcore-mnemonic/package.json -COPY ./packages/bitcore-mnemonic/package-lock.json ./packages/bitcore-mnemonic/package-lock.json +# COPY ./packages/bitcore-mnemonic/package.json ./packages/bitcore-mnemonic/package.json +# COPY ./packages/bitcore-mnemonic/package-lock.json ./packages/bitcore-mnemonic/package-lock.json -COPY ./packages/bitcore-node/package.json ./packages/bitcore-node/package.json -COPY ./packages/bitcore-node/package-lock.json ./packages/bitcore-node/package-lock.json +# COPY ./packages/bitcore-node/package.json ./packages/bitcore-node/package.json +# COPY ./packages/bitcore-node/package-lock.json ./packages/bitcore-node/package-lock.json -COPY ./packages/bitcore-p2p-cash/package.json ./packages/bitcore-p2p-cash/package.json -COPY ./packages/bitcore-p2p-cash/package-lock.json ./packages/bitcore-p2p-cash/package-lock.json +# COPY ./packages/bitcore-p2p-cash/package.json ./packages/bitcore-p2p-cash/package.json +# COPY ./packages/bitcore-p2p-cash/package-lock.json ./packages/bitcore-p2p-cash/package-lock.json -COPY ./packages/bitcore-p2p/package.json ./packages/bitcore-p2p/package.json -COPY ./packages/bitcore-p2p/package-lock.json ./packages/bitcore-p2p/package-lock.json +# COPY ./packages/bitcore-p2p/package.json ./packages/bitcore-p2p/package.json +# COPY ./packages/bitcore-p2p/package-lock.json ./packages/bitcore-p2p/package-lock.json -COPY ./packages/bitcore-wallet-client/package.json ./packages/bitcore-wallet-client/package.json -COPY ./packages/bitcore-wallet-client/package-lock.json ./packages/bitcore-wallet-client/package-lock.json +# COPY ./packages/bitcore-wallet-client/package.json ./packages/bitcore-wallet-client/package.json +# COPY ./packages/bitcore-wallet-client/package-lock.json ./packages/bitcore-wallet-client/package-lock.json -COPY ./packages/bitcore-wallet-service/package.json ./packages/bitcore-wallet-service/package.json -COPY ./packages/bitcore-wallet-service/package-lock.json ./packages/bitcore-wallet-service/package-lock.json +# COPY ./packages/bitcore-wallet-service/package.json ./packages/bitcore-wallet-service/package.json +# COPY ./packages/bitcore-wallet-service/package-lock.json ./packages/bitcore-wallet-service/package-lock.json -COPY ./packages/crypto-wallet-core/package.json ./packages/crypto-wallet-core/package.json -COPY ./packages/crypto-wallet-core/package-lock.json ./packages/crypto-wallet-core/package-lock.json +# COPY ./packages/crypto-wallet-core/package.json ./packages/crypto-wallet-core/package.json +# COPY ./packages/crypto-wallet-core/package-lock.json ./packages/crypto-wallet-core/package-lock.json -COPY ./packages/bitcore-lib-ltc/package.json ./packages/bitcore-lib-ltc/package.json -COPY ./packages/bitcore-lib-ltc/package-lock.json ./packages/bitcore-lib-ltc/package-lock.json +# COPY ./packages/bitcore-lib-ltc/package.json ./packages/bitcore-lib-ltc/package.json +# COPY ./packages/bitcore-lib-ltc/package-lock.json ./packages/bitcore-lib-ltc/package-lock.json -COPY ./packages/bitcore-lib-doge/package.json ./packages/bitcore-lib-doge/package.json -COPY ./packages/bitcore-lib-doge/package-lock.json ./packages/bitcore-lib-doge/package-lock.json +# COPY ./packages/bitcore-lib-doge/package.json ./packages/bitcore-lib-doge/package.json +# COPY ./packages/bitcore-lib-doge/package-lock.json ./packages/bitcore-lib-doge/package-lock.json -COPY ./packages/bitcore-p2p-doge/package.json ./packages/bitcore-p2p-doge/package.json -COPY ./packages/bitcore-p2p-doge/package-lock.json ./packages/bitcore-p2p-doge/package-lock.json +# COPY ./packages/bitcore-p2p-doge/package.json ./packages/bitcore-p2p-doge/package.json +# COPY ./packages/bitcore-p2p-doge/package-lock.json ./packages/bitcore-p2p-doge/package-lock.json -RUN npm install --ignore-scripts -RUN npm run bootstrap +# RUN npm install --ignore-scripts +# RUN npm run bootstrap +# ADD . . +# RUN npm run compile + ADD . . -RUN npm run compile +RUN npm ci diff --git a/bitcore-test.config.js b/bitcore-test.config.js index 586734260b5..5c56a25fddf 100644 --- a/bitcore-test.config.js +++ b/bitcore-test.config.js @@ -1,3 +1,6 @@ +/* eslint-disable @typescript-eslint/no-require-imports */ + +const fs = require('fs'); const testConfig = require('./bitcore-test.config.json'); testConfig.bitcoreNode.chains.BTC.regtest.trustedPeers[0].host = 'bitcoin'; @@ -20,4 +23,4 @@ testConfig.bitcoreNode.chains.XRP.testnet.provider.host = 'rippled'; testConfig.bitcoreNode.chains.XRP.testnet.provider.port = 6006; testConfig.bitcoreNode.chains.XRP.testnet.provider.dataHost = 'rippled'; -module.exports = testConfig; +fs.writeFileSync('./bitcore-test.local.config.json', JSON.stringify(testConfig, null, 2)); diff --git a/ci.sh b/ci.sh index 557b171a447..74707947f16 100755 --- a/ci.sh +++ b/ci.sh @@ -3,6 +3,23 @@ # NOTE: The CI used to use this but it doesn't anymore because the CI pipeline started timing out. We moved most of the CI pipeline logic to the .circleci/config.yml file # This is still useful for local testing, though. +for arg in "$@"; do + if [ "$arg" == "--help" ] || [ "$arg" == "-h" ]; then + echo "Usage: $0 [build: ci|local | local: |chains]" + echo " build: Builds the Docker images. Optionally specify 'ci' or 'local' to build with the respective docker-compose files (defaults to 'ci')." + echo " local: Runs a command in the test_runner container using the local docker-compose configuration. The second argument is the command to run." + echo " down: Shuts down the local test environment and removes volumes." + echo "" + echo "Examples:" + echo " $0 build ci # Builds the Docker images for CI environment" + echo " $0 build local # Builds the Docker images for local environment" + echo " $0 local 'npm run ci:bitcore-node' # Runs 'npm run ci:bitcore-node' in the test_runner container using local configuration" + echo " $0 local chains # Starts the local test environment with all chains" + echo " $0 down # Shuts down the local test environment and removes volumes" + exit 0 + fi +done + if [ "$1" == "build" ]; then env="$2" if [ -z $2 ]; then @@ -16,9 +33,16 @@ if [ "$1" == "build" ]; then echo "Unknown environment '$env'. Expected 'ci' or 'local'." fi elif [ "$1" = "local" ]; then - docker compose -f docker-compose.test.base.yml -f docker-compose.test.local.yml run --entrypoint "$1" test_runner + node bitcore-test.config.js + if [ "$2" = "chains" ]; then + docker compose -f docker-compose.test.base.yml -f docker-compose.test.ci.yml up -d + else + docker compose -f docker-compose.test.base.yml -f docker-compose.test.local.yml run --entrypoint "$2" test_runner + fi elif [ "$1" = "down" ]; then docker compose -f docker-compose.test.base.yml -f docker-compose.test.local.yml down -v + docker container rm $(docker container ls -qa --filter name=bitcore-test_runner-run-*) &>/dev/null + docker rmi bitcore-test_runner:latest else echo "Missing expected parameter. The first parameter should be 'build', 'local', or 'down'." fi diff --git a/docker-compose.test.local.yml b/docker-compose.test.local.yml index 1ab02a9176a..46f163edac5 100644 --- a/docker-compose.test.local.yml +++ b/docker-compose.test.local.yml @@ -5,13 +5,15 @@ services: build: context: . dockerfile: Dockerfile + volumes: + - .:/bitcore ports: - 8100:8100 - 3000:3000 environment: - DB_HOST=db - DB_NAME=bitcore-test - - BITCORE_CONFIG_PATH=../../../../bitcore-test.config.js + - BITCORE_CONFIG_PATH=/bitcore/bitcore-test.local.config.json depends_on: - db - bitcoin diff --git a/docker-compose.yml b/docker-compose.yml index 42c55455a12..80a54bf26ff 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,6 +1,6 @@ services: database: - image: mongo:3.4-jessie + image: mongo:3.6.23-jessie ports: - 27017:27017 volumes: From cf7d075e91b8eaad574f90bb65d1ce576c1941be Mon Sep 17 00:00:00 2001 From: Kenny Joseph Date: Fri, 17 Apr 2026 18:36:57 -0400 Subject: [PATCH 2/4] feedback --- Dockerfile | 58 ------------------------------------------------------ ci.sh | 34 ++++++++++---------------------- 2 files changed, 10 insertions(+), 82 deletions(-) diff --git a/Dockerfile b/Dockerfile index 6da6da5df87..9853e320418 100644 --- a/Dockerfile +++ b/Dockerfile @@ -20,65 +20,7 @@ RUN set -x \ && npm -v \ && google-chrome --version - -# RUN npm i -g npm@8.19.3 - WORKDIR /bitcore -# # Add source -# COPY lerna.json ./ -# COPY package*.json ./ - -# COPY ./packages/bitcore-cli/package.json ./packages/bitcore-cli/package.json -# COPY ./packages/bitcore-cli/package-lock.json ./packages/bitcore-cli/package-lock.json - -# COPY ./packages/bitcore-client/package.json ./packages/bitcore-client/package.json -# COPY ./packages/bitcore-client/package-lock.json ./packages/bitcore-client/package-lock.json - -# COPY ./packages/bitcore-build/package.json ./packages/bitcore-build/package.json -# COPY ./packages/bitcore-build/package-lock.json ./packages/bitcore-build/package-lock.json - -# COPY ./packages/bitcore-lib-cash/package.json ./packages/bitcore-lib-cash/package.json -# COPY ./packages/bitcore-lib-cash/package-lock.json ./packages/bitcore-lib-cash/package-lock.json - -# COPY ./packages/bitcore-lib/package.json ./packages/bitcore-lib/package.json -# COPY ./packages/bitcore-lib/package-lock.json ./packages/bitcore-lib/package-lock.json - -# COPY ./packages/bitcore-mnemonic/package.json ./packages/bitcore-mnemonic/package.json -# COPY ./packages/bitcore-mnemonic/package-lock.json ./packages/bitcore-mnemonic/package-lock.json - -# COPY ./packages/bitcore-node/package.json ./packages/bitcore-node/package.json -# COPY ./packages/bitcore-node/package-lock.json ./packages/bitcore-node/package-lock.json - -# COPY ./packages/bitcore-p2p-cash/package.json ./packages/bitcore-p2p-cash/package.json -# COPY ./packages/bitcore-p2p-cash/package-lock.json ./packages/bitcore-p2p-cash/package-lock.json - -# COPY ./packages/bitcore-p2p/package.json ./packages/bitcore-p2p/package.json -# COPY ./packages/bitcore-p2p/package-lock.json ./packages/bitcore-p2p/package-lock.json - -# COPY ./packages/bitcore-wallet-client/package.json ./packages/bitcore-wallet-client/package.json -# COPY ./packages/bitcore-wallet-client/package-lock.json ./packages/bitcore-wallet-client/package-lock.json - -# COPY ./packages/bitcore-wallet-service/package.json ./packages/bitcore-wallet-service/package.json -# COPY ./packages/bitcore-wallet-service/package-lock.json ./packages/bitcore-wallet-service/package-lock.json - -# COPY ./packages/crypto-wallet-core/package.json ./packages/crypto-wallet-core/package.json -# COPY ./packages/crypto-wallet-core/package-lock.json ./packages/crypto-wallet-core/package-lock.json - -# COPY ./packages/bitcore-lib-ltc/package.json ./packages/bitcore-lib-ltc/package.json -# COPY ./packages/bitcore-lib-ltc/package-lock.json ./packages/bitcore-lib-ltc/package-lock.json - -# COPY ./packages/bitcore-lib-doge/package.json ./packages/bitcore-lib-doge/package.json -# COPY ./packages/bitcore-lib-doge/package-lock.json ./packages/bitcore-lib-doge/package-lock.json - -# COPY ./packages/bitcore-p2p-doge/package.json ./packages/bitcore-p2p-doge/package.json -# COPY ./packages/bitcore-p2p-doge/package-lock.json ./packages/bitcore-p2p-doge/package-lock.json - - -# RUN npm install --ignore-scripts -# RUN npm run bootstrap -# ADD . . -# RUN npm run compile - ADD . . RUN npm ci diff --git a/ci.sh b/ci.sh index 74707947f16..5b29ce28a33 100755 --- a/ci.sh +++ b/ci.sh @@ -1,38 +1,24 @@ #!/bin/bash -# NOTE: The CI used to use this but it doesn't anymore because the CI pipeline started timing out. We moved most of the CI pipeline logic to the .circleci/config.yml file -# This is still useful for local testing, though. - for arg in "$@"; do if [ "$arg" == "--help" ] || [ "$arg" == "-h" ]; then - echo "Usage: $0 [build: ci|local | local: |chains]" - echo " build: Builds the Docker images. Optionally specify 'ci' or 'local' to build with the respective docker-compose files (defaults to 'ci')." - echo " local: Runs a command in the test_runner container using the local docker-compose configuration. The second argument is the command to run." - echo " down: Shuts down the local test environment and removes volumes." + echo "Usage: $0 [build | run: |chains]" + echo " build: Builds the Docker images." + echo " run \: Runs all blockchains OR a command in the test_runner container using the local docker-compose configuration." + echo " down: Shuts down containers and removes volumes." echo "" echo "Examples:" - echo " $0 build ci # Builds the Docker images for CI environment" - echo " $0 build local # Builds the Docker images for local environment" - echo " $0 local 'npm run ci:bitcore-node' # Runs 'npm run ci:bitcore-node' in the test_runner container using local configuration" - echo " $0 local chains # Starts the local test environment with all chains" - echo " $0 down # Shuts down the local test environment and removes volumes" + echo " $0 build # Builds the Docker images for local environment" + echo " $0 run 'npm run ci:bitcore-node' # Runs 'npm run ci:bitcore-node' in the test_runner container using local configuration" + echo " $0 run chains # Starts all blockchains needed for testing" + echo " $0 down # Shuts down containers and removes volumes" exit 0 fi done if [ "$1" == "build" ]; then - env="$2" - if [ -z $2 ]; then - env="ci" - fi - if [ "$env" = "ci" ]; then - docker-compose -f docker-compose.test.base.yml -f docker-compose.test.$env.yml build - elif [ "$env" = "local" ]; then - docker compose -f docker-compose.test.base.yml -f docker-compose.test.$env.yml build - else - echo "Unknown environment '$env'. Expected 'ci' or 'local'." - fi -elif [ "$1" = "local" ]; then + docker compose -f docker-compose.test.base.yml -f docker-compose.test.local.yml build +elif [ "$1" = "run" ]; then node bitcore-test.config.js if [ "$2" = "chains" ]; then docker compose -f docker-compose.test.base.yml -f docker-compose.test.ci.yml up -d From 7edacd9fd27e1c3de62c6b05e71e3f056bc2eb1f Mon Sep 17 00:00:00 2001 From: Kenny Joseph Date: Fri, 17 Apr 2026 18:39:22 -0400 Subject: [PATCH 3/4] delete wallet before test; don't overwrite --timeout mocha param --- packages/bitcore-node/test/integration/models/wallet.test.ts | 3 ++- packages/bitcore-node/test/integration/websocket.test.ts | 4 ++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/bitcore-node/test/integration/models/wallet.test.ts b/packages/bitcore-node/test/integration/models/wallet.test.ts index 0a2c05a5565..f60ac35fbd8 100644 --- a/packages/bitcore-node/test/integration/models/wallet.test.ts +++ b/packages/bitcore-node/test/integration/models/wallet.test.ts @@ -12,7 +12,7 @@ import { intAfterHelper, intBeforeHelper } from '../../helpers/integration'; describe('Wallet Model', function() { // eslint-disable-next-line @typescript-eslint/no-this-alias const suite = this; - this.timeout(50000); + this.timeout(Math.max(this['_timeout'] || 0, 50000)); let lockedWallet: Wallet; const walletName = 'Test Wallet'; @@ -27,6 +27,7 @@ describe('Wallet Model', function() { chainConfig = config.chains[chain][network] as IUtxoNetworkConfig; creds = chainConfig.rpc; rpc = new AsyncRPC(creds.username, creds.password, creds.host, creds.port); + await Wallet.deleteWallet({ name: walletName }); await intBeforeHelper(); }); diff --git a/packages/bitcore-node/test/integration/websocket.test.ts b/packages/bitcore-node/test/integration/websocket.test.ts index 043930d4fae..8d9c3447bfb 100644 --- a/packages/bitcore-node/test/integration/websocket.test.ts +++ b/packages/bitcore-node/test/integration/websocket.test.ts @@ -40,7 +40,7 @@ describe('Websockets', function() { // eslint-disable-next-line @typescript-eslint/no-this-alias const suite = this; - this.timeout(60000); + this.timeout(Math.max(this['_timeout'] || 0, 60000)); before(async function() { chainConfig = config.chains[chain][network] as IUtxoNetworkConfig; @@ -112,7 +112,7 @@ describe('Websockets', function() { } }); - it('should get websocket events', async () => { + it.only('should get websocket events', async () => { socket.emit('room', '/BTC/regtest/inv'); let hasSeenTxEvent = false; let hasSeenBlockEvent = false; From e49f595fa3afdbe06d15a662d1d6a902aee4330c Mon Sep 17 00:00:00 2001 From: Kenny Joseph Date: Wed, 13 May 2026 12:21:19 -0400 Subject: [PATCH 4/4] rm .only --- packages/bitcore-node/test/integration/websocket.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/bitcore-node/test/integration/websocket.test.ts b/packages/bitcore-node/test/integration/websocket.test.ts index 8d9c3447bfb..0daf25a85e0 100644 --- a/packages/bitcore-node/test/integration/websocket.test.ts +++ b/packages/bitcore-node/test/integration/websocket.test.ts @@ -112,7 +112,7 @@ describe('Websockets', function() { } }); - it.only('should get websocket events', async () => { + it('should get websocket events', async () => { socket.emit('room', '/BTC/regtest/inv'); let hasSeenTxEvent = false; let hasSeenBlockEvent = false;