#!/usr/bin/env python
# Copyright 2014 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Generational ClusterFuzz fuzzer. It generates IPC messages using
GenerateTraits. Support of GenerateTraits for different types will be gradually
added.
"""

import os
import random
import subprocess
import sys
import utils

FUZZER_NAME_OPTION = '--fuzzer-name=generate'
MAX_IPC_MESSAGES_PER_TESTCASE = 1500


class GenerationalFuzzer:
  def parse_arguments(self):
    self.args = utils.parse_arguments()

  def set_application_paths(self):
    chrome_application_path = utils.get_application_path()
    chrome_application_directory = os.path.dirname(chrome_application_path)
    self.ipc_fuzzer_binary = utils.get_fuzzer_application_name()
    self.ipc_replay_binary = utils.get_replay_application_name()
    self.ipc_fuzzer_binary_path = os.path.join(
        chrome_application_directory, self.ipc_fuzzer_binary)
    self.ipc_replay_binary_path = os.path.join(
        chrome_application_directory, self.ipc_replay_binary)

  def generate_ipcdump_testcase(self):
    ipcdump_testcase_path = (
        utils.random_ipcdump_testcase_path(self.args.output_dir))
    num_ipc_messages = random.randint(1, MAX_IPC_MESSAGES_PER_TESTCASE)
    count_option = '--count=%d' % num_ipc_messages

    cmd = [
        self.ipc_fuzzer_binary_path,
        FUZZER_NAME_OPTION,
        count_option,
        ipcdump_testcase_path,
    ]

    if subprocess.call(cmd):
      sys.exit('%s failed.' % self.ipc_fuzzer_binary)

    utils.create_flags_file(ipcdump_testcase_path, self.ipc_replay_binary_path)

  def main(self):
    self.parse_arguments()
    self.set_application_paths()
    for _ in xrange(self.args.no_of_files):
      self.generate_ipcdump_testcase()

    return 0

if __name__ == "__main__":
  fuzzer = GenerationalFuzzer()
  sys.exit(fuzzer.main())
