]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
test-64: add tests for compat devlinks for NVMe drive 27169/head
authorYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 7 Apr 2023 18:33:32 +0000 (03:33 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 7 Apr 2023 21:12:29 +0000 (06:12 +0900)
test/TEST-64-UDEV-STORAGE/test.sh
test/test-functions
test/units/testsuite-64.sh

index 2d77bb678fe1d408a35bcc15befc0c1f6ea93d37..d41a4f00f9addab055589d16fb1c53498d4521cf 100755 (executable)
@@ -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:?}"
 }
 
index 35a10868b69e179d1b7b3d333d887d6e0f6797ce..0ea1635b0d52ac2656108140c1e0f64c48623c78 100644 (file)
@@ -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
index 03d2fcb4ef3774ac15e40f22c52cc00f258dfd90..015b6b69b50265bba8e4ece4dfe5969a349c6635 100755 (executable)
@@ -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() {