def gcb_build_oss_fuzz_project_coverage(benchmark: str) -> Tuple[int, str]: """Build a coverage build of OSS-Fuzz-based benchmark |benchmark| on GCB.""" project = benchmark_utils.get_project(benchmark) oss_fuzz_builder_hash = benchmark_utils.get_oss_fuzz_builder_hash( benchmark) substitutions = { '_GCS_COVERAGE_BINARIES_DIR': exp_path.gcs(get_coverage_binaries_dir()), '_OSS_FUZZ_PROJECT': project, '_OSS_FUZZ_BUILDER_HASH': oss_fuzz_builder_hash, } config_file = get_build_config_file('oss-fuzz-coverage.yaml') config_name = 'oss-fuzz-{project}-coverage-hash-{hash}'.format( project=project, hash=oss_fuzz_builder_hash) return gcb_build(config_file, config_name, substitutions)
def _build_oss_fuzz_project_fuzzer(benchmark: str, fuzzer: str) -> Tuple[int, str]: """Build a |benchmark|, |fuzzer| runner image on GCB.""" project = benchmark_utils.get_project(benchmark) oss_fuzz_builder_hash = benchmark_utils.get_oss_fuzz_builder_hash(benchmark) substitutions = { '_OSS_FUZZ_PROJECT': project, '_FUZZER': fuzzer, '_OSS_FUZZ_BUILDER_HASH': oss_fuzz_builder_hash, } config_file = get_build_config_file('oss-fuzz-fuzzer.yaml') config_name = 'oss-fuzz-{project}-fuzzer-{fuzzer}-hash-{hash}'.format( project=project, fuzzer=fuzzer, hash=oss_fuzz_builder_hash) return _build(config_file, config_name, substitutions)
def add_oss_fuzz_corpus(benchmark, oss_fuzz_corpora_dir): """Add latest public corpus from OSS-Fuzz as the seed corpus for various fuzz targets.""" project = benchmark_utils.get_project(benchmark) fuzz_target = benchmark_utils.get_fuzz_target(benchmark) if not fuzz_target.startswith(project): full_fuzz_target = '%s_%s' % (project, fuzz_target) else: full_fuzz_target = fuzz_target src_corpus_url = _OSS_FUZZ_CORPUS_BACKUP_URL_FORMAT.format( project=project, fuzz_target=full_fuzz_target) dest_corpus_url = os.path.join(oss_fuzz_corpora_dir, f'{benchmark}.zip') gsutil.cp(src_corpus_url, dest_corpus_url, parallel=True, expect_zero=False)
def _build_oss_fuzz_project_fuzzer(benchmark: str, fuzzer: str) -> Tuple[int, str]: """Build a |benchmark|, |fuzzer| runner image on GCB.""" underlying_fuzzer = fuzzer_config_utils.get_by_variant_name( fuzzer)['fuzzer'] project = benchmark_utils.get_project(benchmark) oss_fuzz_builder_hash = benchmark_utils.get_oss_fuzz_builder_hash(benchmark) substitutions = { '_OSS_FUZZ_PROJECT': project, '_BENCHMARK': benchmark, '_FUZZER': fuzzer, '_UNDERLYING_FUZZER': underlying_fuzzer, '_OSS_FUZZ_BUILDER_HASH': oss_fuzz_builder_hash, } config_file = _add_build_arguments_to_config( get_build_config_file('oss-fuzz-fuzzer.yaml'), fuzzer) config_name = 'oss-fuzz-{project}-fuzzer-{fuzzer}-hash-{hash}'.format( project=project, fuzzer=fuzzer, hash=oss_fuzz_builder_hash) return _build(config_file, config_name, substitutions)
def test_get_project_non_oss_fuzz_benchmark(): """Test that we can't get the project of a non-OSS-Fuzz benchmark.""" with pytest.raises(ValueError): benchmark_utils.get_project(OTHER_BENCHMARK)
def test_get_project_oss_fuzz_benchmark(oss_fuzz_benchmark): """Test that we can get the project of an OSS-Fuzz benchmark.""" assert benchmark_utils.get_project( oss_fuzz_benchmark) == conftest.OSS_FUZZ_BENCHMARK_CONFIG['project']