mirror of
https://git.yoctoproject.org/git/poky
synced 2026-01-04 16:10:04 +00:00
oe-selftest: add a test for failing package post-installation scriptlets
The test runs a scriptlet that has an intentionally failing command in the middle and checks for two things: 1) that bitbake does warn the user about the failure 2) that scriptlet execution stops at that point. The test is run for all three package types: rpm, deb, ipk. (From OE-Core rev: 865fafb0dff19d27bd417c28c95fb8fdf0326a2b) Signed-off-by: Alexander Kanavin <alexander.kanavin@linux.intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
parent
cd005e2d5b
commit
6827053895
|
|
@ -3,11 +3,12 @@ LICENSE = "MIT"
|
|||
|
||||
inherit allarch
|
||||
|
||||
PACKAGES = "${PN}-rootfs ${PN}-delayed-a ${PN}-delayed-b"
|
||||
PACKAGES = "${PN}-rootfs ${PN}-delayed-a ${PN}-delayed-b ${PN}-rootfs-failing"
|
||||
|
||||
ALLOW_EMPTY_${PN}-rootfs = "1"
|
||||
ALLOW_EMPTY_${PN}-delayed-a = "1"
|
||||
ALLOW_EMPTY_${PN}-delayed-b = "1"
|
||||
ALLOW_EMPTY_${PN}-rootfs-failing = "1"
|
||||
|
||||
RDEPENDS_${PN}-delayed-a = "${PN}-rootfs"
|
||||
RDEPENDS_${PN}-delayed-b = "${PN}-delayed-a"
|
||||
|
|
@ -58,3 +59,14 @@ pkg_postinst_ontarget_${PN}-delayed-b () {
|
|||
|
||||
touch ${TESTDIR}/delayed-b
|
||||
}
|
||||
|
||||
# This scriptlet intentionally includes a bogus command in the middle to test
|
||||
# that we catch and report such errors properly.
|
||||
pkg_postinst_${PN}-rootfs-failing () {
|
||||
mkdir -p $D${TESTDIR}
|
||||
touch $D${TESTDIR}/rootfs-before-failure
|
||||
run_a_really_broken_command
|
||||
# Scriptlet execution should stop here; the following commands are NOT supposed to run.
|
||||
# (oe-selftest checks for it).
|
||||
touch $D${TESTDIR}/rootfs-after-failure
|
||||
}
|
||||
|
|
|
|||
|
|
@ -221,3 +221,40 @@ class Postinst(OESelftestTestCase):
|
|||
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)
|
||||
|
||||
|
||||
|
||||
def test_failing_postinst(self):
|
||||
"""
|
||||
Summary: The purpose of this test case is to verify that post-installation
|
||||
scripts that contain errors are properly reported.
|
||||
Expected: The scriptlet failure is properly reported.
|
||||
The file that is created after the error in the scriptlet is not present.
|
||||
Product: oe-core
|
||||
Author: Alexander Kanavin <alexander.kanavin@intel.com>
|
||||
"""
|
||||
|
||||
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")
|
||||
|
||||
for classes in ("package_rpm", "package_deb", "package_ipk"):
|
||||
with self.subTest(package_class=classes):
|
||||
features = 'CORE_IMAGE_EXTRA_INSTALL = "postinst-rootfs-failing"\n'
|
||||
features += 'PACKAGE_CLASSES = "%s"\n' % classes
|
||||
self.write_config(features)
|
||||
bb_result = bitbake('core-image-minimal')
|
||||
self.assertGreaterEqual(bb_result.output.find("Intentionally failing postinstall scriptlets of ['postinst-rootfs-failing'] to defer them to first boot is deprecated."), 0,
|
||||
"Warning about a failed scriptlet not found in bitbake output: %s" %(bb_result.output))
|
||||
|
||||
self.assertTrue(os.path.isfile(os.path.join(hosttestdir, "rootfs-before-failure")),
|
||||
"rootfs-before-failure file was not created")
|
||||
self.assertFalse(os.path.isfile(os.path.join(hosttestdir, "rootfs-after-failure")),
|
||||
"rootfs-after-failure file was created")
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user