Exemplo n.º 1
0
def createPayload(service, function, arguments):
    # container for created nodes
    action_param_nodes = []
    for k in filter(lambda x: x.get('direction') != 'out', arguments):
        action_param_nodes.append(XmlElement(name=k['name'], element_name=k['name'], content='Value'))
    # function attribute
    u = [Static('urn:schemas-upnp-org:service:'), String(service), Static(':1')]
    # create the Function element and set its attribute
    function_element = [XmlElement(
        name=function,
        element_name='u:%s' % function,
        attributes=[XmlAttribute(name='attr_u', attribute='xmlns:u', value=u)],
        content=action_param_nodes
    )]
    # create the Body element
    body = [XmlElement(name='Body', element_name='s:Body', content=function_element)]
    # create the Envelope element and set its attributes
    envelope = XmlElement(
        name='Envelope',
        element_name='s:Envelope',
        content=body,
        attributes=[
            XmlAttribute(name='attr_s', attribute='xmlns:s', value='http://schemas.xmlsoap.org/soap/envelope/'),
            XmlAttribute(name='attr_encodingStyle', attribute='s:encodingStyle', value='http://schemas.xmlsoap.org/soap/encoding/'),
        ],
    )
    return Template(envelope, name='upnp_body')
 def testEmptyWhenNotFuzzable(self):
     fields = [Static('A'), Static('B'), Static('C')]
     uut = self.get_uut(2, fields, fuzzable=False)
     rendered = uut.render()
     self.assertEqual(rendered, empty_bits)
     self.assertEqual(uut.num_mutations(), 0)
     self.assertFalse(uut.mutate())
     rendered = uut.render()
     self.assertEqual(rendered, empty_bits)
 def testEmptyWhileNotMutating(self):
     fields = [Static('A'), Static('B'), Static('C')]
     uut = self.get_uut(2, fields)
     rendered = uut.render()
     self.assertEqual(rendered, empty_bits)
     while uut.mutate():
         pass
     uut.reset()
     rendered = uut.render()
     self.assertEqual(rendered, empty_bits)
 def testDefaultValueWhenFuzzableBeforeMutation(self):
     fields = [String('a'), Container([Static('A'), String('B')])]
     default_container = Container(fields=fields, fuzzable=False)
     default_rendered = default_container.render()
     uut = self.get_uut(fields, fuzzable=True)
     uut_rendered = uut.render()
     self.assertEqual(default_rendered, uut_rendered)
 def testSwitchWithStaticKeyField(self):
     field_dict = {
         '1': String('1'),
         '2': String('2'),
         '3': String('3'),
     }
     default_key = '3'
     uut = self.get_uut(field_dict, default_key)
     key_field = Static(name=self.key_field_name, value='someval')
     container = Container([uut, key_field])
     while key_field.mutate():
         key = key_field._current_value
         uut_rendered = uut.render()
         uut_key = key if key in field_dict else default_key
         field_rendred = field_dict[uut_key].render()
         self.assertEqual(uut_rendered, field_rendred)
     del container
 def testDelimiterExist(self):
     num_elems = 3
     fields = [Static('A') for i in range(num_elems)]
     uut = self.get_uut(fields=fields, delim=String('/'))
     mutations = [m.tobytes().decode() for m in self.get_all_mutations(uut)]
     for m in mutations:
         if m != '':
             self.assertEqual(m.count('/'), (len(m) - 1) // 2)
 def testContainsAllDefaultMutations(self):
     fields = [String('a'), Container([Static('A'), String('B')])]
     default_container = Container(fields=fields)
     default_mutations = self.get_all_mutations(default_container)
     uut = self.get_uut(fields)
     uut_mutations = self.get_all_mutations(uut)
     for mutation in default_mutations:
         self.assertIn(mutation, uut_mutations)
 def testSwitchWithStaticKeyField(self):
     field_dict = {
         '1': String('1'),
         '2': String('2'),
         '3': String('3'),
     }
     default_key = '3'
     uut = self.get_uut(field_dict, default_key)
     key_field = Static(name=self.key_field_name, value='someval')
     container = Container([uut, key_field])
     while key_field.mutate():
         key = key_field._current_value
         uut_rendered = uut.render()
         uut_key = key if key in field_dict else default_key
         field_rendred = field_dict[uut_key].render()
         self.assertEqual(uut_rendered, field_rendred)
     del container
 def get_default_container(self,
                           fields=[],
                           fuzzable=True,
                           mutated_field=None):
     if mutated_field is None:
         mutated_field = Static('static field')
     return ForEach(mutated_field=mutated_field,
                    fields=fields,
                    fuzzable=fuzzable,
                    name=self.uut_name)
 def testDefaultValueWhenFuzzableAfterReset(self):
     fields = [String('a'), Container([Static('A'), String('B')])]
     default_container = Container(fields=fields, fuzzable=False)
     default_rendered = default_container.render()
     uut = self.get_uut(fields, fuzzable=True)
     while uut.mutate():
         pass
     uut.reset()
     uut_rendered = uut.render()
     self.assertEqual(default_rendered, uut_rendered)
 def testFixedWithoutPad(self):
     data = 'abcdefghijklmnop'
     expected = Bits(bytes=data)
     uut = Pad(pad_length=10 * 8, fields=Static(data), pad_data='\xff')
     uut_num_mutations = uut.num_mutations()
     self.assertEqual(uut_num_mutations, 0)
     actual_num_mutations = 0
     while uut.mutate():
         actual_num_mutations += 1
     self.assertEqual(actual_num_mutations, uut_num_mutations)
     self.assertEqual(uut.render(), expected)
 def testContainerRenderingKeyAfterSwitch(self):
     field_dict = {
         1: Static('\x00\x00\x00\x01'),
         2: Static('\x00\x00\x00\x02'),
         3: Static('\x00\x00\x00\x03'),
     }
     default_key = 2
     uut = self.get_uut(field_dict, default_key)
     key_field = self.get_default_key_field(fuzzable=False)
     container = Container([uut, key_field])
     mutations = self.get_all_mutations(container)
     for mutation in mutations:
         mutation = mutation.tobytes()
         self.assertEqual(len(mutation), 8)
         key = unpack('>I', mutation[:4])[0]
         case = unpack('>I', mutation[4:])[0]
         if key in field_dict:
             self.assertEqual(key, case)
         else:
             self.assertEqual(case, 2)
 def default_fields(self):
     return [
         String('String1'),
         String('String2'),
         Static('Static1'),
     ]
 def _staticTest(self, values, field_count, expected, **kwargs):
     fields = [Static(c) for c in values]
     uut = self.get_uut(field_count, fields, **kwargs)
     self.assertEqual(uut.num_mutations(), len(expected))
     mutations = [x.tobytes().decode() for x in self.get_all_mutations(uut)]
     self.assertEqual(mutations, expected)
 def get_default_fields(self):
     return [
         Static(name='string A', value='A'),
         String(name='string B', value='B'),
         String(name='string C', value='C'),
     ]
 def testSameMutationsAfterReset(self):
     fields = [Static('A'), Static('B'), Static('C')]
     uut = self.get_uut(2, fields)
     mutations1 = self.get_all_mutations(uut)
     mutations2 = self.get_all_mutations(uut)
     self.assertEqual(mutations1, mutations2)
 def testExceptionRaisedIfFieldCountIs1(self):
     with self.assertRaises(KittyException):
         self.get_uut(field_count=1, fields=[Static('A')])