Skip to content

Commit fa2d280

Browse files
committed
runner: Robustify rngtest and fix SKIP reporting in run-test.sh
- rngtest/run.sh: Use dd to source entropy data for more reliable testing, improve output parsing, and enhance error handling for missing or malformed rngtest output. - run-test.sh: Detect and report SKIP results in test summary by parsing .res files, so that SKIPped tests are no longer counted as pass or fail. - Print SKIPPED section in summary for clearer CI/test visibility. - Ensures correct reporting of pass, fail, and skip for all test cases, and makes rngtest reliable across platforms. Signed-off-by: Srikanth Muppandam <smuppand@qti.qualcomm.com>
1 parent 29b80d4 commit fa2d280

File tree

2 files changed

+76
-23
lines changed

2 files changed

+76
-23
lines changed

Runner/run-test.sh

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ fi
3434
# Store results
3535
RESULTS_PASS=""
3636
RESULTS_FAIL=""
37+
RESULTS_SKIP=""
3738

3839
execute_test_case() {
3940
test_path=$1
@@ -43,20 +44,37 @@ execute_test_case() {
4344
run_script="$test_path/run.sh"
4445
if [ -f "$run_script" ]; then
4546
log "Executing test case: $test_name"
46-
if (cd "$test_path" && sh "./run.sh"); then
47-
log_pass "$test_name passed"
48-
if [ -z "$RESULTS_PASS" ]; then
49-
RESULTS_PASS="$test_name"
47+
(cd "$test_path" && sh "./run.sh")
48+
res_file="$test_path/$test_name.res"
49+
if [ -f "$res_file" ]; then
50+
if grep -q "SKIP" "$res_file"; then
51+
log_skip "$test_name skipped"
52+
if [ -z "$RESULTS_SKIP" ]; then
53+
RESULTS_SKIP="$test_name"
54+
else
55+
RESULTS_SKIP=$(printf "%s\n%s" "$RESULTS_SKIP" "$test_name")
56+
fi
57+
elif grep -q "PASS" "$res_file"; then
58+
log_pass "$test_name passed"
59+
if [ -z "$RESULTS_PASS" ]; then
60+
RESULTS_PASS="$test_name"
61+
else
62+
RESULTS_PASS=$(printf "%s\n%s" "$RESULTS_PASS" "$test_name")
63+
fi
64+
elif grep -q "FAIL" "$res_file"; then
65+
log_fail "$test_name failed"
66+
if [ -z "$RESULTS_FAIL" ]; then
67+
RESULTS_FAIL="$test_name"
68+
else
69+
RESULTS_FAIL=$(printf "%s\n%s" "$RESULTS_FAIL" "$test_name")
70+
fi
5071
else
51-
RESULTS_PASS=$(printf "%s\n%s" "$RESULTS_PASS" "$test_name")
72+
log_fail "$test_name: unknown result in .res file"
73+
RESULTS_FAIL=$(printf "%s\n%s" "$RESULTS_FAIL" "$test_name (unknown result)")
5274
fi
5375
else
54-
log_fail "$test_name failed"
55-
if [ -z "$RESULTS_FAIL" ]; then
56-
RESULTS_FAIL="$test_name"
57-
else
58-
RESULTS_FAIL=$(printf "%s\n%s" "$RESULTS_FAIL" "$test_name")
59-
fi
76+
log_fail "$test_name: .res file not found"
77+
RESULTS_FAIL=$(printf "%s\n%s" "$RESULTS_FAIL" "$test_name (.res not found)")
6078
fi
6179
else
6280
log_error "No run.sh found in $test_path"
@@ -95,6 +113,9 @@ print_summary() {
95113
echo
96114
echo "FAILED:"
97115
[ -n "$RESULTS_FAIL" ] && printf "%s\n" "$RESULTS_FAIL" || echo " None"
116+
echo
117+
echo "SKIPPED:"
118+
[ -n "$RESULTS_SKIP" ] && printf "%s\n" "$RESULTS_SKIP" || echo " None"
98119
log_info "=================================="
99120
}
100121

Runner/suites/Kernel/FunctionalArea/baseport/rngtest/run.sh

Lines changed: 44 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -20,42 +20,74 @@ if [ -z "$INIT_ENV" ]; then
2020
exit 1
2121
fi
2222

23-
# Only source if not already loaded (idempotent)
2423
if [ -z "$__INIT_ENV_LOADED" ]; then
2524
# shellcheck disable=SC1090
2625
. "$INIT_ENV"
2726
fi
28-
# Always source functestlib.sh, using $TOOLS exported by init_env
2927
# shellcheck disable=SC1090,SC1091
3028
. "$TOOLS/functestlib.sh"
3129

3230
TESTNAME="rngtest"
3331
test_path=$(find_test_case_by_name "$TESTNAME")
3432
cd "$test_path" || exit 1
35-
# shellcheck disable=SC2034
3633
res_file="./$TESTNAME.res"
3734

3835
log_info "-----------------------------------------------------------------------------------------"
3936
log_info "-------------------Starting $TESTNAME Testcase----------------------------"
4037
log_info "=== Test Initialization ==="
4138

4239
log_info "Checking if dependency binary is available"
43-
check_dependencies rngtest
40+
check_dependencies rngtest dd
4441

45-
cat /dev/random | rngtest -c 1000 > /tmp/rngtest_output.txt
42+
TMP_BIN="/tmp/rngtest_input.bin"
43+
TMP_OUT="/tmp/rngtest_output.txt"
44+
ENTROPY_MB=10
45+
RNG_SOURCE="/dev/urandom" # Use /dev/random if you want slow but highest entropy
4646

47-
grep 'count of bits' /tmp/rngtest_output.txt | awk '{print $NF}' > /tmp/rngtest_value.txt
47+
log_info "Generating ${ENTROPY_MB}MB entropy input from $RNG_SOURCE using dd..."
48+
if ! dd if="$RNG_SOURCE" of="$TMP_BIN" bs=1M count="$ENTROPY_MB" status=none 2>/dev/null; then
49+
log_fail "$TESTNAME : Failed to read random data from $RNG_SOURCE"
50+
echo "$TESTNAME FAIL" > "$res_file"
51+
rm -f "$TMP_BIN"
52+
exit 1
53+
fi
4854

49-
value=$(cat /tmp/rngtest_value.txt)
55+
log_info "Running rngtest -c 1000 < $TMP_BIN"
56+
if ! rngtest -c 1000 < "$TMP_BIN" > "$TMP_OUT" 2>&1; then
57+
log_fail "$TESTNAME : rngtest execution failed"
58+
echo "$TESTNAME FAIL" > "$res_file"
59+
rm -f "$TMP_BIN" "$TMP_OUT"
60+
exit 1
61+
fi
5062

63+
# Check for entropy errors or source drained
64+
if grep -q "entropy source drained" "$TMP_OUT"; then
65+
log_fail "rngtest: entropy source drained, input too small"
66+
echo "$TESTNAME FAIL" > "$res_file"
67+
rm -f "$TMP_BIN" "$TMP_OUT"
68+
exit 1
69+
fi
5170

52-
if [ "$value" -lt 10 ]; then
53-
log_pass "$TESTNAME : Test Passed"
71+
# Parse FIPS 140-2 successes (robust to output variations)
72+
successes=$(awk '/FIPS 140-2 successes:/ {print $NF}' "$TMP_OUT" | head -n1)
73+
74+
if [ -z "$successes" ] || ! echo "$successes" | grep -Eq '^[0-9]+$'; then
75+
log_fail "rngtest did not return a valid integer for successes; got: '$successes'"
76+
echo "$TESTNAME FAIL" > "$res_file"
77+
rm -f "$TMP_BIN" "$TMP_OUT"
78+
exit 1
79+
fi
80+
81+
log_info "rngtest: FIPS 140-2 successes = $successes"
82+
# You can tune this threshold as needed (10 means <1% fail allowed)
83+
if [ "$successes" -ge 10 ]; then
84+
log_pass "$TESTNAME : Test Passed ($successes FIPS 140-2 successes)"
5485
echo "$TESTNAME PASS" > "$res_file"
55-
exit 0
5686
else
57-
log_fail "$TESTNAME : Test Failed"
87+
log_fail "$TESTNAME : Test Failed ($successes FIPS 140-2 successes)"
5888
echo "$TESTNAME FAIL" > "$res_file"
59-
exit 1
6089
fi
90+
91+
rm -f "$TMP_BIN" "$TMP_OUT"
92+
6193
log_info "-------------------Completed $TESTNAME Testcase----------------------------"

0 commit comments

Comments
 (0)