def Main(argv):
    """Instantiate the group of message-sequences used to seed the fuzzer.

  Args:
    argv: command-line arguments used to run the sequencer.
  """
    parsed = wlu.ParseOpts(argv)

    protocols = wlu.ReadProtocols(parsed.spec)
    dep_graph = GetDependencyGraph(protocols)
    for _, interface in wlu.AllInterfaces(protocols):
        for req in interface.findall('request'):
            interface_name = interface.attrib['name']
            message_name = req.attrib['name']
            builder = SequenceBuilder(interface_name + '_' + message_name,
                                      dep_graph)
            builder.BuildMessage(interface_name, message_name, '')

            # Add a round-trip to the sequence in case the server wants to do
            # something funky.
            builder.AppendRoundTrip()

            SequenceToTemplate(parsed, builder)

    # For sequences which are more complicated than a dependency search, we have
    # a manual backup.
    for sequence_builder in GetManualSequences(dep_graph):
        SequenceToTemplate(parsed, sequence_builder)
Example #2
0
def Main(argv):
    """Instantiate the group of message-sequences used to seed the fuzzer.

  Args:
    argv: command-line arguments used to run the sequencer.
  """
    parsed = wlu.ParseOpts(argv)
    out_dir = parsed.output
    if not os.path.exists(out_dir):
        os.mkdir(out_dir)

    protocols = wlu.ReadProtocols(parsed.spec)
    dep_graph = GetDependencyGraph(protocols)
    for _, interface in wlu.AllInterfaces(protocols):
        for req in interface.findall('request'):
            interface_name = interface.attrib['name']
            message_name = req.attrib['name']
            sequence = GetSequenceForMessage(interface_name, message_name,
                                             SequenceContext(dep_graph), '')
            # Add a round-trip to the sequence in case the server wants to do
            # something funky.
            sequence += [round_trip]

            out_path = os.path.join(
                out_dir, '%s_%s.asciipb' % (interface_name, message_name))
            wayland_templater.InstantiateTemplate(parsed.input,
                                                  {'sequence': sequence},
                                                  out_path, parsed.directory)
Example #3
0
def GetTemplateData(protocol_paths):
    protocols = wlu.ReadProtocols(protocol_paths)
    context = TemplaterContext(protocols)
    interfaces = []
    for p in protocols:
        for i in p.findall('interface'):
            interfaces.append(GetInterface(i, context))
    return {
        'protocol_names': [p.attrib['name'] for p in protocols],
        'interfaces': interfaces,
    }
Example #4
0
def GetTemplateData(protocol_paths):
    protocols = wlu.ReadProtocols(protocol_paths)
    context = TemplaterContext(protocols)
    interfaces = []
    for p in protocols:
        for i in p.findall('interface'):
            interfaces.append(GetInterface(i, context))
    assert all(p.endswith('.xml') for p in protocol_paths)
    return {
        'protocol_names':
        [str(os.path.basename(p))[:-4] for p in protocol_paths],
        'interfaces': interfaces,
    }