Example #1
0
 def test_encode_aligned_uint(self):
     uint = UInt(1, 'foo', '0xff', align='4')
     encoded = uint.encode({}, {}, None)
     self.assertEquals(encoded.int, 255)
     self.assertEquals(encoded.hex, '0xff')
     self.assertEquals(len(encoded), 4)
     self.assertEquals(encoded._raw, to_bin('0xff00 0000'))
Example #2
0
 def test_encode_aligned_uint(self):
     uint = UInt(1, 'foo', '0xff', align='4')
     encoded = uint.encode({}, {}, None)
     self.assertEquals(encoded.int, 255)
     self.assertEquals(encoded.hex, '0xff')
     self.assertEquals(len(encoded), 4)
     self.assertEquals(encoded._raw, to_bin('0xff00 0000'))
Example #3
0
 def test_fail_on_dynamic_length(self):
     union = UnionTemplate('NotLegal', 'dymagic', parent=None)
     union.add(UInt(2, 'bar', None))
     struct = StructTemplate('Foo', 'foo', parent=None)
     struct.add(UInt(1, 'len', 22))
     struct.add(Char('len', 'dymagic', 'foo'))
     self.assertRaises(Exception, union.add, struct)
Example #4
0
 def test_decode_aligned_uint(self):
     uint = UInt(1, 'foo', None, align='4')
     decoded = uint.decode(to_bin('0xff00 0000'), None)
     self.assertEquals(decoded.int, 255)
     self.assertEquals(decoded.hex, '0xff')
     self.assertEquals(len(decoded), 4)
     self.assertEquals(decoded._raw, to_bin('0xff00 0000'))
Example #5
0
 def test_uint_static_field(self):
     field = UInt(5, "field", 8)
     self.assertTrue(field.length.static)
     self.assertEquals(field.name, "field")
     self.assertEquals(field.default_value, '8')
     self.assertEquals(field.type, 'uint')
     self.assertEquals(field.encode({}, {}, None).hex, '0x0000000008')
Example #6
0
 def test_uint_static_field(self):
     field = UInt(5, "field", 8)
     self.assertTrue(field.length.static)
     self.assertEquals(field.name, "field")
     self.assertEquals(field.default_value, '8')
     self.assertEquals(field.type, 'uint')
     self.assertEquals(field.encode({}, {}, None).hex, '0x0000000008')
Example #7
0
 def test_validate_uint(self):
     field = Field('uint', 'field', to_bin('0x0004'))
     self._should_pass(UInt(2, 'field', 4).validate({'field': field}, {}))
     self._should_pass(UInt(2, 'field', '4').validate({'field': field}, {}))
     self._should_pass(UInt(2, 'field', '0x04').validate({'field': field}, {}))
     self._should_pass(UInt(2, 'field', '0x0004').validate({'field': field}, {}))
     self._should_pass(UInt(2, 'field', '(0|4)').validate({'field': field}, {}))
Example #8
0
 def test_decode_aligned_uint(self):
     uint = UInt(1, 'foo', None, align='4')
     decoded = uint.decode(to_bin('0xff00 0000'), None)
     self.assertEquals(decoded.int, 255)
     self.assertEquals(decoded.hex, '0xff')
     self.assertEquals(len(decoded), 4)
     self.assertEquals(decoded._raw, to_bin('0xff00 0000'))
Example #9
0
 def setUp(self):
     self._protocol = Protocol('TestProtocol')
     self._protocol.add(UInt(2, 'msgId', 5))
     self._protocol.add(UInt(2, 'length', None))
     self._protocol.add(PDU('length-4'))
     self.tmp = MessageTemplate('FooRequest', self._protocol, {})
     self.tmp.add(UInt(2, 'field_1', 1))
     self.tmp.add(UInt(2, 'field_2', 2))
 def setUp(self):
     self._protocol = Protocol('TestProtocol', little_endian=True)
     self._protocol.add(UInt(2, 'msgId', 5))
     self._protocol.add(UInt(2, 'length', None))
     self._protocol.add(PDU('length-4'))
     self.tmp = MessageTemplate('FooRequest', self._protocol, {})
     self.tmp.add(UInt(2, 'field_1', '0xcafe'))
     self.tmp.add(UInt(2, 'field_2', '0xbabe'))
 def test_encode_dynamic_list(self):
     tmp = MessageTemplate('Dymagic', self._protocol, {})
     tmp.add(UInt(2, 'len', None))
     lst = ListTemplate('len', 'foo', parent=None)
     lst.add(UInt(1, 'bar', 1))
     tmp.add(lst)
     encoded = tmp.encode({'len': 6}, {})
     self.assertEqual(len(encoded.foo), 6)
 def _get_conditional(self):
     struct = StructTemplate('Foo', 'foo', parent=None)
     struct.add(UInt(2, 'condition', 1))
     condition = ConditionalTemplate('condition==1', 'mycondition', None)
     condition.add(UInt(2, 'myvalue', 42))
     struct.add(condition)
     struct.add(UInt(2, 'second', 2))
     return struct
Example #13
0
 def setUp(self):
     self._protocol = Protocol('TestProtocol')
     self._protocol.add(UInt(2, 'msgId', 5))
     self._protocol.add(UInt(2, 'length', None))
     self._protocol.add(PDU('length-4'))
     self.tmp = MessageTemplate('FooRequest', self._protocol, {})
     self.tmp.add(UInt(2, 'field_1', '0xcafe'))
     self.tmp.add(UInt(2, 'field_2', '0xbabe'))
     self.example = self.tmp.encode({}, {})
 def test_decode_dynamic_list(self):
     tmp = MessageTemplate('Dymagic', self._protocol, {})
     tmp.add(UInt(2, 'len', None))
     lst = ListTemplate('len', 'foo', parent=None)
     lst.add(UInt(1, 'bar', None))
     tmp.add(lst)
     decoded = tmp.decode(to_bin('0x 00 04 6162 6364'))
     self.assertEqual(decoded.len.int, 4)
     self.assertEqual(decoded.foo[0].hex, '0x61')
Example #15
0
 def test_access_struct(self):
     self._protocol = Protocol('TestProtocol')
     self._protocol.add(UInt(2, 'msgId', 5))
     self._protocol.add(UInt(2, 'length', None))
     self._protocol.add(PDU('length-4'))
     self.tmp = MessageTemplate('StructuredRequest', self._protocol, {})
     struct = get_pair()
     self.tmp.add(struct)
     msg = self.tmp.encode({}, {})
     self.assertEquals(msg.pair.first.int, 1)
 def test_decode_dynamic_primitive(self):
     tmp = MessageTemplate('Dymagic', self._protocol, {})
     tmp.add(UInt(1, 'len', None))
     tmp.add(Char('len', 'chars', None))
     tmp.add(UInt(1, 'len2', None))
     tmp.add(Char('len2', 'chars2', None))
     decoded = tmp.decode(to_bin('0x 04 6162 6364 02 6566'))
     self.assertEqual(decoded.len.int, 4)
     self.assertEqual(decoded.chars.ascii, 'abcd')
     self.assertEqual(decoded.chars2.ascii, 'ef')
 def test_encode_dynamic_primitive_with_defined_value(self):
     tmp = MessageTemplate('Dymagic', self._protocol, {})
     tmp.add(UInt(4, 'len', '4'))
     tmp.add(Char('len', 'chars', 'abcd'))
     tmp.add(UInt(4, 'len2', None))
     tmp.add(Char('len2', 'chars2', 'ef'))
     encoded = tmp.encode({'len2': '6'}, {})
     self.assertEqual(encoded.chars.ascii, 'abcd')
     self.assertEqual(len(encoded.chars), 4)
     self.assertEqual(encoded.chars2.ascii, 'ef')
     self.assertEqual(len(encoded.chars2), 6)
Example #18
0
 def test_union_primitive_length(self):
     self._check_length(2, UInt(1, 'a', 1), UInt(2, 'b', 1))
     self._check_length(1, UInt(1, 'a', 1), UInt(1, 'b', 1))
     self._check_length(4, UInt(4, 'a', 4), UInt(1, 'b', 1),
                        UInt(2, 'c', 1))
     self._check_length(16, UInt(1, 'a', 1), Char(16, 'b', 1))
     self._check_length(10, Char(10, 'a', None), Char(10, 'b', None))
Example #19
0
 def test_decode_message(self):
     list = ListTemplate('5', 'five', parent=None)
     list.add(UInt(4, None, 3))
     decoded = list.decode(to_bin('0x' + ('00000003' * 5)), {})
     self.assertEqual(len(decoded[4]), 4)
     self.assertEqual(len(decoded), 20)
     self.assertEqual(decoded[0].int, 3)
 def test_encode_dynamic_primitive_automatically(self):
     tmp = MessageTemplate('Dymagic', self._protocol, {})
     tmp.add(UInt(4, 'len', None))
     tmp.add(Char('len', 'chars', 'abcd'))
     encoded = tmp.encode({}, {})
     self.assertEqual(encoded.chars.ascii, 'abcd')
     self.assertEqual(encoded.len.int, 4)
Example #21
0
 def test_encode_perfectly_aligned(self):
     struct = get_struct_with_length_and_alignment()
     struct.add(UInt(5, 'third', 3))
     encoded = struct.encode({}, {})
     self.assertEqual(encoded.first.int, 1)
     self.assertEqual(encoded.second.int, 2)
     self.assertEqual(encoded.third.int, 3)
     self.assertEqual(len(encoded), 8)
     self.assertEqual(encoded._raw, to_bin('0x00010200 00000003'))
Example #22
0
 def test_dynamic_field_validation(self):
     struct = StructTemplate('Foo', 'foo', parent=None)
     struct.add(UInt(2, 'len', None))
     struct.add(Char('len', 'text', None))
     encoded = struct.encode({'foo.len': 6, 'foo.text': 'fobba'})
     self._should_pass(
         struct.validate({'foo': encoded}, {'foo.text': 'fobba'}))
     self._should_fail(
         struct.validate({'foo': encoded}, {'foo.text': 'fob'}), 1)
 def test_verify_calculated_length(self):
     self._protocol.add(UInt(1, 'name1', 1))
     self._protocol.add(UInt(2, 'length', None))
     self._protocol.add(PDU('length-8'))
     self.assertEqual(self._protocol.header_length(), 3)
Example #24
0
 def test_encoding_illegal_value_fails(self):
     field = UInt(2, 'foo', '(1|2)')
     self.assertRaises(Exception, field.encode, {}, {})
     field = UInt(2, 'foo', 'poplpdsf')
     self.assertRaises(Exception, field.encode, {}, {})
Example #25
0
 def test_little_endian_uint_encode(self):
     template = UInt(2, 'field', 1)
     field = template.encode({}, {}, None, little_endian=True)
     self.assertEquals(field._raw, to_bin('0x0100'))
     self.assertEquals(field.int, 1)
     self.assertEquals(field.bytes, to_bin('0x0001'))
Example #26
0
 def test_fail_validating_uint(self):
     template = UInt(2, 'field', 4)
     field = Field('uint', 'field', to_bin('0x0004'))
     self._should_fail(template.validate({'field': field}, {'field': '42'}), 1)
Example #27
0
 def test_decode_uint(self):
     field_template = UInt(2, 'field', 6)
     decoded = field_template.decode(to_bin('0xcafe'), {})
     self.assertEquals(decoded.hex, '0xcafe')
Example #28
0
 def test_verify_only_tbcd_number_passes(self):
     container = TBCDContainerTemplate('tbcd', None)
     container.add(TBCD('4', 'first', None))
     self.assertRaises(AssertionError, container.add, UInt(2, 'not allowed', None))
Example #29
0
 def test_decode_returns_used_length(self):
     field_template = UInt(2, 'field', 6)
     data = to_bin('0xcafebabeff00ff00')
     decoded = field_template.decode(data, {})
     self.assertEquals(decoded.hex, '0xcafe')
     self.assertEquals(len(decoded), 2)
Example #30
0
 def test_decode_uint(self):
     field_template = UInt(2, 'field', 6)
     decoded = field_template.decode(to_bin('0xcafe'), {})
     self.assertEquals(decoded.hex, '0xcafe')
 def test_verify_undefined_length(self):
     self._protocol.add(UInt(1, 'name1', None))
     self._protocol.add(UInt(2, 'name2', 5))
     self.assertRaises(Exception, self._protocol.add, PDU('length'))
 def test_header_length_with_pdu(self):
     self._protocol.add(UInt(1, 'name1', None))
     self._protocol.add(UInt(2, 'name2', 5))
     self._protocol.add(UInt(2, 'length', None))
     self._protocol.add(PDU('length'))
     self.assertEqual(self._protocol.header_length(), 5)
Example #33
0
 def test_decode_returns_used_length(self):
     field_template = UInt(2, 'field', 6)
     data = to_bin('0xcafebabeff00ff00')
     decoded = field_template.decode(data, {})
     self.assertEquals(decoded.hex, '0xcafe')
     self.assertEquals(len(decoded), 2)
Example #34
0
 def test_container_union_length(self):
     self._check_length(4, get_pair(), UInt(2, 'b', 1))
     self._check_length(4, UInt(1, 'a', 1), get_recursive_struct())
     self._check_length(6, get_pair(), get_list_of_three())
 def test_header_length(self):
     self._protocol.add(UInt(1, 'name1', None))
     self.assertEqual(self._protocol.header_length(), 1)
Example #36
0
 def _get_foo_union(self):
     union = UnionTemplate('Foo', 'foo', parent=None)
     union.add(UInt(1, 'small', '0xff'))
     union.add(UInt(2, 'medium', '0xf00d'))
     union.add(UInt(4, 'large', None))
     return union
Example #37
0
 def test_encoding_missing_value_fails(self):
     field = UInt(2, 'foo', None)
     self.assertRaises(Exception, field.encode, {}, {})
     field = UInt(2, 'foo', '')
     self.assertRaises(Exception, field.encode, {}, {})