[OE-core] [PATCH] selftest/package: Add test to ensure ownership is preserved

Daisuke Yamane daisuke.yamane at cybertrust.co.jp
Sat Mar 14 13:09:42 UTC 2020


Yocto Bug: https://bugzilla.yoctoproject.org/show_bug.cgi?id=13806

Add test_preserve_ownership to selftest/package.
This test creates a file, a directory and a symbolic link and changes ownership,
then compares with them installed in rootfs to ensure ownership is preserved.

[Test without a commit 'bitbake: lib/bb/utils.py: Preserve ownership of symlink']
| 2020-03-14 10:01:14,519 - oe-selftest - INFO - test_preserve_ownership (package.PackageTests)
| 2020-03-14 10:56:44,612 - oe-selftest - INFO - Check ownership of /etc/selftest-chown/file
| 2020-03-14 10:56:44,770 - oe-selftest - INFO - Check ownership of /etc/selftest-chown/dir
| 2020-03-14 10:56:44,822 - oe-selftest - INFO - Check ownership of /etc/selftest-chown/symlink
| 2020-03-14 10:56:44,879 - oe-selftest - ERROR - Incrrect ownership /etc/selftest-chown/symlink [root:root]
| 2020-03-14 10:56:45,884 - oe-selftest - INFO -  ... FAIL

[Test with a commit 'bitbake: lib/bb/utils.py: Preserve ownership of symlink']
| 2020-03-14 10:58:49,599 - oe-selftest - INFO - test_preserve_ownership (package.PackageTests)
| 2020-03-14 11:51:39,947 - oe-selftest - INFO - Check ownership of /etc/selftest-chown/file
| 2020-03-14 11:51:40,013 - oe-selftest - INFO - Check ownership of /etc/selftest-chown/dir
| 2020-03-14 11:51:40,063 - oe-selftest - INFO - Check ownership of /etc/selftest-chown/symlink
| 2020-03-14 11:51:41,118 - oe-selftest - INFO -  ... ok

Signed-off-by: Daisuke Yamane <daisuke.yamane at cybertrust.co.jp>
---
 .../recipes-test/selftest-chown/selftest-chown.bb  | 25 ++++++++++++++++++++++
 meta/lib/oeqa/selftest/cases/package.py            | 23 ++++++++++++++++++++
 2 files changed, 48 insertions(+)
 create mode 100644 meta-selftest/recipes-test/selftest-chown/selftest-chown.bb

diff --git a/meta-selftest/recipes-test/selftest-chown/selftest-chown.bb b/meta-selftest/recipes-test/selftest-chown/selftest-chown.bb
new file mode 100644
index 0000000..87bf943
--- /dev/null
+++ b/meta-selftest/recipes-test/selftest-chown/selftest-chown.bb
@@ -0,0 +1,25 @@
+SUMMARY = "selftest chown"
+LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
+
+LICENSE = "MIT"
+
+S = "${WORKDIR}"
+
+inherit useradd allarch
+
+USERADD_PACKAGES = "${PN}"
+USERADD_PARAM_${PN} = "-u 1234 -M test"
+TESTDIR = "${D}${sysconfdir}/selftest-chown"
+
+do_install() {
+	install -d   ${TESTDIR}
+	install -d   ${TESTDIR}/dir
+	touch        ${TESTDIR}/file
+	ln -s ./file ${TESTDIR}/symlink
+
+	chown    test:test ${TESTDIR}/file
+	chown -R test:test ${TESTDIR}/dir
+	chown -h test:test ${TESTDIR}/symlink
+}
+
+FILES_${PN} = "${sysconfdir}/selftest-chown/*"
diff --git a/meta/lib/oeqa/selftest/cases/package.py b/meta/lib/oeqa/selftest/cases/package.py
index b87f8dc..3010b1a 100644
--- a/meta/lib/oeqa/selftest/cases/package.py
+++ b/meta/lib/oeqa/selftest/cases/package.py
@@ -148,3 +148,26 @@ class PackageTests(OESelftestTestCase):
                            '/usr/libexec/hello4']:
                 if not gdbtest(qemu, binary):
                     self.fail('GDB %s failed' % binary)
+
+    def test_preserve_ownership(self):
+        import os, stat, oe.cachedpath
+        features = 'IMAGE_INSTALL_append = " selftest-chown"\n'
+        self.write_config(features)
+        bitbake("core-image-minimal")
+
+        sysconfdir = get_bb_var('sysconfdir', 'selftest-chown')
+        def check_ownership(qemu, gid, uid, path):
+            self.logger.info("Check ownership of %s", path)
+            status, output = qemu.run_serial(r'/bin/stat -c "%U %G" ' + path, timeout=60)
+            output = output.split(" ")
+            if output[0] != uid or output[1] != gid :
+                self.logger.error("Incrrect ownership %s [%s:%s]", path, output[0], output[1])
+                return False
+            return True
+
+        with runqemu('core-image-minimal') as qemu:
+            for path in [ sysconfdir + "/selftest-chown/file",
+                          sysconfdir + "/selftest-chown/dir",
+                          sysconfdir + "/selftest-chown/symlink"]:
+                if not check_ownership(qemu, "test", "test", path):
+                    self.fail('Test ownership %s failed' % path)
-- 
2.7.4



More information about the Openembedded-core mailing list