def _run_experiment(experiment_name, fuzzer_configs, dry_run=False): """Run an experiment named |experiment_name| on |fuzzer_configs| and shut it down once it terminates.""" logs.info('Starting experiment: %s.', experiment_name) if dry_run: logs.info('Dry run. Not actually running experiment.') return run_experiment.start_experiment(experiment_name, EXPERIMENT_CONFIG_FILE, BENCHMARKS, fuzzer_configs) stop_experiment.stop_experiment(experiment_name, EXPERIMENT_CONFIG_FILE)
def main(): """Run an experiment in the cloud.""" logs.initialize() parser = argparse.ArgumentParser( description='Begin an experiment that evaluates fuzzers on one or ' 'more benchmarks.') all_benchmarks = benchmark_utils.get_all_benchmarks() parser.add_argument('-b', '--benchmarks', help='Benchmark names. All of them by default.', nargs='+', required=False, default=all_benchmarks, choices=all_benchmarks) parser.add_argument('-c', '--experiment-config', help='Path to the experiment configuration yaml file.', required=True) parser.add_argument('-e', '--experiment-name', help='Experiment name.', required=True) parser.add_argument('-f', '--fuzzers', help='Fuzzers to use.', nargs='+', required=False, default=[]) parser.add_argument('-fc', '--fuzzer-configs', help='Fuzzer configurations to use.', nargs='+', required=False, default=[]) args = parser.parse_args() if not args.fuzzer_configs: fuzzer_configs = fuzzer_utils.get_fuzzer_configs(fuzzers=args.fuzzers) else: fuzzer_configs = [ yaml_utils.read(fuzzer_config) for fuzzer_config in args.fuzzer_configs ] start_experiment(args.experiment_name, args.experiment_config, args.benchmarks, fuzzer_configs) if not os.getenv('MANUAL_EXPERIMENT'): stop_experiment.stop_experiment(args.experiment_name, args.experiment_config) return 0
def main(): """Run an experiment in the cloud.""" parser = argparse.ArgumentParser( description='Begin an experiment that evaluates fuzzers on one or ' 'more benchmarks.') parser.add_argument('-b', '--benchmarks', help='Benchmark names.', nargs='+', required=True) parser.add_argument('-c', '--experiment-config', help='Path to the experiment configuration yaml file.', required=True) parser.add_argument('-e', '--experiment-name', help='Experiment name.', required=True) parser.add_argument('-f', '--fuzzers', help='Fuzzers to use.', nargs='+', required=False, default=[]) parser.add_argument('-fc', '--fuzzer-configs', help='Fuzzer configurations to use.', nargs='+', required=False, default=[]) args = parser.parse_args() logs.initialize() start_experiment(args.experiment_name, args.experiment_config, args.benchmarks, args.fuzzers, args.fuzzer_configs) if not os.getenv('MANUAL_EXPERIMENT'): stop_experiment.stop_experiment(args.experiment_name, args.experiment_config) return 0
def main(): """Do the experiment and report results.""" logs.initialize(default_extras={ 'component': 'dispatcher', }) try: dispatcher_main() except Exception as error: logs.error('Error conducting experiment.') raise error if experiment_utils.is_local_experiment(): return 0 experiment_config_file_path = _get_config_file_path() if stop_experiment.stop_experiment(experiment_utils.get_experiment_name(), experiment_config_file_path): return 0 return 1
def main(): """Run an experiment in the cloud.""" logs.initialize() parser = argparse.ArgumentParser( description='Begin an experiment that evaluates fuzzers on one or ' 'more benchmarks.') all_benchmarks = benchmark_utils.get_all_benchmarks() all_fuzzers = fuzzer_utils.get_fuzzer_names() parser.add_argument('-b', '--benchmarks', help='Benchmark names. All of them by default.', nargs='+', required=False, default=all_benchmarks, choices=all_benchmarks) parser.add_argument('-c', '--experiment-config', help='Path to the experiment configuration yaml file.', required=True) parser.add_argument('-e', '--experiment-name', help='Experiment name.', required=True) fuzzers_group = parser.add_mutually_exclusive_group() fuzzers_group.add_argument('-f', '--fuzzers', help='Fuzzers to use.', nargs='+', required=False, default=None, choices=all_fuzzers) fuzzers_group.add_argument('-fc', '--fuzzer-configs', help='Fuzzer configurations to use.', nargs='+', required=False, default=[]) fuzzers_group.add_argument('-cf', '--changed-fuzzers', help=('Use fuzzers that have changed since the ' 'last experiment. The last experiment is ' 'determined by the database your ' 'experiment uses, not necessarily the ' 'fuzzbench service'), action='store_true', required=False) args = parser.parse_args() if args.fuzzer_configs: fuzzer_configs = [ yaml_utils.read(fuzzer_config) for fuzzer_config in args.fuzzer_configs ] else: if args.changed_fuzzers: fuzzers = experiment_changes.get_fuzzers_changed_since_last() if not fuzzers: logs.error('No fuzzers changed since last experiment. Exiting.') return 1 else: fuzzers = args.fuzzers fuzzer_configs = fuzzer_utils.get_fuzzer_configs(fuzzers) start_experiment(args.experiment_name, args.experiment_config, args.benchmarks, fuzzer_configs) if not os.getenv('MANUAL_EXPERIMENT'): stop_experiment.stop_experiment(args.experiment_name, args.experiment_config) return 0