Hello, On 11/07/2021 17:16:29+0200, Vyacheslav Yurkov wrote: > Unit tests for overlayfs.bbclass >
This still seems to fail the tests: https://autobuilder.yoctoproject.org/typhoon/#/builders/79/builds/2299/steps/14/logs/stdio > Signed-off-by: Vyacheslav Yurkov <uvv.m...@gmail.com> > --- > meta/lib/oeqa/selftest/cases/overlayfs.py | 167 ++++++++++++++++++++++ > 1 file changed, 167 insertions(+) > create mode 100644 meta/lib/oeqa/selftest/cases/overlayfs.py > > diff --git a/meta/lib/oeqa/selftest/cases/overlayfs.py > b/meta/lib/oeqa/selftest/cases/overlayfs.py > new file mode 100644 > index 0000000000..a5a4792eb0 > --- /dev/null > +++ b/meta/lib/oeqa/selftest/cases/overlayfs.py > @@ -0,0 +1,167 @@ > +# > +# SPDX-License-Identifier: MIT > +# > + > +from oeqa.selftest.case import OESelftestTestCase > +from oeqa.utils.commands import runCmd, bitbake, get_bb_var, runqemu > + > +class OverlayFSTests(OESelftestTestCase): > + """Overlayfs class usage tests""" > + > + def getline(self, res, line): > + for l in res.output.split('\n'): > + if line in l: > + return l > + > + def add_overlay_conf_to_machine(self): > + machine_inc = """ > +OVERLAYFS_MOUNT_POINT[mnt-overlay] = "/mnt/overlay" > +""" > + self.set_machine_config(machine_inc) > + > + def test_distro_features_missing(self): > + """ > + Summary: Check that required DISTRO_FEATURES are set > + Expected: Fail when either systemd or overlayfs are not in > DISTRO_FEATURES > + Author: Vyacheslav Yurkov <uvv.m...@gmail.com> > + """ > + > + config = """ > +IMAGE_INSTALL_append = " overlayfs-user" > +""" > + self.write_config(config) > + self.add_overlay_conf_to_machine() > + > + res = bitbake('core-image-minimal', ignore_status=True) > + line = self.getline(res, "overlayfs-user was skipped: missing > required distro features") > + self.assertTrue("overlayfs" in res.output, msg=res.output) > + self.assertTrue("systemd" in res.output, msg=res.output) > + self.assertTrue("ERROR: Required build target 'core-image-minimal' > has no buildable providers." in res.output, msg=res.output) > + > + def test_not_all_units_installed(self): > + """ > + Summary: Test QA check that we have required mount units in the > image > + Expected: Fail because mount unit for overlay partition is not > installed > + Author: Vyacheslav Yurkov <uvv.m...@gmail.com> > + """ > + > + config = """ > +IMAGE_INSTALL_append = " overlayfs-user" > +DISTRO_FEATURES += "systemd overlayfs" > +""" > + > + self.write_config(config) > + self.add_overlay_conf_to_machine() > + > + res = bitbake('core-image-minimal', ignore_status=True) > + line = self.getline(res, "Unit name mnt-overlay.mount not found in > systemd unit directories") > + self.assertTrue(line and line.startswith("WARNING:"), msg=res.output) > + line = self.getline(res, "Not all mount units are installed by the > BSP") > + self.assertTrue(line and line.startswith("ERROR:"), msg=res.output) > + > + def test_mount_unit_not_set(self): > + """ > + Summary: Test whether mount unit was set properly > + Expected: Fail because mount unit was not set > + Author: Vyacheslav Yurkov <uvv.m...@gmail.com> > + """ > + > + config = """ > +IMAGE_INSTALL_append = " overlayfs-user" > +DISTRO_FEATURES += "systemd overlayfs" > +""" > + > + self.write_config(config) > + > + res = bitbake('core-image-minimal', ignore_status=True) > + line = self.getline(res, "A recipe uses overlayfs class but there is > no OVERLAYFS_MOUNT_POINT set in your MACHINE configuration") > + self.assertTrue(line and line.startswith("Parsing > recipes...ERROR:"), msg=res.output) > + > + def test_wrong_mount_unit_set(self): > + """ > + Summary: Test whether mount unit was set properly > + Expected: Fail because not the correct flag used for mount unit > + Author: Vyacheslav Yurkov <uvv.m...@gmail.com> > + """ > + > + config = """ > +IMAGE_INSTALL_append = " overlayfs-user" > +DISTRO_FEATURES += "systemd overlayfs" > +""" > + > + wrong_machine_config = """ > +OVERLAYFS_MOUNT_POINT[usr-share-overlay] = "/usr/share/overlay" > +""" > + > + self.write_config(config) > + self.set_machine_config(wrong_machine_config) > + > + res = bitbake('core-image-minimal', ignore_status=True) > + line = self.getline(res, "Missing required mount point for > OVERLAYFS_MOUNT_POINT[mnt-overlay] in your MACHINE configuration") > + self.assertTrue(line and line.startswith("Parsing > recipes...ERROR:"), msg=res.output) > + > + def test_correct_image(self): > + """ > + Summary: Check that we can create an image when all parameters are > + set correctly > + Expected: Image is created successfully > + Author: Vyacheslav Yurkov <uvv.m...@gmail.com> > + """ > + > + config = """ > +IMAGE_INSTALL_append = " overlayfs-user systemd-machine-units" > +DISTRO_FEATURES += "systemd overlayfs" > + > +# Use systemd as init manager > +VIRTUAL-RUNTIME_init_manager = "systemd" > + > +# enable overlayfs in the kernel > +KERNEL_EXTRA_FEATURES_append = " features/overlayfs/overlayfs.scc" > +""" > + > + systemd_machine_unit_append = """ > +SYSTEMD_SERVICE_${PN} += " \ > + mnt-overlay.mount \ > +" > + > +do_install_append() { > + install -d ${D}${systemd_system_unitdir} > + cat <<EOT > ${D}${systemd_system_unitdir}/mnt-overlay.mount > +[Unit] > +Description=Tmpfs directory > +DefaultDependencies=no > + > +[Mount] > +What=tmpfs > +Where=/mnt/overlay > +Type=tmpfs > +Options=mode=1777,strictatime,nosuid,nodev > + > +[Install] > +WantedBy=multi-user.target > +EOT > +} > + > +""" > + > + self.write_config(config) > + self.add_overlay_conf_to_machine() > + self.write_recipeinc('systemd-machine-units', > systemd_machine_unit_append) > + > + bitbake('core-image-minimal') > + > + def getline_qemu(out, line): > + for l in out.split('\n'): > + if line in l: > + return l > + > + with runqemu('core-image-minimal') as qemu: > + # Check that we have /mnt/overlay fs mounted as tmpfs and > + # /usr/share/my-application as an overlay (see overlayfs-user > recipe) > + status, output = qemu.run_serial("/bin/mount -t tmpfs,overlay") > + > + line = getline_qemu(output, "on /mnt/overlay") > + self.assertTrue(line and line.startswith("tmpfs"), msg=output) > + > + line = getline_qemu(output, > "upperdir=/mnt/overlay/upper/usr/share/my-application") > + self.assertTrue(line and line.startswith("overlay"), msg=output) > -- > 2.28.0 > -- Alexandre Belloni, co-owner and COO, Bootlin Embedded Linux and Kernel engineering https://bootlin.com
-=-=-=-=-=-=-=-=-=-=-=- Links: You receive all messages sent to this group. View/Reply Online (#153763): https://lists.openembedded.org/g/openembedded-core/message/153763 Mute This Topic: https://lists.openembedded.org/mt/84089165/21656 Group Owner: openembedded-core+ow...@lists.openembedded.org Unsubscribe: https://lists.openembedded.org/g/openembedded-core/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-