예제 #1
0
 def test_delete(self):
     db = DbBackend(None)
     node = Node(id=NodeID(),
                 tags={'my_node'},
                 attr={'a': 'b'},
                 pos_start=None,
                 pos_end=None,
                 data=set(),
                 bindata={})
     db.create(node)
     db.set_data(node.id, 'c', 'd')
     db.set_bindata(node.id, 'e', start=0, data=b'f', truncate=False)
     n2 = db.get(node.id)
     self.assertEqual(n2.tags, {'my_node'})
     self.assertEqual(db.get_data(node.id, 'c'), 'd')
     self.assertEqual(db.get_bindata(node.id, 'e'), b'f')
     db.delete(node.id)
     self.assertEqual(db.get(node.id), None)
     self.assertEqual(db.get_data(node.id, 'c'), None)
     self.assertEqual(db.get_bindata(node.id, 'e'), b'')
     id2 = NodeID()
     id3 = NodeID()
     self.assertEqual(db.get(id2), None)
     db.delete(id3)
     self.assertEqual(db.get(id3), None)
     with self.assertRaises(TypeError):
         db.delete(b'zlew')
예제 #2
0
 def test_bindata(self):
     db = DbBackend(None)
     node = Node(id=NodeID(),
                 tags=set(),
                 attr={},
                 pos_start=None,
                 pos_end=None,
                 data=set(),
                 bindata={'my_bindata': 12345})
     db.create(node)
     db.set_bindata(node.id, 'one', start=0, data=b'')
     db.set_bindata(node.id, 'two', start=0, data=b'\x12\x34\x56')
     db.set_bindata(node.id, 'three', start=0, data=b'\x11' * 0x123456)
     n2 = db.get(node.id)
     self.assertEqual(n2.bindata, {
         'two': 3,
         'three': 0x123456,
     })
     self.assertEqual(db.get_bindata(node.id, 'one'), b'')
     self.assertEqual(db.get_bindata(node.id, 'one', start=3), b'')
     self.assertEqual(db.get_bindata(node.id, 'one', start=3, end=15), b'')
     self.assertEqual(db.get_bindata(node.id, 'two'), b'\x12\x34\x56')
     self.assertEqual(db.get_bindata(node.id, 'two', start=2), b'\x56')
     self.assertEqual(db.get_bindata(node.id, 'two', start=4), b'')
     self.assertEqual(db.get_bindata(node.id, 'two', start=1, end=2),
                      b'\x34')
     self.assertEqual(db.get_bindata(node.id, 'two', start=1, end=6),
                      b'\x34\x56')
     self.assertEqual(db.get_bindata(node.id, 'three'), b'\x11' * 0x123456)
     db.set_bindata(node.id, 'one', start=0, data=b'\x11\x22')
     self.assertEqual(db.get_bindata(node.id, 'one'), b'\x11\x22')
     db.set_bindata(node.id, 'one', start=1, data=b'\x33\x44\x55')
     self.assertEqual(db.get_bindata(node.id, 'one'), b'\x11\x33\x44\x55')
     db.set_bindata(node.id, 'one', start=2, data=b'\x66')
     self.assertEqual(db.get_bindata(node.id, 'one'), b'\x11\x33\x66\x55')
     db.set_bindata(node.id, 'one', start=2, data=b'\x77', truncate=True)
     self.assertEqual(db.get_bindata(node.id, 'one'), b'\x11\x33\x77')
     n2 = db.get(node.id)
     self.assertIn('one', n2.bindata)
     db.set_bindata(node.id, 'one', start=0, data=b'', truncate=True)
     self.assertEqual(db.get_bindata(node.id, 'one'), b'')
     n2 = db.get(node.id)
     self.assertNotIn('one', n2.bindata)
     db.set_bindata(node.id, 'three', start=0x12345, data=b'\x22' * 0x789ab)
     n2 = db.get(node.id)
     self.assertEqual(n2.bindata['three'], 0x123456)
     correct = (b'\x11' * 0x12345 + b'\x22' * 0x789ab + b'\x11' *
                (0x123456 - 0x789ab - 0x12345))
     self.assertEqual(db.get_bindata(node.id, 'three'), correct)
     with self.assertRaises(WritePastEndError):
         db.set_bindata(node.id, 'three', start=0x1234567, data=b'\x33')
     with self.assertRaises(ValueError):
         db.set_bindata(node.id, 'three', start=-1, data=b'\x33')
     db.set_bindata(node.id,
                    'three',
                    start=0x123456,
                    data=b'\x33' * 0x789ab)
     n2 = db.get(node.id)
     self.assertEqual(n2.bindata['three'], 0x123456 + 0x789ab)
     correct = (b'\x11' * 0x12345 + b'\x22' * 0x789ab + b'\x11' *
                (0x123456 - 0x789ab - 0x12345) + b'\x33' * 0x789ab)
     self.assertEqual(db.get_bindata(node.id, 'three'), correct)
     db.set_bindata(node.id,
                    'three',
                    start=0x6789a,
                    data=b'\x44' * 0x789ab,
                    truncate=True)
     n2 = db.get(node.id)
     self.assertEqual(n2.bindata['three'], 0x6789a + 0x789ab)
     correct = (b'\x11' * 0x12345 + b'\x22' * (0x6789a - 0x12345) +
                b'\x44' * 0x789ab)
     self.assertEqual(db.get_bindata(node.id, 'three'), correct)
     self.assertEqual(db.get_bindata(node.id, 'three', start=0x789ab),
                      b'\x44' * 0x6789a)
     self.assertEqual(
         db.get_bindata(node.id, 'three', start=0x789ab, end=0xdeadbeef),
         b'\x44' * 0x6789a)
     self.assertEqual(
         db.get_bindata(node.id, 'three', start=0x55555, end=0x88888),
         b'\x22' * 0x12345 + b'\x44' * (0x33333 - 0x12345))
     db.set_bindata(node.id, 'three', start=0x1234, data=b'', truncate=True)
     n2 = db.get(node.id)
     self.assertEqual(n2.bindata['three'], 0x1234)
     correct = b'\x11' * 0x1234
     self.assertEqual(db.get_bindata(node.id, 'three'), correct)
     with self.assertRaises(TypeError):
         db.set_bindata(node.id, b'zlew', 0, b'zlew')
     with self.assertRaises(TypeError):
         db.set_bindata(node.id, 'abc', 0, 'zlew')
     with self.assertRaises(TypeError):
         db.set_bindata(node.id, 'abc', 0, 1234)
     with self.assertRaises(TypeError):
         db.set_bindata(node.id, 'zlew', b'zlew', b'zlew')
     with self.assertRaises(TypeError):
         db.set_bindata(node.id, 'zlew', 0, b'zlew', truncate='zlew')
     with self.assertRaises(TypeError):
         db.get_bindata(node.id, b'zlew')
     with self.assertRaises(TypeError):
         db.get_bindata(node.id, 123)