def _get_variant_testcase_for_job(testcase, job_type): """Return a testcase entity for variant task use. This changes the fuzz target params for a particular fuzzing engine.""" if testcase.job_type == job_type: # Update stack operation on same testcase. return testcase if not environment.is_engine_fuzzer_job(testcase.job_type): # For blackbox fuzzer testcases, there is no change of fuzzer required. return testcase engine_name = environment.get_engine_for_job(job_type) project = data_handler.get_project_name(job_type) binary_name = testcase.get_metadata("fuzzer_binary_name") fully_qualified_fuzzer_name = data_types.fuzz_target_fully_qualified_name( engine_name, project, binary_name) variant_testcase = data_types.clone_entity(testcase) variant_testcase.key = testcase.key variant_testcase.fuzzer_name = engine_name variant_testcase.overridden_fuzzer_name = fully_qualified_fuzzer_name variant_testcase.job_type = job_type # Remove put() method to avoid updates. DO NOT REMOVE THIS. variant_testcase.put = lambda: None return variant_testcase
def get_fuzz_target(self): """Get the associated FuzzTarget entity for this test case.""" name = self.actual_fuzzer_name() if not name: return None target = ndb.Key(FuzzTarget, name).get() if environment.get_value('ORIGINAL_JOB_NAME'): # Overridden engine (e.g. for minimization). target.engine = environment.get_engine_for_job() return target
def update_job_weight(job_name, multiplier): """Update a job weight.""" tool_name = environment.get_memory_tool_name(job_name) multiplier *= SANITIZER_WEIGHTS.get(tool_name, DEFAULT_SANITIZER_WEIGHT) engine = environment.get_engine_for_job(job_name) multiplier *= ENGINE_WEIGHTS.get(engine, DEFAULT_ENGINE_WEIGHT) query = data_types.FuzzerJob.query(data_types.FuzzerJob.job == job_name) changed_weights = [] for fuzzer_job in query: if fuzzer_job.multiplier != multiplier: fuzzer_job.multiplier = multiplier changed_weights.append(fuzzer_job) if changed_weights: ndb.put_multi(changed_weights)