Ejemplo n.º 1
0
    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}
Ejemplo n.º 2
0
 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)
Ejemplo n.º 3
0
    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
        }
Ejemplo n.º 4
0
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)
Ejemplo n.º 5
0
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)