def process_crashes(self, cycle):
        """Process and store crashes."""
        benchmark_type = benchmark_config.get_config(
            self.benchmark).get('type')
        is_bug_benchmark = benchmark_type == 'bug'
        if not is_bug_benchmark:
            return []

        if not os.listdir(self.crashes_dir):
            logs.info('No crashes found for cycle %d.', cycle)
            return []

        logs.info('Saving crash files crashes for cycle %d.', cycle)
        self.save_crash_files(cycle)

        logs.info('Processing crashes for cycle %d.', cycle)
        app_binary = coverage_utils.get_coverage_binary(self.benchmark)
        crash_metadata = run_crashes.do_crashes_run(app_binary,
                                                    self.crashes_dir)
        crashes = []
        for crash_key in crash_metadata:
            crash = crash_metadata[crash_key]
            crashes.append(
                models.Crash(crash_key=crash_key,
                             crash_testcase=crash.crash_testcase,
                             crash_type=crash.crash_type,
                             crash_address=crash.crash_address,
                             crash_state=crash.crash_state,
                             crash_stacktrace=crash.crash_stacktrace))
        return crashes
Exemple #2
0
    def run_cov_new_units(self):
        """Run the coverage binary on new units."""
        coverage_binary = coverage_utils.get_coverage_binary(self.benchmark)
        crashing_units = run_coverage.do_coverage_run(
            coverage_binary, self.corpus_dir, self.profraw_file_pattern,
            self.crashes_dir)

        self.UNIT_BLACKLIST[self.benchmark] = (
            self.UNIT_BLACKLIST[self.benchmark].union(set(crashing_units)))
 def generate_summary(self, cycle: int, summary_only=True):
     """Transforms the .profdata file into json form."""
     coverage_binary = coverage_utils.get_coverage_binary(self.benchmark)
     result = coverage_utils.generate_json_summary(coverage_binary,
                                                   self.profdata_file,
                                                   self.cov_summary_file,
                                                   summary_only=summary_only)
     if result.retcode != 0:
         if cycle != 0:
             self.logger.error(
                 'Coverage summary json file generation failed for '
                 'cycle: %d.', cycle)
         else:
             self.logger.error(
                 'Coverage summary json file generation failed in the end.')