Skip to content

Commit 3517e9f

Browse files
committed
Refactor: Moved validation tests run to script file
Refactor: Moved validation tests run to script file Signed-off-by: Milosz Linkiewicz <[email protected]>
1 parent 46e88cb commit 3517e9f

File tree

3 files changed

+122
-57
lines changed

3 files changed

+122
-57
lines changed
Lines changed: 110 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,110 @@
1+
#!/bin/bash
2+
3+
set +e
4+
5+
VALIDATION_TESTS_1="${1:-$VALIDATION_TESTS_1}"
6+
VALIDATION_TESTS_2="${2:-$VALIDATION_TESTS_2}"
7+
PYTEST_ALIAS="${3:-$PYTEST_ALIAS}"
8+
PYTEST_PARAMS="${4:-$PYTEST_PARAMS}"
9+
export TEST_PORT_P="${5:-$TEST_PORT_P}"
10+
export TEST_PORT_R="${6:-$TEST_PORT_R}"
11+
PYTEST_RETRIES="${PYTEST_RETRIES:-3}"
12+
13+
# Function to log messages to GitHub Actions
14+
function LOG_GITHUB_SUMMARY() {
15+
echo "$@" >> "$GITHUB_STEP_SUMMARY"
16+
}
17+
18+
function LOG_GITHUB_CONSOLE() {
19+
echo "$@"
20+
}
21+
22+
# Function to run a test and handle retries
23+
run_test() {
24+
local test=$1
25+
local retries=$2
26+
local pytest_alias=$3
27+
local pytest_params=$4
28+
local test_port_p=$5
29+
local test_port_r=$6
30+
local PYTEST_START_TIME=""
31+
local PYTEST_END_TIME=""
32+
local PYTEST_DURATION=""
33+
local PYTEST_TASK_STATUS=""
34+
local PYTEST_SUFFIX="[Err]"
35+
36+
LOG_GITHUB_CONSOLE "::group::${test}"
37+
PYTEST_START_TIME=$(date '+%s')
38+
# shellcheck disable=SC2086
39+
${pytest_alias} "${test}" ${pytest_params} --nic="${test_port_p},${test_port_r}" --collect-only -q --no-summary
40+
41+
for retry in $(seq 1 "$retries"); do
42+
# shellcheck disable=SC2086
43+
${pytest_alias} "${test}" ${pytest_params} --nic="${test_port_p},${test_port_r}"
44+
local result=$?
45+
LOG_GITHUB_CONSOLE "RETRY: ${retry}"
46+
[[ "$result" == "0" ]] && break
47+
done
48+
49+
PYTEST_END_TIME="$(date '+%s')"
50+
PYTEST_DURATION="$((PYTEST_END_TIME - PYTEST_START_TIME))"
51+
52+
if [[ "$result" == "0" ]]; then
53+
PYTEST_TASK_STATUS=""
54+
PYTEST_SUFFIX="[OK]"
55+
TESTS_SUCCESS+=("${test}")
56+
else
57+
TESTS_FAIL+=("${test}")
58+
fi
59+
60+
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} |"
61+
LOG_GITHUB_CONSOLE "::endgroup::"
62+
}
63+
64+
# Main script execution
65+
LOG_GITHUB_CONSOLE "::group::pre-execution-summary"
66+
67+
# Collect tests to be executed
68+
TESTS_INCLUDED_IN_EXECUTION=(
69+
$(grep -v "collected in" <(${PYTEST_ALIAS} "tests/${VALIDATION_TESTS_1}" --collect-only -q --no-summary 2>&1))
70+
)
71+
SUMMARY_MAIN_HEADER="Starting tests/${VALIDATION_TESTS_1}"
72+
73+
if [[ -n "${VALIDATION_TESTS_2}" ]]; then
74+
TESTS_INCLUDED_IN_EXECUTION+=(
75+
$(grep -v "collected in" <(${PYTEST_ALIAS} "tests/${VALIDATION_TESTS_2}" --collect-only -q --no-summary 2>&1))
76+
)
77+
SUMMARY_MAIN_HEADER="${SUMMARY_MAIN_HEADER}, tests/${VALIDATION_TESTS_2}"
78+
fi
79+
80+
TESTS_FAIL=()
81+
TESTS_SUCCESS=()
82+
83+
LOG_GITHUB_CONSOLE "${SUMMARY_MAIN_HEADER} tests (total ${NUMBER_OF_TESTS}) :rocket:"
84+
LOG_GITHUB_CONSOLE "----------------------------------"
85+
LOG_GITHUB_CONSOLE "Tests to be executed:"
86+
LOG_GITHUB_CONSOLE "${TESTS_INCLUDED_IN_EXECUTION[@]}"
87+
88+
LOG_GITHUB_SUMMARY "## ${SUMMARY_MAIN_HEADER} tests (total ${NUMBER_OF_TESTS}) :rocket:"
89+
LOG_GITHUB_SUMMARY "| ❌/✅ | Collected Test | Started | Ended | Took (s) | Result |"
90+
LOG_GITHUB_SUMMARY "| --- | --- | --- | --- | --- | --- |"
91+
92+
LOG_GITHUB_CONSOLE "::endgroup::"
93+
94+
# Execute each test
95+
for test in "${TESTS_INCLUDED_IN_EXECUTION[@]}"; do
96+
run_test "$test" "${PYTEST_RETRIES}" "${PYTEST_ALIAS}" "${PYTEST_PARAMS}" "${TEST_PORT_P}" "${TEST_PORT_R}"
97+
done
98+
99+
# Summary of test results
100+
LOG_GITHUB_SUMMARY "### Total success ${#TESTS_SUCCESS[@]}/${NUMBER_OF_TESTS}:"
101+
LOG_GITHUB_SUMMARY "${TESTS_SUCCESS[@]}"
102+
LOG_GITHUB_SUMMARY "### Total failed ${#TESTS_FAIL[@]}/${NUMBER_OF_TESTS}:"
103+
LOG_GITHUB_SUMMARY "${TESTS_FAIL[@]}"
104+
105+
# Determine exit status
106+
if [[ "${#TESTS_FAIL[@]}" == "0" ]] || [[ "${VALIDATION_NO_FAIL_TESTS}" == "true" ]]; then
107+
exit 0
108+
fi
109+
110+
exit 1

.github/workflows/validation-tests.yml

Lines changed: 11 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -237,64 +237,19 @@ jobs:
237237
run: |
238238
sudo MtlManager &
239239
240-
- name: 'execution: Run validation-tests in pipenv environment'
240+
- name: 'execution: Run validation-bare-metal tests in pipenv environment'
241241
working-directory: tests/validation
242242
run: |
243-
set +e
244-
echo "::group::pre-execution-summary"
245-
export TEST_PORT_P="${{ env.TEST_PORT_P }}"
246-
export TEST_PORT_R="${{ env.TEST_PORT_R }}"
247-
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)) )
248-
SUMMARY_MAIN_HEADER="Starting tests/${{ inputs.validation-tests-1 }}"
249-
if [[ -n "${{ inputs.validation-tests-2 }}" ]]; then
250-
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)) )
251-
SUMMARY_MAIN_HEADER="${SUMMARY_MAIN_HEADER}, tests/${{ inputs.validation-tests-2 }}"
252-
fi
253-
254-
NUMBER_OF_TESTS="${#TESTS_INCLUDED_IN_EXECUTION[@]}"
255-
TESTS_FAIL=()
256-
TESTS_SUCCESS=()
257-
258-
echo "${SUMMARY_MAIN_HEADER} tests (total ${NUMBER_OF_TESTS}) :rocket:\n----------------------------------"
259-
echo "Tests to be executed:\n${TESTS_INCLUDED_IN_EXECUTION[@]}"
260-
261-
echo "## ${SUMMARY_MAIN_HEADER} tests (total ${NUMBER_OF_TESTS}) :rocket:" >> "$GITHUB_STEP_SUMMARY"
262-
echo "| ❌/✅ | Collected Test | Started | Ended | Took (s) | Result |" >> "$GITHUB_STEP_SUMMARY"
263-
echo "| --- | ---| --- | --- | --- | --- |" >> "$GITHUB_STEP_SUMMARY"
264-
echo "::endgroup::"
265-
266-
for test in ${TESTS_INCLUDED_IN_EXECUTION[@]}; do
267-
echo "::group::${test}"
268-
PYTEST_START_HI="$(date '+%s')"
269-
${{ env.PYTEST_ALIAS }} "${test}" ${{ env.PYTEST_PARAMS }} --nic="${TEST_PORT_P},${TEST_PORT_R}" --collect-only -q --no-summary
270-
for retry in $(seq 1 "${{ env.PYTEST_RETRIES }}"); do
271-
${{ env.PYTEST_ALIAS }} "${test}" ${{ env.PYTEST_PARAMS }} --nic="${TEST_PORT_P},${TEST_PORT_R}"
272-
PYTEST_RESULT="$?"
273-
echo "RETRY: ${retry}"
274-
[[ "${PYTEST_RESULT}" == "0" ]] && break
275-
done
276-
PYTEST_END_HI="$(date '+%s')"
277-
if [[ "${PYTEST_RESULT}" == "0" ]]; then
278-
PREFIX="✅"
279-
SUFFIX="[OK]"
280-
TESTS_SUCCESS+=( "${test}" )
281-
else
282-
PREFIX="❌"
283-
SUFFIX="[Err]"
284-
TESTS_FAIL+=( "${test}" )
285-
fi
286-
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"
287-
echo "::endgroup::"
288-
done
289-
echo "### Total success ${#TESTS_SUCCESS[@]}/${NUMBER_OF_TESTS}:" >> "$GITHUB_STEP_SUMMARY"
290-
echo "${TESTS_SUCCESS[@]}" >> "$GITHUB_STEP_SUMMARY"
291-
echo "### Total failed ${#TESTS_FAIL[@]}/${NUMBER_OF_TESTS}:" >> "$GITHUB_STEP_SUMMARY"
292-
echo "${TESTS_FAIL[@]}" >> "$GITHUB_STEP_SUMMARY"
293-
if [[ "${#TESTS_FAIL[@]}" == "0" ]] || [[ "${{ inputs.validation-no-fail-tests }}" == "true" ]]; then
294-
exit 0
295-
else
296-
exit 1
297-
fi
243+
.github/scripts/run_validation_tests.sh
244+
env:
245+
TEST_PORT_P: ${{ env.TEST_PORT_P }}
246+
TEST_PORT_R: ${{ env.TEST_PORT_R }}
247+
PYTEST_ALIAS: 'sudo --preserve-env python3 -m pipenv run pytest'
248+
PYTEST_PARAMS: '--media=/mnt/media --build="../.."'
249+
PYTEST_RETRIES: '3'
250+
VALIDATION_TESTS_1: ${{ inputs.validation-tests-1 }}
251+
VALIDATION_TESTS_2: ${{ inputs.validation-tests-2 }}
252+
VALIDATION_NO_FAIL_TESTS: ${{ inputs.validation-no-fail-tests }}
298253

299254
- name: 'execution: Run validation-pre-release-1 in pipenv environment'
300255
if: inputs.validation-pre-release-1 != 'NONE'

.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,4 +88,4 @@ doc/_build
8888
# Gpu direct files
8989
gpu_direct/tests/fff.h
9090
gpu_direct/subprojects/*
91-
!gpu_direct/subprojects/gtest.wrap
91+
!gpu_direct/subprojects/gtest.wrap

0 commit comments

Comments
 (0)