108 lines
1.9 KiB
Bash
Executable File
108 lines
1.9 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# Test Case 6 - top
|
|
#
|
|
|
|
export TCID="cpuhotplug06"
|
|
export TST_TOTAL=1
|
|
|
|
# Includes:
|
|
. test.sh
|
|
. cpuhotplug_testsuite.sh
|
|
. cpuhotplug_hotplug.sh
|
|
|
|
cat <<EOF
|
|
Name: $TCID
|
|
Date: `date`
|
|
Desc: Does top work properly when CPU hotplug events occur?
|
|
|
|
EOF
|
|
|
|
usage()
|
|
{
|
|
cat << EOF
|
|
usage: $0 -c cpu -l loop
|
|
|
|
OPTIONS
|
|
-c cpu which is specified for testing
|
|
-l number of cycle test
|
|
|
|
EOF
|
|
exit 1
|
|
}
|
|
|
|
do_clean()
|
|
{
|
|
pid_is_valid ${TOP_PID} && kill_pid ${TOP_PID}
|
|
}
|
|
|
|
while getopts c:l: OPTION; do
|
|
case $OPTION in
|
|
c)
|
|
CPU_TO_TEST=$OPTARG;;
|
|
l)
|
|
HOTPLUG06_LOOPS=$OPTARG;;
|
|
?)
|
|
usage;;
|
|
esac
|
|
done
|
|
|
|
LOOP_COUNT=1
|
|
|
|
if top -v | grep -q htop; then
|
|
tst_brkm TCONF "htop is used instead of top (workaround: alias top='/path/to/real/top')"
|
|
fi
|
|
|
|
if [ $(get_present_cpus_num) -lt 2 ]; then
|
|
tst_brkm TCONF "system doesn't have required CPU hotplug support"
|
|
fi
|
|
|
|
if [ -z "$CPU_TO_TEST" ]; then
|
|
tst_brkm TBROK "Usage: ${0##*/} <CPU to offline>"
|
|
fi
|
|
|
|
# Verify that the specified CPU is available
|
|
if ! cpu_is_valid "${CPU_TO_TEST}" ; then
|
|
tst_brkm TCONF "cpu${CPU_TO_TEST} doesn't support hotplug"
|
|
fi
|
|
|
|
# Check that the specified CPU is online; if not, online it
|
|
if ! cpu_is_online "${CPU_TO_TEST}" ; then
|
|
if ! online_cpu ${CPU_TO_TEST}; then
|
|
tst_brkm TBROK "CPU${CPU_TO_TEST} cannot be onlined"
|
|
fi
|
|
fi
|
|
|
|
TST_CLEANUP=do_clean
|
|
|
|
until [ $LOOP_COUNT -gt $HOTPLUG06_LOOPS ]; do
|
|
# Start up top and give it a little time to run
|
|
top -b -d 00.10 > /dev/null 2>&1 &
|
|
TOP_PID=$!
|
|
sleep 1
|
|
|
|
# Now offline the CPU
|
|
if ! offline_cpu ${CPU_TO_TEST} ; then
|
|
tst_brkm TBROK "CPU${CPU_TO_TEST} cannot be offlined"
|
|
fi
|
|
|
|
# Wait a little time for top to notice the CPU is gone
|
|
sleep 1
|
|
|
|
# Check that top hasn't crashed
|
|
if ! pid_is_valid ${TOP_PID} ; then
|
|
tst_resm TFAIL "PID ${TOP_PID} no longer running"
|
|
tst_exit
|
|
fi
|
|
|
|
online_cpu ${CPU_TO_TEST}
|
|
kill_pid ${TOP_PID}
|
|
|
|
LOOP_COUNT=$((LOOP_COUNT+1))
|
|
|
|
done
|
|
|
|
tst_resm TPASS "PID ${TOP_PID} still running."
|
|
|
|
tst_exit
|