From f0a42c3710acf79d236a1693334849016dbd1d48 Mon Sep 17 00:00:00 2001 From: Justin M. Forbes Date: May 25 2012 17:48:54 +0000 Subject: initial commit for fedorahosted tree --- diff --git a/default/defaultpass/runtest.sh b/default/defaultpass/runtest.sh new file mode 100755 index 0000000..b44a7a7 --- /dev/null +++ b/default/defaultpass/runtest.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +echo "sample test from the default directory, should always pass" + +exit 0 diff --git a/destructive/destructivepass/runtest.sh b/destructive/destructivepass/runtest.sh new file mode 100755 index 0000000..53a6967 --- /dev/null +++ b/destructive/destructivepass/runtest.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +echo "sample test from the destructive directory, should always pass" + +exit 0 diff --git a/documentation.txt b/documentation.txt new file mode 100644 index 0000000..d731eaf --- /dev/null +++ b/documentation.txt @@ -0,0 +1,79 @@ +=== Running Tests === + +In the simplest of terms, simply run the runtests.sh script with no arguments. +This will run the default tests, which include all tests in the minimal and +default directories. Right now the only supported arg is -t which +will specify a different test set to run. Valid test sets are: + +minimal - only runs tests in the minimal directory +default - runs tests in both minimal and default +stress - runs tests in minimal, default, and stress +destructive - runs tests in minimal, default, and destructive + +If you choose destructive it will ask if you are sure. If you say no, it will +run default instead. More descriptive output should be in the logfile, in the +logs directory. + +=== Writing Tests === + +While a test can actually be any sort of executable, it is expected that +these tests will follow certain basic criteria. This helps to ensure that +the test suite is easy to interpret. The output is controlled by the +master script, and output is in the form of pass, fail, or skipped. All +other output is redirected to the log file. + +Return Codes: +0 - A successful test completion +3 - Test skipped +Anything else is interpreted as fail and the user is asked to check the log +for more details. + +Clean up: +Each test should clean up after itself. Residue from a test should never +impact any other test. If you are creating something, destroy it when you +finish. + +Directory Structure: +Each test should be contained in a unique directory within the appropriate +top level. The directory must contain an executable 'runtest.sh' which will +drive the specific test. There is no guarantee on the order of execution. +Each test should be fully independent, and have no dependency on other tests. +The top level directories are reflective of how the master test suite is called. +Each option is a super-set of the options before it. At this time we have: + +minimal: This directory should include small, fast, and important tests +which would should be run on every system. + +default: This directory will include most tests which are not destructive, +or particularly long to run. When a user runs with no flags, all tests in +both default and minimal will be run. + +stress: This directory will include longer running and more resource intensive +tests which a user might not want to run in the common case due to time or +resource constraints. + +destructive: This directory contains tests which have a higher probability of +causing harm to a system even in the pass case. This would include things +like potential for data loss. + +Test Execution: +Each test is executed by the control script by calling runtest.sh. stdout +and stderr are both redirected to the log. Any user running with default +flags should see nothing but the name of the directory and pass/fail/skip. +The runtest.sh should manage the full test run. This includes compiling +any necessary source, checking for any specific dependencies, and skipping +if they are not met. + +Potential for harm: +It is expected that these test will be run on real systems. Any tests +which have increased risk of data loss or ill effects should be specified +destructive, and placed in the destructive directory. Users wishing to run +the full destructive test run are prompted loudly before it continues. The +last thing we want to do is make ordinary users afraid to run the test +suite. + +Utility: +As a large number of tests are written as simple shell scripts, and many of +these tests need to perform a series of the same functions, a "library" has +been created to allow for reuse. source the testutil file as needed. Any +functions added to testutil should be clearly commented with purpose and use. diff --git a/minimal/minimalfail/runtest.sh b/minimal/minimalfail/runtest.sh new file mode 100755 index 0000000..45312b3 --- /dev/null +++ b/minimal/minimalfail/runtest.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +echo "sample test from the minimal directory, should always pass" + +exit 32 diff --git a/minimal/minimalpass/runtest.sh b/minimal/minimalpass/runtest.sh new file mode 100755 index 0000000..20905d4 --- /dev/null +++ b/minimal/minimalpass/runtest.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +echo "sample test from the minimal directory, should always pass" + +exit 0 diff --git a/minimal/minimalskip/runtest.sh b/minimal/minimalskip/runtest.sh new file mode 100755 index 0000000..bc139dc --- /dev/null +++ b/minimal/minimalskip/runtest.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +echo "sample test from the minimal directory, should always skip" + +exit 3 diff --git a/runtests.sh b/runtests.sh new file mode 100755 index 0000000..5a86dec --- /dev/null +++ b/runtests.sh @@ -0,0 +1,96 @@ +#!/bin/bash + +date=$(date +%s) +topdir=$(pwd) +logfile=$topdir/logs/kernel-test-$date.log +verbose=n +testset=default + +kver=$(uname -r) +release=$(cat /etc/redhat-release) + + +args=y + +while [ $args = y ] +do + case "$1" in + -v) + #TO DO: Implement verbose behavior + verbose=y + shift 1 + ;; + -t) + testset=$2 + shift 2 + ;; + *) + args=n + esac +done + +case $testset in +minimal) + dirlist="minimal" + ;; +default) + dirlist="minimal default" + ;; +stress) + dirlist="minimal default stress" + ;; +destructive) + echo "You have specified the destructive test set" + echo "This test may cause damage to your system" + echo "Are you sure that you wish to continue?" + read continue + if [ $continue == 'y' ] ; then + dirlist="minimal default destructive" + else + dirlist="minimal default" + testset=default + fi + ;; +*) + echo "supported test sets are minimal default stress or destructive" + exit 1 +esac + + +#Basic logfile headers +echo "Date: $(date)" > $logfile +echo "Test set: $testset" >> $logfile +echo "Kernel: $kver" >> $logfile +echo "Release: $release" >> $logfile +echo "============================================================" >>$logfile + + + +#Start running tests +echo "Test suite called with $testset" + +for dir in $dirlist +do + for test in $(find ./$dir/ -name runtest.sh) + do + testdir=$(dirname $test) + pushd $testdir &>/dev/null + #TO DO: purpose file test name format + testname=$testdir + echo "Starting test $testname" >> $logfile + ./runtest.sh &>>$logfile + complete=$? + case $complete in + 0) + result=PASS + ;; + 3) + result=SKIP + ;; + *) + result=FAIL + esac + printf "%-65s%-8s\n" "$testname" "$result" + popd &>/dev/null + done +done diff --git a/stress/stresspass/runtest.sh b/stress/stresspass/runtest.sh new file mode 100755 index 0000000..1bebc72 --- /dev/null +++ b/stress/stresspass/runtest.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +echo "sample test from the stress directory, should always pass" + +exit 0