test-64: add tests for compat devlinks for NVMe drive

This commit is contained in:
Yu Watanabe 2023-04-08 03:33:32 +09:00
parent 49e3e219b0
commit 18a6cd4ba3
3 changed files with 73 additions and 5 deletions

View file

@ -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:?}"
}

View 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

View file

@ -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() {