Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
104 changes: 62 additions & 42 deletions sdk/test/model/test_provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@


class ProvidersTest(unittest.TestCase):
_STORE_CLASSES = (model.DictIdentifiableStore, model.SetIdentifiableStore)

def setUp(self) -> None:
self.aas1 = model.AssetAdministrationShell(
model.AssetInformation(global_asset_id="http://example.org/TestAsset1/"), "urn:x-test:aas1")
Expand All @@ -20,58 +22,76 @@ def setUp(self) -> None:
self.submodel2 = model.Submodel("urn:x-test:submodel2")

def test_store_retrieve(self) -> None:
identifiable_store: model.DictIdentifiableStore[model.AssetAdministrationShell] = model.DictIdentifiableStore()
identifiable_store.add(self.aas1)
identifiable_store.add(self.aas2)
self.assertIn(self.aas1, identifiable_store)
property = model.Property('test', model.datatypes.String)
self.assertFalse(property in identifiable_store)
aas3 = model.AssetAdministrationShell(model.AssetInformation(global_asset_id="http://example.org/TestAsset/"),
"urn:x-test:aas1")
with self.assertRaises(KeyError) as cm:
identifiable_store.add(aas3)
self.assertEqual("'Identifiable object with same id urn:x-test:aas1 is already "
"stored in this store'", str(cm.exception))
self.assertEqual(2, len(identifiable_store))
self.assertIs(self.aas1,
identifiable_store.get_item("urn:x-test:aas1"))
self.assertIs(self.aas1,
identifiable_store.get("urn:x-test:aas1"))
identifiable_store.discard(self.aas1)
identifiable_store.discard(self.aas1)
with self.assertRaises(KeyError) as cm:
identifiable_store.get_item("urn:x-test:aas1")
self.assertIsNone(identifiable_store.get("urn:x-test:aas1"))
self.assertEqual("'urn:x-test:aas1'", str(cm.exception))
self.assertIs(self.aas2, identifiable_store.pop())
self.assertEqual(0, len(identifiable_store))
for store_class in self._STORE_CLASSES:
with self.subTest(store=store_class.__name__):
store: model.AbstractObjectStore[model.Identifier, model.Identifiable] = store_class([self.aas1])
store.add(self.aas2)

store.add(self.aas1)
self.assertEqual(2, len(store))

self.assertIn(self.aas1, store)
self.assertIn("urn:x-test:aas1", store)
self.assertNotIn("urn:x-test:missing", store)
property = model.Property('test', model.datatypes.String)
self.assertFalse(property in store)
aas3 = model.AssetAdministrationShell(
model.AssetInformation(global_asset_id="http://example.org/TestAsset/"), "urn:x-test:aas1")
with self.assertRaises(KeyError) as cm:
store.add(aas3)
self.assertEqual("'Identifiable object with same id urn:x-test:aas1 is already "
"stored in this store'", str(cm.exception))
self.assertEqual(2, len(store))
self.assertIs(self.aas1, store.get_item("urn:x-test:aas1"))
self.assertIs(self.aas1, store.get("urn:x-test:aas1"))
store.discard(self.aas1)
store.discard(self.aas1)
with self.assertRaises(KeyError) as cm:
store.get_item("urn:x-test:aas1")
self.assertIsNone(store.get("urn:x-test:aas1"))
self.assertEqual("'urn:x-test:aas1'", str(cm.exception))
self.assertIs(self.aas2, store.pop())
self.assertEqual(0, len(store))

def test_store_update(self) -> None:
identifiable_store1: model.DictIdentifiableStore[model.AssetAdministrationShell] = model.DictIdentifiableStore()
identifiable_store1.add(self.aas1)
identifiable_store2: model.DictIdentifiableStore[model.AssetAdministrationShell] = model.DictIdentifiableStore()
identifiable_store2.add(self.aas2)
identifiable_store1.update(identifiable_store2)
self.assertIsInstance(identifiable_store1, model.DictIdentifiableStore)
self.assertIn(self.aas2, identifiable_store1)
for store_class in self._STORE_CLASSES:
with self.subTest(store=store_class.__name__):
store1: model.AbstractObjectStore[model.Identifier, model.Identifiable] = store_class()
store1.add(self.aas1)
store2: model.AbstractObjectStore[model.Identifier, model.Identifiable] = store_class()
store2.add(self.aas2)
store1.update(store2)
self.assertIsInstance(store1, store_class)
self.assertIn(self.aas2, store1)

def test_store_sync(self) -> None:
aas_identifiable_store: model.DictIdentifiableStore[model.Identifiable] = model.DictIdentifiableStore()
for store_class in self._STORE_CLASSES:
with self.subTest(store=store_class.__name__):
store: model.AbstractObjectStore[model.Identifier, model.Identifiable] = store_class()
self.assertEqual(store.sync([self.aas1, self.aas2], overwrite=False), (2, 0, 0))
self.assertIn(self.aas1, store)
self.assertIn(self.aas2, store)

self.assertEqual(aas_identifiable_store.sync([self.aas1, self.aas2], overwrite=False), (2, 0, 0))
self.assertIn(self.aas1, aas_identifiable_store)
self.assertIn(self.aas2, aas_identifiable_store)
self.assertEqual(store.sync([self.aas1], overwrite=False), (0, 0, 1))

self.assertEqual(aas_identifiable_store.sync([self.aas1], overwrite=False), (0, 0, 1))
self.assertEqual(store.sync([self.aas1], overwrite=True), (0, 1, 0))
self.assertIn(self.aas1, store)

self.assertEqual(aas_identifiable_store.sync([self.aas1], overwrite=True), (0, 1, 0))
self.assertIn(self.aas1, aas_identifiable_store)
self.assertEqual(store.sync([self.aas1, self.submodel1], overwrite=True), (1, 1, 0))

self.assertEqual(aas_identifiable_store.sync([self.aas1, self.submodel1], overwrite=True), (1, 1, 0))
self.assertEqual(store.sync([self.aas1, self.submodel2], overwrite=False), (1, 0, 1))

self.assertEqual(aas_identifiable_store.sync([self.aas1, self.submodel2], overwrite=False), (1, 0, 1))
self.assertEqual(store.sync([], overwrite=False), (0, 0, 0))

self.assertEqual(aas_identifiable_store.sync([], overwrite=False), (0, 0, 0))
def test_store_remove(self) -> None:
for store_class in self._STORE_CLASSES:
with self.subTest(store=store_class.__name__):
store: model.AbstractObjectStore[model.Identifier, model.Identifiable] = store_class()
store.add(self.aas1)
store.remove(self.aas1)
self.assertEqual(0, len(store))
with self.assertRaises(KeyError):
store.remove(self.aas1)

def test_provider_multiplexer(self) -> None:
aas_identifiable_store: model.DictIdentifiableStore[model.Identifiable] = (
Expand Down
Loading