diff options
Diffstat (limited to 'module-tests.sh')
-rwxr-xr-x | module-tests.sh | 184 |
1 files changed, 184 insertions, 0 deletions
diff --git a/module-tests.sh b/module-tests.sh new file mode 100755 index 0000000..909b114 --- /dev/null +++ b/module-tests.sh @@ -0,0 +1,184 @@ +#!/bin/bash +# +# Modules specific tests cases + +# protect against multiple inclusion +if [ $FILE_MODULE ]; then + return 0 +else + FILE_MODULE=DONE +fi + +source cpu.sh +source cpufreq.sh +source governor.sh + +# Insert cpufreq driver module and perform basic tests +# $1: cpufreq-driver module to insert +# $3: If we want to play with CPUs (1) or not (0) +module_driver_test_prepare() +{ + if [ $3 = 1 ]; then + # offline all non-boot CPUs + for_each_non_boot_cpu offline_cpu + fi + + # insert module + insmod $1 + if [ $? != 0 ]; then + echo "Insmod $1 failed" + return; + fi + + if [ $3 = 1 ]; then + # online all non-boot CPUs + for_each_non_boot_cpu online_cpu + fi + + # run basic tests + cpufreq_basic_tests + + # remove module + rmmod $1 + if [ $? != 0 ]; then + echo "rmmod $1 failed" + return; + fi + + # There shouldn't be any cpufreq directories now. + for_each_cpu cpu_should_not_have_cpufreq_directory +} + +# $1: cpufreq-driver module to insert +module_driver_test() +{ + # check if module is present or not + ls $1 > /dev/null + if [ $? != 0 ]; then + echo "$1: not present in `pwd` folder" + return; + fi + + # Do simple module test + module_driver_test_prepare $1 0 + + # Remove CPUs before inserting module and then bring them back + module_driver_test_prepare $1 1 +} + +# find governor name based on governor module name +# $1: governor module name +find_gov_name() +{ + if [ $1 = "cpufreq_ondemand.ko" ]; then + echo "ondemand" + elif [ $1 = "cpufreq_conservative.ko" ]; then + echo "conservative" + elif [ $1 = "cpufreq_userspace.ko" ]; then + echo "userspace" + elif [ $1 = "cpufreq_performance.ko" ]; then + echo "performance" + elif [ $1 = "cpufreq_powersave.ko" ]; then + echo "powersave" + elif [ $1 = "cpufreq_interactive.ko" ]; then + echo "interactive" # not in mainline, but android + fi +} + +# $1: governor string, $2: governor module, $3: cpu +# example: module_governor_test_prepare_cpu "ondemand" "cpufreq_ondemand.ko" 2 +module_governor_test_prepare_cpu() +{ + # save old governor + old_gov=$(cat $CPU_PATH/$3/cpufreq/scaling_governor) + + # switch to new governor + switch_show_governor $3 $1 + + # try removing module, it should fail as governor is used + rmmod $2 + if [ $? = 0 ]; then + echo "WARN: rmmod $2 succeeded even if governor is used" + insmod $2 + fi + + # switch back to old governor + switch_show_governor $3 $old_gov +} + +# Insert cpufreq governor module and perform basic tests +# $1: cpufreq-governor module to insert +module_governor_test() +{ + # check if module is present or not + ls $1 > /dev/null + if [ $? != 0 ]; then + echo "$1: not present in `pwd` folder" + return; + fi + + # insert module + insmod $1 + if [ $? != 0 ]; then + echo "Insmod $1 failed" + return; + fi + + # switch to new governor for each cpu + for_each_cpu module_governor_test_prepare_cpu $(find_gov_name $1) $1 + + # remove module + rmmod $1 + if [ $? != 0 ]; then + echo "rmmod $1 failed" + return; + fi +} + +# test modules: driver and governor +# $1: driver module, $2: governor module +module_test() +{ + # check if modules are present or not + ls $1 $2 > /dev/null + if [ $? != 0 ]; then + echo "$1 or $2: is not present in `pwd` folder" + return; + fi + + # TEST1: Insert gov after driver + # insert driver module + insmod $1 + if [ $? != 0 ]; then + echo "Insmod $1 failed" + return; + fi + + # run governor tests + module_governor_test $2 + + # remove driver module + rmmod $1 + if [ $? != 0 ]; then + echo "rmmod $1 failed" + return; + fi + + # TEST2: Insert driver after governor + # insert governor module + insmod $2 + if [ $? != 0 ]; then + echo "Insmod $2 failed" + return; + fi + + # run governor tests + module_driver_test $1 + + # remove driver module + rmmod $2 + if [ $? != 0 ]; then + echo "rmmod $2 failed" + return; + fi +} |