import os from oeqa.selftest.case import OESelftestTestCase from oeqa.utils.commands import bitbake, get_bb_vars, runCmd from oeqa.core.decorator.oeid import OETestID # This test builds an image with using the "container" IMAGE_FSTYPE, and # ensures that then files in the image are only the ones expected. # # The only package added to the image is container_image_testpkg, which # contains one file. However, due to some other things not cleaning up during # rootfs creation, there is some cruft. Ideally bugs will be filed and the # cruft removed, but for now we whitelist some known set. # # Also for performance reasons we're only checking the cruft when using ipk. # When using deb, and rpm it is a bit different and we could test all # of them, but this test is more to catch if other packages get added by # default other than what is in ROOTFS_BOOTSTRAP_INSTALL. # class ContainerImageTests(OESelftestTestCase): # Verify that when specifying a IMAGE_TYPEDEP_ of the form "foo.bar" that # the conversion type bar gets added as a dep as well @OETestID(1619) def test_expected_files(self): def get_each_path_part(path): if path: part = [ '.' + path + '/' ] result = get_each_path_part(path.rsplit('/', 1)[0]) if result: return part + result else: return part else: return None self.write_config("""PREFERRED_PROVIDER_virtual/kernel = "linux-dummy" IMAGE_FSTYPES = "container" PACKAGE_CLASSES = "package_ipk" IMAGE_FEATURES = "" """) bbvars = get_bb_vars(['bindir', 'sysconfdir', 'localstatedir', 'DEPLOY_DIR_IMAGE', 'IMAGE_LINK_NAME'], target='container-test-image') expected_files = [ './', '.{bindir}/theapp', '.{sysconfdir}/default/', '.{sysconfdir}/default/postinst', '.{sysconfdir}/ld.so.cache', '.{sysconfdir}/timestamp', '.{sysconfdir}/version', './run/', '.{localstatedir}/cache/', '.{localstatedir}/cache/ldconfig/', '.{localstatedir}/cache/ldconfig/aux-cache', '.{localstatedir}/cache/opkg/', '.{localstatedir}/lib/', '.{localstatedir}/lib/opkg/' ] expected_files = [ x.format(bindir=bbvars['bindir'], sysconfdir=bbvars['sysconfdir'], localstatedir=bbvars['localstatedir']) for x in expected_files ] # Since tar lists all directories individually, make sure each element # from bindir, sysconfdir, etc is added expected_files += get_each_path_part(bbvars['bindir']) expected_files += get_each_path_part(bbvars['sysconfdir']) expected_files += get_each_path_part(bbvars['localstatedir']) expected_files = sorted(expected_files) # Build the image of course bitbake('container-test-image') image = os.path.join(bbvars['DEPLOY_DIR_IMAGE'], bbvars['IMAGE_LINK_NAME'] + '.tar.bz2') # Ensure the files in the image are what we expect result = runCmd("tar tf {} | sort".format(image), shell=True) self.assertEqual(result.output.split('\n'), expected_files)