def _system_variables_cmd(self, _, args): rows = [] sys_vars = system_variables.get_vars(defer=True) for key in sorted(list(sys_vars.keys())): try: value = sys_vars[key] deferred = isinstance(value, DeferredVariable) help_str = sys_vars.help(key) except system_variables.SystemPluginError as err: value = output.ANSIString('error', code=output.RED) deferred = False help_str = output.ANSIString(str(err), code=output.RED) rows.append({ 'name': key, 'value': value if not deferred else '<deferred>', 'description': help_str, 'path': sys_vars.get_obj(key).path, }) fields = ['name', 'value', 'description'] if args.verbose: fields.append('path') output.draw_table(self.outfile, fields=fields, rows=rows, title="Available System Variables")
def _series_cmd(self, pav_cfg, args): series_dict = series_config.find_all_series(pav_cfg) rows = [] for series_name in sorted(list(series_dict.keys())): series = series_dict[series_name] if series['err']: series_name = output.ANSIString('{}.*'\ .format(series_name), output.RED) rows.append({ 'name': series_name, 'summary': 'Loading the series failed. ' 'For more info, run `pav show series --err`.', 'path': series['path'], 'err': series['err'] }) fields = ['name'] if args.verbose or args.err: fields.extend(['tests', 'path']) if args.err: fields.append('err') output.draw_table(self.outfile, field_info={}, fields=fields, rows=rows)
def _suites_cmd(self, pav_cfg, args): suites = find_all_tests(pav_cfg) rows = [] for suite_name in sorted(list(suites.keys())): suite = suites[suite_name] if suite['err']: name = output.ANSIString(suite_name, output.RED) else: name = suite_name rows.append({ 'name': name, 'path': suite['path'], 'tests': len(suite['tests']), 'err': suite['err'] }) if args.supersedes and suite['supersedes']: for path in suite['supersedes']: rows.append({ # Make these rows appear faded. 'name': output.ANSIString(suite_name, output.WHITE), 'path': output.ANSIString(path, output.WHITE), 'tests': '?', 'err': '' }) fields = ['name', 'tests'] if args.verbose or args.err: fields.append('path') if args.err: fields.append('err') output.draw_table(self.outfile, field_info={}, fields=fields, rows=rows, title="Available Test Suites")
def _tests_cmd(self, pav_cfg, args): if args.test_name is not None: self._test_docs_subcmd(pav_cfg, args) return resolv = resolver.TestConfigResolver(pav_cfg) suites = resolv.find_all_tests() rows = [] for suite_name in sorted(list(suites.keys())): suite = suites[suite_name] if suite['err']: suite_name = output.ANSIString(suite_name, output.RED) rows.append({ 'name': '{}.*'.format(suite_name), 'summary': 'Loading the suite failed. ' 'For more info, run `pav show tests --err`.', 'path': suite['path'], 'err': suite['err'] }) elif args.err: continue for test_name in sorted(list(suite['tests'])): test = suite['tests'][test_name] if test_name.startswith('_') and not args.hidden: # Skip any hidden tests. continue rows.append({ 'name': '{}.{}'.format(suite_name, test_name), 'summary': test['summary'][:self.SUMMARY_SIZE_LIMIT], 'path': suite['path'], 'err': 'None' }) fields = ['name', 'summary'] if args.verbose or args.err: fields.append('path') if args.err: fields.append('err') output.draw_table(self.outfile, fields=fields, rows=rows, title="Available Tests")
def print_summary(self, statuses): """Print_summary takes in a list of test statuses. It summarizes basic state output and displays the data to the user through draw_table. :param statuses: state list of current jobs :rtype: int """ # Populating table dynamically requires dict summary_dict = {} passes = 0 ret_val = 0 total_tests = len(statuses) rows = [] fields = ['State', 'Amount', 'Percent'] fails = 0 # Shrink statues dict to singular keys with total # amount of key as the value for test in statuses: if test['state'] not in summary_dict.keys(): summary_dict[test['state']] = 1 else: summary_dict[test['state']] += 1 # Gathers info on passed tests from completed tests. if 'COMPLETE' in test['state'] and 'PASS' in test['note']: passes += 1 if 'COMPLETE' in summary_dict.keys(): fails = summary_dict['COMPLETE'] - passes fields = ['State', 'Amount', 'Percent', 'PASSED', 'FAILED'] for key, value in summary_dict.items(): # Build the rows for drawtables. # Determine Color. if key.endswith('ERROR') or key.endswith('TIMEOUT') or \ key.endswith('FAILED') or key == 'ABORTED' or key == 'INVALID': color = output.RED elif key == 'COMPLETE': color = output.GREEN elif key == 'SKIPPED': color = output.YELLOW elif key == 'RUNNING' or key == 'SCHEDULED' \ or key == 'PREPPING_RUN' \ or key == 'BUILDING' or key == 'BUILD_DONE' \ or key == 'BUILD_REUSED': color = output.CYAN else: color = output.WHITE # Not enough to warrant color. # Populating rows... if key == 'COMPLETE': # only time we need to populate pass/fail rows.append( {'State': output.ANSIString(key, color), 'Amount': value, 'Percent': '{0:.0%}'.format(value / total_tests), 'PASSED': '{0:.0%}'.format(passes / value) + ',({}/{})'.format(passes, value), 'FAILED': '{0:.0%}'.format(fails / value) + ',({}/{})'.format(fails, value)} ) else: rows.append( {'State': output.ANSIString(key, color), 'Amount': value, 'Percent': '{0:.0%}'.format(value / total_tests)} ) field_info = { 'PASSED': { 'transform': lambda t: output.ANSIString(t, output.GREEN) }, 'FAILED': { 'transform': lambda t: output.ANSIString(t, output.RED), }} output.draw_table(outfile=self.outfile, field_info=field_info, fields=fields, rows=rows, border=True, title='Test Summary') return ret_val