Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  module.sh   Sprache: Shell

 
#!/bin/bash
# SPDX-License-Identifier: GPL-2.0
#
# 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

# Check basic insmod/rmmod
# $1: module
test_basic_insmod_rmmod()
{
 printf "** Test: Running ${FUNCNAME[0]} **\n\n"

 printf "Inserting $1 module\n"
 # insert module
 insmod $1
 if [ $? != 0 ]; then
  ktap_exit_fail_msg "Insmod $1 failed\n"
 fi

 printf "Removing $1 module\n"
 # remove module
 rmmod $1
 if [ $? != 0 ]; then
  ktap_exit_fail_msg "rmmod $1 failed\n"
 fi

 printf "\n"
}

# Insert cpufreq driver module and perform basic tests
# $1: cpufreq-driver module to insert
# $2: If we want to play with CPUs (1) or not (0)
module_driver_test_single()
{
 printf "** Test: Running ${FUNCNAME[0]} for driver $1 and cpus_hotplug=$2 **\n\n"

 if [ $2 -eq 1 ]; then
  # offline all non-boot CPUs
  for_each_non_boot_cpu offline_cpu
  printf "\n"
 fi

 # insert module
 printf "Inserting $1 module\n\n"
 insmod $1
 if [ $? != 0 ]; then
  printf "Insmod $1 failed\n"
  return;
 fi

 if [ $2 -eq 1 ]; then
  # online all non-boot CPUs
  for_each_non_boot_cpu online_cpu
  printf "\n"
 fi

 # run basic tests
 cpufreq_basic_tests

 # remove module
 printf "Removing $1 module\n\n"
 rmmod $1
 if [ $? != 0 ]; then
  printf "rmmod $1 failed\n"
  return;
 fi

 # There shouldn't be any cpufreq directories now.
 for_each_cpu cpu_should_not_have_cpufreq_directory
 printf "\n"
}

# $1: cpufreq-driver module to insert
module_driver_test()
{
 printf "** Test: Running ${FUNCNAME[0]} **\n\n"

 # check if module is present or not
 ls $1 > /dev/null
 if [ $? != 0 ]; then
  printf "$1: not present in `pwd` folder\n"
  return;
 fi

 # test basic module tests
 test_basic_insmod_rmmod $1

 # Do simple module test
 module_driver_test_single $1 0

 # Remove CPUs before inserting module and then bring them back
 module_driver_test_single $1 1
 printf "\n"
}

# find governor name based on governor module name
# $1: governor module name
find_gov_name()
{
 if [ $1 = "cpufreq_ondemand.ko" ]; then
  printf "ondemand"
 elif [ $1 = "cpufreq_conservative.ko" ]; then
  printf "conservative"
 elif [ $1 = "cpufreq_userspace.ko" ]; then
  printf "userspace"
 elif [ $1 = "cpufreq_performance.ko" ]; then
  printf "performance"
 elif [ $1 = "cpufreq_powersave.ko" ]; then
  printf "powersave"
 elif [ $1 = "cpufreq_schedutil.ko" ]; then
  printf "schedutil"
 fi
}

# $1: governor string, $2: governor module, $3: policy
# example: module_governor_test_single "ondemand" "cpufreq_ondemand.ko" 2
module_governor_test_single()
{
 printf "** Test: Running ${FUNCNAME[0]} for $3 **\n\n"

 backup_governor $3

 # switch to new governor
 printf "Switch from $CUR_GOV to $1\n"
 switch_show_governor $3 $1

 # try removing module, it should fail as governor is used
 printf "Removing $2 module\n\n"
 rmmod $2
 if [ $? = 0 ]; then
  printf "WARN: rmmod $2 succeeded even if governor is used\n"
  insmod $2
 else
  printf "Pass: unable to remove $2 while it is being used\n\n"
 fi

 # switch back to old governor
 printf "Switchback to $CUR_GOV from $1\n"
 restore_governor $3
 printf "\n"
}

# Insert cpufreq governor module and perform basic tests
# $1: cpufreq-governor module to insert
module_governor_test()
{
 printf "** Test: Running ${FUNCNAME[0]} **\n\n"

 # check if module is present or not
 ls $1 > /dev/null
 if [ $? != 0 ]; then
  printf "$1: not present in `pwd` folder\n"
  return;
 fi

 # test basic module tests
 test_basic_insmod_rmmod $1

 # insert module
 printf "Inserting $1 module\n\n"
 insmod $1
 if [ $? != 0 ]; then
  printf "Insmod $1 failed\n"
  return;
 fi

 # switch to new governor for each cpu
 for_each_policy module_governor_test_single $(find_gov_name $1) $1

 # remove module
 printf "Removing $1 module\n\n"
 rmmod $1
 if [ $? != 0 ]; then
  printf "rmmod $1 failed\n"
  return;
 fi
 printf "\n"
}

# test modules: driver and governor
# $1: driver module, $2: governor module
module_test()
{
 printf "** Test: Running ${FUNCNAME[0]} **\n\n"

 # check if modules are present or not
 ls $1 $2 > /dev/null
 if [ $? != 0 ]; then
  printf "$1 or $2: is not present in `pwd` folder\n"
  return;
 fi

 # TEST1: Insert gov after driver
 # insert driver module
 printf "Inserting $1 module\n\n"
 insmod $1
 if [ $? != 0 ]; then
  printf "Insmod $1 failed\n"
  return;
 fi

 # run governor tests
 module_governor_test $2

 # remove driver module
 printf "Removing $1 module\n\n"
 rmmod $1
 if [ $? != 0 ]; then
  printf "rmmod $1 failed\n"
  return;
 fi

 # TEST2: Insert driver after governor
 # insert governor module
 printf "Inserting $2 module\n\n"
 insmod $2
 if [ $? != 0 ]; then
  printf "Insmod $2 failed\n"
  return;
 fi

 # run governor tests
 module_driver_test $1

 # remove driver module
 printf "Removing $2 module\n\n"
 rmmod $2
 if [ $? != 0 ]; then
  printf "rmmod $2 failed\n"
  return;
 fi
}

Messung V0.5
C=95 H=97 G=95

¤ Dauer der Verarbeitung: 0.18 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge