|
@@ -10,6 +10,7 @@ import re
|
|
|
import tempfile
|
|
|
import shutil
|
|
|
import oe.lsb
|
|
|
+from oeqa.core.decorator.data import skipIfNotQemu
|
|
|
|
|
|
class TestExport(OESelftestTestCase):
|
|
|
|
|
@@ -243,7 +244,47 @@ class TestImage(OESelftestTestCase):
|
|
|
bitbake('-c testimage core-image-minimal')
|
|
|
|
|
|
class Postinst(OESelftestTestCase):
|
|
|
- def test_postinst_rootfs_and_boot(self):
|
|
|
+
|
|
|
+ def init_manager_loop(self, init_manager):
|
|
|
+ import oe.path
|
|
|
+
|
|
|
+ vars = get_bb_vars(("IMAGE_ROOTFS", "sysconfdir"), "core-image-minimal")
|
|
|
+ rootfs = vars["IMAGE_ROOTFS"]
|
|
|
+ self.assertIsNotNone(rootfs)
|
|
|
+ sysconfdir = vars["sysconfdir"]
|
|
|
+ self.assertIsNotNone(sysconfdir)
|
|
|
+ # Need to use oe.path here as sysconfdir starts with /
|
|
|
+ hosttestdir = oe.path.join(rootfs, sysconfdir, "postinst-test")
|
|
|
+ targettestdir = os.path.join(sysconfdir, "postinst-test")
|
|
|
+
|
|
|
+ for classes in ("package_rpm", "package_deb", "package_ipk"):
|
|
|
+ with self.subTest(init_manager=init_manager, package_class=classes):
|
|
|
+ features = 'CORE_IMAGE_EXTRA_INSTALL = "postinst-delayed-b"\n'
|
|
|
+ features += 'IMAGE_FEATURES += "package-management empty-root-password"\n'
|
|
|
+ features += 'PACKAGE_CLASSES = "%s"\n' % classes
|
|
|
+ if init_manager == "systemd":
|
|
|
+ features += 'DISTRO_FEATURES_append = " systemd"\n'
|
|
|
+ features += 'VIRTUAL-RUNTIME_init_manager = "systemd"\n'
|
|
|
+ features += 'DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit"\n'
|
|
|
+ features += 'VIRTUAL-RUNTIME_initscripts = ""\n'
|
|
|
+ self.write_config(features)
|
|
|
+
|
|
|
+ bitbake('core-image-minimal')
|
|
|
+
|
|
|
+ self.assertTrue(os.path.isfile(os.path.join(hosttestdir, "rootfs")),
|
|
|
+ "rootfs state file was not created")
|
|
|
+
|
|
|
+ with runqemu('core-image-minimal') as qemu:
|
|
|
+ # Make the test echo a string and search for that as
|
|
|
+ # run_serial()'s status code is useless.'
|
|
|
+ for filename in ("rootfs", "delayed-a", "delayed-b"):
|
|
|
+ status, output = qemu.run_serial("test -f %s && echo found" % os.path.join(targettestdir, filename))
|
|
|
+ self.assertEqual(output, "found", "%s was not present on boot" % filename)
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ @skipIfNotQemu('qemuall', 'Test only runs in qemu')
|
|
|
+ def test_postinst_rootfs_and_boot_sysvinit(self):
|
|
|
"""
|
|
|
Summary: The purpose of this test case is to verify Post-installation
|
|
|
scripts are called when rootfs is created and also test
|
|
@@ -257,46 +298,32 @@ class Postinst(OESelftestTestCase):
|
|
|
created by postinst_boot recipe is present on image.
|
|
|
Expected: The files are successfully created during rootfs and boot
|
|
|
time for 3 different package managers: rpm,ipk,deb and
|
|
|
- for initialization managers: sysvinit and systemd.
|
|
|
+ for initialization managers: sysvinit.
|
|
|
|
|
|
"""
|
|
|
+ self.init_manager_loop("sysvinit")
|
|
|
|
|
|
- import oe.path
|
|
|
|
|
|
- vars = get_bb_vars(("IMAGE_ROOTFS", "sysconfdir"), "core-image-minimal")
|
|
|
- rootfs = vars["IMAGE_ROOTFS"]
|
|
|
- self.assertIsNotNone(rootfs)
|
|
|
- sysconfdir = vars["sysconfdir"]
|
|
|
- self.assertIsNotNone(sysconfdir)
|
|
|
- # Need to use oe.path here as sysconfdir starts with /
|
|
|
- hosttestdir = oe.path.join(rootfs, sysconfdir, "postinst-test")
|
|
|
- targettestdir = os.path.join(sysconfdir, "postinst-test")
|
|
|
+ @skipIfNotQemu('qemuall', 'Test only runs in qemu')
|
|
|
+ def test_postinst_rootfs_and_boot_systemd(self):
|
|
|
+ """
|
|
|
+ Summary: The purpose of this test case is to verify Post-installation
|
|
|
+ scripts are called when rootfs is created and also test
|
|
|
+ that script can be delayed to run at first boot.
|
|
|
+ Dependencies: NA
|
|
|
+ Steps: 1. Add proper configuration to local.conf file
|
|
|
+ 2. Build a "core-image-minimal" image
|
|
|
+ 3. Verify that file created by postinst_rootfs recipe is
|
|
|
+ present on rootfs dir.
|
|
|
+ 4. Boot the image created on qemu and verify that the file
|
|
|
+ created by postinst_boot recipe is present on image.
|
|
|
+ Expected: The files are successfully created during rootfs and boot
|
|
|
+ time for 3 different package managers: rpm,ipk,deb and
|
|
|
+ for initialization managers: systemd.
|
|
|
|
|
|
- for init_manager in ("sysvinit", "systemd"):
|
|
|
- for classes in ("package_rpm", "package_deb", "package_ipk"):
|
|
|
- with self.subTest(init_manager=init_manager, package_class=classes):
|
|
|
- features = 'CORE_IMAGE_EXTRA_INSTALL = "postinst-delayed-b"\n'
|
|
|
- features += 'IMAGE_FEATURES += "package-management empty-root-password"\n'
|
|
|
- features += 'PACKAGE_CLASSES = "%s"\n' % classes
|
|
|
- if init_manager == "systemd":
|
|
|
- features += 'DISTRO_FEATURES_append = " systemd"\n'
|
|
|
- features += 'VIRTUAL-RUNTIME_init_manager = "systemd"\n'
|
|
|
- features += 'DISTRO_FEATURES_BACKFILL_CONSIDERED = "sysvinit"\n'
|
|
|
- features += 'VIRTUAL-RUNTIME_initscripts = ""\n'
|
|
|
- self.write_config(features)
|
|
|
-
|
|
|
- bitbake('core-image-minimal')
|
|
|
-
|
|
|
- self.assertTrue(os.path.isfile(os.path.join(hosttestdir, "rootfs")),
|
|
|
- "rootfs state file was not created")
|
|
|
-
|
|
|
- with runqemu('core-image-minimal') as qemu:
|
|
|
- # Make the test echo a string and search for that as
|
|
|
- # run_serial()'s status code is useless.'
|
|
|
- for filename in ("rootfs", "delayed-a", "delayed-b"):
|
|
|
- status, output = qemu.run_serial("test -f %s && echo found" % os.path.join(targettestdir, filename))
|
|
|
- self.assertEqual(output, "found", "%s was not present on boot" % filename)
|
|
|
+ """
|
|
|
|
|
|
+ self.init_manager_loop("systemd")
|
|
|
|
|
|
|
|
|
def test_failing_postinst(self):
|