예제 #1
0
    def test_job_suite_job_fail(self):
        """JobSuite with a failed job raises an error"""
        self.mock_benchmark['path'] = 'abinaryhasnopath'

        fail_job = Job(self.job_config, self.mock_benchmark)

        suite = JobSuite({'name': 'suite', 'description': 'test'}, [fail_job])
        with self.assertRaises(OSError):
            suite.run()
예제 #2
0
    def test_job_suite_job_fail(self):
        """JobSuite with a failed job raises an error"""
        self.mock_benchmark['path'] = 'abinaryhasnopath'

        fail_job = Job(self.job_config, self.mock_benchmark)

        suite = JobSuite({'name': 'suite', 'description': 'test'}, [fail_job])
        with self.assertRaises(OSError):
            suite.run()
예제 #3
0
 def test_job_suite(self):
     """JobSuite runs all jobs in the suite"""
     jobs = [MagicMock() for i in range(10)]
     for i, job in enumerate(jobs):
         job.name = str(i)
         job.safe_name = str(i)
         job.metrics_config.names = ['a']
         job.run.return_value = {'a': i}
     suite = JobSuite({'name': 'suite', 'description': 'test'}, jobs)
     suite.run()
     metrics = suite.run()
     expected = {str(i): {'a': i} for i in range(10)}
     self.assertDictEqual(expected, metrics)
예제 #4
0
 def test_job_suite(self):
     """JobSuite runs all jobs in the suite"""
     jobs = [MagicMock() for i in range(10)]
     for i, job in enumerate(jobs):
         job.name = str(i)
         job.safe_name = str(i)
         job.metrics_config.names = ['a']
         job.run.return_value = Metrics({'a': i})
     suite = JobSuite({'name': 'suite', 'description': 'test'}, jobs)
     suite.run()
     metrics = suite.run()
     expected = {str(i)+'.a': i for i in range(10)}
     self.assertDictEqual(expected, metrics.metrics())
예제 #5
0
def main(args=sys.argv[1:]):
    # register reporter plugins before setting up the parser
    ReporterFactory.register('stdout', StdoutReporter)

    parser = setup_parser()
    args = parser.parse_args(args)

    # warn is 30, should default to 30 when verbose=0
    # each level below warning is 10 less than the previous
    log_level = args.verbose*(-10) + 30
    logging.basicConfig(format='%(levelname)s:%(name)s: %(message)s',
                        level=log_level)
    logger = logging.getLogger(__name__)

    logger.info('Loading benchmarks from "{}"'.format(args.benchmarks))
    with open(args.benchmarks) as tests_file:
        benchmarks = yaml.load(tests_file)

    logger.info('Loading jobs from "{}"'.format(args.jobs_file))
    with open(args.jobs_file) as jobs_file:
        job_configs = yaml.load(jobs_file)

    # on the first pass, construct all normal jobs, then make job suites
    jobs = [Job(j, benchmarks[j['benchmark']]) for j in job_configs
            if 'tests' not in j]
    jobs = {j.name: j for j in jobs}
    # after all the regulars jobs are created, create the job suites
    for config in job_configs:
        if 'tests' in config:
            suite_jobs = []
            for name in config['tests']:
                try:
                    suite_jobs.append(jobs[name])
                except KeyError:
                    logger.error('Couldn\'t find job "%s" in suite "%s"',
                                 name, config['name'])
                    exit(1)

            suite = JobSuite(config, suite_jobs)
            jobs[suite.name] = suite

    logger.info('Loaded {} benchmarks and {} jobs'
                .format(len(benchmarks), len(jobs)))

    args.command.run(args, jobs)