Skip to content

Commit

Permalink
Merge pull request #17 from eosnetworkfoundation/gh-11-integration-test
Browse files Browse the repository at this point in the history
eos-evm-node repo integration test
  • Loading branch information
oschwaldp-oci authored Aug 4, 2023
2 parents 4331808 + 41ed154 commit 099bca9
Show file tree
Hide file tree
Showing 19 changed files with 852 additions and 169 deletions.
18 changes: 18 additions & 0 deletions .cicd/defaults.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"leap-dev":{
"target":"4",
"prerelease":false
},
"leap":{
"target":"4",
"prerelease":false
},
"cdt":{
"target":"3.1.0",
"prerelease":false
},
"eos-evm-contract":{
"target":"main",
"prerelease":false
}
}
2 changes: 1 addition & 1 deletion .github/workflows/build-node.sh
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,6 @@ ee make -j "$(nproc)"

# pack
ee popd
ee 'tar -czf build.tar.gz build/*'
ee 'tar -czf build.tar.gz --exclude="*.o" build/*'

echo "Done! - ${0##*/}"
237 changes: 232 additions & 5 deletions .github/workflows/node.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,46 @@ on:
pull_request:
workflow_dispatch:
inputs:
upload-artifacts:
description: 'Upload artifacts, including the build.tar.gz, for debugging.'
type: boolean
default: false
override-leap-dev:
description: Override leap-dev target
type: string
override-leap-dev-prerelease:
type: choice
description: Override leap-dev prelease
options:
- default
- true
- false
override-leap:
description: Override leap target
type: string
override-leap-prerelease:
type: choice
description: Override leap prelease
options:
- default
- true
- false
override-cdt:
description: 'Override cdt target'
type: string
override-cdt-prerelease:
type: choice
description: Override cdt prelease
options:
- default
- true
- false
override-eos-evm-contract:
description: 'Override eos-evm-contract target'
type: string
override-eos-evm-contract-prerelease:
type: choice
description: Override eos-evm-contract prelease
options:
- default
- true
- false

defaults:
run:
Expand Down Expand Up @@ -106,7 +142,198 @@ jobs:

- name: Upload Artifacts
uses: actions/upload-artifact@v3
if: inputs.upload-artifacts || false
with:
name: build.tar.gz
path: build.tar.gz

versions:
name: Determine Versions
runs-on: ubuntu-latest
outputs:
leap-dev-target: ${{steps.versions.outputs.leap-dev-target}}
leap-dev-prerelease: ${{steps.versions.outputs.leap-dev-prerelease}}
leap-target: ${{steps.versions.outputs.leap-target}}
leap-prerelease: ${{steps.versions.outputs.leap-prerelease}}
cdt-target: ${{steps.versions.outputs.cdt-target}}
cdt-prerelease: ${{steps.versions.outputs.cdt-prerelease}}
eos-evm-contract-target: ${{steps.versions.outputs.eos-evm-contract-target}}
eos-evm-contract-prerelease: ${{steps.versions.outputs.eos-evm-contract-prerelease}}
steps:
- name: Setup versions from input or defaults
id: versions
env:
GH_TOKEN: ${{secrets.GITHUB_TOKEN}}
run: |
DEFAULTS_JSON=$(curl -sSfL $(gh api https://api.github.com/repos/${{github.repository}}/contents/.cicd/defaults.json?ref=${{github.sha}} --jq .download_url))
echo leap-dev-target=$(echo "$DEFAULTS_JSON" | jq -r '."leap-dev".target') >> $GITHUB_OUTPUT
echo leap-dev-prerelease=$(echo "$DEFAULTS_JSON" | jq -r '."leap-dev".prerelease') >> $GITHUB_OUTPUT
echo leap-target=$(echo "$DEFAULTS_JSON" | jq -r '."leap".target') >> $GITHUB_OUTPUT
echo leap-prerelease=$(echo "$DEFAULTS_JSON" | jq -r '."leap".prerelease') >> $GITHUB_OUTPUT
echo cdt-target=$(echo "$DEFAULTS_JSON" | jq -r '."cdt".target') >> $GITHUB_OUTPUT
echo cdt-prerelease=$(echo "$DEFAULTS_JSON" | jq -r '."cdt".prerelease') >> $GITHUB_OUTPUT
echo eos-evm-contract-target=$(echo "$DEFAULTS_JSON" | jq -r '."eos-evm-contract".target') >> $GITHUB_OUTPUT
echo eos-evm-contract-prerelease=$(echo "$DEFAULTS_JSON" | jq -r '."eos-evm-contract".prerelease') >> $GITHUB_OUTPUT
if [[ "${{inputs.override-leap-dev}}" != "" ]]; then
echo leap-dev-target=${{inputs.override-leap-dev}} >> $GITHUB_OUTPUT
fi
if [[ "${{inputs.override-leap-dev-prerelease}}" == +(true|false) ]]; then
echo leap-dev-prerelease=${{inputs.override-leap-dev-prerelease}} >> $GITHUB_OUTPUT
fi
if [[ "${{inputs.override-leap}}" != "" ]]; then
echo leap-target=${{inputs.override-leap}} >> $GITHUB_OUTPUT
fi
if [[ "${{inputs.override-leap-prerelease}}" == +(true|false) ]]; then
echo leap-prerelease=${{inputs.override-leap-prerelease}} >> $GITHUB_OUTPUT
fi
if [[ "${{inputs.override-cdt}}" != "" ]]; then
echo cdt-target=${{inputs.override-cdt}} >> $GITHUB_OUTPUT
fi
if [[ "${{inputs.override-cdt-prerelease}}" == +(true|false) ]]; then
echo cdt-prerelease=${{inputs.override-cdt-prerelease}} >> $GITHUB_OUTPUT
fi
if [[ "${{inputs.override-eos-evm-contract}}" != "" ]]; then
echo eos-evm-contract-target=${{inputs.override-eos-evm-contract}} >> $GITHUB_OUTPUT
fi
if [[ "${{inputs.override-eos-evm-contract-prerelease}}" == +(true|false) ]]; then
echo eos-evm-contract-prerelease=${{inputs.override-eos-evm-contract-prerelease}} >> $GITHUB_OUTPUT
fi
integration-test:
name: EOS EVM Integration Tests
needs: [d, build, versions]
if: always() && needs.d.result == 'success' && needs.build.result == 'success' && needs.versions.result == 'success'
strategy:
fail-fast: false
matrix:
platform: [ ubuntu22 ]
runs-on: ubuntu-latest
container: ${{fromJSON(needs.d.outputs.p)[matrix.platform].image}}
env:
CC: gcc-11
CXX: g++-11
DCMAKE_BUILD_TYPE: 'Release'

steps:
- name: Update Package Index & Upgrade Packages
run: |
apt-get update
apt-get upgrade -y
apt update
apt upgrade -y
- name: Download CDT
uses: AntelopeIO/asset-artifact-download-action@v3
with:
owner: AntelopeIO
repo: cdt
target: '${{needs.versions.outputs.cdt-target}}'
prereleases: ${{fromJSON(needs.versions.outputs.cdt-prerelease)}}
file: 'cdt_.*amd64.deb'
token: ${{ secrets.GITHUB_TOKEN }}

- name: Install CDT
run: apt-get install -y ./cdt*.deb

- name: Download leap-dev binary
uses: AntelopeIO/asset-artifact-download-action@v3
with:
owner: AntelopeIO
repo: leap
target: '${{needs.versions.outputs.leap-dev-target}}'
prereleases: ${{fromJSON(needs.versions.outputs.leap-dev-prerelease)}}
file: 'leap-dev.*(x86_64|amd64).deb'
container-package: experimental-binaries
token: ${{ secrets.GITHUB_TOKEN }}

- name: Download leap binary
uses: AntelopeIO/asset-artifact-download-action@v3
with:
owner: AntelopeIO
repo: leap
target: '${{needs.versions.outputs.leap-target}}'
prereleases: ${{fromJSON(needs.versions.outputs.leap-prerelease)}}
file: 'leap.*${{matrix.platform}}.*(x86_64|amd64).deb'
token: ${{ secrets.GITHUB_TOKEN }}

- name: Install Leap
run: |
apt-get install -y ./leap*.deb
- name: Link Leap TestHarness Module (fix for v4 of leap)
run: ln -s /usr/share/leap_testing/tests/TestHarness /usr/lib/python3/dist-packages/TestHarness

- name: Download EOS EVM Contract
uses: AntelopeIO/asset-artifact-download-action@v3
with:
owner: eosnetworkfoundation
repo: eos-evm
target: '${{needs.versions.outputs.eos-evm-contract-target}}'
prereleases: ${{fromJSON(needs.versions.outputs.eos-evm-contract-prerelease)}}
file: 'contract.tar.gz'
artifact-name: contract.test-actions-off.tar.gz
token: ${{ secrets.GITHUB_TOKEN }}

- name: Extract EOS EVM Contract
id: evm-contract
run: |
mkdir contract
mv contract.tar.gz contract/
cd contract
tar xvf contract.tar.gz
cd build
echo "EVM_CONTRACT=$(pwd)" >> "$GITHUB_OUTPUT"
- name: Authenticate
id: auth
uses: AntelopeIO/github-app-token-action@v1
with:
app_id: ${{ secrets.TRUSTEVM_CI_APP_ID }}
private_key: ${{ secrets.TRUSTEVM_CI_APP_KEY }}

- name: Download EOS EVM Node builddir
uses: actions/download-artifact@v3
with:
name: build.tar.gz

- name: Extract EOS EVM Node builddir
id: evm-node-build
run: |
mkdir eos-evm-node
mv build.tar.gz eos-evm-node/
pushd eos-evm-node
tar xvf build.tar.gz
pushd build
echo "EVM_NODE_BUILD=$(pwd)" >> "$GITHUB_OUTPUT"
popd
- name: Install Test Dependencies
run: |
pip install --upgrade web3
apt install -y wget
wget https://nodejs.org/dist/v18.17.0/node-v18.17.0-linux-x64.tar.xz
tar xvfJ node-v18.17.0-linux-x64.tar.xz
cp -r node-v18.17.0-linux-x64/{bin,include,lib,share} /usr/
node --version
npm --version
pushd ${{ steps.evm-node-build.outputs.EVM_NODE_BUILD }}/peripherals/tx_wrapper
npm install
popd
- name: Test Leap Integration
run: |
mkdir test_run_root
cd test_run_root
${{ steps.evm-node-build.outputs.EVM_NODE_BUILD }}/tests/nodeos_eos_evm_test.py -v --eos-evm-contract-root ${{ steps.evm-contract.outputs.EVM_CONTRACT }} --eos-evm-build-root ${{ steps.evm-node-build.outputs.EVM_NODE_BUILD }} --use-tx-wrapper ${{ steps.evm-node-build.outputs.EVM_NODE_BUILD }}/peripherals/tx_wrapper
- name: Prepare Logs
if: failure()
run: |
tar -czf leap-int-test-logs.tar.gz test_run_root/*
- name: Upload logs from failed tests
uses: actions/upload-artifact@v3
if: failure()
with:
name: leap-int-test-logs.tar.gz
path: leap-int-test-logs.tar.gz
5 changes: 5 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,10 @@
cmake_minimum_required(VERSION 3.16.2)

list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules")

include(cmake/cable/bootstrap.cmake)
include(CableBuildType)
include(utils)
cable_set_build_type(DEFAULT Release CONFIGURATION_TYPES Release Debug)

if(NOT CMAKE_TOOLCHAIN_FILE)
Expand Down Expand Up @@ -29,3 +32,5 @@ endif()
add_subdirectory(external)
add_subdirectory(version)
add_subdirectory(src)
add_subdirectory(peripherals)
add_subdirectory(tests)
4 changes: 4 additions & 0 deletions CMakeModules/utils.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
macro( copy_bin file )
add_custom_command( TARGET ${file} POST_BUILD COMMAND mkdir -p ${CMAKE_BINARY_DIR}/bin )
add_custom_command( TARGET ${file} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_BINARY_DIR}/${file}${CMAKE_EXECUTABLE_SUFFIX} ${CMAKE_BINARY_DIR}/bin/ )
endmacro( copy_bin )
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,8 +48,8 @@ make -j8
```
You'll get the list of binaries with other tools:
```
src/eos-evm-node
src/eos-evm-rpc
bin/eos-evm-node
bin/eos-evm-rpc
```

Alternatively, to build with specific compiler:
Expand Down
1 change: 1 addition & 0 deletions peripherals/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
add_subdirectory( tx_wrapper )
4 changes: 4 additions & 0 deletions peripherals/tx_wrapper/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
configure_file( index.js . COPYONLY )
configure_file( package-lock.json . COPYONLY )
configure_file( package.json . COPYONLY )
configure_file( yarn.lock . COPYONLY )
34 changes: 16 additions & 18 deletions peripherals/tx_wrapper/index.js
Original file line number Diff line number Diff line change
@@ -1,24 +1,22 @@
const { Api, JsonRpc, RpcError } = require("eosjs");
const { JsSignatureProvider } = require("eosjs/dist/eosjs-jssig"); // development only
const fetch = require("node-fetch"); // node only; not needed in browsers
//const fetch = (...args) => import('node-fetch').then(({default: fetch}) => fetch(...args));
const { TextEncoder, TextDecoder } = require("util"); // node only; native TextEncoder/Decoder
import { config } from 'dotenv';
config()

const RpcServer = require("http-jsonrpc-server");
const dotenv = require("dotenv");
const isValidHostname = require('is-valid-hostname')
import { Api, JsonRpc, RpcError } from "eosjs";
import { JsSignatureProvider } from "eosjs/dist/eosjs-jssig.js"; // development only
const fetch = (...args) => import('node-fetch').then(({default: fetch}) => fetch(...args));
import { TextEncoder, TextDecoder } from "util"; // node only; native TextEncoder/Decoder

const { keccak256 } = require('ethereumjs-util');
import RpcServer from "http-jsonrpc-server";
import isValidHostname from 'is-valid-hostname';

import { keccak256 } from 'ethereumjs-util';

// Local helpers
function validateNum(input, min, max) {
var num = +input;
return num >= min && num <= max && input === num.toString();
}

// Read and Validate Configs
dotenv.config();

if (!process.env.EOS_KEY) {
console.log("Missing EOS_KEY in .env file!");
process.exit();
Expand Down Expand Up @@ -55,23 +53,23 @@ if (!process.env.PORT || !validateNum(process.env.PORT, 1, 65535)) {
process.exit();
}

expire_sec = 300;
let expire_sec = 300;
if (!process.env.EXPIRE_SEC) {
console.log("Missing EXPIRE_SEC, default to " + expire_sec);
} else {
expire_sec = +process.env.EXPIRE_SEC;
}

// Setting up EOS
rpc_list = process.env.EOS_RPC.split("|");
let rpc_list = process.env.EOS_RPC.split("|");
console.log("number of RPC endpoints = " + rpc_list.length + ", using " + rpc_list[0]);
rpc_index = 0;
let rpc_index = 0;

rpc = new JsonRpc(rpc_list[rpc_index], { fetch });
let rpc = new JsonRpc(rpc_list[rpc_index], { fetch });
const defaultPrivateKey = process.env.EOS_KEY;
const signatureProvider = new JsSignatureProvider([defaultPrivateKey]);

api = new Api({
let api = new Api({
rpc,
signatureProvider,
textDecoder: new TextDecoder(),
Expand Down Expand Up @@ -121,7 +119,7 @@ async function push_tx(strRlptx) {
expireSeconds: +expire_sec,
}
);
latency = Date.now() - t0;
const latency = Date.now() - t0;
console.log("----response(" + id + ", " + latency + "ms) ----");
console.log(result);
return result;
Expand Down
Loading

0 comments on commit 099bca9

Please sign in to comment.