summaryrefslogtreecommitdiff
path: root/tests/glibext
diff options
context:
space:
mode:
authorCyrille Bagard <nocbos@gmail.com>2025-03-13 00:19:58 (GMT)
committerCyrille Bagard <nocbos@gmail.com>2025-03-13 00:19:58 (GMT)
commit733d0cdb8677fe09310125bcaeb058a1a9c56b4d (patch)
tree17b8d9a151068dac695d25e39e875933ff9aaa40 /tests/glibext
parent8287d20061887e9fd33e038e8f9bf86cf13f2780 (diff)
Rebuild a generic storage for GObjects using a ZIP format.
Diffstat (limited to 'tests/glibext')
-rw-r--r--tests/glibext/storage.py75
1 files changed, 34 insertions, 41 deletions
diff --git a/tests/glibext/storage.py b/tests/glibext/storage.py
index 612d500..b60377a 100644
--- a/tests/glibext/storage.py
+++ b/tests/glibext/storage.py
@@ -1,11 +1,8 @@
from chrysacase import ChrysalideTestCase
-from pychrysalide import core
-from pychrysalide.analysis.contents import FileContent
-from pychrysalide.analysis.storage import ObjectStorage
-from pychrysalide.common import PackedBuffer
+from pychrysalide.glibext import ObjectStorage, SerializableObject
+import gi
import os
-import shutil
import tempfile
@@ -17,15 +14,9 @@ class TestObjectStorage(ChrysalideTestCase):
super(TestObjectStorage, cls).setUpClass()
- cls._tmp_path = tempfile.mkdtemp()
+ _, cls._tmp_filename = tempfile.mkstemp()
- config = core.get_main_configuration()
- param = config.search(core.MainParameterKeys.TMPDIR)
-
- cls._old_tmpdir = param.value
- param.value = cls._tmp_path
-
- cls.log('Using temporary directory "%s"' % cls._tmp_path)
+ cls.log('Using temporary filename "%s"' % cls._tmp_filename)
@classmethod
@@ -33,49 +24,51 @@ class TestObjectStorage(ChrysalideTestCase):
super(TestObjectStorage, cls).tearDownClass()
- config = core.get_main_configuration()
- param = config.search(core.MainParameterKeys.TMPDIR)
+ cls.log('Delete filename "%s"' % cls._tmp_filename)
- param.value = cls._old_tmpdir
+ os.unlink(cls._tmp_filename)
- # import os
- # os.system('ls -laihR %s' % cls._tmp_path)
- cls.log('Delete directory "%s"' % cls._tmp_path)
+ def testGenericStorage(self):
+ """Store and load basic objects."""
- shutil.rmtree(cls._tmp_path)
+ class SimpleObject(gi._gi.GObject, SerializableObject):
- def testFileContentStorage(self):
- """Store and load file binary content."""
+ def __init__(self, b=None):
+ super().__init__()
+ self._b = b
- storage = ObjectStorage('my-storage-hash')
- self.assertIsNotNone(storage)
+ def _load(self, storage, fd):
+ assert(self._b is None)
+ self._b = os.read(fd, 1)[0]
+ return True
- filename = os.path.join(self._tmp_path, 'test.bin')
+ def _store(self, storage, fd):
+ os.write(fd, bytes([ self._b ]))
+ return True
- with open(filename, 'wb') as fd:
- fd.write(b'ABC')
+ def __eq__(self, other):
+ return self._b == other._b
- cnt = FileContent(filename)
- self.assertIsNotNone(cnt)
- ret = storage.store_object('contents', cnt)
- self.assertEqual(ret, 0)
+ # Store
+
+ storage = ObjectStorage('TestStorage', 0, 'my-storage-hash')
+ self.assertIsNotNone(storage)
- pbuf = PackedBuffer()
+ so = SimpleObject(0x23)
- ret = storage.store(pbuf)
- self.assertTrue(ret)
+ pos = storage.store_object('simple', so)
+ self.assertIsNotNone(pos)
- self.assertTrue(pbuf.payload_length > 0)
+ status = storage.store(self._tmp_filename)
+ self.assertTrue(status)
- pbuf.rewind()
+ # Reload
- storage2 = ObjectStorage.load(pbuf)
- self.assertIsNotNone(storage2)
+ storage2 = ObjectStorage.load(self._tmp_filename)
- cnt2 = storage2.load_object('contents', 0)
- self.assertIsNotNone(cnt2)
+ so2 = storage2.load_object('simple', pos)
- self.assertEqual(cnt.data, cnt2.data)
+ self.assertEqual(so, so2)