diff options
Diffstat (limited to 'test/TEST-98-GETARG/test.sh')
-rwxr-xr-x | test/TEST-98-GETARG/test.sh | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/test/TEST-98-GETARG/test.sh b/test/TEST-98-GETARG/test.sh new file mode 100755 index 0000000..8f628a2 --- /dev/null +++ b/test/TEST-98-GETARG/test.sh @@ -0,0 +1,159 @@ +#!/bin/bash + +# This file is part of dracut. +# SPDX-License-Identifier: GPL-2.0-or-later + +# shellcheck disable=SC2034 +TEST_DESCRIPTION="dracut getarg command" + +test_check() { + if ! [[ -x "$PKGLIBDIR/dracut-util" ]]; then + echo "Test needs dracut-util... Skipping" + return 1 + fi +} + +test_setup() { + ln -sfnr "$PKGLIBDIR"/dracut-util "$TESTDIR"/dracut-getarg + ln -sfnr "$PKGLIBDIR"/dracut-util "$TESTDIR"/dracut-getargs + ln -sfnr "$PKGLIBDIR"/modules.d/99base/dracut-lib.sh "$TESTDIR"/dracut-lib.sh + ln -sfnr "$PKGLIBDIR"/modules.d/99base/dracut-dev-lib.sh "$TESTDIR"/dracut-dev-lib.sh + return 0 +} + +test_run() { + set -x + ( + cd "$TESTDIR" || exit 1 + export CMDLINE='key1=0 key2=val key2=val2 key3=" val 3 " " key 4 ="val4 "key 5=val 5" "key 6=""val 6" key7="foo"bar" baz="end " key8 = val 8 " +"key 9"="val 9"' + + ret=0 + + unset TEST + declare -A TEST + TEST=( + ["key1"]="0" + ["key2"]="val2" + ["key3"]=" val 3 " + [" key 4 "]="val4" + ["key 5"]="val 5" + ["key 6"]='"val 6' + ["key7"]='foo"bar" baz="end' + [" key8 "]=" val 8 " + ['key 9"']="val 9" + ) + for key in "${!TEST[@]}"; do + if ! val=$(./dracut-getarg "${key}="); then + echo "'$key' == '${TEST[$key]}', but not found" >&2 + ret=$((ret + 1)) + else + if [[ $val != "${TEST[$key]}" ]]; then + echo "'$key' != '${TEST[$key]}' but '$val'" >&2 + ret=$((ret + 1)) + fi + fi + done + + declare -a INVALIDKEYS + + INVALIDKEYS=("key" "4" "5" "6" "key8" "9" '"' "baz") + for key in "${INVALIDKEYS[@]}"; do + val=$(./dracut-getarg "$key") + # shellcheck disable=SC2181 + if (($? == 0)); then + echo "key '$key' should not be found" + ret=$((ret + 1)) + fi + # must have no output + [[ $val ]] && ret=$((ret + 1)) + done + + RESULT=("val" "val2") + readarray -t args < <(./dracut-getargs "key2=") + ((${#RESULT[@]} == ${#args[@]})) || ret=$((ret + 1)) + for ((i = 0; i < ${#RESULT[@]}; i++)); do + [[ ${args[$i]} == "${RESULT[$i]}" ]] || ret=$((ret + 1)) + done + + val=$(./dracut-getarg "key1") || ret=$((ret + 1)) + [[ $val == "0" ]] || ret=$((ret + 1)) + + val=$(./dracut-getarg "key2=val") && ret=$((ret + 1)) + # must have no output + [[ $val ]] && ret=$((ret + 1)) + val=$(./dracut-getarg "key2=val2") || ret=$((ret + 1)) + # must have no output + [[ $val ]] && ret=$((ret + 1)) + + export PATH=".:$PATH" + + . dracut-dev-lib.sh + . dracut-lib.sh + + debug_off() { + : + } + + debug_on() { + : + } + + getcmdline() { + echo "rdbreak=cmdline rd.lvm rd.auto=0 rd.auto rd.retry=10" + } + RDRETRY=$(getarg rd.retry -d 'rd_retry=') + [[ $RDRETRY == "10" ]] || ret=$((ret + 1)) + getarg rd.break=cmdline -d rdbreak=cmdline || ret=$((ret + 1)) + getargbool 1 rd.lvm -d -n rd_NO_LVM || ret=$((ret + 1)) + getargbool 0 rd.auto || ret=$((ret + 1)) + + getcmdline() { + echo "rd.break=cmdlined rd.lvm=0 rd.auto rd.auto=1 rd.auto=0" + } + getarg rd.break=cmdline -d rdbreak=cmdline && ret=$((ret + 1)) + getargbool 1 rd.lvm -d -n rd_NO_LVM && ret=$((ret + 1)) + getargbool 0 rd.auto && ret=$((ret + 1)) + + getcmdline() { + echo "ip=a ip=b ip=dhcp6" + } + getargs "ip=dhcp6" &> /dev/null || ret=$((ret + 1)) + readarray -t args < <(getargs "ip=") + RESULT=("a" "b" "dhcp6") + ((${#RESULT[@]} || ${#args[@]})) || ret=$((ret + 1)) + for ((i = 0; i < ${#RESULT[@]}; i++)); do + [[ ${args[$i]} == "${RESULT[$i]}" ]] || ret=$((ret + 1)) + done + + getcmdline() { + echo "bridge bridge=val" + } + readarray -t args < <(getargs bridge=) + RESULT=("bridge" "val") + ((${#RESULT[@]} == ${#args[@]})) || ret=$((ret + 1)) + for ((i = 0; i < ${#RESULT[@]}; i++)); do + [[ ${args[$i]} == "${RESULT[$i]}" ]] || ret=$((ret + 1)) + done + + getcmdline() { + echo "rd.break rd.md.uuid=bf96e457:230c9ad4:1f3e59d6:745cf942 rd.md.uuid=bf96e457:230c9ad4:1f3e59d6:745cf943 rd.shell" + } + readarray -t args < <(getargs rd.md.uuid -d rd_MD_UUID=) + RESULT=("bf96e457:230c9ad4:1f3e59d6:745cf942" "bf96e457:230c9ad4:1f3e59d6:745cf943") + ((${#RESULT[@]} == ${#args[@]})) || ret=$((ret + 1)) + for ((i = 0; i < ${#RESULT[@]}; i++)); do + [[ ${args[$i]} == "${RESULT[$i]}" ]] || ret=$((ret + 1)) + done + + return $ret + ) +} + +test_cleanup() { + rm -fr -- "$TESTDIR"/*.rpm + return 0 +} + +# shellcheck disable=SC1090 +. "$testdir"/test-functions |