def parse_benchmark_definition(self, content):
        with tempfile.NamedTemporaryFile(
            prefix="BenchExec_test_benchmark_definition_", suffix=".xml", mode="w+"
        ) as temp:
            temp.write(content)
            temp.flush()

            # Because we mocked everything that accesses the file system,
            # we can parse the benchmark definition although task files do not exist.
            return Benchmark(temp.name, DummyConfig, util.read_local_time())
Ejemplo n.º 2
0
    def execute_benchmark(self, benchmark_file):
        """
        Execute a single benchmark as defined in a file.
        If called directly, ensure that config and executor attributes are set up.
        @param benchmark_file: the name of a benchmark-definition XML file
        @return: a result value from the executor module
        """
        benchmark = Benchmark(
            benchmark_file,
            self.config,
            self.config.start_time or util.read_local_time(),
        )
        self.check_existing_results(benchmark)

        self.executor.init(self.config, benchmark)
        output_handler = OutputHandler(benchmark,
                                       self.executor.get_system_info(),
                                       self.config.compress_results)

        logging.debug(
            "I'm benchmarking %r consisting of %s run sets using %s %s.",
            benchmark_file,
            len(benchmark.run_sets),
            benchmark.tool_name,
            benchmark.tool_version or "(unknown version)",
        )

        try:
            result = self.executor.execute_benchmark(benchmark, output_handler)
        finally:
            benchmark.tool.close()
            output_handler.close()
            # remove useless log folder if it is empty
            try:
                os.rmdir(benchmark.log_folder)
            except OSError:
                pass

        if self.config.commit and not self.stopped_by_interrupt:
            try:
                util.add_files_to_git_repository(
                    self.config.output_path,
                    output_handler.all_created_files,
                    self.config.commit_message + "\n\n" +
                    output_handler.description + "\n\n" +
                    str(output_handler.statistics),
                )
            except OSError as e:
                logging.warning("Could not add files to git repository: %s", e)
        return result