def get_decorator_mapping(): """ Get label mapping for display in test listing. :return: Dict {TestClass: decorator function} """ term_support = output.TermSupport() return {VirtTest: term_support.healthy_str}
def __init__(self, args): use_paginator = args.paginator == 'on' self.view = output.View(app_args=args, use_paginator=use_paginator) self.term_support = output.TermSupport() try: loader.loader.load_plugins(args) except loader.LoaderError, details: sys.stderr.write(str(details)) sys.stderr.write('\n') sys.exit(exit_codes.AVOCADO_FAIL)
def get_decorator_mapping(): """ Get label mapping for display in test listing. :return: a dictionary with the test class as key and decorator function as value. """ term_support = output.TermSupport() return { VirtTest: term_support.healthy_str, NotAvocadoVTTest: term_support.fail_header_str }
def guest_listing(options, view): term_support = output.TermSupport() if options.vt_type == 'lvsb': raise ValueError("No guest types available for lvsb testing") index = 0 view.notify(event='minor', msg=("Searched %s for guest images\n" % os.path.join(data_dir.get_data_dir(), 'images'))) view.notify(event='minor', msg="Available guests in config:") view.notify(msg='') guest_name_parser = standalone_test.get_guest_name_parser(options) guest_name_parser.only_filter('i440fx') for params in guest_name_parser.get_dicts(): index += 1 base_dir = params.get("images_base_dir", data_dir.get_data_dir()) image_name = storage.get_image_filename(params, base_dir) name = params['name'] if os.path.isfile(image_name): out = name else: out = (name + " " + term_support.warn_header_str("(missing %s)" % os.path.basename(image_name))) view.notify(event='minor', msg=out)
class TestList(plugin.Plugin): """ Implements the avocado 'list' subcommand """ name = 'test_lister' enabled = True view = None test_loader = loader.TestLoader() term_support = output.TermSupport() def configure(self, parser): """ Add the subparser for the list action. :param parser: Main test runner parser. """ self.parser = parser.subcommands.add_parser( 'list', help='List available test modules') self.parser.add_argument('paths', type=str, default=[], nargs='*', help="List of paths. If no paths provided, " "avocado will list tests on the " "configured test directory, " "see 'avocado config --datadir'") self.parser.add_argument('-V', '--verbose', action='store_true', default=False, help='Whether to show extra information ' '(headers and summary). Current: %(' 'default)s') self.parser.add_argument('--paginator', choices=('on', 'off'), default='on', help='Turn the paginator on/off. ' 'Current: %(default)s') super(TestList, self).configure(self.parser) def _run(self, args): """ List available test modules. :param args: Command line args received from the list subparser. """ self.view = output.View(app_args=args, use_paginator=args.paginator == 'on') paths = [data_dir.get_test_dir()] if args.paths: paths = args.paths params_list = self.test_loader.discover_urls(paths) for params in params_list: params['omit_non_tests'] = False test_suite = self.test_loader.discover(params_list) error_msg_parts = self.test_loader.validate_ui(test_suite, ignore_not_test=True, ignore_access_denied=True, ignore_broken_symlinks=True) if error_msg_parts: for error_msg in error_msg_parts: self.view.notify(event='error', msg=error_msg) self.view.cleanup() sys.exit(exit_codes.AVOCADO_FAIL) test_matrix = [] stats = {'simple': 0, 'instrumented': 0, 'buggy': 0, 'missing': 0, 'not_a_test': 0, 'broken_symlink': 0, 'access_denied': 0} for cls, params in test_suite: id_label = '' type_label = cls.__name__ if 'params' in params: id_label = params['params']['id'] else: if 'name' in params: id_label = params['name'] elif 'path' in params: id_label = params['path'] if cls == test.SimpleTest: stats['simple'] += 1 type_label = self.term_support.healthy_str('SIMPLE') elif cls == test.BuggyTest: stats['buggy'] += 1 type_label = self.term_support.fail_header_str('BUGGY') elif cls == test.NotATest: if not args.verbose: continue stats['not_a_test'] += 1 type_label = self.term_support.warn_header_str('NOT_A_TEST') elif cls == test.MissingTest: stats['missing'] += 1 type_label = self.term_support.fail_header_str('MISSING') elif cls == loader.BrokenSymlink: stats['broken_symlink'] += 1 type_label = self.term_support.fail_header_str('BROKEN_SYMLINK') elif cls == loader.AccessDeniedPath: stats['access_denied'] += 1 type_label = self.term_support.fail_header_str('ACCESS_DENIED') else: if issubclass(cls, test.Test): stats['instrumented'] += 1 type_label = self.term_support.healthy_str('INSTRUMENTED') test_matrix.append((type_label, id_label)) header = None if args.verbose: header = (self.term_support.header_str('Type'), self.term_support.header_str('file')) for line in astring.tabular_output(test_matrix, header=header).splitlines(): self.view.notify(event='minor', msg="%s" % line) if args.verbose: self.view.notify(event='minor', msg='') self.view.notify(event='message', msg=("SIMPLE: %s" % stats['simple'])) self.view.notify(event='message', msg=("INSTRUMENTED: %s" % stats['instrumented'])) self.view.notify(event='message', msg=("BUGGY: %s" % stats['buggy'])) self.view.notify(event='message', msg=("MISSING: %s" % stats['missing'])) self.view.notify(event='message', msg=("NOT_A_TEST: %s" % stats['not_a_test'])) self.view.notify(event='message', msg=("ACCESS_DENIED: %s" % stats['access_denied'])) self.view.notify(event='message', msg=("BROKEN_SYMLINK: %s" % stats['broken_symlink'])) def run(self, args): rc = 0 try: self._run(args) except KeyboardInterrupt: rc = exit_codes.AVOCADO_FAIL msg = ('Command interrupted by ' 'user...') if self.view is not None: self.view.notify(event='error', msg=msg) else: sys.stderr.write(msg) self.view.cleanup() sys.exit(rc)