Example #1
0
    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")
Example #2
0
    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)
Example #3
0
    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")
Example #4
0
    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")
Example #5
0
    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