Skip to content

execution/tests: enforce checkNonce/checkTransaction in state harness #17057

execution/tests: enforce checkNonce/checkTransaction in state harness

execution/tests: enforce checkNonce/checkTransaction in state harness #17057

name: QA - RPC Integration Tests (Gnosis)
on:
push:
branches:
- main
- 'release/**'
pull_request:
branches:
- main
- 'release/**'
types:
- opened
- reopened
- synchronize
- ready_for_review
workflow_dispatch: # Run manually
concurrency:
group: >-
${{
github.event_name == 'pull_request' &&
format('{0}-{1}-{2}', github.workflow, github.event_name, github.head_ref) ||
github.event_name == 'push' &&
format('{0}-{1}-{2}', github.workflow, github.event_name, github.ref_name) ||
format('{0}-{1}', github.workflow, github.run_id)
}}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
jobs:
gnosis-rpc-integ-tests:
runs-on: [ self-hosted, qa, Gnosis, rpc-integration ]
env:
ERIGON_TESTBED_AREA: /opt/erigon-testbed
ERIGON_QA_PATH: /home/qarunner/erigon-qa
ERIGON_ASSERT: true
RPC_PAST_TEST_DIR: /opt/rpc-past-tests
CHAIN: gnosis
steps:
- name: Check out repository
uses: actions/checkout@v6
- name: Read RPC version
run: |
source .github/workflows/scripts/rpc_version.env
echo "RPC_VERSION=$RPC_VERSION" >> $GITHUB_ENV
- name: Set reference data dir based on branch
run: |
# For pull_request events base_ref is the target branch name; for push/dispatch parse from ref.
BRANCH="${{ github.base_ref }}"
if [ -z "$BRANCH" ]; then
BRANCH="${{ github.ref }}"
BRANCH="${BRANCH#refs/heads/}"
fi
if [[ "$BRANCH" == release/* ]]; then
VERSION="${BRANCH#release/}"
echo "ERIGON_REFERENCE_DATA_DIR=/opt/erigon-versions/gnosis-reference-version-${VERSION}/datadir" >> $GITHUB_ENV
else
echo "ERIGON_REFERENCE_DATA_DIR=/opt/erigon-versions/gnosis-reference-version/datadir" >> $GITHUB_ENV
fi
- name: Clean Erigon Build Directory
run: |
make clean
- name: Build Erigon RPCDaemon and integration
run: |
make rpcdaemon integration
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: Restore rpc-tests cache
uses: actions/cache@v5
with:
path: ${{ runner.workspace }}/rpc-tests
key: rpc-tests-${{ runner.os }}-${{ runner.arch }}-${{ env.RPC_VERSION }}
- name: Run RPC Integration Tests
id: test_step
run: |
commit=$(git -C ${{runner.workspace}}/erigon rev-parse --short HEAD)
TEST_RESULT_DIR="$RPC_PAST_TEST_DIR/gnosis_$(date +%Y%m%d_%H%M%S)_integration_${commit}_http"
echo "TEST_RESULT_DIR=$TEST_RESULT_DIR" >> $GITHUB_ENV
set +e # Disable exit on error for test run
${{ runner.workspace }}/erigon/.github/workflows/scripts/run_rpc_tests_local.sh \
--datadir "$ERIGON_REFERENCE_DATA_DIR" \
--chain "$CHAIN" \
--workspace "${{ runner.workspace }}" \
--result-dir "$TEST_RESULT_DIR" \
--backup-dir "$ERIGON_TESTBED_AREA/chaindata-prev"
test_exit_status=$? # Capture test runner script exit status
set -e # Re-enable exit on error after test run
echo "test_executed=true" >> $GITHUB_OUTPUT
echo
if [ $test_exit_status -eq 0 ]; then
echo "RPC tests completed successfully"
echo "TEST_RESULT=success" >> "$GITHUB_OUTPUT"
else
echo "::error::Error detected during RPC tests: some tests failed, check the logs or the artifacts for more details"
echo "TEST_RESULT=failure" >> "$GITHUB_OUTPUT"
exit 1
fi
- name: Generate Summary
if: always() && steps.test_step.outputs.test_executed == 'true'
run: |
SUMMARY_FILE="${{ env.TEST_RESULT_DIR }}/summary.md"
LOG_FILE="${{ env.TEST_RESULT_DIR }}/output.log"
cat << 'EOF' > $SUMMARY_FILE
# ${{ github.workflow }} Report
## Test Configuration
- **Chain:** ${{ env.CHAIN }}
- **Result:** ${{ steps.test_step.outputs.TEST_RESULT }}
## Test Output
```
EOF
cat $LOG_FILE >> $SUMMARY_FILE
echo '```' >> $SUMMARY_FILE
cat $SUMMARY_FILE
cat $SUMMARY_FILE >> $GITHUB_STEP_SUMMARY
- name: Resume the Erigon instance dedicated to db maintenance
if: always()
run: |
python3 $ERIGON_QA_PATH/test_system/db-producer/resume_production.py || true
- name: Upload test results
if: always() && steps.test_step.outputs.test_executed == 'true'
uses: actions/upload-artifact@v7
with:
name: test-results-gnosis
path: ${{ env.TEST_RESULT_DIR }}
- name: Save test results
if: always() && 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 $TEST_RESULT_DIR/results/test_report.json
- name: Action to check failure condition
if: failure()
run: |
if [ "${{ steps.test_step.outputs.test_executed }}" != "true" ]; then
echo "::error::Test not executed, workflow failed for infrastructure reasons"
fi
exit 1
- name: Action for Success
if: steps.test_step.outputs.TEST_RESULT == 'success'
run: echo "::notice::Tests completed successfully"