Skip to content

Commit

Permalink
Refactor: Moved validation tests run to script file
Browse files Browse the repository at this point in the history
Refactor: Moved validation tests run to script file
Signed-off-by: Milosz Linkiewicz <[email protected]>
  • Loading branch information
Mionsz committed Feb 12, 2025
1 parent 46e88cb commit 3517e9f
Show file tree
Hide file tree
Showing 3 changed files with 122 additions and 57 deletions.
110 changes: 110 additions & 0 deletions .github/scripts/run_validation_tests.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
#!/bin/bash

set +e

VALIDATION_TESTS_1="${1:-$VALIDATION_TESTS_1}"
VALIDATION_TESTS_2="${2:-$VALIDATION_TESTS_2}"
PYTEST_ALIAS="${3:-$PYTEST_ALIAS}"
PYTEST_PARAMS="${4:-$PYTEST_PARAMS}"
export TEST_PORT_P="${5:-$TEST_PORT_P}"
export TEST_PORT_R="${6:-$TEST_PORT_R}"
PYTEST_RETRIES="${PYTEST_RETRIES:-3}"

# Function to log messages to GitHub Actions
function LOG_GITHUB_SUMMARY() {
echo "$@" >> "$GITHUB_STEP_SUMMARY"
}

function LOG_GITHUB_CONSOLE() {
echo "$@"
}

# Function to run a test and handle retries
run_test() {
local test=$1
local retries=$2
local pytest_alias=$3
local pytest_params=$4
local test_port_p=$5
local test_port_r=$6
local PYTEST_START_TIME=""
local PYTEST_END_TIME=""
local PYTEST_DURATION=""
local PYTEST_TASK_STATUS=""
local PYTEST_SUFFIX="[Err]"

LOG_GITHUB_CONSOLE "::group::${test}"
PYTEST_START_TIME=$(date '+%s')
# shellcheck disable=SC2086
${pytest_alias} "${test}" ${pytest_params} --nic="${test_port_p},${test_port_r}" --collect-only -q --no-summary

for retry in $(seq 1 "$retries"); do
# shellcheck disable=SC2086
${pytest_alias} "${test}" ${pytest_params} --nic="${test_port_p},${test_port_r}"
local result=$?
LOG_GITHUB_CONSOLE "RETRY: ${retry}"
[[ "$result" == "0" ]] && break
done

PYTEST_END_TIME="$(date '+%s')"
PYTEST_DURATION="$((PYTEST_END_TIME - PYTEST_START_TIME))"

if [[ "$result" == "0" ]]; then
PYTEST_TASK_STATUS=""
PYTEST_SUFFIX="[OK]"
TESTS_SUCCESS+=("${test}")
else
TESTS_FAIL+=("${test}")
fi

LOG_GITHUB_SUMMARY "| ${PYTEST_TASK_STATUS} | ${test} | $(date --date=@${PYTEST_START_TIME} '+%d%m%y_%H%M%S') | $(date --date="@${PYTEST_END_TIME}" '+%d%m%y_%H%M%S') | ${PYTEST_DURATION}s | ${PYTEST_SUFFIX} |"
LOG_GITHUB_CONSOLE "::endgroup::"
}

# Main script execution
LOG_GITHUB_CONSOLE "::group::pre-execution-summary"

# Collect tests to be executed
TESTS_INCLUDED_IN_EXECUTION=(
$(grep -v "collected in" <(${PYTEST_ALIAS} "tests/${VALIDATION_TESTS_1}" --collect-only -q --no-summary 2>&1))
)
SUMMARY_MAIN_HEADER="Starting tests/${VALIDATION_TESTS_1}"

if [[ -n "${VALIDATION_TESTS_2}" ]]; then
TESTS_INCLUDED_IN_EXECUTION+=(
$(grep -v "collected in" <(${PYTEST_ALIAS} "tests/${VALIDATION_TESTS_2}" --collect-only -q --no-summary 2>&1))
)
SUMMARY_MAIN_HEADER="${SUMMARY_MAIN_HEADER}, tests/${VALIDATION_TESTS_2}"
fi

TESTS_FAIL=()
TESTS_SUCCESS=()

LOG_GITHUB_CONSOLE "${SUMMARY_MAIN_HEADER} tests (total ${NUMBER_OF_TESTS}) :rocket:"
LOG_GITHUB_CONSOLE "----------------------------------"
LOG_GITHUB_CONSOLE "Tests to be executed:"
LOG_GITHUB_CONSOLE "${TESTS_INCLUDED_IN_EXECUTION[@]}"

LOG_GITHUB_SUMMARY "## ${SUMMARY_MAIN_HEADER} tests (total ${NUMBER_OF_TESTS}) :rocket:"
LOG_GITHUB_SUMMARY "| ❌/✅ | Collected Test | Started | Ended | Took (s) | Result |"
LOG_GITHUB_SUMMARY "| --- | --- | --- | --- | --- | --- |"

LOG_GITHUB_CONSOLE "::endgroup::"

# Execute each test
for test in "${TESTS_INCLUDED_IN_EXECUTION[@]}"; do
run_test "$test" "${PYTEST_RETRIES}" "${PYTEST_ALIAS}" "${PYTEST_PARAMS}" "${TEST_PORT_P}" "${TEST_PORT_R}"
done

# Summary of test results
LOG_GITHUB_SUMMARY "### Total success ${#TESTS_SUCCESS[@]}/${NUMBER_OF_TESTS}:"
LOG_GITHUB_SUMMARY "${TESTS_SUCCESS[@]}"
LOG_GITHUB_SUMMARY "### Total failed ${#TESTS_FAIL[@]}/${NUMBER_OF_TESTS}:"
LOG_GITHUB_SUMMARY "${TESTS_FAIL[@]}"

# Determine exit status
if [[ "${#TESTS_FAIL[@]}" == "0" ]] || [[ "${VALIDATION_NO_FAIL_TESTS}" == "true" ]]; then
exit 0
fi

exit 1
67 changes: 11 additions & 56 deletions .github/workflows/validation-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -237,64 +237,19 @@ jobs:
run: |
sudo MtlManager &
- name: 'execution: Run validation-tests in pipenv environment'
- name: 'execution: Run validation-bare-metal tests in pipenv environment'
working-directory: tests/validation
run: |
set +e
echo "::group::pre-execution-summary"
export TEST_PORT_P="${{ env.TEST_PORT_P }}"
export TEST_PORT_R="${{ env.TEST_PORT_R }}"
TESTS_INCLUDED_IN_EXECUTION=( $(grep -v "collected in" <(${{ env.PYTEST_ALIAS }} "tests/${{ inputs.validation-tests-1 }}" ${{ env.PYTEST_PARAMS }} --nic="${TEST_PORT_P},${TEST_PORT_R}" --collect-only -q --no-summary 2>&1)) )
SUMMARY_MAIN_HEADER="Starting tests/${{ inputs.validation-tests-1 }}"
if [[ -n "${{ inputs.validation-tests-2 }}" ]]; then
TESTS_INCLUDED_IN_EXECUTION+=( $(grep -v "collected in" <(${{ env.PYTEST_ALIAS }} "tests/${{ inputs.validation-tests-2 }}" ${{ env.PYTEST_PARAMS }} --nic="${TEST_PORT_P},${TEST_PORT_R}" --collect-only -q --no-summary 2>&1)) )
SUMMARY_MAIN_HEADER="${SUMMARY_MAIN_HEADER}, tests/${{ inputs.validation-tests-2 }}"
fi
NUMBER_OF_TESTS="${#TESTS_INCLUDED_IN_EXECUTION[@]}"
TESTS_FAIL=()
TESTS_SUCCESS=()
echo "${SUMMARY_MAIN_HEADER} tests (total ${NUMBER_OF_TESTS}) :rocket:\n----------------------------------"
echo "Tests to be executed:\n${TESTS_INCLUDED_IN_EXECUTION[@]}"
echo "## ${SUMMARY_MAIN_HEADER} tests (total ${NUMBER_OF_TESTS}) :rocket:" >> "$GITHUB_STEP_SUMMARY"
echo "| ❌/✅ | Collected Test | Started | Ended | Took (s) | Result |" >> "$GITHUB_STEP_SUMMARY"
echo "| --- | ---| --- | --- | --- | --- |" >> "$GITHUB_STEP_SUMMARY"
echo "::endgroup::"
for test in ${TESTS_INCLUDED_IN_EXECUTION[@]}; do
echo "::group::${test}"
PYTEST_START_HI="$(date '+%s')"
${{ env.PYTEST_ALIAS }} "${test}" ${{ env.PYTEST_PARAMS }} --nic="${TEST_PORT_P},${TEST_PORT_R}" --collect-only -q --no-summary
for retry in $(seq 1 "${{ env.PYTEST_RETRIES }}"); do
${{ env.PYTEST_ALIAS }} "${test}" ${{ env.PYTEST_PARAMS }} --nic="${TEST_PORT_P},${TEST_PORT_R}"
PYTEST_RESULT="$?"
echo "RETRY: ${retry}"
[[ "${PYTEST_RESULT}" == "0" ]] && break
done
PYTEST_END_HI="$(date '+%s')"
if [[ "${PYTEST_RESULT}" == "0" ]]; then
PREFIX="✅"
SUFFIX="[OK]"
TESTS_SUCCESS+=( "${test}" )
else
PREFIX="❌"
SUFFIX="[Err]"
TESTS_FAIL+=( "${test}" )
fi
echo "| ${PREFIX} | ${test} | $(date --date=@${PYTEST_START_HI} '+%d%m%y_%H%M%S') | $(date --date=@${PYTEST_END_HI} '+%d%m%y_%H%M%S') | $((PYTEST_END_HI-PYTEST_START_HI))s | ${SUFFIX} |" >> "$GITHUB_STEP_SUMMARY"
echo "::endgroup::"
done
echo "### Total success ${#TESTS_SUCCESS[@]}/${NUMBER_OF_TESTS}:" >> "$GITHUB_STEP_SUMMARY"
echo "${TESTS_SUCCESS[@]}" >> "$GITHUB_STEP_SUMMARY"
echo "### Total failed ${#TESTS_FAIL[@]}/${NUMBER_OF_TESTS}:" >> "$GITHUB_STEP_SUMMARY"
echo "${TESTS_FAIL[@]}" >> "$GITHUB_STEP_SUMMARY"
if [[ "${#TESTS_FAIL[@]}" == "0" ]] || [[ "${{ inputs.validation-no-fail-tests }}" == "true" ]]; then
exit 0
else
exit 1
fi
.github/scripts/run_validation_tests.sh
env:
TEST_PORT_P: ${{ env.TEST_PORT_P }}
TEST_PORT_R: ${{ env.TEST_PORT_R }}
PYTEST_ALIAS: 'sudo --preserve-env python3 -m pipenv run pytest'
PYTEST_PARAMS: '--media=/mnt/media --build="../.."'
PYTEST_RETRIES: '3'
VALIDATION_TESTS_1: ${{ inputs.validation-tests-1 }}
VALIDATION_TESTS_2: ${{ inputs.validation-tests-2 }}
VALIDATION_NO_FAIL_TESTS: ${{ inputs.validation-no-fail-tests }}

- name: 'execution: Run validation-pre-release-1 in pipenv environment'
if: inputs.validation-pre-release-1 != 'NONE'
Expand Down
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -88,4 +88,4 @@ doc/_build
# Gpu direct files
gpu_direct/tests/fff.h
gpu_direct/subprojects/*
!gpu_direct/subprojects/gtest.wrap
!gpu_direct/subprojects/gtest.wrap

0 comments on commit 3517e9f

Please sign in to comment.