From e5b1de1f3e78b1732051bcb6a3d1f1733cd09ede Mon Sep 17 00:00:00 2001 From: Michelangelo Riccobene Date: Fri, 7 Mar 2025 17:03:00 +0100 Subject: [PATCH 1/2] add workflow and test script --- .../qa-rpc-integration-tests-polygon.yml | 168 ++++++++++++++++++ .../scripts/run_rpc_tests_polygon.sh | 14 ++ 2 files changed, 182 insertions(+) create mode 100644 .github/workflows/qa-rpc-integration-tests-polygon.yml create mode 100755 .github/workflows/scripts/run_rpc_tests_polygon.sh diff --git a/.github/workflows/qa-rpc-integration-tests-polygon.yml b/.github/workflows/qa-rpc-integration-tests-polygon.yml new file mode 100644 index 00000000000..3e02a078e05 --- /dev/null +++ b/.github/workflows/qa-rpc-integration-tests-polygon.yml @@ -0,0 +1,168 @@ +name: QA - RPC Integration Tests (Polygon) + +on: + workflow_dispatch: # Run manually + push: + branches: + - main + - 'release/3.*' + pull_request: + branches: + - main + - 'release/3.*' + types: + - opened + - reopened + - synchronize + - ready_for_review + +jobs: + integration-test-suite: + runs-on: [ self-hosted, Polygon ] + timeout-minutes: 15 + env: + ERIGON_REFERENCE_DATA_DIR: /opt/erigon-versions/reference-version/datadir + ERIGON_TESTBED_DATA_DIR: /opt/erigon-testbed/datadir + ERIGON_QA_PATH: /home/qarunner/erigon-qa + RPC_PAST_TEST_DIR: /opt/rpc-past-tests + CHAIN: bor-mainnet + + steps: + - name: Check out repository + uses: actions/checkout@v4 + + - name: Checkout RPC Tests Repository & Install Requirements + run: | + rm -rf ${{ runner.workspace }}/rpc-tests + git -c advice.detachedHead=false clone --depth 1 --branch v1.50.0 https://github.com/erigontech/rpc-tests ${{runner.workspace}}/rpc-tests + cd ${{ runner.workspace }}/rpc-tests + pip3 install -r requirements.txt + + - name: Clean Erigon Build Directory + run: | + make clean + + - name: Build Erigon RPCDaemon + run: | + make rpcdaemon + working-directory: ${{ github.workspace }} + + - name: Pause the Erigon instance dedicated to db maintenance + run: | + python3 $ERIGON_QA_PATH/test_system/db-producer/pause_production.py || true + + - name: Run RpcDaemon + working-directory: ${{ github.workspace }}/build/bin + run: | + echo "Starting RpcDaemon..." + + ./rpcdaemon --datadir $ERIGON_REFERENCE_DATA_DIR --http.api admin,debug,eth,parity,erigon,trace,web3,txpool,ots,net --ws > erigon.log 2>&1 & + + RPC_DAEMON_PID=$! + RPC_DAEMON_EXIT_STATUS=$? + echo "RPC_DAEMON_PID=$RPC_DAEMON_PID" >> $GITHUB_ENV + + sleep 5 + tail erigon.log + + if [ $RPC_DAEMON_EXIT_STATUS -ne 0 ]; then + echo "RpcDaemon failed to start" + echo "::error::Error detected during tests: RpcDaemon failed to start" + exit 1 + fi + echo "RpcDaemon started" + + - name: Wait for port 8545 to be opened + run: | + for i in {1..30}; do + if nc -z localhost 8545; then + echo "Port 8545 is open" + break + fi + echo "Waiting for port 8545 to open..." + sleep 10 + done + if ! nc -z localhost 8545; then + echo "Port 8545 did not open in time" + echo "::error::Error detected during tests: Port 8545 did not open in time" + exit 1 + fi + + - name: Run RPC Integration Tests + id: test_step + run: | + set +e # Disable exit on error + commit=$(git -C ${{runner.workspace}}/erigon rev-parse --short HEAD) + + cd ${{ runner.workspace }}/rpc-tests/integration + rm -rf ./polygon-pos/results/ + + # Run RPC integration test runner via http + chmod +x ${{ runner.workspace }}/erigon/.github/workflows/scripts/run_rpc_tests.sh + ${{ runner.workspace }}/erigon/.github/workflows/scripts/run_rpc_tests.sh + + # Capture test runner script exit status + test_exit_status=$? + + # Save the subsection reached status + echo "::set-output name=test_executed::true" + + # Check test runner exit status + if [ $test_exit_status -eq 0 ]; then + echo "tests completed successfully" + echo + echo "TEST_RESULT=success" >> "$GITHUB_OUTPUT" + else + echo "error detected during tests" + echo "TEST_RESULT=failure" >> "$GITHUB_OUTPUT" + + # Save failed results to a directory with timestamp and commit hash + cp -r ${{ runner.workspace }}/rpc-tests/integration/polygon-pos/results/ $RPC_PAST_TEST_DIR/polygon-pos_$(date +%Y%m%d_%H%M%S)_integration_$commit_http/ + fi + + - name: Stop Erigon RpcDaemon + working-directory: ${{ github.workspace }}/build/bin + run: | + # Clean up rpcdaemon process if it's still running + if kill -0 $RPC_DAEMON_PID 2> /dev/null; then + echo "RpcDaemon stopping..." + kill $RPC_DAEMON_PID + echo "RpcDaemon stopped" + else + echo "RpcDaemon has already terminated" + fi + + - name: Resume the Erigon instance dedicated to db maintenance + run: | + python3 $ERIGON_QA_PATH/test_system/db-producer/resume_production.py || true + + - name: Upload test results + if: steps.test_step.outputs.test_executed == 'true' + uses: actions/upload-artifact@v4 + with: + name: test-results + path: ${{ runner.workspace }}/rpc-tests/integration/polygon-pos/results/ + + - name: Save test results + if: steps.test_step.outputs.test_executed == 'true' + working-directory: ${{ github.workspace }} + env: + TEST_RESULT: ${{ steps.test_step.outputs.TEST_RESULT }} + run: | + db_version=$(python3 $ERIGON_QA_PATH/test_system/qa-tests/uploads/prod_info.py $ERIGON_REFERENCE_DATA_DIR/../production.ini production erigon_repo_commit) + if [ -z "$db_version" ]; then + db_version="no-version" + fi + + python3 $ERIGON_QA_PATH/test_system/qa-tests/uploads/upload_test_results.py --repo erigon --commit $(git rev-parse HEAD) --branch ${{ github.ref_name }} --test_name rpc-integration-tests --chain $CHAIN --runner ${{ runner.name }} --db_version $db_version --outcome $TEST_RESULT #--result_file ${{ github.workspace }}/result-$CHAIN.json + + - name: Action for Success + if: steps.test_step.outputs.TEST_RESULT == 'success' + run: echo "::notice::Tests completed successfully" + + - name: Action for Failure + if: steps.test_step.outputs.TEST_RESULT != 'success' + run: | + echo "::error::Error detected during tests: some tests failed, check the logs or the artifacts for more details" + exit 1 + diff --git a/.github/workflows/scripts/run_rpc_tests_polygon.sh b/.github/workflows/scripts/run_rpc_tests_polygon.sh new file mode 100755 index 00000000000..ba84ea8a9b4 --- /dev/null +++ b/.github/workflows/scripts/run_rpc_tests_polygon.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +set +e # Disable exit on error + +# Array of disabled tests +disabled_tests=( +) + +# Transform the array into a comma-separated string +disabled_test_list=$(IFS=,; echo "${disabled_tests[*]}") + +python3 ./run_tests.py --blockchain polygon-pos --port 8545 --engine-port 8545 --continue -f --json-diff --serial -x "$disabled_test_list" + +exit $? From 097e20ad857871ecfbe6f68b7a630868538ea5fc Mon Sep 17 00:00:00 2001 From: Michelangelo Riccobene Date: Sun, 9 Mar 2025 13:20:21 +0100 Subject: [PATCH 2/2] Update qa-rpc-integration-tests-polygon.yml --- .github/workflows/qa-rpc-integration-tests-polygon.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/qa-rpc-integration-tests-polygon.yml b/.github/workflows/qa-rpc-integration-tests-polygon.yml index 3e02a078e05..ec0405a9f75 100644 --- a/.github/workflows/qa-rpc-integration-tests-polygon.yml +++ b/.github/workflows/qa-rpc-integration-tests-polygon.yml @@ -98,8 +98,8 @@ jobs: rm -rf ./polygon-pos/results/ # Run RPC integration test runner via http - chmod +x ${{ runner.workspace }}/erigon/.github/workflows/scripts/run_rpc_tests.sh - ${{ runner.workspace }}/erigon/.github/workflows/scripts/run_rpc_tests.sh + chmod +x ${{ runner.workspace }}/erigon/.github/workflows/scripts/run_rpc_tests_polygon.sh + ${{ runner.workspace }}/erigon/.github/workflows/scripts/run_rpc_tests_polygon.sh # Capture test runner script exit status test_exit_status=$?