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.
 
 
 
 
 
 

152 lines
4.5 KiB

#!/bin/bash
# This file is part of dracut.
# SPDX-License-Identifier: GPL-2.0-or-later
TEST_DESCRIPTION="dracut getarg command"
test_check() {
return 0
}
test_setup() {
make -C "$basedir" dracut-util
ln -sfnr "$basedir"/dracut-util "$TESTDIR"/dracut-getarg
ln -sfnr "$basedir"/dracut-util "$TESTDIR"/dracut-getargs
ln -sfnr "$basedir"/modules.d/99base/dracut-lib.sh "$TESTDIR"/dracut-lib.sh
return 0
}
test_run() {
set -x
(
cd "$TESTDIR"
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
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")
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-lib.sh
debug_off() {
:
}
debug_on() {
:
}
getcmdline() {
echo "rdbreak=cmdline rd.lvm 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=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
}
. $testdir/test-functions