Exemple #1
0
 def test_padded_8to23_mixed_big(self):
     r = Repacker(Endian.BIG, 8, 23, low_pad=8, high_pad=1)
     self.assertEqual(r.repack_unit, 32)
     self.assertEqual(r.repack_size(2), 8)
     self.assertEqual(r.repackable_size(7), 1)
     self.assertEqual(r.repackable_size(8), 2)
     a = BinData.from_spaced_hex(8, '11 22 33 44 55 66 77 88 99 aa')
     b = r.repack(a, 1, 2)
     self.assertEqual(b, BinData.from_spaced_hex(23, '223344 667788'))
Exemple #2
0
 def test_padded_8to23_right_little(self):
     r = Repacker(Endian.LITTLE, 8, 23, low_pad=9)
     self.assertEqual(r.repack_unit, 32)
     self.assertEqual(r.repack_size(2), 8)
     self.assertEqual(r.repackable_size(7), 1)
     self.assertEqual(r.repackable_size(8), 2)
     a = BinData.from_spaced_hex(8, '11 22 33 44 55 66 77 88 99 aa')
     b = r.repack(a, 1, 2)
     self.assertEqual(b, BinData.from_spaced_hex(23, '2aa219 4cc43b'))
Exemple #3
0
 def test_add(self):
     a = BinData.from_spaced_hex(19, '11111 22222 33333')
     b = BinData.from_spaced_hex(19, '44444 55555')
     c = BinData.from_spaced_hex(20, '66666 77777')
     d = BinData.from_spaced_hex(19, '11111 22222 33333 44444 55555')
     self.assertEqual(a + b, d)
     with self.assertRaises(ValueError):
         a + c
     with self.assertRaises(TypeError):
         a + 'zlew'
     with self.assertRaises(TypeError):
         'zlew' + a
Exemple #4
0
 def test_split_8to1_little(self):
     r = Repacker(Endian.LITTLE, 8, 1)
     self.assertEqual(r.repack_unit, 8)
     self.assertEqual(r.repack_size(12), 2)
     self.assertEqual(r.repack_size(8), 1)
     self.assertEqual(r.repack_size(9), 2)
     self.assertEqual(r.repack_size(17), 3)
     self.assertEqual(r.repackable_size(1), 8)
     a = BinData.from_spaced_hex(8, '12 34 56')
     b = r.repack(a, 1, 12)
     c = BinData.from_spaced_hex(1, ' '.join(format(0x634, '012b')[::-1]))
     self.assertEqual(b, c)
Exemple #5
0
 def test_gather_8to16_big(self):
     r = Repacker(endian=Endian.BIG, from_width=8, to_width=16)
     self.assertEqual(r.repack_unit, 16)
     self.assertEqual(r.repack_size(2), 4)
     self.assertEqual(r.repackable_size(2), 1)
     self.assertEqual(r.repackable_size(3), 1)
     self.assertEqual(r.repackable_size(4), 2)
     a = BinData(8, [1, 2, 3, 4, 5, 6])
     b = r.repack(a, start=1, num_elements=2)
     self.assertEqual(b, BinData.from_spaced_hex(16, '0203 0405'))
     c = r.repack(a, start=1)
     self.assertEqual(b, c)
     d = r.repack(a)
     self.assertEqual(d, BinData.from_spaced_hex(16, '0102 0304 0506'))
Exemple #6
0
 def test_mash_8to12_big(self):
     r = Repacker(Endian.BIG, 8, 12)
     self.assertEqual(r.repack_unit, 24)
     self.assertEqual(r.repack_size(1), 2)
     self.assertEqual(r.repack_size(2), 3)
     self.assertEqual(r.repackable_size(1), 0)
     self.assertEqual(r.repackable_size(2), 1)
     self.assertEqual(r.repackable_size(3), 2)
     self.assertEqual(r.repackable_size(4), 2)
     a = BinData.from_spaced_hex(8, '12 34 56 78 9a')
     b = r.repack(a, 1, 2)
     self.assertEqual(b, BinData.from_spaced_hex(12, '345 678'))
     c = r.repack(a, 1)
     self.assertEqual(b, c)
     d = r.repack(a)
     self.assertEqual(d, BinData.from_spaced_hex(12, '123 456 789'))
Exemple #7
0
 def test_mash_8to12_little(self):
     r = Repacker(Endian.LITTLE, 8, 12)
     self.assertEqual(r.repack_unit, 24)
     self.assertEqual(r.repack_size(1), 2)
     self.assertEqual(r.repack_size(2), 3)
     self.assertEqual(r.repackable_size(1), 0)
     self.assertEqual(r.repackable_size(2), 1)
     self.assertEqual(r.repackable_size(3), 2)
     self.assertEqual(r.repackable_size(4), 2)
     a = BinData.from_spaced_hex(8, '12 34 56 78 9a')
     b = r.repack(a, 1, 2)
     self.assertEqual(b, BinData.from_spaced_hex(12, '634 785'))
     c = r.repack(a, 1)
     self.assertEqual(b, c)
     d = r.repack(a)
     self.assertEqual(d, BinData.from_spaced_hex(12, '412 563 a78'))
Exemple #8
0
 def test_split_16to8_big(self):
     r = Repacker(Endian.BIG, 16, 8)
     self.assertEqual(r.repack_unit, 16)
     self.assertEqual(r.repack_size(3), 2)
     self.assertEqual(r.repackable_size(3), 6)
     a = BinData(16, [0x1234, 0x5678, 0x9abc])
     b = r.repack(a, 1, 3)
     self.assertEqual(b, BinData.from_spaced_hex(8, '56 78 9a'))
Exemple #9
0
 def test_split_60to20_big(self):
     r = Repacker(Endian.BIG, 60, 20)
     self.assertEqual(r.repack_unit, 60)
     self.assertEqual(r.repack_size(1), 1)
     self.assertEqual(r.repack_size(2), 1)
     self.assertEqual(r.repack_size(3), 1)
     self.assertEqual(r.repack_size(4), 2)
     self.assertEqual(r.repackable_size(1), 3)
     a = BinData(60, [0xfedcba987654321])
     b = r.repack(a)
     self.assertEqual(b, BinData.from_spaced_hex(20, 'fedcb a9876 54321'))
Exemple #10
0
 def test_init_str(self):
     a = BinData.from_spaced_hex(12, '12')
     self.assertEqual(a.width, 12)
     self.assertEqual(a.raw_data, b'\x12\x00')
     self.assertEqual(a.octets_per_element(), 2)
     self.assertEqual(a.octets(), 2)
     self.assertEqual(len(a), 1)
     self.assertEqual(list(a), [0x12])
     self.assertEqual(a, a[:])
     self.assertEqual(str(a), '012')
     self.assertEqual(repr(a),
                      'BinData.from_spaced_hex(12, \'012\')')
Exemple #11
0
 def test_setslice(self):
     a = BinData(19, [0x12345, 0x6789a, 0x3cdef])
     a[:] = BinData.from_spaced_hex(19, '54321 29876 7edcb')
     self.assertEqual(a, BinData.from_spaced_hex(19, '54321 29876 7edcb'))
     a[:] = BinData.from_spaced_hex(19, '11111 22222')
     self.assertEqual(a, BinData.from_spaced_hex(19, '11111 22222'))
     a = BinData(19, [0x12345, 0x6789a, 0x3cdef])
     a[1:2] = BinData.from_spaced_hex(19, '54321 29876 7edcb')
     c = BinData.from_spaced_hex(19, '12345 54321 29876 7edcb 3cdef')
     self.assertEqual(a, c)
     a[::-2] = BinData.from_spaced_hex(19, '11111 22222 33333')
     c = BinData.from_spaced_hex(19, '33333 54321 22222 7edcb 11111')
     self.assertEqual(a, c)
     with self.assertRaises(TypeError):
         a[3.0:] = BinData.from_spaced_hex(19, '11111 22222')
     with self.assertRaises(TypeError):
         a[:3.0] = BinData.from_spaced_hex(19, '11111 22222')
     with self.assertRaises(TypeError):
         a[::3.0] = BinData.from_spaced_hex(19, '11111 22222')
     with self.assertRaises(TypeError):
         a['zlew':] = BinData.from_spaced_hex(19, '11111 22222')
     with self.assertRaises(TypeError):
         a[:] = 'zlew'
     with self.assertRaises(TypeError):
         a[:] = [1, 2, 3]
     with self.assertRaises(TypeError):
         a[:] = b'\x12\x34'
     with self.assertRaises(ValueError):
         a[:] = BinData.from_spaced_hex(20, '11111 22222 33333')
     with self.assertRaises(ValueError):
         a[::2] = BinData.from_spaced_hex(19, '11111 22222')
Exemple #12
0
 def test_getslice(self):
     a = BinData(19, [0x12345, 0x6789a, 0x3cdef])
     self.assertEqual(a[:], a)
     self.assertEqual(a[:],
                      BinData.from_spaced_hex(19, '12345 6789a 3cdef'))
     self.assertEqual(a[1:], BinData.from_spaced_hex(19, '6789a 3cdef'))
     self.assertEqual(a[4:], BinData.from_spaced_hex(19, ''))
     self.assertEqual(a[-1:], BinData.from_spaced_hex(19, '3cdef'))
     self.assertEqual(a[:-1], BinData.from_spaced_hex(19, '12345 6789a'))
     self.assertEqual(a[:1], BinData.from_spaced_hex(19, '12345'))
     self.assertEqual(a[1:2], BinData.from_spaced_hex(19, '6789a'))
     self.assertEqual(a[2:1], BinData.from_spaced_hex(19, ''))
     self.assertEqual(a[::-1],
                      BinData.from_spaced_hex(19, '3cdef 6789a 12345'))
     self.assertEqual(a[::2], BinData.from_spaced_hex(19, '12345 3cdef'))
     self.assertEqual(a[1::2], BinData.from_spaced_hex(19, '6789a'))
     b = [5 ** x for x in range(5)]
     c = BinData(10, b)
     for start in range(-10, 10):
         for end in range(-10, 10):
             for stride in range(-10, 10):
                 if stride != 0:
                     t = b[start:end:stride]
                     self.assertEqual(list(c[start:end:stride]), t)
     with self.assertRaises(TypeError):
         a[3.0:]
     with self.assertRaises(TypeError):
         a[:3.0]
     with self.assertRaises(TypeError):
         a[::3.0]
     with self.assertRaises(TypeError):
         a['zlew':]
Exemple #13
0
 def test_data(self):
     db = DbBackend(None)
     node = Node(id=NodeID(),
                 tags={'my_tag'},
                 attr={'my_attr': 'my_val'},
                 pos_start=0x123,
                 pos_end=0x456,
                 data={'my_key'},
                 bindata={'my_bindata': 12345})
     id2 = NodeID()
     db.create(node)
     db.set_data(node.id, 'int', 123)
     db.set_data(node.id, 'bool', False)
     db.set_data(node.id, 'none', None)
     db.set_data(node.id, 'bytes', b'\x01\x02\x03')
     db.set_data(node.id, 'str', 'abc')
     db.set_data(node.id, 'list', (1, 2, 3))
     db.set_data(node.id, 'dict', {'a': 'b', 'c': 'd'})
     db.set_data(node.id, 'id', id2)
     db.set_data(node.id, 'bindata', BinData.from_spaced_hex(12, '123 456'))
     db.set_data(node.id, 'long', 0x123456789abcdef123456789abcdef)
     db.set_data(node.id, 'neglong', -0x123456789abcdef123456789abcdef)
     n2 = db.get(node.id)
     self.assertEqual(
         n2.data, {
             'int',
             'bool',
             'bytes',
             'str',
             'list',
             'dict',
             'id',
             'bindata',
             'long',
             'neglong',
         })
     self.assertEqual(db.get_data(node.id, 'int'), 123)
     self.assertEqual(db.get_data(node.id, 'bool'), False)
     self.assertEqual(db.get_data(node.id, 'none'), None)
     self.assertEqual(db.get_data(node.id, 'meh'), None)
     b = db.get_data(node.id, 'bytes')
     s = db.get_data(node.id, 'str')
     self.assertEqual(b, b'\x01\x02\x03')
     self.assertEqual(s, 'abc')
     self.assertIsInstance(b, bytes)
     self.assertIsInstance(s, six.text_type)
     self.assertEqual(db.get_data(node.id, 'list'), [1, 2, 3])
     self.assertEqual(db.get_data(node.id, 'dict'), {'a': 'b', 'c': 'd'})
     self.assertEqual(db.get_data(node.id, 'id'), id2)
     self.assertEqual(db.get_data(node.id, 'bindata'),
                      BinData.from_spaced_hex(12, '123 456'))
     self.assertEqual(db.get_data(node.id, 'long'),
                      0x123456789abcdef123456789abcdef)
     self.assertEqual(db.get_data(node.id, 'neglong'),
                      -0x123456789abcdef123456789abcdef)
     with self.assertRaises(TypeError):
         db.set_data(node.id, b'zlew', 'zlew')
     with self.assertRaises(TypeError):
         db.set_data(node.id, 123, 456)
     with self.assertRaises(TypeError):
         db.get_data(node.id, b'zlew')
     with self.assertRaises(TypeError):
         db.get_data(node.id, 123)
Exemple #14
0
 def test_attr(self):
     db = DbBackend(None)
     id2 = NodeID()
     node = Node(id=NodeID(),
                 tags={'my_tag'},
                 attr={
                     'int': 123,
                     'bool': False,
                     'bytes': b'\x01\x02\x03',
                     'str': 'abc',
                     'list': (1, 2, 3),
                     'dict': {
                         'a': 'b',
                         'c': 'd'
                     },
                     'id': id2,
                     'bindata': BinData.from_spaced_hex(12, '123 456'),
                     'long': 0x123456789abcdef123456789abcdef,
                     'neglong': -0x123456789abcdef123456789abcdef,
                 },
                 pos_start=0x123,
                 pos_end=0x456,
                 data={'my_key'},
                 bindata={'my_bindata': 12345})
     db.create(node)
     n2 = db.get(node.id)
     self.assertEqual(
         set(n2.attr.keys()), {
             'int',
             'bool',
             'bytes',
             'str',
             'list',
             'dict',
             'id',
             'bindata',
             'long',
             'neglong',
         })
     self.assertEqual(n2.attr['int'], 123)
     self.assertEqual(n2.attr['bool'], False)
     self.assertNotIn('none', n2.attr)
     self.assertNotIn('meh', n2.attr)
     b = n2.attr['bytes']
     s = n2.attr['str']
     self.assertEqual(b, b'\x01\x02\x03')
     self.assertEqual(s, 'abc')
     self.assertIsInstance(b, bytes)
     self.assertIsInstance(s, six.text_type)
     self.assertEqual(n2.attr['list'], [1, 2, 3])
     self.assertEqual(n2.attr['dict'], {'a': 'b', 'c': 'd'})
     self.assertEqual(n2.attr['id'], id2)
     self.assertEqual(n2.attr['bindata'],
                      BinData.from_spaced_hex(12, '123 456'))
     self.assertEqual(n2.attr['long'], 0x123456789abcdef123456789abcdef)
     self.assertEqual(n2.attr['neglong'], -0x123456789abcdef123456789abcdef)
     db.set_attr(node.id, 'int', None)
     db.set_attr(node.id, 'bool', True)
     db.set_attr(node.id, 'meh', 'meh')
     n3 = db.get(node.id)
     self.assertEqual(
         set(n3.attr.keys()), {
             'meh',
             'bool',
             'bytes',
             'str',
             'list',
             'dict',
             'id',
             'bindata',
             'long',
             'neglong',
         })
     self.assertEqual(n3.attr['bool'], True)
     self.assertEqual(n3.attr['meh'], 'meh')
     with self.assertRaises(TypeError):
         db.set_attr(node.id, b'zlew', 'zlew')
     with self.assertRaises(TypeError):
         db.set_attr(node.id, 123, 456)
     with self.assertRaises(TypeError):
         db.set_attr(node.id, 123, 456)