import json import os import infra.basetest class TestNdctl(infra.basetest.BRTest): kern_frag = \ infra.filepath("tests/package/test_ndctl/linux-pmem.fragment") config = \ f""" BR2_x86_64=y BR2_TOOLCHAIN_EXTERNAL=y BR2_LINUX_KERNEL=y BR2_LINUX_KERNEL_CUSTOM_VERSION=y BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.18.19" BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/x86_64/linux.config" BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="{kern_frag}" BR2_LINUX_KERNEL_NEEDS_HOST_LIBELF=y BR2_PACKAGE_NDCTL=y BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y BR2_TARGET_ROOTFS_CPIO=y # BR2_TARGET_ROOTFS_TAR is not set """ def test_run(self): kernel = os.path.join(self.builddir, "images", "bzImage") cpio_file = os.path.join(self.builddir, "images", "rootfs.cpio") pmem_file = os.path.join(self.builddir, "images", "virtio-pmem.img") self.emulator.boot( arch="x86_64", kernel=kernel, kernel_cmdline=["console=ttyS0"], options=["-M", "pc", "-m", "1G,slots=2,maxmem=2G", "-object", f"memory-backend-file,id=mem1,share=on,mem-path={pmem_file},size=64M", "-device", "virtio-pmem-pci,memdev=mem1,id=nv1", "-initrd", cpio_file] ) self.emulator.login() # We check the program can execute. self.assertRunOk("ndctl --version") # We check we can see our pmem block device. self.assertRunOk("ls -l /dev/pmem0") # We check we can also see it with ndctl. out, ret = self.emulator.run("ndctl list") self.assertEqual(ret, 0) ndctl_json = "".join(out) pmem = json.loads(ndctl_json) self.assertEqual(pmem[0]["blockdev"], "pmem0") self.assertEqual(pmem[0]["size"], 64*1024*1024)