Bnc to eth tests, artifacts processing in circleci config
This commit is contained in:
parent
13c0734691
commit
876f09f312
|
@ -67,6 +67,22 @@ orbs:
|
||||||
- run:
|
- run:
|
||||||
name: "Load tss image from archive"
|
name: "Load tss image from archive"
|
||||||
command: docker load -i ./workspace/tss.tar.gz
|
command: docker load -i ./workspace/tss.tar.gz
|
||||||
|
save_docker_logs:
|
||||||
|
description: "A very simple command for demonstration purposes"
|
||||||
|
parameters:
|
||||||
|
validator:
|
||||||
|
type: integer
|
||||||
|
default: 1
|
||||||
|
steps:
|
||||||
|
- run: |
|
||||||
|
mkdir -p ./artifacts/logs/validator<< parameters.validator >>
|
||||||
|
docker logs validator<< parameters.validator >>_rabbitmq_1 ./artifacts/logs/validator<< parameters.validator >>/rabbitmq.log
|
||||||
|
docker logs validator<< parameters.validator >>_redis_1 ./artifacts/logs/validator<< parameters.validator >>/redis.log
|
||||||
|
docker logs validator<< parameters.validator >>_proxy_1 ./artifacts/logs/validator<< parameters.validator >>/proxy.log
|
||||||
|
docker logs validator<< parameters.validator >>_eth-watcher_1 ./artifacts/logs/validator<< parameters.validator >>/eth-watcher.log
|
||||||
|
docker logs validator<< parameters.validator >>_bnc-watcher_1 ./artifacts/logs/validator<< parameters.validator >>/bnc-watcher.log
|
||||||
|
docker logs validator<< parameters.validator >>_signer_1 ./artifacts/logs/validator<< parameters.validator >>/signer.log
|
||||||
|
docker logs validator<< parameters.validator >>_keygen_1 ./artifacts/logs/validator<< parameters.validator >>/keygen.log
|
||||||
jobs:
|
jobs:
|
||||||
init_tss:
|
init_tss:
|
||||||
executor: bridge/node-dev
|
executor: bridge/node-dev
|
||||||
|
@ -88,7 +104,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: "Run dev environment, deploy contracts, prefund accounts"
|
name: "Run dev environment, deploy contracts, prefund accounts"
|
||||||
command: |
|
command: |
|
||||||
./demo/start-environment.sh
|
BLOCK_TIME=1 ./demo/start-environment.sh
|
||||||
cat ./tests/config.json | jq .users[].ethAddress | xargs -I {} ./src/test-services/ethereumSend/run.sh {} 100
|
cat ./tests/config.json | jq .users[].ethAddress | xargs -I {} ./src/test-services/ethereumSend/run.sh {} 100
|
||||||
- run:
|
- run:
|
||||||
name: "Stop dev environment"
|
name: "Stop dev environment"
|
||||||
|
@ -111,7 +127,7 @@ jobs:
|
||||||
- run:
|
- run:
|
||||||
name: "Init tests environment"
|
name: "Init tests environment"
|
||||||
command: |
|
command: |
|
||||||
./demo/start-environment.sh
|
BLOCK_TIME=3 ./demo/start-environment.sh
|
||||||
N=1 ./demo/validator-demo.sh -d
|
N=1 ./demo/validator-demo.sh -d
|
||||||
N=2 ./demo/validator-demo.sh -d
|
N=2 ./demo/validator-demo.sh -d
|
||||||
N=3 ./demo/validator-demo.sh -d
|
N=3 ./demo/validator-demo.sh -d
|
||||||
|
@ -125,7 +141,7 @@ jobs:
|
||||||
name: "Build and prepare tests container"
|
name: "Build and prepare tests container"
|
||||||
command: |
|
command: |
|
||||||
docker build -t tests ./tests
|
docker build -t tests ./tests
|
||||||
docker create --rm -e HOME_RPC_URL --name tests tests $@
|
docker create --rm --env-file ./tests/.env -e FOREIGN_PRIVATE_KEY --name tests tests
|
||||||
docker network connect blockchain_side tests
|
docker network connect blockchain_side tests
|
||||||
docker network connect blockchain_home tests
|
docker network connect blockchain_home tests
|
||||||
docker network connect validator1_test_network tests
|
docker network connect validator1_test_network tests
|
||||||
|
@ -135,9 +151,23 @@ jobs:
|
||||||
HOME_RPC_URL: 'http://ganache_home:8545'
|
HOME_RPC_URL: 'http://ganache_home:8545'
|
||||||
- run:
|
- run:
|
||||||
name: "Run tests"
|
name: "Run tests"
|
||||||
|
command: docker start -a tests
|
||||||
|
- run:
|
||||||
|
name: "Save tests results"
|
||||||
command: |
|
command: |
|
||||||
docker start -a tests
|
mkdir -p ./artifacts/test_results/mocha
|
||||||
docker cp "tests:/tests/results.xml" "./tests/results.xml"
|
docker cp "tests:/tests/results.xml" "./artifacts/test_results/mocha/results.xml"
|
||||||
|
when: always
|
||||||
|
- store_test_results:
|
||||||
|
path: ./artifacts/test_results/mocha
|
||||||
|
- bridge/save_docker_logs:
|
||||||
|
validator: 1
|
||||||
|
- bridge/save_docker_logs:
|
||||||
|
validator: 2
|
||||||
|
- bridge/save_docker_logs:
|
||||||
|
validator: 3
|
||||||
|
- store_artifacts:
|
||||||
|
path: ./artifacts
|
||||||
workflows:
|
workflows:
|
||||||
version: 2
|
version: 2
|
||||||
main:
|
main:
|
||||||
|
|
|
@ -18,3 +18,4 @@ src/deploy/.keys.staging
|
||||||
src/test-services/.keys.staging
|
src/test-services/.keys.staging
|
||||||
src/test-services/.keys.development
|
src/test-services/.keys.development
|
||||||
test.js
|
test.js
|
||||||
|
tests/results.xml
|
||||||
|
|
|
@ -7,6 +7,7 @@ cd ..
|
||||||
|
|
||||||
# either development or staging
|
# either development or staging
|
||||||
TARGET_NETWORK=${TARGET_NETWORK:=development}
|
TARGET_NETWORK=${TARGET_NETWORK:=development}
|
||||||
|
BLOCK_TIME=${BLOCK_TIME:=3}
|
||||||
|
|
||||||
DEPLOY_DIR="`pwd`/src/deploy"
|
DEPLOY_DIR="`pwd`/src/deploy"
|
||||||
TEST_SERVICES_DIR="`pwd`/src/test-services"
|
TEST_SERVICES_DIR="`pwd`/src/test-services"
|
||||||
|
@ -21,7 +22,7 @@ start_dev_blockchain_networks() {
|
||||||
docker run -d --network blockchain_side --rm --name ganache_side -v "ganache_side_data:/app/db" \
|
docker run -d --network blockchain_side --rm --name ganache_side -v "ganache_side_data:/app/db" \
|
||||||
-p "7545:8545" \
|
-p "7545:8545" \
|
||||||
trufflesuite/ganache-cli:latest \
|
trufflesuite/ganache-cli:latest \
|
||||||
-m "shrug dwarf easily blade trigger lucky reopen cage lake scatter desk boat" -i 33 -q --db /app/db -b 3 --noVMErrorsOnRPCResponse
|
-m "shrug dwarf easily blade trigger lucky reopen cage lake scatter desk boat" -i 33 -q --db /app/db -b "$BLOCK_TIME" --noVMErrorsOnRPCResponse
|
||||||
|
|
||||||
echo "Starting home test blockchain"
|
echo "Starting home test blockchain"
|
||||||
|
|
||||||
|
@ -31,7 +32,7 @@ start_dev_blockchain_networks() {
|
||||||
docker run -d --network blockchain_home --rm --name ganache_home -v "ganache_home_data:/app/db" \
|
docker run -d --network blockchain_home --rm --name ganache_home -v "ganache_home_data:/app/db" \
|
||||||
-p "8545:8545" \
|
-p "8545:8545" \
|
||||||
trufflesuite/ganache-cli:latest \
|
trufflesuite/ganache-cli:latest \
|
||||||
-m "shrug dwarf easily blade trigger lucky reopen cage lake scatter desk boat" -i 44 -q --db /app/db -b 3 --noVMErrorsOnRPCResponse
|
-m "shrug dwarf easily blade trigger lucky reopen cage lake scatter desk boat" -i 44 -q --db /app/db -b "$BLOCK_TIME" --noVMErrorsOnRPCResponse
|
||||||
|
|
||||||
sleep 4
|
sleep 4
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
HOME_RPC_URL=http://ganache_home:8545
|
||||||
|
HOME_BRIDGE_ADDRESS=0x44c158FE850821ae69DaF37AADF5c539e9d0025B
|
||||||
|
HOME_TOKEN_ADDRESS=0xd5fE0D28e058D375b0b038fFbB446Da37E85fFdc
|
||||||
|
|
||||||
|
FOREIGN_URL=https://testnet-dex.binance.org/
|
||||||
|
FOREIGN_CHAIN_ID=Binance-Chain-Nile
|
||||||
|
FOREIGN_ASSET=KFT-94F
|
|
@ -1,3 +1,3 @@
|
||||||
reporter: spec
|
reporter: mocha-multi-reporters
|
||||||
reporter-option:
|
reporter-option:
|
||||||
- mochaFile=./results.xml
|
- configFile=./reportersConfig.json
|
||||||
|
|
|
@ -2,7 +2,7 @@ FROM node:10.16.0-alpine
|
||||||
|
|
||||||
WORKDIR /tests
|
WORKDIR /tests
|
||||||
|
|
||||||
RUN npm install -g mocha mocha-junit-reporter
|
RUN npm install -g mocha mocha-junit-reporter mocha-multi-reporters
|
||||||
|
|
||||||
RUN apk update && apk add libssl1.1 eudev-dev libressl-dev curl build-base python linux-headers libusb-dev
|
RUN apk update && apk add libssl1.1 eudev-dev libressl-dev curl build-base python linux-headers libusb-dev
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ COPY ./package.json .
|
||||||
|
|
||||||
RUN npm install
|
RUN npm install
|
||||||
|
|
||||||
COPY config.json .mocharc.yml ./
|
COPY config.json .mocharc.yml reportersConfig.json ./
|
||||||
COPY test ./test
|
COPY test ./test
|
||||||
|
|
||||||
ENTRYPOINT ["mocha"]
|
ENTRYPOINT ["mocha"]
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"reporterEnabled": "spec, mocha-junit-reporter",
|
||||||
|
"mochaJunitReporterReporterOptions": {
|
||||||
|
"mochaFile": "./results.xml"
|
||||||
|
}
|
||||||
|
}
|
16
tests/run.sh
16
tests/run.sh
|
@ -4,18 +4,10 @@ set -e
|
||||||
|
|
||||||
docker build -t tests ./tests
|
docker build -t tests ./tests
|
||||||
|
|
||||||
set -a
|
docker rm tests > /dev/null 2>&1 || true
|
||||||
source ./demo/validator1/.env.development
|
|
||||||
set +a
|
|
||||||
|
|
||||||
docker rm tests || true
|
|
||||||
docker create --name tests \
|
docker create --name tests \
|
||||||
-e HOME_RPC_URL \
|
--env-file ./tests/.env \
|
||||||
-e FOREIGN_URL \
|
|
||||||
-e HOME_BRIDGE_ADDRESS \
|
|
||||||
-e HOME_TOKEN_ADDRESS \
|
|
||||||
-e FOREIGN_PRIVATE_KEY \
|
-e FOREIGN_PRIVATE_KEY \
|
||||||
-e FOREIGN_ASSET \
|
|
||||||
tests $@
|
tests $@
|
||||||
|
|
||||||
docker network connect blockchain_home tests
|
docker network connect blockchain_home tests
|
||||||
|
@ -25,5 +17,5 @@ docker network connect validator3_test_network tests
|
||||||
|
|
||||||
docker start -a tests || true
|
docker start -a tests || true
|
||||||
|
|
||||||
docker cp "tests:/tests/results.xml" "./tests/results.xml" || true
|
docker cp "tests:/tests/results.xml" "./tests/results.xml" > /dev/null 2>&1 || true
|
||||||
docker rm tests || true
|
docker rm tests > /dev/null 2>&1 || true
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
const { delay } = require('./utils/wait')
|
||||||
|
|
||||||
|
module.exports = (usersFunc, foreignBridgeAddressFunc) => {
|
||||||
|
describe('exchange of tokens in bnc => eth direction', function () {
|
||||||
|
let users
|
||||||
|
let foreignBridgeAddress
|
||||||
|
let ethBalances
|
||||||
|
|
||||||
|
before(async function () {
|
||||||
|
this.timeout(60000)
|
||||||
|
users = usersFunc()
|
||||||
|
foreignBridgeAddress = foreignBridgeAddressFunc()
|
||||||
|
ethBalances = await Promise.all(users.map(user => user.getEthBalance()))
|
||||||
|
|
||||||
|
await Promise.all(users.map((user, i) => user.exchangeBnc(foreignBridgeAddress, 3 + i)))
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should make coorect exchange transactions on eth side', async function () {
|
||||||
|
this.timeout(60000)
|
||||||
|
for (let i = 0; i < 3; i++) {
|
||||||
|
do {
|
||||||
|
const user = users[i]
|
||||||
|
const newEthBalance = await user.getEthBalance()
|
||||||
|
if (newEthBalance === ethBalances[i] + 3 + i) {
|
||||||
|
break
|
||||||
|
}
|
||||||
|
delay(500)
|
||||||
|
} while (true)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
|
@ -1,26 +1,27 @@
|
||||||
const assert = require('assert')
|
const assert = require('assert')
|
||||||
const createUser = require('./utils/user')
|
|
||||||
const { getSequence } = require('./utils/bncController')
|
const { getSequence } = require('./utils/bncController')
|
||||||
const { waitPromise, delay } = require('./utils/wait')
|
const { waitPromise } = require('./utils/wait')
|
||||||
|
|
||||||
const usersConfig = require('../config').users
|
const usersConfig = require('../config').users
|
||||||
|
|
||||||
const { HOME_BRIDGE_ADDRESS } = process.env
|
const { HOME_BRIDGE_ADDRESS } = process.env
|
||||||
|
|
||||||
module.exports = (foreignBridgeAddress) => {
|
module.exports = (usersFunc, foreignBridgeAddressFunc) => {
|
||||||
describe('exchanges tokens in eth => bnc direction', function () {
|
describe('exchange of tokens in eth => bnc direction', function () {
|
||||||
|
let users
|
||||||
|
let foreignBridgeAddress
|
||||||
let ethBalances
|
let ethBalances
|
||||||
let bncBalances
|
let bncBalances
|
||||||
let bncBridgeSequence
|
let bncBridgeSequence
|
||||||
let users
|
|
||||||
|
|
||||||
before(async function () {
|
before(async function () {
|
||||||
this.timeout(60000)
|
this.timeout(60000)
|
||||||
users = await usersConfig.seqMap(user => createUser(user.privateKey))
|
users = usersFunc()
|
||||||
|
foreignBridgeAddress = foreignBridgeAddressFunc()
|
||||||
ethBalances = await Promise.all(users.map(user => user.getEthBalance()))
|
ethBalances = await Promise.all(users.map(user => user.getEthBalance()))
|
||||||
bncBalances = await users.seqMap(user => user.getBncBalance())
|
bncBalances = await users.seqMap(user => user.getBncBalance())
|
||||||
|
|
||||||
bncBridgeSequence = await getSequence(foreignBridgeAddress())
|
bncBridgeSequence = await getSequence(foreignBridgeAddress)
|
||||||
await Promise.all(users.map((user, i) => user.approveEth(HOME_BRIDGE_ADDRESS, 5 + i)))
|
await Promise.all(users.map((user, i) => user.approveEth(HOME_BRIDGE_ADDRESS, 5 + i)))
|
||||||
})
|
})
|
||||||
|
|
||||||
|
@ -31,12 +32,11 @@ module.exports = (foreignBridgeAddress) => {
|
||||||
for (let i = 0; i < 3; i++) {
|
for (let i = 0; i < 3; i++) {
|
||||||
assert(newEthBalances[i] === ethBalances[i] - 5 - i, `Balance of ${usersConfig[i].ethAddress} did not updated as expected`)
|
assert(newEthBalances[i] === ethBalances[i] - 5 - i, `Balance of ${usersConfig[i].ethAddress} did not updated as expected`)
|
||||||
}
|
}
|
||||||
ethBalances = newEthBalances
|
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should make exchange transaction on bnc side', async function () {
|
it('should make exchange transaction on bnc side', async function () {
|
||||||
this.timeout(300000)
|
this.timeout(300000)
|
||||||
await waitPromise(() => getSequence(foreignBridgeAddress()), sequence => sequence === bncBridgeSequence + 1)
|
await waitPromise(() => getSequence(foreignBridgeAddress), sequence => sequence === bncBridgeSequence + 1)
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should make correct exchange transaction', async function () {
|
it('should make correct exchange transaction', async function () {
|
||||||
|
@ -45,7 +45,6 @@ module.exports = (foreignBridgeAddress) => {
|
||||||
for (let i = 0; i < 3; i++) {
|
for (let i = 0; i < 3; i++) {
|
||||||
assert(newBncBalances[i] === bncBalances[i] + 5 + i, `Balance of ${usersConfig[i].bncAddress} did not updated as expected`)
|
assert(newBncBalances[i] === bncBalances[i] + 5 + i, `Balance of ${usersConfig[i].bncAddress} did not updated as expected`)
|
||||||
}
|
}
|
||||||
bncBalances = newBncBalances
|
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,30 +3,41 @@ const createUser = require('./utils/user')
|
||||||
const { waitPromise } = require('./utils/wait')
|
const { waitPromise } = require('./utils/wait')
|
||||||
|
|
||||||
const testEthToBnc = require('./ethToBnc')
|
const testEthToBnc = require('./ethToBnc')
|
||||||
|
const testBncToEth = require('./bncToEth')
|
||||||
|
|
||||||
|
const usersConfig = require('../config').users
|
||||||
|
|
||||||
const { FOREIGN_PRIVATE_KEY } = process.env
|
const { FOREIGN_PRIVATE_KEY } = process.env
|
||||||
|
|
||||||
let user
|
|
||||||
|
|
||||||
let { getInfo } = createController(1)
|
let { getInfo } = createController(1)
|
||||||
|
|
||||||
|
describe('bridge tests', function () {
|
||||||
|
let users
|
||||||
|
let foreignPrefundedUser
|
||||||
let info
|
let info
|
||||||
|
|
||||||
describe('generates initial epoch keys', function () {
|
|
||||||
before(async function() {
|
before(async function() {
|
||||||
this.timeout(60000)
|
this.timeout(60000)
|
||||||
user = await createUser(FOREIGN_PRIVATE_KEY)
|
users = await usersConfig.seqMap(user => createUser(user.privateKey))
|
||||||
})
|
})
|
||||||
|
|
||||||
it('should generate keys in 2 min', async function () {
|
describe('generation of initial epoch keys', function () {
|
||||||
|
before(async function () {
|
||||||
|
this.timeout(60000)
|
||||||
|
foreignPrefundedUser = await createUser(FOREIGN_PRIVATE_KEY)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('should generate keys', async function () {
|
||||||
this.timeout(120000)
|
this.timeout(120000)
|
||||||
info = await waitPromise(getInfo, info => info.epoch === 1)
|
info = await waitPromise(getInfo, info => info.epoch === 1)
|
||||||
})
|
})
|
||||||
|
|
||||||
after(async function () {
|
after(async function () {
|
||||||
this.timeout(60000)
|
this.timeout(60000)
|
||||||
await user.transferBnc(info.foreignBridgeAddress, 50, 0.1)
|
await foreignPrefundedUser.transferBnc(info.foreignBridgeAddress, 50, 0.1)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
testEthToBnc(() => info.foreignBridgeAddress)
|
testEthToBnc(() => users, () => info.foreignBridgeAddress)
|
||||||
|
testBncToEth(() => users, () => info.foreignBridgeAddress)
|
||||||
|
})
|
||||||
|
|
|
@ -30,19 +30,12 @@ module.exports = async function (privateKey) {
|
||||||
await tx.wait()
|
await tx.wait()
|
||||||
},
|
},
|
||||||
approveEth: async function (to, value) {
|
approveEth: async function (to, value) {
|
||||||
console.log('approving', to, value)
|
|
||||||
const tx = await token.approve(to, '0x' + (new BN(value).multipliedBy(10 ** 18).toString(16)), txOptions)
|
const tx = await token.approve(to, '0x' + (new BN(value).multipliedBy(10 ** 18).toString(16)), txOptions)
|
||||||
console.log('sent', tx)
|
|
||||||
await tx.wait()
|
await tx.wait()
|
||||||
console.log('done')
|
|
||||||
console.log(await token.allowance(ethAddress, to))
|
|
||||||
},
|
},
|
||||||
exchangeEth: async function (value) {
|
exchangeEth: async function (value) {
|
||||||
console.log(value)
|
|
||||||
const tx = await bridge.exchange('0x' + (new BN(value).multipliedBy(10 ** 18).toString(16)), txOptions)
|
const tx = await bridge.exchange('0x' + (new BN(value).multipliedBy(10 ** 18).toString(16)), txOptions)
|
||||||
console.log(tx)
|
|
||||||
await tx.wait()
|
await tx.wait()
|
||||||
console.log('done')
|
|
||||||
},
|
},
|
||||||
getBncBalance: async function () {
|
getBncBalance: async function () {
|
||||||
const balance = await getBalance(bncAddress)
|
const balance = await getBalance(bncAddress)
|
||||||
|
|
Loading…
Reference in New Issue