Message ID | 20220815111710.1459820-3-arnout@mind.be |
---|---|
State | Accepted |
Headers | show |
Series | [next,v5,1/3] package/dracut: new host package | expand |
Arnout, Thierry, All, On 2022-08-15 13:17 +0200, Arnout Vandecappelle (Essensium/Mind) spake thusly: > From: Thierry Bultel <thierry.bultel@linatsea.fr> > > It includes a simple test for the full cpio image, and a test of the > dracut image. To validate that the dracut image is a subset of the full > image, 'pv' is added to the image, and the test verifies that pv is not > part of the image. Note that the real rootfs is not mounted at the > moment, so pv is never available in the running image. > > Systemd and other init systems are currently untested. > > Signed-off-by: Thierry Bultel <thierry.bultel@linatsea.fr> > Signed-off-by: Arnout Vandecappelle (Essensium/Mind) <arnout@mind.be> Applied to next, with all the changes we discussed in this thread and on IRC, thanks. Regards, Yann E. MORIN. > --- > Changes v4 -> v5 (Arnout) > - move runtime test to separate patch; > - add tests for all libcs; > - remove tar; > - add pv and test that it's not included in cpio. > --- > support/testing/tests/fs/test_cpio.py | 93 +++++++++++++++++++++++++++ > 1 file changed, 93 insertions(+) > create mode 100644 support/testing/tests/fs/test_cpio.py > > diff --git a/support/testing/tests/fs/test_cpio.py b/support/testing/tests/fs/test_cpio.py > new file mode 100644 > index 0000000000..98620ebc06 > --- /dev/null > +++ b/support/testing/tests/fs/test_cpio.py > @@ -0,0 +1,93 @@ > +import os > +import infra.basetest > +import subprocess > + > +CHECK_FS_CMD = "mount | grep 'rootfs on / type rootfs'" > + > + > +def boot_img(emulator, builddir): > + img = os.path.join(builddir, "images", "rootfs.cpio") > + emulator.boot(arch="armv7", > + kernel="builtin", > + options=["-initrd", "{}".format(img)]) > + emulator.login() > + _, exit_code = emulator.run(CHECK_FS_CMD) > + return exit_code > + > + > +class TestCpioFull(infra.basetest.BRTest): > + config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \ > + """ > + BR2_INIT_BUSYBOX=y > + BR2_TARGET_ROOTFS_CPIO=y > + BR2_TARGET_ROOTFS_CPIO_FULL=y > + # BR2_TARGET_ROOTFS_TAR is not set > + """ > + > + def test_run(self): > + > + exit_code = boot_img(self.emulator, > + self.builddir) > + self.assertEqual(exit_code, 0) > + > + > +class TestCpioDracutBase(infra.basetest.BRTest): > + config = \ > + """ > + BR2_arm=y > + BR2_TOOLCHAIN_EXTERNAL=y > + BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y > + BR2_INIT_BUSYBOX=y > + BR2_PACKAGE_PV=y > + BR2_TARGET_ROOTFS_CPIO=y > + BR2_TARGET_ROOTFS_CPIO_DRACUT=y > + # BR2_TARGET_ROOTFS_TAR is not set > + """ > + > + def check_dracut(self): > + out = subprocess.check_output(["cpio", "--list"], > + stdin=open(os.path.join(self.builddir, "images/rootfs.cpio")), > + stderr=open(os.devnull, "w"), > + cwd=self.builddir, > + env={"LANG": "C"}, > + universal_newlines=True) > + # pv should *not* be included in cpio image > + self.assertEqual(out.find("bin/pv"), -1) > + > + exit_code = boot_img(self.emulator, > + self.builddir) > + self.assertEqual(exit_code, 0) > + > + # No pivot_root is done, so pv shouldn't be there > + _, exit_code = self.emulator.run("ls -l /usr/bin/pv") > + self.assertNotEqual(exit_code, 0) > + > + > +class TestCpioDracutUclibc(TestCpioDracutBase): > + config = TestCpioDracutBase.config + \ > + """ > + BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV5_EABI_UCLIBC_STABLE=y > + """ > + > + def test_run(self): > + self.check_dracut() > + > + > +class TestCpioDracutGlibc(TestCpioDracutBase): > + config = TestCpioDracutBase.config + \ > + """ > + BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV5_EABI_GLIBC_STABLE=y > + """ > + > + def test_run(self): > + self.check_dracut() > + > + > +class TestCpioDracutMusl(TestCpioDracutBase): > + config = TestCpioDracutBase.config + \ > + """ > + BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV5_EABI_MUSL_STABLE=y > + """ > + > + def test_run(self): > + self.check_dracut() > -- > 2.37.1 > > _______________________________________________ > buildroot mailing list > buildroot@buildroot.org > https://lists.buildroot.org/mailman/listinfo/buildroot
diff --git a/support/testing/tests/fs/test_cpio.py b/support/testing/tests/fs/test_cpio.py new file mode 100644 index 0000000000..98620ebc06 --- /dev/null +++ b/support/testing/tests/fs/test_cpio.py @@ -0,0 +1,93 @@ +import os +import infra.basetest +import subprocess + +CHECK_FS_CMD = "mount | grep 'rootfs on / type rootfs'" + + +def boot_img(emulator, builddir): + img = os.path.join(builddir, "images", "rootfs.cpio") + emulator.boot(arch="armv7", + kernel="builtin", + options=["-initrd", "{}".format(img)]) + emulator.login() + _, exit_code = emulator.run(CHECK_FS_CMD) + return exit_code + + +class TestCpioFull(infra.basetest.BRTest): + config = infra.basetest.BASIC_TOOLCHAIN_CONFIG + \ + """ + BR2_INIT_BUSYBOX=y + BR2_TARGET_ROOTFS_CPIO=y + BR2_TARGET_ROOTFS_CPIO_FULL=y + # BR2_TARGET_ROOTFS_TAR is not set + """ + + def test_run(self): + + exit_code = boot_img(self.emulator, + self.builddir) + self.assertEqual(exit_code, 0) + + +class TestCpioDracutBase(infra.basetest.BRTest): + config = \ + """ + BR2_arm=y + BR2_TOOLCHAIN_EXTERNAL=y + BR2_TOOLCHAIN_EXTERNAL_BOOTLIN=y + BR2_INIT_BUSYBOX=y + BR2_PACKAGE_PV=y + BR2_TARGET_ROOTFS_CPIO=y + BR2_TARGET_ROOTFS_CPIO_DRACUT=y + # BR2_TARGET_ROOTFS_TAR is not set + """ + + def check_dracut(self): + out = subprocess.check_output(["cpio", "--list"], + stdin=open(os.path.join(self.builddir, "images/rootfs.cpio")), + stderr=open(os.devnull, "w"), + cwd=self.builddir, + env={"LANG": "C"}, + universal_newlines=True) + # pv should *not* be included in cpio image + self.assertEqual(out.find("bin/pv"), -1) + + exit_code = boot_img(self.emulator, + self.builddir) + self.assertEqual(exit_code, 0) + + # No pivot_root is done, so pv shouldn't be there + _, exit_code = self.emulator.run("ls -l /usr/bin/pv") + self.assertNotEqual(exit_code, 0) + + +class TestCpioDracutUclibc(TestCpioDracutBase): + config = TestCpioDracutBase.config + \ + """ + BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV5_EABI_UCLIBC_STABLE=y + """ + + def test_run(self): + self.check_dracut() + + +class TestCpioDracutGlibc(TestCpioDracutBase): + config = TestCpioDracutBase.config + \ + """ + BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV5_EABI_GLIBC_STABLE=y + """ + + def test_run(self): + self.check_dracut() + + +class TestCpioDracutMusl(TestCpioDracutBase): + config = TestCpioDracutBase.config + \ + """ + BR2_TOOLCHAIN_EXTERNAL_BOOTLIN_ARMV5_EABI_MUSL_STABLE=y + """ + + def test_run(self): + self.check_dracut()