aboutsummaryrefslogtreecommitdiffstats
path: root/test/triple_store/test_base.py
diff options
context:
space:
mode:
authorMatthias Baumgartner <dev@igsor.net>2022-12-18 14:21:11 +0100
committerMatthias Baumgartner <dev@igsor.net>2022-12-18 14:21:11 +0100
commit91437ba89d35bf482f3d9671bb99ef2fc69f5985 (patch)
treee9bfe27e5a641c040cfa8fe747a7cbb28091079c /test/triple_store/test_base.py
parent87e4cd5a4581094f490f79d4f1cf91f51897660f (diff)
parente94368c75468e3e94382b12705e55d396249eaca (diff)
downloadbsfs-91437ba89d35bf482f3d9671bb99ef2fc69f5985.tar.gz
bsfs-91437ba89d35bf482f3d9671bb99ef2fc69f5985.tar.bz2
bsfs-91437ba89d35bf482f3d9671bb99ef2fc69f5985.zip
Merge branch 'develop' into main
Diffstat (limited to 'test/triple_store/test_base.py')
-rw-r--r--test/triple_store/test_base.py150
1 files changed, 150 insertions, 0 deletions
diff --git a/test/triple_store/test_base.py b/test/triple_store/test_base.py
new file mode 100644
index 0000000..a4b0559
--- /dev/null
+++ b/test/triple_store/test_base.py
@@ -0,0 +1,150 @@
+"""
+
+Part of the bsfs test suite.
+A copy of the license is provided with the project.
+Author: Matthias Baumgartner, 2022
+"""
+# imports
+import unittest
+
+# bsie imports
+from bsfs.utils import URI
+
+# objects to test
+from bsfs.triple_store.base import TripleStoreBase
+
+
+## code ##
+
+class DummyBase(TripleStoreBase):
+ @classmethod
+ def Open(cls, uri, **kwargs):
+ return cls(uri)
+
+ def commit(self):
+ pass
+
+ def rollback(self):
+ pass
+
+ @property
+ def schema(self):
+ pass
+
+ @schema.setter
+ def schema(self, schema):
+ pass
+
+ def exists(self, node_type, guids):
+ pass
+
+ def create(self, node_type, guids):
+ pass
+
+ def set(self, node_type, guids, predicate, values):
+ pass
+
+class DummyStore(DummyBase):
+ pass
+
+class DummyAlternative(DummyBase):
+ pass
+
+
+class TestTripleStoreBase(unittest.TestCase):
+
+ def test_equality(self):
+ # identical instances are equal
+ store = DummyStore.Open(None)
+ self.assertEqual(store, store)
+ self.assertEqual(hash(store), hash(store))
+ store = DummyStore.Open(URI('http://example.com/store'))
+ self.assertEqual(store, store)
+ self.assertEqual(hash(store), hash(store))
+ # in-memory storages are not equal
+ # NOTE: Don't use
+ # >>> self.assertNotEqual(hash(DummyStore(None)), hash(DummyStore(None)))
+ # The two stores are created subsequently since each of them is deleted
+ # right after hashing. Because the two instances never exist at the same
+ # time, their id may (and typically will) be identical.
+ # This only matters when the `id` function is used, i.e. when uri=None.
+ a, b = DummyStore.Open(None), DummyStore.Open(None)
+ self.assertNotEqual(a, b)
+ self.assertNotEqual(hash(a), hash(b))
+ a, b = DummyStore.Open(None), DummyStore.Open(URI('http://example.com/store'))
+ self.assertNotEqual(a, b)
+ self.assertNotEqual(hash(a), hash(b))
+ a, b = DummyStore.Open(URI('http://example.com/store')), DummyStore.Open(None)
+ self.assertNotEqual(a, b)
+ self.assertNotEqual(hash(a), hash(b))
+ a, b = DummyStore.Open(None), DummyStore.Open(URI('http://example.com/alternative'))
+ self.assertNotEqual(a, b)
+ self.assertNotEqual(hash(a), hash(b))
+ # equality respects uri
+ self.assertEqual(
+ DummyStore.Open(URI('http://example.com/store')),
+ DummyStore.Open(URI('http://example.com/store')))
+ self.assertEqual(
+ hash(DummyStore.Open(URI('http://example.com/alternative'))),
+ hash(DummyStore.Open(URI('http://example.com/alternative'))))
+ self.assertNotEqual(
+ DummyStore.Open(URI('http://example.com/store')),
+ DummyStore.Open(URI('http://example.com/alternative')))
+ self.assertNotEqual(
+ DummyStore.Open(URI('http://example.com/store')),
+ hash(DummyStore.Open(URI('http://example.com/alternative'))))
+ # equality respects type
+ self.assertNotEqual(DummyStore.Open(None), None)
+ self.assertNotEqual(hash(DummyStore.Open(None)), hash(None))
+ self.assertNotEqual(DummyStore.Open(None), 'hello world')
+ self.assertNotEqual(hash(DummyStore.Open(None)), hash('hello world'))
+ self.assertNotEqual(DummyStore.Open(None), 1234)
+ self.assertNotEqual(hash(DummyStore.Open(None)), hash(1234))
+ class Foo(): pass
+ f = Foo()
+ self.assertNotEqual(DummyStore.Open(None), f)
+ self.assertNotEqual(hash(DummyStore.Open(None)), hash(f))
+ self.assertNotEqual(
+ DummyStore.Open(None),
+ DummyAlternative.Open(None))
+ self.assertNotEqual(
+ hash(DummyStore.Open(None)),
+ hash(DummyAlternative.Open(None)))
+
+ def test_string_conversion(self):
+ # string conversion respects uri
+ self.assertEqual('DummyStore(uri=http://example.com/store)',
+ str(DummyStore.Open(URI('http://example.com/store'))))
+ self.assertEqual('DummyStore(uri=http://example.com/store)',
+ repr(DummyStore.Open(URI('http://example.com/store'))))
+ self.assertEqual('DummyStore(uri=http://example.com/alternative)',
+ str(DummyStore.Open(URI('http://example.com/alternative'))))
+ self.assertEqual('DummyStore(uri=http://example.com/alternative)',
+ repr(DummyStore.Open(URI('http://example.com/alternative'))))
+ self.assertEqual('DummyStore(uri=None)',
+ str(DummyStore.Open(None)))
+ self.assertEqual('DummyStore(uri=None)',
+ repr(DummyStore.Open(None)))
+ # string conversion respects type
+ self.assertEqual('DummyAlternative(uri=http://example.com/store)',
+ str(DummyAlternative.Open(URI('http://example.com/store'))))
+
+ def test_uri(self):
+ # uri returns correct value
+ self.assertEqual(None,
+ DummyStore.Open(None).uri)
+ self.assertEqual(URI('http://example.com/store'),
+ DummyStore.Open(URI('http://example.com/store')).uri)
+ self.assertEqual(URI('http://example.com/alternative'),
+ DummyStore.Open(URI('http://example.com/alternative')).uri)
+ # persistence respects uri
+ self.assertFalse(DummyStore.Open(None).is_persistent())
+ self.assertTrue(DummyStore.Open(URI('http://example.com/store')).is_persistent())
+ self.assertTrue(DummyStore.Open(URI('http://example.com/alternative')).is_persistent())
+
+## main ##
+
+if __name__ == '__main__':
+ unittest.main()
+
+## EOF ##