From 162bd026105b022921c595f26c482916f409425d Mon Sep 17 00:00:00 2001 From: Kameron Carr Date: Wed, 27 Dec 2023 09:58:52 -0800 Subject: [PATCH] Add verify_supports_nvme This test case checks whether the NVMe drivers are present such that the image can boot with DiskControllerType NVMe. --- microsoft/testsuites/core/storage.py | 51 +++++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/microsoft/testsuites/core/storage.py b/microsoft/testsuites/core/storage.py index 9d78cf379b..ae7d3d8ff4 100644 --- a/microsoft/testsuites/core/storage.py +++ b/microsoft/testsuites/core/storage.py @@ -29,13 +29,25 @@ from lisa.sut_orchestrator import AZURE from lisa.sut_orchestrator.azure.features import AzureDiskOptionSettings, AzureFileShare from lisa.sut_orchestrator.azure.tools import Waagent -from lisa.tools import Blkid, Cat, Dmesg, Echo, Lsblk, Mount, NFSClient, Swap, Sysctl +from lisa.tools import ( + Blkid, + Cat, + Dmesg, + Echo, + Lsblk, + Lsinitrd, + Mount, + NFSClient, + Swap, + Sysctl, +) from lisa.tools.blkid import PartitionInfo from lisa.tools.journalctl import Journalctl from lisa.tools.kernel_config import KernelConfig from lisa.util import ( BadEnvironmentStateException, LisaException, + SkippedException, generate_random_chars, get_matched_str, ) @@ -270,6 +282,43 @@ def verify_scsi_disk_controller_type(self, node: RemoteNode) -> None: def verify_nvme_disk_controller_type(self, node: RemoteNode) -> None: self._verify_disk_controller_type(node, DiskControllerType.NVME) + @TestCaseMetadata( + description=""" + This test verifies the nvme drivers are either built in or present in initramfs. + This test can be used to verify an image before it is tagged as NVMe capable. + """, + priority=1, + ) + def verify_supports_nvme(self, node: RemoteNode, environment: Environment) -> None: + _has_nvme_core = node.tools[KernelConfig].is_built_in("CONFIG_NVME_CORE") or ( + node.tools[KernelConfig].is_built_as_module("CONFIG_NVME_CORE") + and node.tools[Lsinitrd].has_module("nvme-core.ko") + ) + _has_nvme = node.tools[KernelConfig].is_built_in("CONFIG_BLK_DEV_NVME") or ( + node.tools[KernelConfig].is_built_as_module("CONFIG_BLK_DEV_NVME") + and node.tools[Lsinitrd].has_module("nvme.ko") + ) + + # Pass condition + if _has_nvme_core and _has_nvme: + return + + location = node.capability._extended_runbook.location + marketplace = node.capability._extended_runbook.marketplace + image = environment.platform._get_image_info(location, marketplace) + + for feature in image.features: + if feature.name == "DiskControllerTypes": + assert "NVMe" not in feature.values, ( + "Image is tagged as NVMe capable, but NVMe drivers are missing." + f"nvme-core: {_has_nvme_core}, nvme: {_has_nvme}" + ) + + raise SkippedException( + "NVME drivers are not present. " + f"nvme-core: {_has_nvme_core}, nvme: {_has_nvme}" + ) + @TestCaseMetadata( description=""" This test will verify that identifier of root partition matches