* [Buildroot] [PATCH 1/1] support/testing: add dosfstools runtime test
@ 2024-08-25 17:35 Julien Olivain
2024-08-27 16:42 ` Thomas Petazzoni via buildroot
0 siblings, 1 reply; 2+ messages in thread
From: Julien Olivain @ 2024-08-25 17:35 UTC (permalink / raw)
To: buildroot; +Cc: Julien Olivain
Signed-off-by: Julien Olivain <ju.o@free.fr>
---
Patch tested in:
https://gitlab.com/jolivain/buildroot/-/jobs/7661932432
---
DEVELOPERS | 2 +
.../testing/tests/package/test_dosfstools.py | 106 ++++++++++++++++++
.../test_dosfstools/linux-vfat.fragment | 3 +
3 files changed, 111 insertions(+)
create mode 100644 support/testing/tests/package/test_dosfstools.py
create mode 100644 support/testing/tests/package/test_dosfstools/linux-vfat.fragment
diff --git a/DEVELOPERS b/DEVELOPERS
index 426590d5c5..f81a632bf4 100644
--- a/DEVELOPERS
+++ b/DEVELOPERS
@@ -1852,6 +1852,8 @@ F: support/testing/tests/package/test_ddrescue.py
F: support/testing/tests/package/test_ddrescue/
F: support/testing/tests/package/test_dmidecode.py
F: support/testing/tests/package/test_dos2unix.py
+F: support/testing/tests/package/test_dosfstools.py
+F: support/testing/tests/package/test_dosfstools/
F: support/testing/tests/package/test_ed.py
F: support/testing/tests/package/test_ethtool.py
F: support/testing/tests/package/test_ethtool/
diff --git a/support/testing/tests/package/test_dosfstools.py b/support/testing/tests/package/test_dosfstools.py
new file mode 100644
index 0000000000..f32ff81c01
--- /dev/null
+++ b/support/testing/tests/package/test_dosfstools.py
@@ -0,0 +1,106 @@
+import os
+import subprocess
+
+import infra.basetest
+
+
+class TestDosFsTools(infra.basetest.BRTest):
+ # This test needs a Kernel with vfat and NLS support. The vfat
+ # filesystem also needs character set conversion libraries, since
+ # its default encoding is CP850.
+ kern_frag = \
+ infra.filepath("tests/package/test_dosfstools/linux-vfat.fragment")
+ config = \
+ f"""
+ BR2_aarch64=y
+ BR2_TOOLCHAIN_EXTERNAL=y
+ BR2_TARGET_GENERIC_GETTY_PORT="ttyAMA0"
+ BR2_LINUX_KERNEL=y
+ BR2_LINUX_KERNEL_CUSTOM_VERSION=y
+ BR2_LINUX_KERNEL_CUSTOM_VERSION_VALUE="6.6.47"
+ BR2_LINUX_KERNEL_USE_CUSTOM_CONFIG=y
+ BR2_LINUX_KERNEL_CUSTOM_CONFIG_FILE="board/qemu/aarch64-virt/linux.config"
+ BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="{kern_frag}"
+ BR2_LINUX_KERNEL_NEEDS_HOST_OPENSSL=y
+ BR2_PACKAGE_DOSFSTOOLS=y
+ BR2_PACKAGE_DOSFSTOOLS_FATLABEL=y
+ BR2_PACKAGE_DOSFSTOOLS_FSCK_FAT=y
+ BR2_PACKAGE_DOSFSTOOLS_MKFS_FAT=y
+ BR2_SYSTEM_ENABLE_NLS=y
+ BR2_TARGET_ROOTFS_CPIO=y
+ BR2_TARGET_ROOTFS_CPIO_GZIP=y
+ # BR2_TARGET_ROOTFS_TAR is not set
+ BR2_TOOLCHAIN_GLIBC_GCONV_LIBS_COPY=y
+ """
+
+ def test_run(self):
+ # Prepare the disk image.
+ disk_file = os.path.join(self.builddir, "images", "disk.img")
+ self.emulator.logfile.write(f"Creating disk image: {disk_file}\n")
+ self.emulator.logfile.flush()
+ subprocess.check_call(
+ ["dd", "if=/dev/zero", f"of={disk_file}", "bs=1M", "count=256"],
+ stdout=self.emulator.logfile,
+ stderr=self.emulator.logfile)
+
+ # Run the emulator with a blank drive.
+ img = os.path.join(self.builddir, "images", "rootfs.cpio.gz")
+ kern = os.path.join(self.builddir, "images", "Image")
+ bootargs = ["console=ttyAMA0"]
+ qemu_opts = ["-M", "virt", "-cpu", "cortex-a57", "-m", "256M",
+ "-initrd", img,
+ "-drive", f"file={disk_file},if=virtio,format=raw"]
+ self.emulator.boot(arch="aarch64",
+ kernel=kern,
+ kernel_cmdline=bootargs,
+ options=qemu_opts)
+ self.emulator.login()
+
+ # Variables for this test.
+ dev = "/dev/vda"
+ label = "BR_TEST"
+ mnt_pt = "/tmp/vfat"
+ data_file = f"{mnt_pt}/data.bin"
+
+ # We create the vfat filesystem on our device.
+ self.assertRunOk(f"mkfs.vfat {dev}")
+
+ # We set a label on this filesystem.
+ self.assertRunOk(f"fatlabel {dev} '{label}'")
+
+ # We create a mount point and mount this filesystem.
+ self.assertRunOk(f"mkdir -p {mnt_pt}")
+ self.assertRunOk(f"mount {dev} {mnt_pt}")
+
+ # We create a file with random data, to use this new
+ # filesystem a bit.
+ self.assertRunOk(f"dd if=/dev/urandom of={data_file} bs=1M count=10")
+
+ # We compute the sha256 hash and save it for later.
+ hash_cmd = f"sha256sum {data_file}"
+ out, ret = self.emulator.run(hash_cmd)
+ self.assertEqual(ret, 0)
+ data_sha256 = out[0]
+
+ # We unmount the filesystem.
+ self.assertRunOk(f"umount {mnt_pt}")
+
+ # We run a filesystem check. Since we cleanly unmounted the
+ # filesystem, we are not expecting any repair. This is just to
+ # test the program works correctly.
+ self.assertRunOk(f"fsck.vfat -v {dev}")
+
+ # We query the label and check it is the one we set at the
+ # beginning.
+ out, ret = self.emulator.run(f"fatlabel {dev}")
+ self.assertEqual(ret, 0)
+ self.assertEqual(out[0], label)
+
+ # We remount our filesystem.
+ self.assertRunOk(f"mount {dev} {mnt_pt}")
+
+ # We should recompute the same sha256 hash as before, on the
+ # first data file we created at the beginning.
+ out, ret = self.emulator.run(hash_cmd)
+ self.assertEqual(ret, 0)
+ self.assertEqual(out[0], data_sha256)
diff --git a/support/testing/tests/package/test_dosfstools/linux-vfat.fragment b/support/testing/tests/package/test_dosfstools/linux-vfat.fragment
new file mode 100644
index 0000000000..eb4d2e6044
--- /dev/null
+++ b/support/testing/tests/package/test_dosfstools/linux-vfat.fragment
@@ -0,0 +1,3 @@
+CONFIG_VFAT_FS=y
+CONFIG_NLS_CODEPAGE_437=y
+CONFIG_NLS_ISO8859_1=y
--
2.46.0
_______________________________________________
buildroot mailing list
buildroot@buildroot.org
https://lists.buildroot.org/mailman/listinfo/buildroot
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2024-08-27 16:43 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-08-25 17:35 [Buildroot] [PATCH 1/1] support/testing: add dosfstools runtime test Julien Olivain
2024-08-27 16:42 ` Thomas Petazzoni via buildroot
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.