You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

165 lines
5.9 KiB

#!/bin/bash
PATH=/usr/sbin:/usr/bin:/sbin:/bin
export PATH
# shellcheck disable=SC1090
[[ -e .testdir${TEST_RUN_ID:+-$TEST_RUN_ID} ]] && . .testdir${TEST_RUN_ID:+-$TEST_RUN_ID}
if [[ -z $TESTDIR ]] || [[ ! -d $TESTDIR ]]; then
TESTDIR=$(mktemp -d -p "/var/tmp" -t dracut-test.XXXXXX)
fi
echo "TESTDIR=\"$TESTDIR\"" > .testdir${TEST_RUN_ID:+-$TEST_RUN_ID}
export TESTDIR
command -v test_check &> /dev/null || test_check() {
:
}
# terminal sequence to set color to a 'success' color (currently: green)
function SETCOLOR_SUCCESS() { echo -en '\033[0;32m'; }
# terminal sequence to set color to a 'failure' color (currently: red)
function SETCOLOR_FAILURE() { echo -en '\033[0;31m'; }
# terminal sequence to set color to a 'warning' color (currently: yellow)
function SETCOLOR_WARNING() { echo -en '\033[0;33m'; }
# terminal sequence to reset to the default color.
function SETCOLOR_NORMAL() { echo -en '\033[0;39m'; }
COLOR_SUCCESS='\033[0;32m'
COLOR_FAILURE='\033[0;31m'
COLOR_WARNING='\033[0;33m'
COLOR_NORMAL='\033[0;39m'
check_root() {
if ((EUID != 0)); then
SETCOLOR_FAILURE
echo "Tests must be run as root! Please use 'sudo'."
SETCOLOR_NORMAL
exit 1
fi
}
# generate qemu arguments for named raw disks
#
# qemu_add_drive_args <index> <args> <filename> <id-name> [<bootindex>]
#
# index: name of the index variable (set to 0 at start)
# args: name of the argument array variable (set to () at start)
# filename: filename of the raw disk image
# id-name: name of the disk in /dev/disk/by-id -> /dev/disk/by-id/ata-disk_$name
# bootindex: optional bootindex number
#
# to be used later with `qemu … "${args[@]}" …`
# The <index> variable will be incremented each time the function is called.
#
# can't be easier than this :-/
#
# # EXAMPLES
# ```
# declare -a disk_args=()
# declare -i disk_index=0
# qemu_add_drive_args disk_index disk_args "$TESTDIR"/root.ext3 root 1
# qemu_add_drive_args disk_index disk_args "$TESTDIR"/client.img client
# qemu_add_drive_args disk_index disk_args "$TESTDIR"/iscsidisk2.img iscsidisk2
# qemu_add_drive_args disk_index disk_args "$TESTDIR"/iscsidisk3.img iscsidisk3
# qemu "${disk_args[@]}"
# ```
qemu_add_drive_args() {
local index=${!1}
local file=$3
local name=${4:-$index}
local bootindex=$5
eval "${2}"'+=(' \
-drive "if=none,format=raw,file=${file},id=drive-sata${index}" \
-device "ide-hd,bus=ide.${index},drive=drive-sata${index},id=sata${index},${bootindex:+bootindex=$bootindex,}model=disk,serial=${name}" \
')'
# shellcheck disable=SC2219
let "${1}++"
}
while (($# > 0)); do
case $1 in
--run)
check_root
echo "TEST RUN: $TEST_DESCRIPTION"
test_check && test_run
exit $?
;;
--setup)
check_root
echo "TEST SETUP: $TEST_DESCRIPTION"
test_check && test_setup
exit $?
;;
--clean)
echo "TEST CLEANUP: $TEST_DESCRIPTION"
test_cleanup
rm -fr -- "$TESTDIR"
rm -f -- .testdir${TEST_RUN_ID:+-$TEST_RUN_ID}
exit $?
;;
--all)
check_root
if ! test_check 2 &> test${TEST_RUN_ID:+-$TEST_RUN_ID}.log; then
echo -e "TEST: $TEST_DESCRIPTION " "$COLOR_WARNING" "[SKIPPED]" "$COLOR_NORMAL"
exit 0
else
echo -e "TEST: $TEST_DESCRIPTION " "$COLOR_SUCCESS" "[STARTED]" "$COLOR_NORMAL"
fi
if [[ $V == "1" ]]; then
set -o pipefail
(
test_setup && test_run
ret=$?
test_cleanup
if ((ret != 0)) && [[ -f "$TESTDIR"/server.log ]]; then
mv "$TESTDIR"/server.log ./server${TEST_RUN_ID:+-$TEST_RUN_ID}.log
fi
rm -fr -- "$TESTDIR"
rm -f -- .testdir${TEST_RUN_ID:+-$TEST_RUN_ID}
exit $ret
) < /dev/null 2>&1 | tee "test${TEST_RUN_ID:+-$TEST_RUN_ID}.log"
elif [[ $V == "2" ]]; then
set -o pipefail
# shellcheck disable=SC2154
(
test_setup && test_run
ret=$?
test_cleanup
if ((ret != 0)) && [[ -f "$TESTDIR"/server.log ]]; then
mv "$TESTDIR"/server.log ./server${TEST_RUN_ID:+-$TEST_RUN_ID}.log
fi
rm -fr -- "$TESTDIR"
rm -f -- .testdir${TEST_RUN_ID:+-$TEST_RUN_ID}
exit $ret
) < /dev/null 2>&1 | "$basedir/logtee" "test${TEST_RUN_ID:+-$TEST_RUN_ID}.log"
else
(
test_setup && test_run
ret=$?
test_cleanup
rm -fr -- "$TESTDIR"
rm -f -- .testdir${TEST_RUN_ID:+-$TEST_RUN_ID}
exit $ret
) < /dev/null > test${TEST_RUN_ID:+-$TEST_RUN_ID}.log 2>&1
fi
ret=$?
set +o pipefail
if [ $ret -eq 0 ]; then
rm -- test${TEST_RUN_ID:+-$TEST_RUN_ID}.log
echo -e "TEST: $TEST_DESCRIPTION " "$COLOR_SUCCESS" "[OK]" "$COLOR_NORMAL"
else
echo -e "TEST: $TEST_DESCRIPTION " "$COLOR_FAILURE" "[FAILED]" "$COLOR_NORMAL"
if [ "$V" == "2" ]; then
tail -c 1048576 "$(pwd)/server${TEST_RUN_ID:+-$TEST_RUN_ID}.log" "$(pwd)/test${TEST_RUN_ID:+-$TEST_RUN_ID}.log"
echo -e "TEST: $TEST_DESCRIPTION " "$COLOR_FAILURE" "[FAILED]" "$COLOR_NORMAL"
else
echo "see $(pwd)/test${TEST_RUN_ID:+-$TEST_RUN_ID}.log"
fi
fi
exit $ret
;;
*) break ;;
esac
shift
done