0ff44ca6e8
The function is pretty broken right now. To start with the -o/--omit option allows a quoted, space separated list of modules. But using 'set' breaks quotation and thus only considers the first element in the list. Furthermore dracut uses getopt internally. This means that it is also possible to pass the list via --omit=. Fix the function by making use of getopt for parsing the dracut_args. While at it also add a test cases to cover the functions. Signed-off-by: Philipp Rudo <prudo@redhat.com> Reviewed-by: Coiby Xu <coxu@redhat.com>
255 lines
7.9 KiB
Bash
255 lines
7.9 KiB
Bash
#!/bin/bash
|
|
Describe 'kdumpctl'
|
|
Include ./kdumpctl
|
|
|
|
Describe 'get_grub_kernel_boot_parameter()'
|
|
grubby() {
|
|
%text
|
|
#|index=1
|
|
#|kernel="/boot/vmlinuz-5.14.14-200.fc34.x86_64"
|
|
#|args="crashkernel=11M nvidia-drm.modeset=1 crashkernel=100M ro rhgb quiet crcrashkernel=200M crashkernel=32T-64T:128G,64T-102400T:180G fadump=on"
|
|
#|root="UUID=45fdf703-3966-401b-b8f7-cf056affd2b0"
|
|
}
|
|
DUMMY_PARAM=/boot/vmlinuz
|
|
|
|
Context "when given a kernel parameter in different positions"
|
|
# Test the following cases:
|
|
# - the kernel parameter in the end
|
|
# - the kernel parameter in the first
|
|
# - the kernel parameter is crashkernel (suffix of crcrashkernel)
|
|
# - the kernel parameter that does not exist
|
|
# - the kernel parameter doesn't have a value
|
|
Parameters
|
|
# parameter answer
|
|
fadump on
|
|
nvidia-drm.modeset 1
|
|
crashkernel 32T-64T:128G,64T-102400T:180G
|
|
aaaa ""
|
|
ro ""
|
|
End
|
|
|
|
It 'should retrieve the value succesfully'
|
|
When call get_grub_kernel_boot_parameter "$DUMMY_PARAM" "$2"
|
|
The output should equal "$3"
|
|
End
|
|
End
|
|
|
|
It 'should retrive the last value if multiple <parameter=value> entries exist'
|
|
When call get_grub_kernel_boot_parameter "$DUMMY_PARAM" crashkernel
|
|
The output should equal '32T-64T:128G,64T-102400T:180G'
|
|
End
|
|
|
|
It 'should fail when called with kernel_path=ALL'
|
|
When call get_grub_kernel_boot_parameter ALL ro
|
|
The status should be failure
|
|
The error should include "kernel_path=ALL invalid"
|
|
End
|
|
End
|
|
|
|
Describe 'get_dump_mode_by_fadump_val()'
|
|
|
|
Context 'when given valid fadump values'
|
|
Parameters
|
|
"#1" on fadump
|
|
"#2" nocma fadump
|
|
"#3" "" kdump
|
|
"#4" off kdump
|
|
End
|
|
It "should return the dump mode correctly"
|
|
When call get_dump_mode_by_fadump_val "$2"
|
|
The output should equal "$3"
|
|
The status should be success
|
|
End
|
|
End
|
|
|
|
It 'should complain given invalid fadump value'
|
|
When call get_dump_mode_by_fadump_val /boot/vmlinuz
|
|
The status should be failure
|
|
The error should include 'invalid fadump'
|
|
End
|
|
|
|
End
|
|
|
|
Describe "read_proc_environ_var()"
|
|
environ_test_file=$(mktemp -t spec_test_environ_test_file.XXXXXXXXXX)
|
|
cleanup() {
|
|
rm -rf "$environ_test_file"
|
|
}
|
|
AfterAll 'cleanup'
|
|
echo -ne "container=bwrap-osbuild\x00SSH_AUTH_SOCK=/tmp/ssh-XXXXXXEbw33A/agent.1794\x00SSH_AGENT_PID=1929\x00env=test_env" >"$environ_test_file"
|
|
Parameters
|
|
container bwrap-osbuild
|
|
SSH_AUTH_SOCK /tmp/ssh-XXXXXXEbw33A/agent.1794
|
|
env test_env
|
|
not_exist ""
|
|
End
|
|
It 'should read the environ variable value as expected'
|
|
When call read_proc_environ_var "$1" "$environ_test_file"
|
|
The output should equal "$2"
|
|
The status should be success
|
|
End
|
|
End
|
|
|
|
Describe "_is_osbuild()"
|
|
environ_test_file=$(mktemp -t spec_test_environ_test_file.XXXXXXXXXX)
|
|
# shellcheck disable=SC2034
|
|
# override the _OSBUILD_ENVIRON_PATH variable
|
|
_OSBUILD_ENVIRON_PATH="$environ_test_file"
|
|
Parameters
|
|
'container=bwrap-osbuild' success
|
|
'' failure
|
|
End
|
|
It 'should be able to tell if it is the osbuild environment'
|
|
echo -ne "$1" >"$environ_test_file"
|
|
When call _is_osbuild
|
|
The status should be "$2"
|
|
The stderr should equal ""
|
|
End
|
|
End
|
|
|
|
Describe "_get_dracut_arg"
|
|
dracut_args='-o "foo bar baz" -t 1 --test="a b c" --omit bla'
|
|
Parameters
|
|
-o --omit 2 "foo bar baz bla"
|
|
-e --empty 0 ""
|
|
-t "" 1 "1"
|
|
"" --test 1 "a b c"
|
|
"" "" 0 ""
|
|
End
|
|
It "should parse the dracut_args correctly"
|
|
When call _get_dracut_arg "$1" "$2" "$dracut_args"
|
|
The status should equal $3
|
|
The output should equal "$4"
|
|
End
|
|
End
|
|
|
|
Describe "is_dracut_mod_omitted()"
|
|
KDUMP_CONFIG_FILE=$(mktemp -t kdump_conf.XXXXXXXXXX)
|
|
cleanup() {
|
|
rm -f "$kdump_conf"
|
|
}
|
|
AfterAll 'cleanup'
|
|
|
|
Parameters:dynamic
|
|
for opt in '-o ' '--omit ' '--omit='; do
|
|
for val in \
|
|
'foo' \
|
|
'"foo"' \
|
|
'"foo bar baz"' \
|
|
'"bar foo baz"' \
|
|
'"bar baz foo"'; do
|
|
%data success foo "$opt$val"
|
|
%data success foo "-a x $opt$val -i y"
|
|
%data failure xyz "$opt$val"
|
|
%data failure xyz "-a x $opt$val -i y"
|
|
done
|
|
done
|
|
%data success foo "-o xxx -o foo"
|
|
%data failure foo "-a x -i y"
|
|
End
|
|
It "shall return $1 for module $2 and dracut_args '$3'"
|
|
echo "dracut_args $3" > $KDUMP_CONFIG_FILE
|
|
parse_config
|
|
When call is_dracut_mod_omitted $2
|
|
The status should be $1
|
|
End
|
|
End
|
|
|
|
Describe '_update_kernel_arg_in_grub_etc_default()'
|
|
GRUB_ETC_DEFAULT=/tmp/default_grub
|
|
|
|
cleanup() {
|
|
rm -rf "$GRUB_ETC_DEFAULT"
|
|
}
|
|
AfterAll 'cleanup'
|
|
|
|
Context 'when the given parameter is in different positions'
|
|
Parameters
|
|
"crashkernel=222M fadump=on rhgb quiet" crashkernel 333M
|
|
" fadump=on crashkernel=222M rhgb quiet" crashkernel 333M
|
|
"fadump=on rhgb quiet crashkernel=222M" crashkernel 333M
|
|
"fadump=on rhgb quiet" crashkernel 333M
|
|
"fadump=on foo=bar1 rhgb quiet" foo bar2
|
|
End
|
|
|
|
It 'should update the kernel parameter correctly'
|
|
echo 'GRUB_CMDLINE_LINUX="'"$1"'"' >$GRUB_ETC_DEFAULT
|
|
When call _update_kernel_arg_in_grub_etc_default "$2" "$3"
|
|
# the updated kernel parameter should appear in the end
|
|
The contents of file $GRUB_ETC_DEFAULT should include "$2=$3\""
|
|
End
|
|
End
|
|
|
|
It 'should only update the given parameter and not update the parameter that has the given parameter as suffix'
|
|
echo 'GRUB_CMDLINE_LINUX="fadump=on rhgb quiet ckcrashkernel=222M"' >$GRUB_ETC_DEFAULT
|
|
_ck_val=1G-4G:192M,4G-64G:256M,64G-102400T:512M
|
|
When call _update_kernel_arg_in_grub_etc_default crashkernel "$_ck_val"
|
|
The contents of file $GRUB_ETC_DEFAULT should include "crashkernel=$_ck_val\""
|
|
The contents of file $GRUB_ETC_DEFAULT should include "ckcrashkernel=222M"
|
|
End
|
|
|
|
It 'should be able to handle the cases of there are multiple crashkernel entries'
|
|
echo 'GRUB_CMDLINE_LINUX="fadump=on rhgb quiet crashkernel=101M crashkernel=222M"' >$GRUB_ETC_DEFAULT
|
|
_ck_val=1G-4G:192M,4G-64G:256M,64G-102400T:512M
|
|
When call _update_kernel_arg_in_grub_etc_default crashkernel "$_ck_val"
|
|
The contents of file $GRUB_ETC_DEFAULT should include "crashkernel=$_ck_val\""
|
|
The contents of file $GRUB_ETC_DEFAULT should not include "crashkernel=222M"
|
|
End
|
|
|
|
Context 'when it removes a kernel parameter'
|
|
|
|
It 'should remove all values for given arg'
|
|
echo 'GRUB_CMDLINE_LINUX="crashkernel=33M crashkernel=11M fadump=on crashkernel=222M"' >$GRUB_ETC_DEFAULT
|
|
When call _update_kernel_arg_in_grub_etc_default crashkernel
|
|
The contents of file $GRUB_ETC_DEFAULT should equal 'GRUB_CMDLINE_LINUX="fadump=on"'
|
|
End
|
|
|
|
It 'should not remove args that have the given arg as suffix'
|
|
echo 'GRUB_CMDLINE_LINUX="ckcrashkernel=33M crashkernel=11M ckcrashkernel=222M"' >$GRUB_ETC_DEFAULT
|
|
When call _update_kernel_arg_in_grub_etc_default crashkernel
|
|
The contents of file $GRUB_ETC_DEFAULT should equal 'GRUB_CMDLINE_LINUX="ckcrashkernel=33M ckcrashkernel=222M"'
|
|
End
|
|
End
|
|
|
|
End
|
|
|
|
Describe '_read_kernel_arg_in_grub_etc_default()'
|
|
GRUB_ETC_DEFAULT=/tmp/default_grub
|
|
It 'should read the value for given arg'
|
|
echo 'GRUB_CMDLINE_LINUX="crashkernel=33M crashkernel=11M ckcrashkernel=222M"' >$GRUB_ETC_DEFAULT
|
|
When call _read_kernel_arg_in_grub_etc_default crashkernel
|
|
The output should equal '11M'
|
|
End
|
|
End
|
|
|
|
Describe 'parse_config()'
|
|
bad_kdump_conf=$(mktemp -t bad_kdump_conf.XXXXXXXXXX)
|
|
cleanup() {
|
|
rm -f "$bad_kdump_conf"
|
|
rm -f kdump.conf
|
|
}
|
|
AfterAll 'cleanup'
|
|
|
|
It 'should not be happy with unkown option in kdump.conf'
|
|
KDUMP_CONFIG_FILE="$bad_kdump_conf"
|
|
echo blabla > "$bad_kdump_conf"
|
|
When call parse_config
|
|
The status should be failure
|
|
The stderr should include 'Invalid kdump config option blabla'
|
|
End
|
|
|
|
Parameters:value aarch64 ppc64le s390x x86_64
|
|
|
|
It 'should be happy with the default kdump.conf'
|
|
./gen-kdump-conf.sh "$1" > kdump.conf
|
|
# shellcheck disable=SC2034
|
|
# override the KDUMP_CONFIG_FILE variable
|
|
KDUMP_CONFIG_FILE=./kdump.conf
|
|
When call parse_config
|
|
The status should be success
|
|
End
|
|
|
|
End
|
|
|
|
End
|