diff --git a/microsoft/testsuites/core/storage.py b/microsoft/testsuites/core/storage.py index 9d78cf379b..99a3d774e9 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,28 @@ 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) -> 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") + ) + if not (_has_nvme_core and _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