import os import infra.basetest import subprocess class TestZerofree(infra.basetest.BRTest): config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \ """ BR2_PACKAGE_ZEROFREE=y BR2_TARGET_ROOTFS_CPIO=y # BR2_TARGET_ROOTFS_TAR is not set """ def test_run(self): # Prepare disk image. # We keep it small (8 MB) for the sake of test time. disk_file = os.path.join(self.outputdir, "disk.img") subprocess.check_call( ["dd", "if=/dev/zero", f"of={disk_file}", "bs=1M", "count=8"], stdout=self.emulator.logfile, stderr=self.emulator.logfile) # Run the emulator with a drive. cpio_file = os.path.join(self.builddir, "images", "rootfs.cpio") self.emulator.boot(arch="armv5", kernel="builtin", options=[ "-initrd", cpio_file, "-drive", f"file={disk_file},format=raw"]) self.emulator.login() # Prepare filesystem. output, exit_code = self.emulator.run("mkfs.ext4 /dev/sda") self.assertEqual(exit_code, 0) self.assertIn('Creating filesystem', output[2]) # Run zerofree on newly created filesystem. cmd = "zerofree -v /dev/sda" output, exit_code = self.emulator.run(cmd, timeout=60) self.assertEqual(exit_code, 0) self.assertIn('/8192', output[-1]) # total number of blocks