From 18a6cd4ba331eb3d75b04e5a99483fff0f9bd812 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Sat, 8 Apr 2023 03:33:32 +0900 Subject: [PATCH] test-64: add tests for compat devlinks for NVMe drive --- test/TEST-64-UDEV-STORAGE/test.sh | 29 ++++++++++++++++--- test/test-functions | 1 + test/units/testsuite-64.sh | 48 ++++++++++++++++++++++++++++++- 3 files changed, 73 insertions(+), 5 deletions(-) diff --git a/test/TEST-64-UDEV-STORAGE/test.sh b/test/TEST-64-UDEV-STORAGE/test.sh index 2d77bb678fe..d41a4f00f9a 100755 --- a/test/TEST-64-UDEV-STORAGE/test.sh +++ b/test/TEST-64-UDEV-STORAGE/test.sh @@ -88,6 +88,8 @@ _image_cleanup() { # Clean up certain "problematic" files which may be left over by failing tests : >"${initdir:?}/etc/fstab" : >"${initdir:?}/etc/crypttab" + # Clear previous assignment + QEMU_OPTIONS_ARRAY=() } test_run_one() { @@ -193,15 +195,34 @@ testcase_nvme_basic() { local i local qemu_opts=() - for i in {0..27}; do + for (( i = 0; i < 5; i++ )); do qemu_opts+=( - "-device nvme,drive=nvme$i,serial=deadbeef$i,num_queues=8" - "-drive format=raw,cache=unsafe,file=${TESTDIR:?}/disk$i.img,if=none,id=nvme$i" + "-device" "nvme,drive=nvme$i,serial=deadbeef$i,num_queues=8" + "-drive" "format=raw,cache=unsafe,file=${TESTDIR:?}/disk$i.img,if=none,id=nvme$i" + ) + done + for (( i = 5; i < 10; i++ )); do + qemu_opts+=( + "-device" "nvme,drive=nvme$i,serial= deadbeef $i ,num_queues=8" + "-drive" "format=raw,cache=unsafe,file=${TESTDIR:?}/disk$i.img,if=none,id=nvme$i" + ) + done + for (( i = 10; i < 15; i++ )); do + qemu_opts+=( + "-device" "nvme,drive=nvme$i,serial= dead/beef/$i ,num_queues=8" + "-drive" "format=raw,cache=unsafe,file=${TESTDIR:?}/disk$i.img,if=none,id=nvme$i" + ) + done + for (( i = 15; i < 20; i++ )); do + qemu_opts+=( + "-device" "nvme,drive=nvme$i,serial=dead/../../beef/$i,num_queues=8" + "-drive" "format=raw,cache=unsafe,file=${TESTDIR:?}/disk$i.img,if=none,id=nvme$i" ) done KERNEL_APPEND="systemd.setenv=TEST_FUNCTION_NAME=${FUNCNAME[0]} ${USER_KERNEL_APPEND:-}" - QEMU_OPTIONS="${qemu_opts[*]} ${USER_QEMU_OPTIONS:-}" + QEMU_OPTIONS="${USER_QEMU_OPTIONS}" + QEMU_OPTIONS_ARRAY=("${qemu_opts[@]}") test_run_one "${1:?}" } diff --git a/test/test-functions b/test/test-functions index 35a10868b69..0ea1635b0d5 100644 --- a/test/test-functions +++ b/test/test-functions @@ -512,6 +512,7 @@ run_qemu() { read -ra user_qemu_options <<< "$QEMU_OPTIONS" qemu_options+=("${user_qemu_options[@]}") fi + qemu_options+=(${QEMU_OPTIONS_ARRAY:+"${QEMU_OPTIONS_ARRAY[@]}"}) if [[ -n "${KERNEL_APPEND:=}" ]]; then local user_kernel_append diff --git a/test/units/testsuite-64.sh b/test/units/testsuite-64.sh index 03d2fcb4ef3..015b6b69b50 100755 --- a/test/units/testsuite-64.sh +++ b/test/units/testsuite-64.sh @@ -174,8 +174,54 @@ testcase_megasas2_basic() { } testcase_nvme_basic() { + local expected_symlinks=() + local i + + for (( i = 0; i < 5; i++ )); do + expected_symlinks+=( + # both replace mode provides the same devlink + /dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_deadbeef"$i" + # with nsid + /dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_deadbeef"$i"_1 + ) + done + for (( i = 5; i < 10; i++ )); do + expected_symlinks+=( + # old replace mode + /dev/disk/by-id/nvme-QEMU_NVMe_Ctrl__deadbeef_"$i" + # newer replace mode + /dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_____deadbeef__"$i" + # with nsid + /dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_____deadbeef__"$i"_1 + ) + done + for (( i = 10; i < 15; i++ )); do + expected_symlinks+=( + # old replace mode does not provide devlink, as serial contains "/" + # newer replace mode + /dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_____dead_beef_"$i" + # with nsid + /dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_____dead_beef_"$i"_1 + ) + done + for (( i = 15; i < 20; i++ )); do + expected_symlinks+=( + # old replace mode does not provide devlink, as serial contains "/" + # newer replace mode + /dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_dead_.._.._beef_"$i" + # with nsid + /dev/disk/by-id/nvme-QEMU_NVMe_Ctrl_dead_.._.._beef_"$i"_1 + ) + done + + udevadm settle + ls /dev/disk/by-id + for i in "${expected_symlinks[@]}"; do + udevadm wait --settle --timeout=30 "$i" + done + lsblk --noheadings | grep "^nvme" - [[ "$(lsblk --noheadings | grep -c "^nvme")" -ge 28 ]] + [[ "$(lsblk --noheadings | grep -c "^nvme")" -ge 20 ]] } testcase_nvme_subsystem() {