blob: 2a62225c76dd9a46babf2a6ffeea5c66c4514335 [file] [log] [blame]
#!/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