Skip to content

Commit 75244d6

Browse files
committed
run.sh: add robust path resolution for testkit compatibility
- Updated all run.sh scripts to dynamically locate testkit root using utils/ and suites/ markers - Replaced hardcoded relative paths with SCRIPT_DIR and ROOT_DIR detection logic - Ensures consistent behavior across local, CI, and target environments - Retains compatibility with functestlib.sh and init_env Signed-off-by: Srikanth Muppandam <[email protected]>
1 parent 1342794 commit 75244d6

File tree

30 files changed

+1064
-228
lines changed

30 files changed

+1064
-228
lines changed

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

Lines changed: 33 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,40 @@
44
# SPDX-License-Identifier: BSD-3-Clause-Clear
55

66
# Import test suite definitions
7-
. "${PWD}"/init_env
8-
TESTNAME="BWMON"
7+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
8+
ROOT_DIR="$SCRIPT_DIR"
9+
while [ "$ROOT_DIR" != "/" ]; do
10+
if [ -d "$ROOT_DIR/utils" ] && [ -d "$ROOT_DIR/suites" ]; then
11+
break
12+
fi
13+
ROOT_DIR=$(dirname "$ROOT_DIR")
14+
done
15+
16+
if [ ! -d "$ROOT_DIR/utils" ] || [ ! -f "$ROOT_DIR/utils/functestlib.sh" ]; then
17+
echo "[ERROR] Could not detect testkit root (missing utils/ or functestlib.sh)" >&2
18+
exit 1
19+
fi
20+
21+
TOOLS="$ROOT_DIR/utils"
22+
INIT_ENV="$ROOT_DIR/init_env"
23+
FUNCLIB="$TOOLS/functestlib.sh"
924

10-
#import test functions library
11-
. "${TOOLS}"/functestlib.sh
25+
[ -f "$INIT_ENV" ] && . "$INIT_ENV"
26+
. "$FUNCLIB"
27+
28+
__RUNNER_SUITES_DIR="${__RUNNER_SUITES_DIR:-$ROOT_DIR/suites}"
29+
30+
TESTNAME="BWMON"
1231
test_path=$(find_test_case_by_name "$TESTNAME")
13-
log_info "--------------------------------------------------------------------------"
32+
cd "$test_path" || exit 1
33+
res_file="./$TESTNAME.res"
34+
35+
log_info "-----------------------------------------------------------------------------------------"
1436
log_info "-------------------Starting $TESTNAME Testcase----------------------------"
37+
log_info "=== Test Initialization ==="
38+
39+
sync
40+
sleep 1
1541

1642
log_info "Checking if dependency binary is available"
1743
check_dependencies bw_mem
@@ -56,9 +82,9 @@ done
5682

5783
if $incremented; then
5884
log_pass "$TESTNAME : Test Passed"
59-
echo "$TESTNAME PASS" > $test_path/$TESTNAME.res
85+
echo "$TESTNAME PASS" > "$res_file"
6086
else
6187
log_fail "$TESTNAME : Test Failed"
62-
echo "$TESTNAME FAIL" > $test_path/$TESTNAME.res
88+
echo "$TESTNAME FAIL" > "$res_file"
6389
fi
6490
log_info "-------------------Completed $TESTNAME Testcase----------------------------"

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

Lines changed: 32 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,52 @@
44
# SPDX-License-Identifier: BSD-3-Clause-Clear
55

66
# Import test suite definitions
7-
. "${PWD}"/init_env
8-
TESTNAME="Buses"
7+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
8+
ROOT_DIR="$SCRIPT_DIR"
9+
while [ "$ROOT_DIR" != "/" ]; do
10+
if [ -d "$ROOT_DIR/utils" ] && [ -d "$ROOT_DIR/suites" ]; then
11+
break
12+
fi
13+
ROOT_DIR=$(dirname "$ROOT_DIR")
14+
done
15+
16+
if [ ! -d "$ROOT_DIR/utils" ] || [ ! -f "$ROOT_DIR/utils/functestlib.sh" ]; then
17+
echo "[ERROR] Could not detect testkit root (missing utils/ or functestlib.sh)" >&2
18+
exit 1
19+
fi
20+
21+
TOOLS="$ROOT_DIR/utils"
22+
INIT_ENV="$ROOT_DIR/init_env"
23+
FUNCLIB="$TOOLS/functestlib.sh"
24+
25+
[ -f "$INIT_ENV" ] && . "$INIT_ENV"
26+
. "$FUNCLIB"
927

10-
#import test functions library
11-
. "${TOOLS}"/functestlib.sh
28+
__RUNNER_SUITES_DIR="${__RUNNER_SUITES_DIR:-$ROOT_DIR/suites}"
29+
30+
TESTNAME="Buses"
1231
test_path=$(find_test_case_by_name "$TESTNAME")
32+
cd "$test_path" || exit 1
33+
res_file="./$TESTNAME.res"
34+
1335
log_info "-----------------------------------------------------------------------------------------"
1436
log_info "-------------------Starting $TESTNAME Testcase----------------------------"
37+
log_info "=== Test Initialization ==="
38+
39+
sync
40+
sleep 1
1541

1642
log_info "Checking if dependency binary is available"
1743
check_dependencies i2c-msm-test
1844

1945
log_info "running i2c binary"
2046
output=$(i2c-msm-test -v -D /dev/i2c-0 -l | grep "ret:1")
2147

22-
2348
if echo "$output" | grep -q "Reading"; then
2449
log_pass "$TESTNAME : Test Passed"
25-
echo "$TESTNAME PASS" > $test_path/$TESTNAME.res
50+
echo "$TESTNAME PASS" > "$res_file"
2651
else
2752
log_fail "$TESTNAME : Test Failed"
28-
echo "$TESTNAME FAIL" > $test_path/$TESTNAME.res
53+
echo "$TESTNAME FAIL" > "$res_file"
2954
fi
3055
log_info "-------------------Completed $TESTNAME Testcase----------------------------"

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

Lines changed: 97 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -3,54 +3,85 @@
33
# Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
44
# SPDX-License-Identifier: BSD-3-Clause-Clear
55

6-
. "${PWD}/init_env"
7-
TESTNAME="CPUFreq_Validation"
8-
. "$TOOLS/functestlib.sh"
6+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
7+
ROOT_DIR="$SCRIPT_DIR"
8+
while [ "$ROOT_DIR" != "/" ]; do
9+
if [ -d "$ROOT_DIR/utils" ] && [ -d "$ROOT_DIR/suites" ]; then
10+
break
11+
fi
12+
ROOT_DIR=$(dirname "$ROOT_DIR")
13+
done
14+
15+
if [ ! -d "$ROOT_DIR/utils" ] || [ ! -f "$ROOT_DIR/utils/functestlib.sh" ]; then
16+
echo "[ERROR] Could not detect testkit root (missing utils/ or functestlib.sh)" >&2
17+
exit 1
18+
fi
919

20+
TOOLS="$ROOT_DIR/utils"
21+
INIT_ENV="$ROOT_DIR/init_env"
22+
FUNCLIB="$TOOLS/functestlib.sh"
23+
24+
[ -f "$INIT_ENV" ] && . "$INIT_ENV"
25+
. "$FUNCLIB"
26+
27+
__RUNNER_SUITES_DIR="${__RUNNER_SUITES_DIR:-$ROOT_DIR/suites}"
28+
29+
TESTNAME="CPUFreq_Validation"
1030
test_path=$(find_test_case_by_name "$TESTNAME")
31+
cd "$test_path" || exit 1
32+
res_file="./$TESTNAME.res"
33+
1134
log_info "-----------------------------------------------------------------------------------------"
1235
log_info "-------------------Starting $TESTNAME Testcase----------------------------"
13-
log_info "=== CPUFreq Frequency Walker with Validation ==="
36+
log_info "=== CPUFreq Frequency Walker with Retry and Cleanup ==="
1437

15-
# Color codes (ANSI escape sequences)
16-
GREEN="\033[32m"
17-
RED="\033[31m"
18-
YELLOW="\033[33m"
19-
BLUE="\033[34m"
20-
NC="\033[0m"
38+
sync
39+
sleep 1
2140

2241
NUM_CPUS=$(nproc)
23-
printf "${YELLOW}Detected %s CPU cores.${NC}\n" "$NUM_CPUS"
42+
log_info "Detected $NUM_CPUS CPU cores."
2443

2544
overall_pass=0
2645
status_dir="/tmp/cpufreq_status.$$"
2746
mkdir -p "$status_dir"
2847

2948
validate_cpu_core() {
30-
local cpu=$1
31-
local core_id=$2
32-
status_file="$status_dir/core_$core_id"
49+
local cpu="$1"
50+
local core_id="$2"
51+
local status_file="$status_dir/core_$core_id"
52+
echo "unknown" > "$status_file"
3353

34-
printf "${BLUE}Processing %s...${NC}\n" "$cpu"
54+
log_info "Processing $cpu..."
55+
56+
local cpu_num
57+
cpu_num=$(basename "$cpu" | tr -dc '0-9')
58+
if [ -f "/sys/devices/system/cpu/cpu$cpu_num/online" ]; then
59+
echo 1 > "/sys/devices/system/cpu/cpu$cpu_num/online"
60+
fi
3561

3662
if [ ! -d "$cpu/cpufreq" ]; then
37-
printf "${BLUE}[SKIP]${NC} %s does not support cpufreq.\n" "$cpu"
63+
log_info "[SKIP] $cpu does not support cpufreq."
3864
echo "skip" > "$status_file"
3965
return
4066
fi
4167

42-
available_freqs=$(cat "$cpu/cpufreq/scaling_available_frequencies" 2>/dev/null)
43-
68+
local freqs_file="$cpu/cpufreq/scaling_available_frequencies"
69+
read -r available_freqs < "$freqs_file" 2>/dev/null
4470
if [ -z "$available_freqs" ]; then
45-
printf "${YELLOW}[INFO]${NC} No available frequencies for %s. Skipping...\n" "$cpu"
71+
log_info "[SKIP] No available frequencies for $cpu"
4672
echo "skip" > "$status_file"
4773
return
4874
fi
4975

50-
if echo "userspace" | tee "$cpu/cpufreq/scaling_governor" > /dev/null; then
51-
printf "${YELLOW}[INFO]${NC} Set governor to userspace.\n"
76+
local original_governor
77+
original_governor=$(cat "$cpu/cpufreq/scaling_governor" 2>/dev/null)
78+
79+
if echo "userspace" > "$cpu/cpufreq/scaling_governor"; then
80+
log_info "[INFO] Set governor to userspace."
81+
sync
82+
sleep 0.5
5283
else
53-
printf "${RED}[ERROR]${NC} Cannot set userspace governor for %s.\n" "$cpu"
84+
log_error "Cannot set userspace governor for $cpu."
5485
echo "fail" > "$status_file"
5586
return
5687
fi
@@ -59,23 +90,46 @@ validate_cpu_core() {
5990

6091
for freq in $available_freqs; do
6192
log_info "Setting $cpu to frequency $freq kHz..."
62-
if echo "$freq" | tee "$cpu/cpufreq/scaling_setspeed" > /dev/null; then
93+
94+
echo "$freq" > "$cpu/cpufreq/scaling_min_freq" 2>/dev/null
95+
echo "$freq" > "$cpu/cpufreq/scaling_max_freq" 2>/dev/null
96+
97+
if ! echo "$freq" > "$cpu/cpufreq/scaling_setspeed" 2>/dev/null; then
98+
log_error "[SKIP] Kernel rejected freq $freq for $cpu"
99+
continue
100+
fi
101+
102+
retry=0
103+
success=0
104+
while [ "$retry" -lt 5 ]; do
105+
cur=$(cat "$cpu/cpufreq/scaling_cur_freq")
106+
if [ "$cur" = "$freq" ]; then
107+
log_info "[PASS] $cpu set to $freq kHz."
108+
success=1
109+
break
110+
fi
63111
sleep 0.2
64-
actual_freq=$(cat "$cpu/cpufreq/scaling_cur_freq")
65-
if [ "$actual_freq" = "$freq" ]; then
66-
printf "${GREEN}[PASS]${NC} %s set to %s kHz.\n" "$cpu" "$freq"
112+
retry=$((retry + 1))
113+
done
114+
115+
if [ "$success" -eq 0 ]; then
116+
log_info "[RETRY] Re-attempting to set $cpu to $freq kHz..."
117+
echo "$freq" > "$cpu/cpufreq/scaling_setspeed"
118+
sleep 0.3
119+
cur=$(cat "$cpu/cpufreq/scaling_cur_freq")
120+
if [ "$cur" = "$freq" ]; then
121+
log_info "[PASS-after-retry] $cpu set to $freq kHz."
67122
else
68-
printf "${RED}[FAIL]${NC} Tried to set %s to %s kHz, but current is %s kHz.\n" "$cpu" "$freq" "$actual_freq"
123+
log_error "[FAIL] $cpu failed to set $freq kHz twice. Current: $cur"
69124
echo "fail" > "$status_file"
70125
fi
71-
else
72-
printf "${RED}[ERROR]${NC} Failed to set %s to %s kHz.\n" "$cpu" "$freq"
73-
echo "fail" > "$status_file"
74126
fi
75127
done
76128

77-
echo "Restoring $cpu governor to 'ondemand'..."
78-
echo "ondemand" | sudo tee "$cpu/cpufreq/scaling_governor" > /dev/null
129+
log_info "Restoring $cpu governor to '$original_governor'..."
130+
echo "$original_governor" > "$cpu/cpufreq/scaling_governor"
131+
echo 0 > "$cpu/cpufreq/scaling_min_freq" 2>/dev/null
132+
echo 0 > "$cpu/cpufreq/scaling_max_freq" 2>/dev/null
79133
}
80134

81135
cpu_index=0
@@ -93,36 +147,34 @@ for status_file in "$status_dir"/core_*; do
93147
status=$(cat "$status_file")
94148
case "$status" in
95149
pass)
96-
printf "CPU%s: ${GREEN}[PASS]${NC}\n" "$idx"
150+
log_info "CPU$idx: [PASS]"
97151
;;
98152
fail)
99-
printf "CPU%s: ${RED}[FAIL]${NC}\n" "$idx"
153+
log_error "CPU$idx: [FAIL]"
100154
overall_pass=1
101155
;;
102156
skip)
103-
printf "CPU%s: ${BLUE}[SKIPPED]${NC}\n" "$idx"
157+
log_info "CPU$idx: [SKIPPED]"
104158
;;
105159
*)
106-
printf "CPU%s: ${RED}[UNKNOWN STATUS]${NC}\n" "$idx"
160+
log_error "CPU$idx: [UNKNOWN STATUS]"
107161
overall_pass=1
108162
;;
109163
esac
110164
done
111165

112166
log_info ""
113167
log_info "=== Overall CPUFreq Validation Result ==="
168+
114169
if [ "$overall_pass" -eq 0 ]; then
115-
printf "${GREEN}[OVERALL PASS]${NC} All CPUs validated successfully.\n"
116170
log_pass "$TESTNAME : Test Passed"
117-
echo "$TESTNAME PASS" > "$test_path/$TESTNAME.res"
118-
rm -r "$status_dir"
119-
exit 0
171+
echo "$TESTNAME PASS" > "$res_file"
120172
else
121-
printf "${RED}[OVERALL FAIL]${NC} Some CPUs failed frequency validation.\n"
122173
log_fail "$TESTNAME : Test Failed"
123-
echo "$TESTNAME FAIL" > "$test_path/$TESTNAME.res"
124-
rm -r "$status_dir"
125-
exit 1
174+
echo "$TESTNAME FAIL" > "$res_file"
126175
fi
127176

128-
log_info "-------------------Completed $TESTNAME Testcase----------------------------"
177+
rm -r "$status_dir"
178+
sync
179+
sleep 1
180+
exit "$overall_pass"

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

Lines changed: 32 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,40 @@
44
# SPDX-License-Identifier: BSD-3-Clause-Clear
55

66
# Import test suite definitions
7-
. "${PWD}"/init_env
8-
TESTNAME="GIC"
7+
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
8+
ROOT_DIR="$SCRIPT_DIR"
9+
while [ "$ROOT_DIR" != "/" ]; do
10+
if [ -d "$ROOT_DIR/utils" ] && [ -d "$ROOT_DIR/suites" ]; then
11+
break
12+
fi
13+
ROOT_DIR=$(dirname "$ROOT_DIR")
14+
done
15+
16+
if [ ! -d "$ROOT_DIR/utils" ] || [ ! -f "$ROOT_DIR/utils/functestlib.sh" ]; then
17+
echo "[ERROR] Could not detect testkit root (missing utils/ or functestlib.sh)" >&2
18+
exit 1
19+
fi
20+
21+
TOOLS="$ROOT_DIR/utils"
22+
INIT_ENV="$ROOT_DIR/init_env"
23+
FUNCLIB="$TOOLS/functestlib.sh"
924

10-
#import test functions library
11-
. "${TOOLS}"/functestlib.sh
25+
[ -f "$INIT_ENV" ] && . "$INIT_ENV"
26+
. "$FUNCLIB"
27+
28+
__RUNNER_SUITES_DIR="${__RUNNER_SUITES_DIR:-$ROOT_DIR/suites}"
29+
30+
TESTNAME="GIC"
1231
test_path=$(find_test_case_by_name "$TESTNAME")
32+
cd "$test_path" || exit 1
33+
res_file="./$TESTNAME.res"
34+
1335
log_info "-----------------------------------------------------------------------------------------"
1436
log_info "-------------------Starting $TESTNAME Testcase----------------------------"
37+
log_info "=== Test Initialization ==="
38+
39+
sync
40+
sleep 1
1541

1642
# Function to get the timer count
1743
get_timer_count() {
@@ -58,10 +84,10 @@ echo "$initial_count" | while read -r line; do
5884
echo $fail_test
5985
if [ "$fail_test" = false ]; then
6086
log_pass "$TESTNAME : Test Passed"
61-
echo "$TESTNAME PASS" > $test_path/$TESTNAME.res
87+
echo "$TESTNAME PASS" > "$res_file"
6288
else
6389
log_fail "$TESTNAME : Test Failed"
64-
echo "$TESTNAME FAIL" > $test_path/$TESTNAME.res
90+
echo "$TESTNAME FAIL" > "$res_file"
6591
fi
6692
done
6793
log_info "-------------------Completed $TESTNAME Testcase----------------------------"

0 commit comments

Comments
 (0)