Particularly: 1) determine per-package if ptest is supported, and add to the list of packages to install accordingly 2) remove broken code that finds image logs in the build directory; this will be replaced in the following commit 3) remove code that parses said logs for specific package failures; this is prone to mistmatches and is best left to a human.
Signed-off-by: Alexander Kanavin <alexander.kana...@linux.intel.com> --- modules/testimage.py | 115 +++++---------------------------------------------- 1 file changed, 10 insertions(+), 105 deletions(-) diff --git a/modules/testimage.py b/modules/testimage.py index d2479f5..699d619 100644 --- a/modules/testimage.py +++ b/modules/testimage.py @@ -50,129 +50,34 @@ class TestImage(): self.image = image os.environ['BB_ENV_EXTRAWHITE'] = os.environ['BB_ENV_EXTRAWHITE'] + \ - " TEST_SUITES CORE_IMAGE_EXTRA_INSTALL" + " CORE_IMAGE_EXTRA_INSTALL" - def _get_pkgs_to_install(self, pkgs, ptest=False): + def _get_pkgs_to_install(self, pkgs): pkgs_out = [] - # for provide access to the target - if ptest: - pkgs_out.append("dropbear") - pkgs_out.append("ptest-runner") - for c in pkgs: pkgs_out.append(c['PN']) - return ' '.join(pkgs_out) - - def _parse_ptest_log(self, log_file): - ptest_results = {} - - with open(log_file, "r") as f: - pn = None - processing = False - - for line in f: - if not processing: - m = re.search("^BEGIN: /usr/lib/(.*)/ptest$", line) - if m: - pn = m.group(1) - ptest_results[pn] = [] - processing = True - else: - m = re.search("^END: $", line) - if m: - pn = None - processing = False - else: - ptest_results[pn].append(line) - - return ptest_results - - def _find_log(self, name, machine): - result = [] - - base_dir = os.path.join(os.getenv('BUILDDIR'), 'tmp', 'work') - for root, dirs, files in os.walk(base_dir): - if name in files: - result.append(os.path.join(root, name)) - - D("Found logs named %s for machine %s: %s" %(name, machine, result)) - for ptest_log in result: - if machine in ptest_log: - D("Picked log: %s" %(ptest_log)) - return ptest_log - - def _get_failed_recipe(self, log): - pn = None - - for line in log.splitlines(): - m = re.match("ERROR: QA Issue: ([^ :]*): (.*) not shipped", line) - if m: - pn = m.group(1) - break - - m = re.match("ERROR: Logfile of failure stored in: " \ - "(.*/([^/]*)/[^/]*/temp/log\.(.*)\.[0-9]*)", line) - if m: - pn = m.group(2) - break - - return pn - - def _handle_image_build_error(self, image, pkgs_ctx, e): - pn = self._get_failed_recipe(e.stdout) - if pn and pn != image: - pkg_ctx = _pn_in_pkgs_ctx(pn, pkgs_ctx) - if pkg_ctx: - raise IntegrationError(e.stdout, pkg_ctx) + I(" Checking if package {} has ptests...".format(c['PN'])) + if 'PTEST_ENABLED' in self.bb.env(c['PN']): + I(" ...yes") + pkgs_out.append((c['PN']) + '-ptest') else: - pn_env = self.bb.env(pn) - - depends = pn_env['DEPENDS'].split() - rdepends = pn_env['RDEPENDS'].split() - deps = depends + rdepends + I(" ...no") - for d in deps: - pkg_ctx = _pn_in_pkgs_ctx(d, pkgs_ctx) - if pkg_ctx: - raise IntegrationError(e.stdout, pkg_ctx) - raise e + return ' '.join(pkgs_out) def testimage(self, pkgs_ctx, machine, image): os.environ['CORE_IMAGE_EXTRA_INSTALL'] = \ self._get_pkgs_to_install(pkgs_ctx) - - if 'TEST_SUITES' in os.environ: - del os.environ['TEST_SUITES'] + I( " Installing additional packages to the image: {}".format(os.environ['CORE_IMAGE_EXTRA_INSTALL'])) I( " building %s for %s ..." % (image, machine)) - try: - self.bb.complete(image, machine) - except Error as e: - self._handle_image_build_error(image, pkgs_ctx, e) + self.bb.complete(image, machine) I( " running %s/testimage for %s ..." % (image, machine)) self.bb.complete("%s -c testimage" % image, machine) - log_file = self._find_log("log.do_testimage", machine) - shutil.copyfile(log_file, - os.path.join(self.uh_work_dir, "log_%s.do_testimage" % machine)) - for pkg_ctx in pkgs_ctx: - if not 'testimage' in pkg_ctx: - pkg_ctx['testimage'] = {} - if not 'testimage_log' in pkg_ctx: - pkg_ctx['testimage_log'] = os.path.join( - pkg_ctx['workdir'], "log.do_testimage") - - pkg_ctx['testimage'][machine] = True - with open(log_file, "r") as lf: - with open(pkg_ctx['testimage_log'], "a+") as of: - of.write("BEGIN: TESTIMAGE for %s\n" % machine) - for line in lf: - of.write(line) - of.write("END: TESTIMAGE for %s\n" % machine) - def run(self): machine = self.opts['machines'][0] I(" Testing image for %s ..." % machine) -- 2.15.1 -- _______________________________________________ yocto mailing list yocto@yoctoproject.org https://lists.yoctoproject.org/listinfo/yocto