123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163 |
- import os
- from oeqa.selftest.case import OESelftestTestCase
- from oeqa.utils.commands import get_bb_var, get_bb_vars, bitbake
- class ManifestEntry:
- '''A manifest item of a collection able to list missing packages'''
- def __init__(self, entry):
- self.file = entry
- self.missing = []
- class VerifyManifest(OESelftestTestCase):
- '''Tests for the manifest files and contents of an image'''
- @classmethod
- def check_manifest_entries(self, manifest, path):
- manifest_errors = []
- try:
- with open(manifest, "r") as mfile:
- for line in mfile:
- manifest_entry = os.path.join(path, line.split()[0])
- self.logger.debug("{}: looking for {}"\
- .format(self.classname, manifest_entry))
- if not os.path.isfile(manifest_entry):
- manifest_errors.append(manifest_entry)
- self.logger.debug("{}: {} not found"\
- .format(self.classname, manifest_entry))
- except OSError as e:
- self.logger.debug("{}: checking of {} failed"\
- .format(self.classname, manifest))
- raise e
- return manifest_errors
- #this will possibly move from here
- @classmethod
- def get_dir_from_bb_var(self, bb_var, target = None):
- target == self.buildtarget if target == None else target
- directory = get_bb_var(bb_var, target);
- if not directory or not os.path.isdir(directory):
- self.logger.debug("{}: {} points to {} when target = {}"\
- .format(self.classname, bb_var, directory, target))
- raise OSError
- return directory
- @classmethod
- def setUpClass(self):
- super(VerifyManifest, self).setUpClass()
- self.buildtarget = 'core-image-minimal'
- self.classname = 'VerifyManifest'
- self.logger.info("{}: doing bitbake {} as a prerequisite of the test"\
- .format(self.classname, self.buildtarget))
- if bitbake(self.buildtarget).status:
- self.logger.debug("{} Failed to setup {}"\
- .format(self.classname, self.buildtarget))
- self.skipTest("{}: Cannot setup testing scenario"\
- .format(self.classname))
- def test_SDK_manifest_entries(self):
- '''Verifying the SDK manifest entries exist, this may take a build'''
- # the setup should bitbake core-image-minimal and here it is required
- # to do an additional setup for the sdk
- sdktask = '-c populate_sdk'
- bbargs = sdktask + ' ' + self.buildtarget
- self.logger.debug("{}: doing bitbake {} as a prerequisite of the test"\
- .format(self.classname, bbargs))
- if bitbake(bbargs).status:
- self.logger.debug("{} Failed to bitbake {}"\
- .format(self.classname, bbargs))
- self.skipTest("{}: Cannot setup testing scenario"\
- .format(self.classname))
- pkgdata_dir = reverse_dir = {}
- mfilename = mpath = m_entry = {}
- # get manifest location based on target to query about
- d_target= dict(target = self.buildtarget,
- host = 'nativesdk-packagegroup-sdk-host')
- try:
- mdir = self.get_dir_from_bb_var('SDK_DEPLOY', self.buildtarget)
- for k in d_target.keys():
- bb_vars = get_bb_vars(['SDK_NAME', 'SDK_VERSION'], self.buildtarget)
- mfilename[k] = "{}-toolchain-{}.{}.manifest".format(
- bb_vars['SDK_NAME'],
- bb_vars['SDK_VERSION'],
- k)
- mpath[k] = os.path.join(mdir, mfilename[k])
- if not os.path.isfile(mpath[k]):
- self.logger.debug("{}: {} does not exist".format(
- self.classname, mpath[k]))
- raise IOError
- m_entry[k] = ManifestEntry(mpath[k])
- pkgdata_dir[k] = self.get_dir_from_bb_var('PKGDATA_DIR',
- d_target[k])
- reverse_dir[k] = os.path.join(pkgdata_dir[k],
- 'runtime-reverse')
- if not os.path.exists(reverse_dir[k]):
- self.logger.debug("{}: {} does not exist".format(
- self.classname, reverse_dir[k]))
- raise IOError
- except OSError:
- raise self.skipTest("{}: Error in obtaining manifest dirs"\
- .format(self.classname))
- except IOError:
- msg = "{}: Error cannot find manifests in the specified dir:\n{}"\
- .format(self.classname, mdir)
- self.fail(msg)
- for k in d_target.keys():
- self.logger.debug("{}: Check manifest {}".format(
- self.classname, m_entry[k].file))
- m_entry[k].missing = self.check_manifest_entries(\
- m_entry[k].file,reverse_dir[k])
- if m_entry[k].missing:
- msg = '{}: {} Error has the following missing entries'\
- .format(self.classname, m_entry[k].file)
- logmsg = msg+':\n'+'\n'.join(m_entry[k].missing)
- self.logger.debug(logmsg)
- self.logger.info(msg)
- self.fail(logmsg)
- def test_image_manifest_entries(self):
- '''Verifying the image manifest entries exist'''
- # get manifest location based on target to query about
- try:
- mdir = self.get_dir_from_bb_var('DEPLOY_DIR_IMAGE',
- self.buildtarget)
- mfilename = get_bb_var("IMAGE_LINK_NAME", self.buildtarget)\
- + ".manifest"
- mpath = os.path.join(mdir, mfilename)
- if not os.path.isfile(mpath): raise IOError
- m_entry = ManifestEntry(mpath)
- pkgdata_dir = {}
- pkgdata_dir = self.get_dir_from_bb_var('PKGDATA_DIR',
- self.buildtarget)
- revdir = os.path.join(pkgdata_dir, 'runtime-reverse')
- if not os.path.exists(revdir): raise IOError
- except OSError:
- raise self.skipTest("{}: Error in obtaining manifest dirs"\
- .format(self.classname))
- except IOError:
- msg = "{}: Error cannot find manifests in dir:\n{}"\
- .format(self.classname, mdir)
- self.fail(msg)
- self.logger.debug("{}: Check manifest {}"\
- .format(self.classname, m_entry.file))
- m_entry.missing = self.check_manifest_entries(\
- m_entry.file, revdir)
- if m_entry.missing:
- msg = '{}: {} Error has the following missing entries'\
- .format(self.classname, m_entry.file)
- logmsg = msg+':\n'+'\n'.join(m_entry.missing)
- self.logger.debug(logmsg)
- self.logger.info(msg)
- self.fail(logmsg)
|