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..9853e320418 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM node:18-bullseye +FROM node:22-bookworm # Install Chrome @@ -20,62 +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 +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..5b29ce28a33 100755 --- a/ci.sh +++ b/ci.sh @@ -1,24 +1,34 @@ #!/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 | 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 # 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 + 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 else - echo "Unknown environment '$env'. Expected 'ci' or 'local'." + docker compose -f docker-compose.test.base.yml -f docker-compose.test.local.yml run --entrypoint "$2" test_runner fi -elif [ "$1" = "local" ]; then - docker compose -f docker-compose.test.base.yml -f docker-compose.test.local.yml run --entrypoint "$1" test_runner 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: 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;