示例#1
0
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
示例#2
0
  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
示例#3
0
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)