예제 #1
0
def build_measurer(benchmark: str) -> bool:
    """Do a coverage build for a benchmark."""
    try:
        logger.info('Building measurer for benchmark: %s.', benchmark)
        if benchmark_utils.is_oss_fuzz(benchmark):
            gcb_build_oss_fuzz_project_coverage(benchmark)
        else:
            gcb_build_benchmark_coverage(benchmark)

        docker_name = benchmark_utils.get_docker_name(benchmark)
        archive_name = 'coverage-build-%s.tar.gz' % docker_name

        coverage_binaries_dir = get_coverage_binaries_dir()
        benchmark_coverage_binary_dir = coverage_binaries_dir / benchmark
        os.mkdir(benchmark_coverage_binary_dir)
        cloud_bucket_archive_path = exp_path.gcs(coverage_binaries_dir /
                                                 archive_name)
        gsutil.cp(cloud_bucket_archive_path,
                  str(benchmark_coverage_binary_dir),
                  parallel=False)

        archive_path = benchmark_coverage_binary_dir / archive_name
        tar = tarfile.open(archive_path, 'r:gz')
        tar.extractall(benchmark_coverage_binary_dir)
        os.remove(archive_path)
        logs.info('Done building measurer for benchmark: %s.', benchmark)
        return True
    except Exception:  # pylint: disable=broad-except
        logger.error('Failed to build measurer for %s.', benchmark)
        return False
예제 #2
0
def build_fuzzer_benchmark(fuzzer: str, benchmark: str) -> bool:
    """Builds |benchmark| for |fuzzer|."""
    logger.info('Building benchmark: %s, fuzzer: %s.', benchmark, fuzzer)
    try:
        if benchmark_utils.is_oss_fuzz(benchmark):
            gcb_build_oss_fuzz_project_fuzzer(benchmark, fuzzer)
        else:
            gcb_build_benchmark_fuzzer(benchmark, fuzzer)
    except subprocess.CalledProcessError:
        logger.error('Failed to build benchmark: %s, fuzzer: %s.', benchmark,
                     fuzzer)
        return False
    logs.info('Done building benchmark: %s, fuzzer: %s.', benchmark, fuzzer)
    return True
예제 #3
0
def test_is_oss_fuzz(benchmark, expected_result, oss_fuzz_benchmark):
    """Test that we can distinguish OSS-Fuzz benchmarks from non-OSS-Fuzz
    benchmarks."""
    assert benchmark_utils.is_oss_fuzz(benchmark) == expected_result
예제 #4
0
def build_coverage(benchmark):
    """Build coverage image for benchmark on GCB."""
    if benchmark_utils.is_oss_fuzz(benchmark):
        _build_oss_fuzz_project_coverage(benchmark)
    else:
        _build_benchmark_coverage(benchmark)
예제 #5
0
def build_fuzzer_benchmark(fuzzer: str, benchmark: str) -> bool:
    """Builds |benchmark| for |fuzzer|."""
    if benchmark_utils.is_oss_fuzz(benchmark):
        _build_oss_fuzz_project_fuzzer(benchmark, fuzzer)
    else:
        _build_benchmark_fuzzer(benchmark, fuzzer)