|
|
|
#!/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
|