|
Packit |
51d0f7 |
#!/bin/bash
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
#
|
|
Packit |
51d0f7 |
# NetLabel Tools regression test automation script
|
|
Packit |
51d0f7 |
#
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
#
|
|
Packit |
51d0f7 |
# This program is free software: you can redistribute it and/or modify
|
|
Packit |
51d0f7 |
# it under the terms of version 2 of the GNU General Public License as
|
|
Packit |
51d0f7 |
# published by the Free Software Foundation.
|
|
Packit |
51d0f7 |
#
|
|
Packit |
51d0f7 |
# This program is distributed in the hope that it will be useful,
|
|
Packit |
51d0f7 |
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
51d0f7 |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
Packit |
51d0f7 |
# GNU General Public License for more details.
|
|
Packit |
51d0f7 |
#
|
|
Packit |
51d0f7 |
# You should have received a copy of the GNU General Public License
|
|
Packit |
51d0f7 |
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
Packit |
51d0f7 |
#
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
export GLBL_NETLABELCTL="../netlabelctl/netlabelctl"
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
####
|
|
Packit |
51d0f7 |
# functions
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
#
|
|
Packit |
51d0f7 |
# Dependency check
|
|
Packit |
51d0f7 |
#
|
|
Packit |
51d0f7 |
# Arguments:
|
|
Packit |
51d0f7 |
# 1 Dependency to check for
|
|
Packit |
51d0f7 |
#
|
|
Packit |
51d0f7 |
function check_deps() {
|
|
Packit |
51d0f7 |
[[ -z "$1" ]] && return
|
|
Packit |
51d0f7 |
which "$1" >& /dev/null
|
|
Packit |
51d0f7 |
return $?
|
|
Packit |
51d0f7 |
}
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
#
|
|
Packit |
51d0f7 |
# Dependency verification
|
|
Packit |
51d0f7 |
#
|
|
Packit |
51d0f7 |
# Arguments:
|
|
Packit |
51d0f7 |
# 1 Dependency to check for
|
|
Packit |
51d0f7 |
#
|
|
Packit |
51d0f7 |
function verify_deps() {
|
|
Packit |
51d0f7 |
[[ -z "$1" ]] && return
|
|
Packit |
51d0f7 |
if ! check_deps "$1"; then
|
|
Packit |
51d0f7 |
echo "error: install \"$1\" and include it in your \$PATH"
|
|
Packit |
51d0f7 |
exit 1
|
|
Packit |
51d0f7 |
fi
|
|
Packit |
51d0f7 |
}
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
#
|
|
Packit |
51d0f7 |
# Print a test header to the log file
|
|
Packit |
51d0f7 |
#
|
|
Packit |
51d0f7 |
# Arguments:
|
|
Packit |
51d0f7 |
# 1 string containing test name
|
|
Packit |
51d0f7 |
# 2 string containing additional text
|
|
Packit |
51d0f7 |
#
|
|
Packit |
51d0f7 |
function print_test() {
|
|
Packit |
51d0f7 |
printf "Test %s %s\n" "$1" "$2" >&$logfd
|
|
Packit |
51d0f7 |
}
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
#
|
|
Packit |
51d0f7 |
# Print the test result to the log file
|
|
Packit |
51d0f7 |
#
|
|
Packit |
51d0f7 |
# Arguments:
|
|
Packit |
51d0f7 |
# 1 string containing test name
|
|
Packit |
51d0f7 |
# 2 string containing the test result (INFO, SUCCESS, ERROR, or FAILURE)
|
|
Packit |
51d0f7 |
# 3 string containing addition details
|
|
Packit |
51d0f7 |
#
|
|
Packit |
51d0f7 |
function print_result() {
|
|
Packit |
51d0f7 |
# stats update
|
|
Packit |
51d0f7 |
stats_all=$(($stats_all+1))
|
|
Packit |
51d0f7 |
case $2 in
|
|
Packit |
51d0f7 |
INFO)
|
|
Packit |
51d0f7 |
stats_skipped=$(($stats_skipped+1))
|
|
Packit |
51d0f7 |
;;
|
|
Packit |
51d0f7 |
SUCCESS)
|
|
Packit |
51d0f7 |
stats_success=$(($stats_success+1))
|
|
Packit |
51d0f7 |
;;
|
|
Packit |
51d0f7 |
FAILURE)
|
|
Packit |
51d0f7 |
stats_failure=$(($stats_failure+1))
|
|
Packit |
51d0f7 |
;;
|
|
Packit |
51d0f7 |
ERROR|*)
|
|
Packit |
51d0f7 |
stats_error=$(($stats_error+1))
|
|
Packit |
51d0f7 |
;;
|
|
Packit |
51d0f7 |
esac
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
# skip certain results
|
|
Packit |
51d0f7 |
if [[ $2 == "INFO" && -z $verbose ]]; then
|
|
Packit |
51d0f7 |
return
|
|
Packit |
51d0f7 |
fi
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
# output
|
|
Packit |
51d0f7 |
if [[ $3 == "" ]]; then
|
|
Packit |
51d0f7 |
printf "Test %-30s result: %s\n" "$1" "$2" >&$logfd
|
|
Packit |
51d0f7 |
else
|
|
Packit |
51d0f7 |
printf "Test %-30s result: %s %s\n" "$1" "$2" "$3" >&$logfd
|
|
Packit |
51d0f7 |
fi
|
|
Packit |
51d0f7 |
}
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
#
|
|
Packit |
51d0f7 |
# Print out script usage details
|
|
Packit |
51d0f7 |
#
|
|
Packit |
51d0f7 |
function usage() {
|
|
Packit |
51d0f7 |
cat << EOF
|
|
Packit |
51d0f7 |
usage: regression [-h] [-v] [-l <LOG>] [-s <SINGLE_TEST>]
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
NetLabel regression test automation script
|
|
Packit |
51d0f7 |
optional arguments:
|
|
Packit |
51d0f7 |
-h show this help message and exit
|
|
Packit |
51d0f7 |
-l LOG specifies log file to write test results to
|
|
Packit |
51d0f7 |
-s SINGLE_TEST specifies individual test number to be run
|
|
Packit |
51d0f7 |
-v specifies that verbose output be provided
|
|
Packit |
51d0f7 |
EOF
|
|
Packit |
51d0f7 |
}
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
#
|
|
Packit |
51d0f7 |
# Run the pre-test sanity checks
|
|
Packit |
51d0f7 |
#
|
|
Packit |
51d0f7 |
#
|
|
Packit |
51d0f7 |
function run_sanity() {
|
|
Packit |
51d0f7 |
local rc=0
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
echo " stage: sanity checks" >&$logfd
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
# netlabelctl check
|
|
Packit |
51d0f7 |
if [[ ! -x $GLBL_NETLABELCTL ]]; then
|
|
Packit |
51d0f7 |
rc=1
|
|
Packit |
51d0f7 |
print_result "00-sanity-build_check" "ERROR"
|
|
Packit |
51d0f7 |
else
|
|
Packit |
51d0f7 |
print_result "00-sanity-build_check" "SUCCESS"
|
|
Packit |
51d0f7 |
fi
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
# must be root
|
|
Packit |
51d0f7 |
if [[ $(id -u) -ne 0 ]]; then
|
|
Packit |
51d0f7 |
rc=1
|
|
Packit |
51d0f7 |
print_result "00-sanity-root_check" "ERROR" "(id == $(id -u))"
|
|
Packit |
51d0f7 |
else
|
|
Packit |
51d0f7 |
print_result "00-sanity-root_check" "SUCCESS"
|
|
Packit |
51d0f7 |
fi
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
# basic kernel support
|
|
Packit |
51d0f7 |
if ! $GLBL_NETLABELCTL mgmt version >& /dev/null; then
|
|
Packit |
51d0f7 |
rc=1
|
|
Packit |
51d0f7 |
print_result "00-sanity-kernel_check" "ERROR"
|
|
Packit |
51d0f7 |
else
|
|
Packit |
51d0f7 |
print_result "00-sanity-kernel_check" "SUCCESS"
|
|
Packit |
51d0f7 |
fi
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
return $rc
|
|
Packit |
51d0f7 |
}
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
#
|
|
Packit |
51d0f7 |
# Run an individual test
|
|
Packit |
51d0f7 |
#
|
|
Packit |
51d0f7 |
# Arguments:
|
|
Packit |
51d0f7 |
# 1 string containing test name
|
|
Packit |
51d0f7 |
#
|
|
Packit |
51d0f7 |
function run_test() {
|
|
Packit |
51d0f7 |
local rc
|
|
Packit |
51d0f7 |
local name="$(basename ${1//.tests/})"
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
# sanity check
|
|
Packit |
51d0f7 |
if [[ ! -x $1 ]]; then
|
|
Packit |
51d0f7 |
print_result "$name" "ERROR"
|
|
Packit |
51d0f7 |
return 1;
|
|
Packit |
51d0f7 |
fi
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
# run the test
|
|
Packit |
51d0f7 |
if [[ -z $verbose ]]; then
|
|
Packit |
51d0f7 |
($1) >& /dev/null
|
|
Packit |
51d0f7 |
else
|
|
Packit |
51d0f7 |
print_test "$name" "running ..."
|
|
Packit |
51d0f7 |
($1) >&$logfd
|
|
Packit |
51d0f7 |
fi
|
|
Packit |
51d0f7 |
rc=$?
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
# report on the results
|
|
Packit |
51d0f7 |
if [[ $rc -eq 0 ]]; then
|
|
Packit |
51d0f7 |
print_result "$name" "SUCCESS"
|
|
Packit |
51d0f7 |
else
|
|
Packit |
51d0f7 |
rc=1
|
|
Packit |
51d0f7 |
print_result "$name" "FAILURE"
|
|
Packit |
51d0f7 |
fi
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
return $rc
|
|
Packit |
51d0f7 |
}
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
#
|
|
Packit |
51d0f7 |
# Run the requested tests
|
|
Packit |
51d0f7 |
#
|
|
Packit |
51d0f7 |
function run_tests() {
|
|
Packit |
51d0f7 |
local rc=0
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
echo " stage: individual tests" >&$logfd
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
if [[ single_count -eq 0 ]]; then
|
|
Packit |
51d0f7 |
# loop through all the test files
|
|
Packit |
51d0f7 |
for test in $basedir/*.tests; do
|
|
Packit |
51d0f7 |
run_test $test
|
|
Packit |
51d0f7 |
done
|
|
Packit |
51d0f7 |
else
|
|
Packit |
51d0f7 |
# only run what was requested
|
|
Packit |
51d0f7 |
for test in $basedir/$single_list; do
|
|
Packit |
51d0f7 |
[[ ! -f $test ]] && test=$test.tests
|
|
Packit |
51d0f7 |
run_test $test
|
|
Packit |
51d0f7 |
done
|
|
Packit |
51d0f7 |
fi
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
return $rc
|
|
Packit |
51d0f7 |
}
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
####
|
|
Packit |
51d0f7 |
# main
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
verify_deps id
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
# global variables
|
|
Packit |
51d0f7 |
single_list=""
|
|
Packit |
51d0f7 |
singlecount=0
|
|
Packit |
51d0f7 |
logfile=
|
|
Packit |
51d0f7 |
logfd=
|
|
Packit |
51d0f7 |
tmpfile=""
|
|
Packit |
51d0f7 |
verbose=
|
|
Packit |
51d0f7 |
stats_all=0
|
|
Packit |
51d0f7 |
stats_skipped=0
|
|
Packit |
51d0f7 |
stats_success=0
|
|
Packit |
51d0f7 |
stats_failure=0
|
|
Packit |
51d0f7 |
stats_error=0
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
# set the test root directory
|
|
Packit |
51d0f7 |
basedir=$(dirname $0)
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
# parse the command line
|
|
Packit |
51d0f7 |
while getopts "l:s:vh" opt; do
|
|
Packit |
51d0f7 |
case $opt in
|
|
Packit |
51d0f7 |
l)
|
|
Packit |
51d0f7 |
logfile="$OPTARG"
|
|
Packit |
51d0f7 |
;;
|
|
Packit |
51d0f7 |
s)
|
|
Packit |
51d0f7 |
single_list+="$OPTARG "
|
|
Packit |
51d0f7 |
single_count=$(($single_count+1))
|
|
Packit |
51d0f7 |
;;
|
|
Packit |
51d0f7 |
v)
|
|
Packit |
51d0f7 |
verbose=1
|
|
Packit |
51d0f7 |
;;
|
|
Packit |
51d0f7 |
h|*)
|
|
Packit |
51d0f7 |
usage
|
|
Packit |
51d0f7 |
exit 1
|
|
Packit |
51d0f7 |
;;
|
|
Packit |
51d0f7 |
esac
|
|
Packit |
51d0f7 |
done
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
# open log file for append (default to stdout)
|
|
Packit |
51d0f7 |
if [[ -n $logfile ]]; then
|
|
Packit |
51d0f7 |
logfd=3
|
|
Packit |
51d0f7 |
exec 3>>"$logfile"
|
|
Packit |
51d0f7 |
else
|
|
Packit |
51d0f7 |
logfd=1
|
|
Packit |
51d0f7 |
fi
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
# open temporary file
|
|
Packit |
51d0f7 |
tmpfile=$(mktemp -t regression_XXXXXX)
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
# display the test output and run the requested tests
|
|
Packit |
51d0f7 |
echo "=============== $(date) ===============" >&$logfd
|
|
Packit |
51d0f7 |
echo "Regression Test Report (\"regression $*\")" >&$logfd
|
|
Packit |
51d0f7 |
sane=0
|
|
Packit |
51d0f7 |
if run_sanity; then
|
|
Packit |
51d0f7 |
# the system should be okay to run the full testsuite
|
|
Packit |
51d0f7 |
sane=1
|
|
Packit |
51d0f7 |
run_tests
|
|
Packit |
51d0f7 |
else
|
|
Packit |
51d0f7 |
# something went wrong in the sanity checks, return a 0 error code
|
|
Packit |
51d0f7 |
# so things like "make check" work, but display as normal
|
|
Packit |
51d0f7 |
sane=0
|
|
Packit |
51d0f7 |
fi
|
|
Packit |
51d0f7 |
echo "Regression Test Summary" >&$logfd
|
|
Packit |
51d0f7 |
echo " tests run: $stats_all" >&$logfd
|
|
Packit |
51d0f7 |
echo " tests skipped: $stats_skipped" >&$logfd
|
|
Packit |
51d0f7 |
echo " tests passed: $stats_success" >&$logfd
|
|
Packit |
51d0f7 |
echo " tests failed: $stats_failure" >&$logfd
|
|
Packit |
51d0f7 |
echo " tests errored: $stats_error" >&$logfd
|
|
Packit |
51d0f7 |
echo "============================================================" >&$logfd
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
# cleanup and exit
|
|
Packit |
51d0f7 |
rm -f $tmpfile
|
|
Packit |
51d0f7 |
rc=0
|
|
Packit |
51d0f7 |
[[ $stats_failure -gt 0 ]] && rc=$(($rc + 2))
|
|
Packit |
51d0f7 |
[[ $stats_error -gt 0 ]] && rc=$(($rc + 4))
|
|
Packit |
51d0f7 |
|
|
Packit |
51d0f7 |
if [[ $sane -eq 1 ]]; then
|
|
Packit |
51d0f7 |
exit $rc
|
|
Packit |
51d0f7 |
else
|
|
Packit |
51d0f7 |
exit 0
|
|
Packit |
51d0f7 |
fi
|