unit tests: add tests for "kdumpctl reset-crashkernel"
This commit adds a relatively thorough test suite for
kdumpctl reset-crashkernel [--fadump=[on|off|nocma]] [--kernel=path_to_kernel] [--reboot]
as implemented in commit 140da74
("rewrite reset_crashkernel to support
fadump and to used by RPM scriptlet").
grubby have a few options to support its own testing,
- --no-etc-grub-update, not update /etc/default/grub
- --bad-image-okay, don't check the validity of the image
- --env, specify custom grub2 environment block file to avoid modifying
the default /boot/grub2/grubenv
- --bls-directory, specify custom BootLoaderSpec config files to avoid
modifying the default /boot/loader/entries
So the grubby called by kdumpctl is mocked as
@grubby --grub2 --no-etc-grub-update --bad-image-okay --env=$SPEC_TEST_DIR/env_temp -b $SPEC_TEST_DIR/boot_load_entries "$@"
in the tests. To be able to call the actual grubby in the mock function [1],
ShellSpec provides the following command
$ shellspec --gen-bin @grubby
to generate spec/support/bins/@grubby which is used to call the actual grubby.
kdumpctl has implemented its own version of updating /etc/default/grub
in _update_kernel_cmdline_in_grub_etc_default. To avoiding writing to
/etc/default/grub, this function is mocked as outputting its name and
received arguments similar to python unitest's assert_called_with.
[1] https://github.com/shellspec/shellspec#execute-the-actual-command-within-a-mock-function
Reviewed-by: Philipp Rudo <prudo@redhat.com>
Signed-off-by: Coiby Xu <coxu@redhat.com>
This commit is contained in:
parent
ea8b06df83
commit
e00b45d75f
224
spec/kdumpctl_reset_crashkernel_spec.sh
Normal file
224
spec/kdumpctl_reset_crashkernel_spec.sh
Normal file
@ -0,0 +1,224 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
Describe 'kdumpctl reset-crashkernel [--kernel] [--fadump]'
|
||||||
|
Include ./kdumpctl
|
||||||
|
kernel1=/boot/vmlinuz-5.15.6-100.fc34.x86_64
|
||||||
|
kernel2=/boot/vmlinuz-5.14.14-200.fc34.x86_64
|
||||||
|
ck=222M
|
||||||
|
KDUMP_SPEC_TEST_RUN_DIR=$(mktemp -d /tmp/spec_test.XXXXXXXXXX)
|
||||||
|
current_kernel=5.15.6-100.fc34.x86_64
|
||||||
|
|
||||||
|
setup() {
|
||||||
|
cp -r spec/support/boot_load_entries "$KDUMP_SPEC_TEST_RUN_DIR"
|
||||||
|
cp spec/support/grub_env "$KDUMP_SPEC_TEST_RUN_DIR"/env_temp
|
||||||
|
}
|
||||||
|
|
||||||
|
cleanup() {
|
||||||
|
rm -rf "$KDUMP_SPEC_TEST_RUN_DIR"
|
||||||
|
}
|
||||||
|
|
||||||
|
BeforeAll 'setup'
|
||||||
|
AfterAll 'cleanup'
|
||||||
|
|
||||||
|
grubby() {
|
||||||
|
# - --no-etc-grub-update, not update /etc/default/grub
|
||||||
|
# - --bad-image-okay, don't check the validity of the image
|
||||||
|
# - --env, specify custom grub2 environment block file to avoid modifying
|
||||||
|
# the default /boot/grub2/grubenv
|
||||||
|
# - --bls-directory, specify custom BootLoaderSpec config files to avoid
|
||||||
|
# modifying the default /boot/loader/entries
|
||||||
|
@grubby --no-etc-grub-update --grub2 --bad-image-okay --env="$KDUMP_SPEC_TEST_RUN_DIR"/env_temp -b "$KDUMP_SPEC_TEST_RUN_DIR"/boot_load_entries "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
Describe "Test the kdump dump mode "
|
||||||
|
uname() {
|
||||||
|
if [[ $1 == '-m' ]]; then
|
||||||
|
echo -n x86_64
|
||||||
|
elif [[ $1 == '-r' ]]; then
|
||||||
|
echo -n $current_kernel
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
kdump_crashkernel=$(get_default_crashkernel kdump)
|
||||||
|
Context "when --kernel not specified"
|
||||||
|
grubby --args crashkernel=$ck --update-kernel ALL
|
||||||
|
Specify 'kdumpctl should warn the user that crashkernel has been udpated'
|
||||||
|
When call reset_crashkernel
|
||||||
|
The error should include "Updated crashkernel=$kdump_crashkernel"
|
||||||
|
End
|
||||||
|
|
||||||
|
Specify 'Current running kernel should have crashkernel updated'
|
||||||
|
When call grubby --info $kernel1
|
||||||
|
The line 3 of output should include crashkernel="$kdump_crashkernel"
|
||||||
|
The line 3 of output should not include crashkernel=$ck
|
||||||
|
End
|
||||||
|
|
||||||
|
Specify 'Other kernel still use the old crashkernel value'
|
||||||
|
When call grubby --info $kernel2
|
||||||
|
The line 3 of output should include crashkernel=$ck
|
||||||
|
End
|
||||||
|
End
|
||||||
|
|
||||||
|
Context "--kernel=ALL"
|
||||||
|
grubby --args crashkernel=$ck --update-kernel ALL
|
||||||
|
Specify 'kdumpctl should warn the user that crashkernel has been udpated'
|
||||||
|
When call reset_crashkernel --kernel=ALL
|
||||||
|
The error should include "Updated crashkernel=$kdump_crashkernel for kernel=$kernel1"
|
||||||
|
The error should include "Updated crashkernel=$kdump_crashkernel for kernel=$kernel2"
|
||||||
|
End
|
||||||
|
|
||||||
|
Specify 'kernel1 should have crashkernel updated'
|
||||||
|
When call grubby --info $kernel1
|
||||||
|
The line 3 of output should include crashkernel="$kdump_crashkernel"
|
||||||
|
End
|
||||||
|
|
||||||
|
Specify 'kernel2 should have crashkernel updated'
|
||||||
|
When call grubby --info $kernel2
|
||||||
|
The line 3 of output should include crashkernel="$kdump_crashkernel"
|
||||||
|
End
|
||||||
|
End
|
||||||
|
|
||||||
|
Context "--kernel=/boot/one-kernel to update one specified kernel"
|
||||||
|
grubby --args crashkernel=$ck --update-kernel ALL
|
||||||
|
Specify 'kdumpctl should warn the user that crashkernel has been updated'
|
||||||
|
When call reset_crashkernel --kernel=$kernel1
|
||||||
|
The error should include "Updated crashkernel=$kdump_crashkernel for kernel=$kernel1"
|
||||||
|
End
|
||||||
|
|
||||||
|
Specify 'kernel1 should have crashkernel updated'
|
||||||
|
When call grubby --info $kernel1
|
||||||
|
The line 3 of output should include crashkernel="$kdump_crashkernel"
|
||||||
|
End
|
||||||
|
|
||||||
|
Specify 'kernel2 should have the old crashkernel'
|
||||||
|
When call grubby --info $kernel2
|
||||||
|
The line 3 of output should include crashkernel=$ck
|
||||||
|
End
|
||||||
|
|
||||||
|
End
|
||||||
|
|
||||||
|
End
|
||||||
|
|
||||||
|
Describe "FADump" fadump
|
||||||
|
uname() {
|
||||||
|
if [[ $1 == '-m' ]]; then
|
||||||
|
echo -n ppc64le
|
||||||
|
elif [[ $1 == '-r' ]]; then
|
||||||
|
echo -n $current_kernel
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
_update_kernel_arg_in_grub_etc_default() {
|
||||||
|
# don't modify /etc/default/grub during the test
|
||||||
|
echo _update_kernel_arg_in_grub_etc_default "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
kdump_crashkernel=$(get_default_crashkernel kdump)
|
||||||
|
fadump_crashkernel=$(get_default_crashkernel fadump)
|
||||||
|
Context "when no --kernel specified"
|
||||||
|
grubby --args crashkernel=$ck --update-kernel ALL
|
||||||
|
grubby --remove-args=fadump --update-kernel ALL
|
||||||
|
Specify 'kdumpctl should warn the user that crashkernel has been udpated'
|
||||||
|
When call reset_crashkernel
|
||||||
|
The error should include "Updated crashkernel=$kdump_crashkernel"
|
||||||
|
End
|
||||||
|
|
||||||
|
Specify 'Current running kernel should have crashkernel updated'
|
||||||
|
When call grubby --info $kernel1
|
||||||
|
The line 3 of output should include crashkernel="$kdump_crashkernel"
|
||||||
|
End
|
||||||
|
|
||||||
|
Specify 'Other kernel still use the old crashkernel value'
|
||||||
|
When call grubby --info $kernel2
|
||||||
|
The line 3 of output should include crashkernel=$ck
|
||||||
|
End
|
||||||
|
End
|
||||||
|
|
||||||
|
Context "--kernel=ALL --fadump=on"
|
||||||
|
grubby --args crashkernel=$ck --update-kernel ALL
|
||||||
|
Specify 'kdumpctl should warn the user that crashkernel has been udpated'
|
||||||
|
When call reset_crashkernel --kernel=ALL --fadump=on
|
||||||
|
The line 1 of output should include "_update_kernel_arg_in_grub_etc_default crashkernel $fadump_crashkernel"
|
||||||
|
The error should include "Updated crashkernel=$fadump_crashkernel for kernel=$kernel1"
|
||||||
|
The error should include "Updated crashkernel=$fadump_crashkernel for kernel=$kernel2"
|
||||||
|
End
|
||||||
|
|
||||||
|
Specify 'kernel1 should have crashkernel updated'
|
||||||
|
When call grubby --info $kernel1
|
||||||
|
The line 3 of output should include crashkernel="$fadump_crashkernel"
|
||||||
|
End
|
||||||
|
|
||||||
|
Specify 'kernel2 should have crashkernel updated'
|
||||||
|
When call get_grub_kernel_boot_parameter $kernel2 crashkernel
|
||||||
|
The output should equal "$fadump_crashkernel"
|
||||||
|
End
|
||||||
|
End
|
||||||
|
|
||||||
|
Context "--kernel=/boot/one-kernel to update one specified kernel"
|
||||||
|
grubby --args crashkernel=$ck --update-kernel ALL
|
||||||
|
grubby --args fadump=on --update-kernel $kernel1
|
||||||
|
Specify 'kdumpctl should warn the user that crashkernel has been updated'
|
||||||
|
When call reset_crashkernel --kernel=$kernel1
|
||||||
|
The error should include "Updated crashkernel=$fadump_crashkernel for kernel=$kernel1"
|
||||||
|
End
|
||||||
|
|
||||||
|
Specify 'kernel1 should have crashkernel updated'
|
||||||
|
When call grubby --info $kernel1
|
||||||
|
The line 3 of output should include crashkernel="$fadump_crashkernel"
|
||||||
|
End
|
||||||
|
|
||||||
|
Specify 'kernel2 should have the old crashkernel'
|
||||||
|
When call get_grub_kernel_boot_parameter $kernel2 crashkernel
|
||||||
|
The output should equal $ck
|
||||||
|
End
|
||||||
|
End
|
||||||
|
|
||||||
|
Context "Update all kernels but without --fadump specified"
|
||||||
|
grubby --args crashkernel=$ck --update-kernel ALL
|
||||||
|
grubby --args fadump=on --update-kernel $kernel1
|
||||||
|
Specify 'kdumpctl should warn the user that crashkernel has been updated'
|
||||||
|
When call reset_crashkernel --kernel=$kernel1
|
||||||
|
The error should include "Updated crashkernel=$fadump_crashkernel for kernel=$kernel1"
|
||||||
|
End
|
||||||
|
|
||||||
|
Specify 'kernel1 should have crashkernel updated'
|
||||||
|
When call get_grub_kernel_boot_parameter $kernel1 crashkernel
|
||||||
|
The output should equal "$fadump_crashkernel"
|
||||||
|
End
|
||||||
|
|
||||||
|
Specify 'kernel2 should have the old crashkernel'
|
||||||
|
When call get_grub_kernel_boot_parameter $kernel2 crashkernel
|
||||||
|
The output should equal $ck
|
||||||
|
End
|
||||||
|
End
|
||||||
|
|
||||||
|
Context 'Switch between fadump=on and fadump=nocma'
|
||||||
|
grubby --args crashkernel=$ck --update-kernel ALL
|
||||||
|
grubby --args fadump=on --update-kernel ALL
|
||||||
|
Specify 'fadump=on to fadump=nocma'
|
||||||
|
When call reset_crashkernel --kernel=ALL --fadump=nocma
|
||||||
|
The line 1 of output should equal "_update_kernel_arg_in_grub_etc_default crashkernel $fadump_crashkernel"
|
||||||
|
The line 2 of output should equal "_update_kernel_arg_in_grub_etc_default fadump nocma"
|
||||||
|
The error should include "Updated crashkernel=$fadump_crashkernel for kernel=$kernel1"
|
||||||
|
The error should include "Updated crashkernel=$fadump_crashkernel for kernel=$kernel2"
|
||||||
|
End
|
||||||
|
|
||||||
|
Specify 'kernel1 should have fadump=nocma in cmdline'
|
||||||
|
When call get_grub_kernel_boot_parameter $kernel1 fadump
|
||||||
|
The output should equal nocma
|
||||||
|
End
|
||||||
|
|
||||||
|
Specify 'fadump=nocma to fadump=on'
|
||||||
|
When call reset_crashkernel --kernel=ALL --fadump=on
|
||||||
|
The line 1 of output should equal "_update_kernel_arg_in_grub_etc_default crashkernel $fadump_crashkernel"
|
||||||
|
The line 2 of output should equal "_update_kernel_arg_in_grub_etc_default fadump on"
|
||||||
|
The error should include "Updated fadump=on for kernel=$kernel1"
|
||||||
|
End
|
||||||
|
|
||||||
|
Specify 'kernel2 should have fadump=on in cmdline'
|
||||||
|
When call get_grub_kernel_boot_parameter $kernel1 fadump
|
||||||
|
The output should equal on
|
||||||
|
End
|
||||||
|
|
||||||
|
End
|
||||||
|
|
||||||
|
End
|
||||||
|
End
|
3
spec/support/bin/@grubby
Executable file
3
spec/support/bin/@grubby
Executable file
@ -0,0 +1,3 @@
|
|||||||
|
#!/bin/sh -e
|
||||||
|
. "$SHELLSPEC_SUPPORT_BIN"
|
||||||
|
invoke grubby "$@"
|
@ -0,0 +1,8 @@
|
|||||||
|
title Fedora (0-rescue-e986846f63134c7295458cf36300ba5b) 33 (Workstation Edition)
|
||||||
|
version 0-rescue-e986846f63134c7295458cf36300ba5b
|
||||||
|
linux /boot/vmlinuz-0-rescue-e986846f63134c7295458cf36300ba5b
|
||||||
|
initrd /boot/initramfs-0-rescue-e986846f63134c7295458cf36300ba5b.img
|
||||||
|
options root=UUID=45fdf703-3966-401b-b8f7-cf056affd2b0 ro rd.driver.blacklist=nouveau modprobe.blacklist=nouveau nvidia-drm.modeset=1 rhgb quiet rd.driver.blacklist=nouveau modprobe.blacklist=nouveau nvidia-drm.modeset=1 crashkernel=4G-16G:768M,16G-64G:1G,64G-128G:2G,128G-1T:4G,1T-2T:6G,2T-4T:12G,4T-8T:20G,8T-16T:36G,16T-32T:64G,32T-64T:128G,64T-102400T:180G fadump=on
|
||||||
|
grub_users $grub_users
|
||||||
|
grub_arg --unrestricted
|
||||||
|
grub_class kernel
|
@ -0,0 +1,8 @@
|
|||||||
|
title Fedora (5.14.14-200.fc34.x86_64) 34 (Workstation Edition)
|
||||||
|
version 5.14.14-200.fc34.x86_64
|
||||||
|
linux /boot/vmlinuz-5.14.14-200.fc34.x86_64
|
||||||
|
initrd /boot/initramfs-5.14.14-200.fc34.x86_64.img
|
||||||
|
options root=UUID=45fdf703-3966-401b-b8f7-cf056affd2b0 ro rd.driver.blacklist=nouveau modprobe.blacklist=nouveau nvidia-drm.modeset=1 rhgb quiet rd.driver.blacklist=nouveau modprobe.blacklist=nouveau nvidia-drm.modeset=1 crashkernel=4G-16G:768M,16G-64G:1G,64G-128G:2G,128G-1T:4G,1T-2T:6G,2T-4T:12G,4T-8T:20G,8T-16T:36G,16T-32T:64G,32T-64T:128G,64T-102400T:180G fadump=on
|
||||||
|
grub_users $grub_users
|
||||||
|
grub_arg --unrestricted
|
||||||
|
grub_class kernel
|
@ -0,0 +1,8 @@
|
|||||||
|
title Fedora (5.15.6-100.fc34.x86_64) 34 (Workstation Edition)
|
||||||
|
version 5.15.6-100.fc34.x86_64
|
||||||
|
linux /boot/vmlinuz-5.15.6-100.fc34.x86_64
|
||||||
|
initrd /boot/initramfs-5.15.6-100.fc34.x86_64.img
|
||||||
|
options root=UUID=45fdf703-3966-401b-b8f7-cf056affd2b0 ro rd.driver.blacklist=nouveau modprobe.blacklist=nouveau nvidia-drm.modeset=1 rhgb quiet rd.driver.blacklist=nouveau modprobe.blacklist=nouveau nvidia-drm.modeset=1 crashkernel=4G-16G:768M,16G-64G:1G,64G-128G:2G,128G-1T:4G,1T-2T:6G,2T-4T:12G,4T-8T:20G,8T-16T:36G,16T-32T:64G,32T-64T:128G,64T-102400T:180G fadump=on
|
||||||
|
grub_users $grub_users
|
||||||
|
grub_arg --unrestricted
|
||||||
|
grub_class fedora
|
3
spec/support/grub_env
Normal file
3
spec/support/grub_env
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# GRUB Environment Block
|
||||||
|
# WARNING: Do not edit this file by tools other than grub-editenv!!!
|
||||||
|
##################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################################
|
Loading…
Reference in New Issue
Block a user