diff --git a/src/tests/benchmark/policy/tests/test_functional_bootstrap.py b/src/tests/benchmark/policy/tests/test_functional_bootstrap.py
index 65c46b4eb5aea8d5762484d1558c14745acf83ed..ca1882aaa22ff1ac20d0b1927199a6594a6c441a 100644
--- a/src/tests/benchmark/policy/tests/test_functional_bootstrap.py
+++ b/src/tests/benchmark/policy/tests/test_functional_bootstrap.py
@@ -13,10 +13,10 @@
 # limitations under the License.
 
 import logging, time
+from common.Constants import DEFAULT_CONTEXT_NAME
 from common.proto.context_pb2 import ContextId, Empty
 from common.proto.monitoring_pb2 import KpiDescriptorList
-from common.tests.LoadScenario import load_scenario_from_descriptor
-from common.tools.grpc.Tools import grpc_message_to_json_string
+from common.tools.descriptor.Loader import DescriptorLoader, check_descriptor_load_results, validate_empty_scenario
 from common.tools.object_factory.Context import json_context_id
 from context.client.ContextClient import ContextClient
 from device.client.DeviceClient import DeviceClient
@@ -27,44 +27,25 @@ LOGGER = logging.getLogger(__name__)
 LOGGER.setLevel(logging.DEBUG)
 
 DESCRIPTOR_FILE = 'ofc22/descriptors_emulated.json'
+ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_NAME))
 
 def test_scenario_bootstrap(
     context_client : ContextClient, # pylint: disable=redefined-outer-name
     device_client : DeviceClient,   # pylint: disable=redefined-outer-name
 ) -> None:
-    # ----- List entities - Ensure database is empty -------------------------------------------------------------------
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == 0
+    validate_empty_scenario(context_client)
 
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == 0
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == 0
-
-
-    # ----- Load Scenario ----------------------------------------------------------------------------------------------
-    descriptor_loader = load_scenario_from_descriptor(
-        DESCRIPTOR_FILE, context_client, device_client, None, None)
-
-
-    # ----- List entities - Ensure scenario is ready -------------------------------------------------------------------
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == descriptor_loader.num_contexts
-
-    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
-        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
-        assert len(response.topologies) == num_topologies
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == descriptor_loader.num_devices
+    descriptor_loader = DescriptorLoader(
+        descriptors_file=DESCRIPTOR_FILE, context_client=context_client, device_client=device_client)
+    results = descriptor_loader.process()
+    check_descriptor_load_results(results, descriptor_loader)
+    descriptor_loader.validate()
 
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == descriptor_loader.num_links
+    # Verify the scenario has no services/slices
+    response = context_client.GetContext(ADMIN_CONTEXT_ID)
+    assert len(response.service_ids) == 0
+    assert len(response.slice_ids) == 0
 
-    for context_uuid, _ in descriptor_loader.num_services.items():
-        response = context_client.ListServices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.services) == 0
 
 def test_scenario_kpis_created(
     context_client : ContextClient,         # pylint: disable=redefined-outer-name
diff --git a/src/tests/benchmark/policy/tests/test_functional_cleanup.py b/src/tests/benchmark/policy/tests/test_functional_cleanup.py
index e00c5ceeea6c59bf11bd2961802a9a3b805c5d2c..122526840796310519f8fe0feb8921e51467b21f 100644
--- a/src/tests/benchmark/policy/tests/test_functional_cleanup.py
+++ b/src/tests/benchmark/policy/tests/test_functional_cleanup.py
@@ -13,9 +13,10 @@
 # limitations under the License.
 
 import logging
-from common.tools.descriptor.Loader import DescriptorLoader
+from common.Constants import DEFAULT_CONTEXT_NAME
+from common.proto.context_pb2 import ContextId
+from common.tools.descriptor.Loader import DescriptorLoader, validate_empty_scenario
 from common.tools.object_factory.Context import json_context_id
-from common.proto.context_pb2 import ContextId, DeviceId, Empty, LinkId, TopologyId
 from context.client.ContextClient import ContextClient
 from device.client.DeviceClient import DeviceClient
 from tests.Fixtures import context_client, device_client    # pylint: disable=unused-import
@@ -24,57 +25,20 @@ LOGGER = logging.getLogger(__name__)
 LOGGER.setLevel(logging.DEBUG)
 
 DESCRIPTOR_FILE = 'ofc22/descriptors_emulated.json'
+ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_NAME))
 
-
-def test_services_removed(
+def test_scenario_cleanup(
     context_client : ContextClient, # pylint: disable=redefined-outer-name
     device_client : DeviceClient,   # pylint: disable=redefined-outer-name
 ) -> None:
-    # ----- List entities - Ensure service is removed ------------------------------------------------------------------
-    with open(DESCRIPTOR_FILE, 'r', encoding='UTF-8') as f:
-        descriptors = f.read()
-
-    descriptor_loader = DescriptorLoader(descriptors)
-
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == descriptor_loader.num_contexts
-
-    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
-        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
-        assert len(response.topologies) == num_topologies
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == descriptor_loader.num_devices
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == descriptor_loader.num_links
-
-    for context_uuid, _ in descriptor_loader.num_services.items():
-        response = context_client.ListServices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.services) == 0
-
-
-    # ----- Delete Links, Devices, Topologies, Contexts ----------------------------------------------------------------
-    for link in descriptor_loader.links:
-        context_client.RemoveLink(LinkId(**link['link_id']))
-
-    for device in descriptor_loader.devices:
-        device_client .DeleteDevice(DeviceId(**device['device_id']))
-
-    for context_uuid, topology_list in descriptor_loader.topologies.items():
-        for topology in topology_list:
-            context_client.RemoveTopology(TopologyId(**topology['topology_id']))
-
-    for context in descriptor_loader.contexts:
-        context_client.RemoveContext(ContextId(**context['context_id']))
-
-
-    # ----- List entities - Ensure database is empty again -------------------------------------------------------------
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == 0
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == 0
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == 0
+    # Verify the scenario has no services/slices
+    response = context_client.GetContext(ADMIN_CONTEXT_ID)
+    assert len(response.service_ids) == 0
+    assert len(response.slice_ids) == 0
+
+    # Load descriptors and validate the base scenario
+    descriptor_loader = DescriptorLoader(
+        descriptors_file=DESCRIPTOR_FILE, context_client=context_client, device_client=device_client)
+    descriptor_loader.validate()
+    descriptor_loader.unload()
+    validate_empty_scenario(context_client)
diff --git a/src/tests/benchmark/policy/tests/test_functional_create_service.py b/src/tests/benchmark/policy/tests/test_functional_create_service.py
index 919f81979305831b69a82f13fbe4b70bd20ea70f..dd7761f3871db48752f313dc53e8b7d2e2c38489 100644
--- a/src/tests/benchmark/policy/tests/test_functional_create_service.py
+++ b/src/tests/benchmark/policy/tests/test_functional_create_service.py
@@ -13,83 +13,61 @@
 # limitations under the License.
 
 import logging, random
-from common.DeviceTypes import DeviceTypeEnum
-from common.proto.context_pb2 import ContextId, Empty
+from common.Constants import DEFAULT_CONTEXT_NAME
+from common.proto.context_pb2 import ContextId, Empty, ServiceTypeEnum
 from common.proto.kpi_sample_types_pb2 import KpiSampleType
 from common.tools.descriptor.Loader import DescriptorLoader
 from common.tools.grpc.Tools import grpc_message_to_json_string
 from common.tools.object_factory.Context import json_context_id
 from context.client.ContextClient import ContextClient
 from monitoring.client.MonitoringClient import MonitoringClient
-from tests.Fixtures import context_client, device_client, monitoring_client # pylint: disable=unused-import
+from tests.Fixtures import context_client, monitoring_client                    # pylint: disable=unused-import
 from tests.tools.mock_osm.MockOSM import MockOSM
-from .Fixtures import osm_wim # pylint: disable=unused-import
+from .Fixtures import osm_wim                                                   # pylint: disable=unused-import
 from .Objects import WIM_SERVICE_CONNECTION_POINTS, WIM_SERVICE_TYPE
 
 LOGGER = logging.getLogger(__name__)
 LOGGER.setLevel(logging.DEBUG)
 
-DEVTYPE_EMU_PR  = DeviceTypeEnum.EMULATED_PACKET_ROUTER.value
-DEVTYPE_EMU_OLS = DeviceTypeEnum.EMULATED_OPEN_LINE_SYSTEM.value
-
 DESCRIPTOR_FILE = 'ofc22/descriptors_emulated.json'
+ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_NAME))
 
 def test_service_creation(context_client : ContextClient, osm_wim : MockOSM): # pylint: disable=redefined-outer-name
-    # ----- List entities - Ensure scenario is ready -------------------------------------------------------------------
-    with open(DESCRIPTOR_FILE, 'r', encoding='UTF-8') as f:
-        descriptors = f.read()
-
-    descriptor_loader = DescriptorLoader(descriptors)
-
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == descriptor_loader.num_contexts
-
-    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
-        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
-        assert len(response.topologies) == num_topologies
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == descriptor_loader.num_devices
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == descriptor_loader.num_links
-
-    for context_uuid, num_services in descriptor_loader.num_services.items():
-        response = context_client.ListServices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.services) == 0
+    # Load descriptors and validate the base scenario
+    descriptor_loader = DescriptorLoader(descriptors_file=DESCRIPTOR_FILE, context_client=context_client)
+    descriptor_loader.validate()
 
+    # Verify the scenario has no services/slices
+    response = context_client.GetContext(ADMIN_CONTEXT_ID)
+    assert len(response.service_ids) == 0
+    assert len(response.slice_ids) == 0
 
-    # ----- Create Service ---------------------------------------------------------------------------------------------
+    # Create Connectivity Service
     service_uuid = osm_wim.create_connectivity_service(WIM_SERVICE_TYPE, WIM_SERVICE_CONNECTION_POINTS)
     osm_wim.get_connectivity_service_status(service_uuid)
 
-
-    # ----- List entities - Ensure service is created ------------------------------------------------------------------
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == descriptor_loader.num_contexts
-
-    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
-        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
-        assert len(response.topologies) == num_topologies
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == descriptor_loader.num_devices
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == descriptor_loader.num_links
-
-    for context_uuid, num_services in descriptor_loader.num_services.items():
-        response = context_client.ListServices(ContextId(**json_context_id(context_uuid)))
-        LOGGER.info('Services[{:d}] = {:s}'.format(len(response.services), grpc_message_to_json_string(response)))
-        assert len(response.services) == 2*num_services # OLS & L3NM => (L3NM + TAPI)
-
-        for service in response.services:
-            service_id = service.service_id
-            response = context_client.ListConnections(service_id)
-            LOGGER.info('  ServiceId[{:s}] => Connections[{:d}] = {:s}'.format(
-                grpc_message_to_json_string(service_id), len(response.connections),
-                grpc_message_to_json_string(response)))
-            assert len(response.connections) == 1 # one connection per service
+    # Ensure slices and services are created
+    response = context_client.ListSlices(ADMIN_CONTEXT_ID)
+    LOGGER.info('Slices[{:d}] = {:s}'.format(len(response.slices), grpc_message_to_json_string(response)))
+    assert len(response.slices) == 1 # OSM slice
+
+    response = context_client.ListServices(ADMIN_CONTEXT_ID)
+    LOGGER.info('Services[{:d}] = {:s}'.format(len(response.services), grpc_message_to_json_string(response)))
+    assert len(response.services) == 2 # 1xL3NM + 1xTAPI
+
+    for service in response.services:
+        service_id = service.service_id
+        response = context_client.ListConnections(service_id)
+        LOGGER.info('  ServiceId[{:s}] => Connections[{:d}] = {:s}'.format(
+            grpc_message_to_json_string(service_id), len(response.connections), grpc_message_to_json_string(response)))
+
+        if service.service_type == ServiceTypeEnum.SERVICETYPE_L3NM:
+            assert len(response.connections) == 1 # 1 connection per service
+        elif service.service_type == ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE:
+            assert len(response.connections) == 1 # 1 connection per service
+        else:
+            str_service = grpc_message_to_json_string(service)
+            raise Exception('Unexpected ServiceType: {:s}'.format(str_service))
 
 
 def test_scenario_kpi_values_created(
diff --git a/src/tests/benchmark/policy/tests/test_functional_delete_service.py b/src/tests/benchmark/policy/tests/test_functional_delete_service.py
index 6f6ca602980fb05ffafd17f44a5bc64671c4c7b0..4fffc115e6c0ea881dea637dd741f99715d28c6a 100644
--- a/src/tests/benchmark/policy/tests/test_functional_delete_service.py
+++ b/src/tests/benchmark/policy/tests/test_functional_delete_service.py
@@ -14,86 +14,61 @@
 
 import logging
 from common.Constants import DEFAULT_CONTEXT_NAME
-from common.DeviceTypes import DeviceTypeEnum
-from common.proto.context_pb2 import ContextId, Empty, ServiceTypeEnum
+from common.proto.context_pb2 import ContextId, ServiceTypeEnum
 from common.tools.descriptor.Loader import DescriptorLoader
-from common.tools.object_factory.Context import json_context_id
 from common.tools.grpc.Tools import grpc_message_to_json_string
+from common.tools.object_factory.Context import json_context_id
 from context.client.ContextClient import ContextClient
 from tests.Fixtures import context_client   # pylint: disable=unused-import
 from tests.tools.mock_osm.MockOSM import MockOSM
-from .Fixtures import osm_wim # pylint: disable=unused-import
-
+from .Fixtures import osm_wim               # pylint: disable=unused-import
 
 LOGGER = logging.getLogger(__name__)
 LOGGER.setLevel(logging.DEBUG)
 
-DEVTYPE_EMU_PR  = DeviceTypeEnum.EMULATED_PACKET_ROUTER.value
-DEVTYPE_EMU_OLS = DeviceTypeEnum.EMULATED_OPEN_LINE_SYSTEM.value
-
 DESCRIPTOR_FILE = 'ofc22/descriptors_emulated.json'
-
+ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_NAME))
 
 def test_service_removal(context_client : ContextClient, osm_wim : MockOSM): # pylint: disable=redefined-outer-name
-    # ----- List entities - Ensure service is created ------------------------------------------------------------------
-    with open(DESCRIPTOR_FILE, 'r', encoding='UTF-8') as f:
-        descriptors = f.read()
+    # Ensure slices and services are created
+    response = context_client.ListSlices(ADMIN_CONTEXT_ID)
+    LOGGER.info('Slices[{:d}] = {:s}'.format(len(response.slices), grpc_message_to_json_string(response)))
+    assert len(response.slices) == 1 # OSM slice
 
-    descriptor_loader = DescriptorLoader(descriptors)
+    response = context_client.ListServices(ADMIN_CONTEXT_ID)
+    LOGGER.info('Services[{:d}] = {:s}'.format(len(response.services), grpc_message_to_json_string(response)))
+    assert len(response.services) == 2 # 1xL3NM + 1xTAPI
 
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == descriptor_loader.num_contexts
-
-    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
-        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
-        assert len(response.topologies) == num_topologies
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == descriptor_loader.num_devices
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == descriptor_loader.num_links
-
-    l3nm_service_uuids = set()
-    response = context_client.ListServices(ContextId(**json_context_id(DEFAULT_CONTEXT_NAME)))
-    assert len(response.services) == 2 # OLS & L3NM => (L3NM + TAPI)
+    service_uuids = set()
     for service in response.services:
         service_id = service.service_id
+        response = context_client.ListConnections(service_id)
+        LOGGER.info('  ServiceId[{:s}] => Connections[{:d}] = {:s}'.format(
+            grpc_message_to_json_string(service_id), len(response.connections), grpc_message_to_json_string(response)))
 
         if service.service_type == ServiceTypeEnum.SERVICETYPE_L3NM:
+            assert len(response.connections) == 1 # 1 connection per service
             service_uuid = service_id.service_uuid.uuid
-            l3nm_service_uuids.add(service_uuid)
+            service_uuids.add(service_uuid)
             osm_wim.conn_info[service_uuid] = {}
-
-        response = context_client.ListConnections(service_id)
-        LOGGER.info('  ServiceId[{:s}] => Connections[{:d}] = {:s}'.format(
-            grpc_message_to_json_string(service_id), len(response.connections),
-            grpc_message_to_json_string(response)))
-        assert len(response.connections) == 1 # one connection per service
+        elif service.service_type == ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE:
+            assert len(response.connections) == 1 # 1 connection per service
+        else:
+            str_service = grpc_message_to_json_string(service)
+            raise Exception('Unexpected ServiceType: {:s}'.format(str_service))
 
     # Identify service to delete
-    assert len(l3nm_service_uuids) == 1  # assume a single L3NM service has been created
-    l3nm_service_uuid = set(l3nm_service_uuids).pop()
-
-
-    # ----- Delete Service ---------------------------------------------------------------------------------------------
-    osm_wim.delete_connectivity_service(l3nm_service_uuid)
-
-
-    # ----- List entities - Ensure service is removed ------------------------------------------------------------------
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == descriptor_loader.num_contexts
-
-    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
-        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
-        assert len(response.topologies) == num_topologies
+    assert len(service_uuids) == 1  # assume a single L3NM service has been created
+    service_uuid = set(service_uuids).pop()
 
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == descriptor_loader.num_devices
+    # Delete Connectivity Service
+    osm_wim.delete_connectivity_service(service_uuid)
 
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == descriptor_loader.num_links
+    # Verify the scenario has no services/slices
+    response = context_client.GetContext(ADMIN_CONTEXT_ID)
+    assert len(response.service_ids) == 0
+    assert len(response.slice_ids) == 0
 
-    for context_uuid, num_services in descriptor_loader.num_services.items():
-        response = context_client.ListServices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.services) == 0
+    # Load descriptors and validate the base scenario
+    descriptor_loader = DescriptorLoader(descriptors_file=DESCRIPTOR_FILE, context_client=context_client)
+    descriptor_loader.validate()
diff --git a/src/tests/ecoc22/tests/test_functional_bootstrap.py b/src/tests/ecoc22/tests/test_functional_bootstrap.py
index 3b7b5009c0dbe9d95b4ee8e2cdbe33d39008a7a1..05691d0b274df019a87bd870fec2b9ffa3245612 100644
--- a/src/tests/ecoc22/tests/test_functional_bootstrap.py
+++ b/src/tests/ecoc22/tests/test_functional_bootstrap.py
@@ -14,8 +14,8 @@
 
 import logging
 from common.Constants import DEFAULT_CONTEXT_NAME
-from common.proto.context_pb2 import ContextId, Empty
-from common.tests.LoadScenario import load_scenario_from_descriptor
+from common.proto.context_pb2 import ContextId
+from common.tools.descriptor.Loader import DescriptorLoader, check_descriptor_load_results, validate_empty_scenario
 from common.tools.object_factory.Context import json_context_id
 from context.client.ContextClient import ContextClient
 from device.client.DeviceClient import DeviceClient
@@ -31,45 +31,15 @@ def test_scenario_bootstrap(
     context_client : ContextClient, # pylint: disable=redefined-outer-name
     device_client : DeviceClient,   # pylint: disable=redefined-outer-name
 ) -> None:
-    # ----- List entities - Ensure database is empty -------------------------------------------------------------------
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == 0
+    validate_empty_scenario(context_client)
 
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == 0
+    descriptor_loader = DescriptorLoader(
+        descriptors_file=DESCRIPTOR_FILE, context_client=context_client, device_client=device_client)
+    results = descriptor_loader.process()
+    check_descriptor_load_results(results, descriptor_loader)
+    descriptor_loader.validate()
 
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == 0
-
-
-    # ----- Load Scenario ----------------------------------------------------------------------------------------------
-    descriptor_loader = load_scenario_from_descriptor(
-        DESCRIPTOR_FILE, context_client, device_client, None, None)
-
-
-    # ----- List entities - Ensure scenario is ready -------------------------------------------------------------------
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == descriptor_loader.num_contexts
-
-    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
-        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
-        assert len(response.topologies) == num_topologies
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == descriptor_loader.num_devices
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == descriptor_loader.num_links
-
-    for context_uuid, _ in descriptor_loader.num_services.items():
-        response = context_client.ListServices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.services) == 0
-
-    for context_uuid, _ in descriptor_loader.num_slices.items():
-        response = context_client.ListSlices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.slices) == 0
-
-    # This scenario assumes no services are created beforehand
+    # Verify the scenario has no services/slices
     response = context_client.GetContext(ADMIN_CONTEXT_ID)
     assert len(response.service_ids) == 0
     assert len(response.slice_ids) == 0
diff --git a/src/tests/ecoc22/tests/test_functional_cleanup.py b/src/tests/ecoc22/tests/test_functional_cleanup.py
index 3e8b5ea65fe8249102ba17b9d4ce3f2cf2296dda..088c19799615169bf8c60ae5a9226fe02ec0e4ff 100644
--- a/src/tests/ecoc22/tests/test_functional_cleanup.py
+++ b/src/tests/ecoc22/tests/test_functional_cleanup.py
@@ -14,8 +14,8 @@
 
 import logging
 from common.Constants import DEFAULT_CONTEXT_NAME
-from common.proto.context_pb2 import ContextId, DeviceId, Empty, LinkId, TopologyId
-from common.tools.descriptor.Loader import DescriptorLoader
+from common.proto.context_pb2 import ContextId
+from common.tools.descriptor.Loader import DescriptorLoader, validate_empty_scenario
 from common.tools.object_factory.Context import json_context_id
 from context.client.ContextClient import ContextClient
 from device.client.DeviceClient import DeviceClient
@@ -27,64 +27,18 @@ LOGGER.setLevel(logging.DEBUG)
 DESCRIPTOR_FILE = 'ecoc22/descriptors_emulated.json'
 ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_NAME))
 
-def test_services_removed(
+def test_scenario_cleanup(
     context_client : ContextClient, # pylint: disable=redefined-outer-name
     device_client : DeviceClient,   # pylint: disable=redefined-outer-name
 ) -> None:
-    # ----- List entities - Ensure service is removed ------------------------------------------------------------------
-    with open(DESCRIPTOR_FILE, 'r', encoding='UTF-8') as f:
-        descriptors = f.read()
-
-    descriptor_loader = DescriptorLoader(descriptors)
-
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == descriptor_loader.num_contexts
-
-    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
-        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
-        assert len(response.topologies) == num_topologies
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == descriptor_loader.num_devices
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == descriptor_loader.num_links
-
-    for context_uuid, _ in descriptor_loader.num_services.items():
-        response = context_client.ListServices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.services) == 0
-
-    for context_uuid, _ in descriptor_loader.num_slices.items():
-        response = context_client.ListSlices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.slices) == 0
-
-    # This scenario assumes no services are created beforehand
+    # Verify the scenario has no services/slices
     response = context_client.GetContext(ADMIN_CONTEXT_ID)
     assert len(response.service_ids) == 0
     assert len(response.slice_ids) == 0
 
-
-    # ----- Delete Links, Devices, Topologies, Contexts ----------------------------------------------------------------
-    for link in descriptor_loader.links:
-        context_client.RemoveLink(LinkId(**link['link_id']))
-
-    for device in descriptor_loader.devices:
-        device_client .DeleteDevice(DeviceId(**device['device_id']))
-
-    for context_uuid, topology_list in descriptor_loader.topologies.items():
-        for topology in topology_list:
-            context_client.RemoveTopology(TopologyId(**topology['topology_id']))
-
-    for context in descriptor_loader.contexts:
-        context_client.RemoveContext(ContextId(**context['context_id']))
-
-
-    # ----- List entities - Ensure database is empty again -------------------------------------------------------------
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == 0
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == 0
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == 0
+    # Load descriptors and validate the base scenario
+    descriptor_loader = DescriptorLoader(
+        descriptors_file=DESCRIPTOR_FILE, context_client=context_client, device_client=device_client)
+    descriptor_loader.validate()
+    descriptor_loader.unload()
+    validate_empty_scenario(context_client)
diff --git a/src/tests/ecoc22/tests/test_functional_create_service.py b/src/tests/ecoc22/tests/test_functional_create_service.py
index 6dd4eb827c0fbafdf0bce81c7702af5fd5fe007b..dab9c7eb131434a16dad01be4fb8cd6b6b322515 100644
--- a/src/tests/ecoc22/tests/test_functional_create_service.py
+++ b/src/tests/ecoc22/tests/test_functional_create_service.py
@@ -14,7 +14,7 @@
 
 import logging
 from common.Constants import DEFAULT_CONTEXT_NAME
-from common.proto.context_pb2 import ContextId, Empty, ServiceTypeEnum
+from common.proto.context_pb2 import ContextId, ServiceTypeEnum
 from common.tools.descriptor.Loader import DescriptorLoader
 from common.tools.grpc.Tools import grpc_message_to_json_string
 from common.tools.object_factory.Context import json_context_id
@@ -31,57 +31,23 @@ DESCRIPTOR_FILE = 'ecoc22/descriptors_emulated.json'
 ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_NAME))
 
 def test_service_creation(context_client : ContextClient, osm_wim : MockOSM): # pylint: disable=redefined-outer-name
-    # ----- List entities - Ensure scenario is ready -------------------------------------------------------------------
-    with open(DESCRIPTOR_FILE, 'r', encoding='UTF-8') as f:
-        descriptors = f.read()
+    # Load descriptors and validate the base scenario
+    descriptor_loader = DescriptorLoader(descriptors_file=DESCRIPTOR_FILE, context_client=context_client)
+    descriptor_loader.validate()
 
-    descriptor_loader = DescriptorLoader(descriptors)
-
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == descriptor_loader.num_contexts
-
-    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
-        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
-        assert len(response.topologies) == num_topologies
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == descriptor_loader.num_devices
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == descriptor_loader.num_links
-
-    for context_uuid, num_services in descriptor_loader.num_services.items():
-        response = context_client.ListServices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.services) == num_services
-
-    for context_uuid, num_slices in descriptor_loader.num_slices.items():
-        response = context_client.ListSlices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.slices) == num_slices
-
-    # This scenario assumes no services are created beforehand
+    # Verify the scenario has no services/slices
     response = context_client.GetContext(ADMIN_CONTEXT_ID)
     assert len(response.service_ids) == 0
     assert len(response.slice_ids) == 0
 
-
-    # ----- Create Service ---------------------------------------------------------------------------------------------
+    # Create Connectivity Service
     service_uuid = osm_wim.create_connectivity_service(WIM_SERVICE_TYPE, WIM_SERVICE_CONNECTION_POINTS)
     osm_wim.get_connectivity_service_status(service_uuid)
 
-
-    # ----- List entities - Ensure service is created ------------------------------------------------------------------
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == descriptor_loader.num_contexts
-
-    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
-        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
-        assert len(response.topologies) == num_topologies
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == descriptor_loader.num_devices
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == descriptor_loader.num_links
+    # Ensure slices and services are created
+    response = context_client.ListSlices(ADMIN_CONTEXT_ID)
+    LOGGER.info('Slices[{:d}] = {:s}'.format(len(response.slices), grpc_message_to_json_string(response)))
+    assert len(response.slices) == 1 # OSM slice
 
     response = context_client.ListServices(ADMIN_CONTEXT_ID)
     LOGGER.info('Services[{:d}] = {:s}'.format(len(response.services), grpc_message_to_json_string(response)))
diff --git a/src/tests/ecoc22/tests/test_functional_delete_service.py b/src/tests/ecoc22/tests/test_functional_delete_service.py
index 5cfdc34733d8ddc6927b52131a187fb097b36d9d..710e1a817f00f0b1664439d1c816195202a69a9d 100644
--- a/src/tests/ecoc22/tests/test_functional_delete_service.py
+++ b/src/tests/ecoc22/tests/test_functional_delete_service.py
@@ -14,14 +14,14 @@
 
 import logging
 from common.Constants import DEFAULT_CONTEXT_NAME
-from common.proto.context_pb2 import ContextId, Empty, ServiceTypeEnum
+from common.proto.context_pb2 import ContextId, ServiceTypeEnum
 from common.tools.descriptor.Loader import DescriptorLoader
-from common.tools.object_factory.Context import json_context_id
 from common.tools.grpc.Tools import grpc_message_to_json_string
+from common.tools.object_factory.Context import json_context_id
 from context.client.ContextClient import ContextClient
-from tests.Fixtures import context_client   # pylint: disable=unused-import
+from tests.Fixtures import context_client                                       # pylint: disable=unused-import
 from tests.tools.mock_osm.MockOSM import MockOSM
-from .Fixtures import osm_wim               # pylint: disable=unused-import
+from .Fixtures import osm_wim                                                   # pylint: disable=unused-import
 
 LOGGER = logging.getLogger(__name__)
 LOGGER.setLevel(logging.DEBUG)
@@ -30,44 +30,27 @@ DESCRIPTOR_FILE = 'ecoc22/descriptors_emulated.json'
 ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_NAME))
 
 def test_service_removal(context_client : ContextClient, osm_wim : MockOSM): # pylint: disable=redefined-outer-name
-    # ----- List entities - Ensure service is created ------------------------------------------------------------------
-    with open(DESCRIPTOR_FILE, 'r', encoding='UTF-8') as f:
-        descriptors = f.read()
-
-    descriptor_loader = DescriptorLoader(descriptors)
-
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == descriptor_loader.num_contexts
-
-    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
-        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
-        assert len(response.topologies) == num_topologies
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == descriptor_loader.num_devices
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == descriptor_loader.num_links
+    # Ensure slices and services are created
+    response = context_client.ListSlices(ADMIN_CONTEXT_ID)
+    LOGGER.info('Slices[{:d}] = {:s}'.format(len(response.slices), grpc_message_to_json_string(response)))
+    assert len(response.slices) == 1 # OSM slice
 
-    service_uuids = set()
     response = context_client.ListServices(ADMIN_CONTEXT_ID)
     LOGGER.info('Services[{:d}] = {:s}'.format(len(response.services), grpc_message_to_json_string(response)))
     assert len(response.services) == 3 # 1xL2NM + 2xTAPI
 
+    service_uuids = set()
     for service in response.services:
         service_id = service.service_id
-
-        if service.service_type == ServiceTypeEnum.SERVICETYPE_L2NM:
-            service_uuid = service_id.service_uuid.uuid
-            service_uuids.add(service_uuid)
-            osm_wim.conn_info[service_uuid] = {}
-
         response = context_client.ListConnections(service_id)
         LOGGER.info('  ServiceId[{:s}] => Connections[{:d}] = {:s}'.format(
             grpc_message_to_json_string(service_id), len(response.connections), grpc_message_to_json_string(response)))
 
         if service.service_type == ServiceTypeEnum.SERVICETYPE_L2NM:
             assert len(response.connections) == 2 # 2 connections per service (primary + backup)
+            service_uuid = service_id.service_uuid.uuid
+            service_uuids.add(service_uuid)
+            osm_wim.conn_info[service_uuid] = {}
         elif service.service_type == ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE:
             assert len(response.connections) == 1 # 1 connection per service
         else:
@@ -78,34 +61,14 @@ def test_service_removal(context_client : ContextClient, osm_wim : MockOSM): # p
     assert len(service_uuids) == 1  # assume a single L2NM service has been created
     service_uuid = set(service_uuids).pop()
 
-
-    # ----- Delete Service ---------------------------------------------------------------------------------------------
+    # Delete Connectivity Service
     osm_wim.delete_connectivity_service(service_uuid)
 
-
-    # ----- List entities - Ensure service is removed ------------------------------------------------------------------
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == descriptor_loader.num_contexts
-
-    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
-        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
-        assert len(response.topologies) == num_topologies
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == descriptor_loader.num_devices
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == descriptor_loader.num_links
-
-    for context_uuid, num_services in descriptor_loader.num_services.items():
-        response = context_client.ListServices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.services) == num_services
-
-    for context_uuid, num_slices in descriptor_loader.num_slices.items():
-        response = context_client.ListSlices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.slices) == num_slices
-
-    # This scenario assumes no services are created beforehand
+    # Verify the scenario has no services/slices
     response = context_client.GetContext(ADMIN_CONTEXT_ID)
     assert len(response.service_ids) == 0
     assert len(response.slice_ids) == 0
+
+    # Load descriptors and validate the base scenario
+    descriptor_loader = DescriptorLoader(descriptors_file=DESCRIPTOR_FILE, context_client=context_client)
+    descriptor_loader.validate()
diff --git a/src/tests/ofc22/tests/test_functional_bootstrap.py b/src/tests/ofc22/tests/test_functional_bootstrap.py
index ad2d5703a931c933a9ab4e7162dd1985e5a33d9d..ca1882aaa22ff1ac20d0b1927199a6594a6c441a 100644
--- a/src/tests/ofc22/tests/test_functional_bootstrap.py
+++ b/src/tests/ofc22/tests/test_functional_bootstrap.py
@@ -16,7 +16,7 @@ import logging, time
 from common.Constants import DEFAULT_CONTEXT_NAME
 from common.proto.context_pb2 import ContextId, Empty
 from common.proto.monitoring_pb2 import KpiDescriptorList
-from common.tests.LoadScenario import load_scenario_from_descriptor
+from common.tools.descriptor.Loader import DescriptorLoader, check_descriptor_load_results, validate_empty_scenario
 from common.tools.object_factory.Context import json_context_id
 from context.client.ContextClient import ContextClient
 from device.client.DeviceClient import DeviceClient
@@ -33,45 +33,15 @@ def test_scenario_bootstrap(
     context_client : ContextClient, # pylint: disable=redefined-outer-name
     device_client : DeviceClient,   # pylint: disable=redefined-outer-name
 ) -> None:
-    # ----- List entities - Ensure database is empty -------------------------------------------------------------------
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == 0
+    validate_empty_scenario(context_client)
 
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == 0
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == 0
-
-
-    # ----- Load Scenario ----------------------------------------------------------------------------------------------
-    descriptor_loader = load_scenario_from_descriptor(
-        DESCRIPTOR_FILE, context_client, device_client, None, None)
-
-
-    # ----- List entities - Ensure scenario is ready -------------------------------------------------------------------
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == descriptor_loader.num_contexts
-
-    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
-        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
-        assert len(response.topologies) == num_topologies
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == descriptor_loader.num_devices
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == descriptor_loader.num_links
-
-    for context_uuid, _ in descriptor_loader.num_services.items():
-        response = context_client.ListServices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.services) == 0
-
-    for context_uuid, _ in descriptor_loader.num_slices.items():
-        response = context_client.ListSlices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.slices) == 0
+    descriptor_loader = DescriptorLoader(
+        descriptors_file=DESCRIPTOR_FILE, context_client=context_client, device_client=device_client)
+    results = descriptor_loader.process()
+    check_descriptor_load_results(results, descriptor_loader)
+    descriptor_loader.validate()
 
-    # This scenario assumes no services are created beforehand
+    # Verify the scenario has no services/slices
     response = context_client.GetContext(ADMIN_CONTEXT_ID)
     assert len(response.service_ids) == 0
     assert len(response.slice_ids) == 0
diff --git a/src/tests/ofc22/tests/test_functional_cleanup.py b/src/tests/ofc22/tests/test_functional_cleanup.py
index d38b653b226639d5c8c831872a64ea1f9140ef8f..122526840796310519f8fe0feb8921e51467b21f 100644
--- a/src/tests/ofc22/tests/test_functional_cleanup.py
+++ b/src/tests/ofc22/tests/test_functional_cleanup.py
@@ -14,8 +14,8 @@
 
 import logging
 from common.Constants import DEFAULT_CONTEXT_NAME
-from common.proto.context_pb2 import ContextId, DeviceId, Empty, LinkId, TopologyId
-from common.tools.descriptor.Loader import DescriptorLoader
+from common.proto.context_pb2 import ContextId
+from common.tools.descriptor.Loader import DescriptorLoader, validate_empty_scenario
 from common.tools.object_factory.Context import json_context_id
 from context.client.ContextClient import ContextClient
 from device.client.DeviceClient import DeviceClient
@@ -27,64 +27,18 @@ LOGGER.setLevel(logging.DEBUG)
 DESCRIPTOR_FILE = 'ofc22/descriptors_emulated.json'
 ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_NAME))
 
-def test_services_removed(
+def test_scenario_cleanup(
     context_client : ContextClient, # pylint: disable=redefined-outer-name
     device_client : DeviceClient,   # pylint: disable=redefined-outer-name
 ) -> None:
-    # ----- List entities - Ensure service is removed ------------------------------------------------------------------
-    with open(DESCRIPTOR_FILE, 'r', encoding='UTF-8') as f:
-        descriptors = f.read()
-
-    descriptor_loader = DescriptorLoader(descriptors)
-
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == descriptor_loader.num_contexts
-
-    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
-        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
-        assert len(response.topologies) == num_topologies
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == descriptor_loader.num_devices
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == descriptor_loader.num_links
-
-    for context_uuid, _ in descriptor_loader.num_services.items():
-        response = context_client.ListServices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.services) == 0
-
-    for context_uuid, _ in descriptor_loader.num_slices.items():
-        response = context_client.ListSlices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.slices) == 0
-
-    # This scenario assumes no services are created beforehand
+    # Verify the scenario has no services/slices
     response = context_client.GetContext(ADMIN_CONTEXT_ID)
     assert len(response.service_ids) == 0
     assert len(response.slice_ids) == 0
 
-
-    # ----- Delete Links, Devices, Topologies, Contexts ----------------------------------------------------------------
-    for link in descriptor_loader.links:
-        context_client.RemoveLink(LinkId(**link['link_id']))
-
-    for device in descriptor_loader.devices:
-        device_client .DeleteDevice(DeviceId(**device['device_id']))
-
-    for context_uuid, topology_list in descriptor_loader.topologies.items():
-        for topology in topology_list:
-            context_client.RemoveTopology(TopologyId(**topology['topology_id']))
-
-    for context in descriptor_loader.contexts:
-        context_client.RemoveContext(ContextId(**context['context_id']))
-
-
-    # ----- List entities - Ensure database is empty again -------------------------------------------------------------
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == 0
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == 0
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == 0
+    # Load descriptors and validate the base scenario
+    descriptor_loader = DescriptorLoader(
+        descriptors_file=DESCRIPTOR_FILE, context_client=context_client, device_client=device_client)
+    descriptor_loader.validate()
+    descriptor_loader.unload()
+    validate_empty_scenario(context_client)
diff --git a/src/tests/ofc22/tests/test_functional_create_service.py b/src/tests/ofc22/tests/test_functional_create_service.py
index 92e0a74f9d291ea49422580fbdfad2c354aeeee2..dd7761f3871db48752f313dc53e8b7d2e2c38489 100644
--- a/src/tests/ofc22/tests/test_functional_create_service.py
+++ b/src/tests/ofc22/tests/test_functional_create_service.py
@@ -21,7 +21,7 @@ from common.tools.grpc.Tools import grpc_message_to_json_string
 from common.tools.object_factory.Context import json_context_id
 from context.client.ContextClient import ContextClient
 from monitoring.client.MonitoringClient import MonitoringClient
-from tests.Fixtures import context_client, device_client, monitoring_client     # pylint: disable=unused-import
+from tests.Fixtures import context_client, monitoring_client                    # pylint: disable=unused-import
 from tests.tools.mock_osm.MockOSM import MockOSM
 from .Fixtures import osm_wim                                                   # pylint: disable=unused-import
 from .Objects import WIM_SERVICE_CONNECTION_POINTS, WIM_SERVICE_TYPE
@@ -33,61 +33,27 @@ DESCRIPTOR_FILE = 'ofc22/descriptors_emulated.json'
 ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_NAME))
 
 def test_service_creation(context_client : ContextClient, osm_wim : MockOSM): # pylint: disable=redefined-outer-name
-    # ----- List entities - Ensure scenario is ready -------------------------------------------------------------------
-    with open(DESCRIPTOR_FILE, 'r', encoding='UTF-8') as f:
-        descriptors = f.read()
+    # Load descriptors and validate the base scenario
+    descriptor_loader = DescriptorLoader(descriptors_file=DESCRIPTOR_FILE, context_client=context_client)
+    descriptor_loader.validate()
 
-    descriptor_loader = DescriptorLoader(descriptors)
-
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == descriptor_loader.num_contexts
-
-    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
-        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
-        assert len(response.topologies) == num_topologies
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == descriptor_loader.num_devices
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == descriptor_loader.num_links
-
-    for context_uuid, num_services in descriptor_loader.num_services.items():
-        response = context_client.ListServices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.services) == num_services
-
-    for context_uuid, num_slices in descriptor_loader.num_slices.items():
-        response = context_client.ListSlices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.slices) == num_slices
-
-    # This scenario assumes no services are created beforehand
+    # Verify the scenario has no services/slices
     response = context_client.GetContext(ADMIN_CONTEXT_ID)
     assert len(response.service_ids) == 0
     assert len(response.slice_ids) == 0
 
-
-    # ----- Create Service ---------------------------------------------------------------------------------------------
+    # Create Connectivity Service
     service_uuid = osm_wim.create_connectivity_service(WIM_SERVICE_TYPE, WIM_SERVICE_CONNECTION_POINTS)
     osm_wim.get_connectivity_service_status(service_uuid)
 
-
-    # ----- List entities - Ensure service is created ------------------------------------------------------------------
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == descriptor_loader.num_contexts
-
-    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
-        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
-        assert len(response.topologies) == num_topologies
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == descriptor_loader.num_devices
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == descriptor_loader.num_links
+    # Ensure slices and services are created
+    response = context_client.ListSlices(ADMIN_CONTEXT_ID)
+    LOGGER.info('Slices[{:d}] = {:s}'.format(len(response.slices), grpc_message_to_json_string(response)))
+    assert len(response.slices) == 1 # OSM slice
 
     response = context_client.ListServices(ADMIN_CONTEXT_ID)
     LOGGER.info('Services[{:d}] = {:s}'.format(len(response.services), grpc_message_to_json_string(response)))
-    assert len(response.services) == 2 # OLS & L3NM => (L3NM + TAPI)
+    assert len(response.services) == 2 # 1xL3NM + 1xTAPI
 
     for service in response.services:
         service_id = service.service_id
@@ -104,7 +70,6 @@ def test_service_creation(context_client : ContextClient, osm_wim : MockOSM): #
             raise Exception('Unexpected ServiceType: {:s}'.format(str_service))
 
 
-
 def test_scenario_kpi_values_created(
     monitoring_client: MonitoringClient,    # pylint: disable=redefined-outer-name
 ) -> None:
diff --git a/src/tests/ofc22/tests/test_functional_delete_service.py b/src/tests/ofc22/tests/test_functional_delete_service.py
index 1811f219acf13b5cc17daf39f1931a6f630f997b..4fffc115e6c0ea881dea637dd741f99715d28c6a 100644
--- a/src/tests/ofc22/tests/test_functional_delete_service.py
+++ b/src/tests/ofc22/tests/test_functional_delete_service.py
@@ -14,10 +14,10 @@
 
 import logging
 from common.Constants import DEFAULT_CONTEXT_NAME
-from common.proto.context_pb2 import ContextId, Empty, ServiceTypeEnum
+from common.proto.context_pb2 import ContextId, ServiceTypeEnum
 from common.tools.descriptor.Loader import DescriptorLoader
-from common.tools.object_factory.Context import json_context_id
 from common.tools.grpc.Tools import grpc_message_to_json_string
+from common.tools.object_factory.Context import json_context_id
 from context.client.ContextClient import ContextClient
 from tests.Fixtures import context_client   # pylint: disable=unused-import
 from tests.tools.mock_osm.MockOSM import MockOSM
@@ -30,44 +30,27 @@ DESCRIPTOR_FILE = 'ofc22/descriptors_emulated.json'
 ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_NAME))
 
 def test_service_removal(context_client : ContextClient, osm_wim : MockOSM): # pylint: disable=redefined-outer-name
-    # ----- List entities - Ensure service is created ------------------------------------------------------------------
-    with open(DESCRIPTOR_FILE, 'r', encoding='UTF-8') as f:
-        descriptors = f.read()
-
-    descriptor_loader = DescriptorLoader(descriptors)
-
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == descriptor_loader.num_contexts
-
-    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
-        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
-        assert len(response.topologies) == num_topologies
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == descriptor_loader.num_devices
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == descriptor_loader.num_links
+    # Ensure slices and services are created
+    response = context_client.ListSlices(ADMIN_CONTEXT_ID)
+    LOGGER.info('Slices[{:d}] = {:s}'.format(len(response.slices), grpc_message_to_json_string(response)))
+    assert len(response.slices) == 1 # OSM slice
 
-    service_uuids = set()
     response = context_client.ListServices(ADMIN_CONTEXT_ID)
     LOGGER.info('Services[{:d}] = {:s}'.format(len(response.services), grpc_message_to_json_string(response)))
-    assert len(response.services) == 2 # OLS & L3NM => (L3NM + TAPI)
+    assert len(response.services) == 2 # 1xL3NM + 1xTAPI
 
+    service_uuids = set()
     for service in response.services:
         service_id = service.service_id
-
-        if service.service_type == ServiceTypeEnum.SERVICETYPE_L3NM:
-            service_uuid = service_id.service_uuid.uuid
-            service_uuids.add(service_uuid)
-            osm_wim.conn_info[service_uuid] = {}
-
         response = context_client.ListConnections(service_id)
         LOGGER.info('  ServiceId[{:s}] => Connections[{:d}] = {:s}'.format(
             grpc_message_to_json_string(service_id), len(response.connections), grpc_message_to_json_string(response)))
 
         if service.service_type == ServiceTypeEnum.SERVICETYPE_L3NM:
             assert len(response.connections) == 1 # 1 connection per service
+            service_uuid = service_id.service_uuid.uuid
+            service_uuids.add(service_uuid)
+            osm_wim.conn_info[service_uuid] = {}
         elif service.service_type == ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE:
             assert len(response.connections) == 1 # 1 connection per service
         else:
@@ -78,34 +61,14 @@ def test_service_removal(context_client : ContextClient, osm_wim : MockOSM): # p
     assert len(service_uuids) == 1  # assume a single L3NM service has been created
     service_uuid = set(service_uuids).pop()
 
-
-    # ----- Delete Service ---------------------------------------------------------------------------------------------
+    # Delete Connectivity Service
     osm_wim.delete_connectivity_service(service_uuid)
 
-
-    # ----- List entities - Ensure service is removed ------------------------------------------------------------------
-    response = context_client.ListContexts(Empty())
-    assert len(response.contexts) == descriptor_loader.num_contexts
-
-    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
-        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
-        assert len(response.topologies) == num_topologies
-
-    response = context_client.ListDevices(Empty())
-    assert len(response.devices) == descriptor_loader.num_devices
-
-    response = context_client.ListLinks(Empty())
-    assert len(response.links) == descriptor_loader.num_links
-
-    for context_uuid, num_services in descriptor_loader.num_services.items():
-        response = context_client.ListServices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.services) == num_services
-
-    for context_uuid, num_slices in descriptor_loader.num_slices.items():
-        response = context_client.ListSlices(ContextId(**json_context_id(context_uuid)))
-        assert len(response.slices) == num_slices
-
-    # This scenario assumes no services are created beforehand
+    # Verify the scenario has no services/slices
     response = context_client.GetContext(ADMIN_CONTEXT_ID)
     assert len(response.service_ids) == 0
     assert len(response.slice_ids) == 0
+
+    # Load descriptors and validate the base scenario
+    descriptor_loader = DescriptorLoader(descriptors_file=DESCRIPTOR_FILE, context_client=context_client)
+    descriptor_loader.validate()