From 07b99ecab71ae9dcf4dd6114a9a09b7fb8301e12 Mon Sep 17 00:00:00 2001 From: Coiby Xu Date: Tue, 9 May 2023 12:28:37 +0800 Subject: [PATCH] Add ShellSpec tests for managing the crashkernel kernel parameter Signed-off-by: Coiby Xu Reviewed-by: Philipp Rudo --- kdumpctl | 3 +- spec/kdumpctl_manage_crashkernel_spec.sh | 107 +++++++++++++++++++++++ 2 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 spec/kdumpctl_manage_crashkernel_spec.sh diff --git a/kdumpctl b/kdumpctl index 57da1af..5043a7b 100755 --- a/kdumpctl +++ b/kdumpctl @@ -1666,12 +1666,13 @@ reset_crashkernel() fi } +GRUB_CFG=/boot/grub2/grub.cfg _is_bootloader_installed() { if [[ $(uname -m) == s390x ]]; then test -f /etc/zipl.conf else - test -f /boot/grub2/grub.cfg + test -f "$GRUB_CFG" fi } diff --git a/spec/kdumpctl_manage_crashkernel_spec.sh b/spec/kdumpctl_manage_crashkernel_spec.sh new file mode 100644 index 0000000..9078347 --- /dev/null +++ b/spec/kdumpctl_manage_crashkernel_spec.sh @@ -0,0 +1,107 @@ +#!/bin/bash + +Describe 'Management of the kernel crashkernel parameter.' + Include ./kdumpctl + kernel1=/boot/vmlinuz-5.15.6-100.fc34.x86_64 + kernel2=/boot/vmlinuz-5.14.14-200.fc34.x86_64 + old_ck=1G-4G:162M,4G-64G:256M,64G-:512M + new_ck=1G-4G:196M,4G-64G:256M,64G-:512M + KDUMP_SPEC_TEST_RUN_DIR=$(mktemp -u /tmp/spec_test.XXXXXXXXXX) + GRUB_CFG="$KDUMP_SPEC_TEST_RUN_DIR/grub.cfg" + + uname() { + if [[ $1 == '-m' ]]; then + echo -n x86_64 + elif [[ $1 == '-r' ]]; then + echo -n $current_kernel + fi + } + + # dinfo is a bit complex for unit tets, simply mock it + dinfo() { + echo "$1" + } + + kdump_get_arch_recommend_crashkernel() { + echo -n "$new_ck" + } + + setup() { + mkdir -p "$KDUMP_SPEC_TEST_RUN_DIR" + cp -r spec/support/boot_load_entries "$KDUMP_SPEC_TEST_RUN_DIR" + cp spec/support/grub_env "$KDUMP_SPEC_TEST_RUN_DIR"/env_temp + touch "$GRUB_CFG" + + grubby --args crashkernel=$old_ck --update-kernel=$kernel1 + grubby --args crashkernel=$new_ck --update-kernel=$kernel2 + grubby --remove-args fadump --update-kernel=ALL + + } + + cleanup() { + rm -rf "$KDUMP_SPEC_TEST_RUN_DIR" + } + + 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 --config-file="$GRUB_CFG" --bad-image-okay --env="$KDUMP_SPEC_TEST_RUN_DIR"/env_temp -b "$KDUMP_SPEC_TEST_RUN_DIR"/boot_load_entries "$@" + } + + Describe "When kexec-tools have its default crashkernel updated, " + + Context "if kexec-tools is updated alone, " + BeforeAll 'setup' + AfterAll 'cleanup' + Specify 'reset_crashkernel_after_update should report updated kernels and note that auto_reset_crashkernel=yes' + When call reset_crashkernel_after_update + The output should include "For kernel=$kernel1, crashkernel=$new_ck now." + The output should not include "For kernel=$kernel2, crashkernel=$new_ck now." + # A hint on how to turn off auto update of crashkernel + The output should include "auto_reset_crashkernel=no" + End + + Specify 'kernel1 should have crashkernel updated' + When call grubby --info $kernel1 + The line 3 of output should include crashkernel="$new_ck" + End + + Specify 'kernel2 should also have crashkernel updated' + When call grubby --info $kernel2 + The line 3 of output should include crashkernel="$new_ck" + End + + End + + Context "If kernel package is installed alone, " + BeforeAll 'setup' + AfterAll 'cleanup' + # BeforeAll somehow doesn't work as expected, manually call setup to bypass this issue. + setup + new_kernel_ver=new_kernel + new_kernel=/boot/vmlinuz-$new_kernel_ver + grubby --add-kernel=$new_kernel --initrd=/boot/initramfs-$new_kernel_ver.img --title=$new_kernel_ver + + Specify 'reset_crashkernel_for_installed_kernel should report the new kernel has its crashkernel updated' + When call reset_crashkernel_for_installed_kernel $new_kernel_ver + The output should include "crashkernel=$new_ck" + End + + Specify 'the new kernel should have crashkernel updated' + When call grubby --info $new_kernel + The output should include crashkernel="$new_ck" + End + + Specify 'kernel1 keeps its crashkernel value' + When call grubby --info $kernel1 + The output should include crashkernel="$old_ck" + End + + End + + End +End