Commit 0066c66f authored by Lluis Gifre Renom's avatar Lluis Gifre Renom
Browse files

Tests:

- updated tests according to corrected load scenario tool
- updated benchmark/policy/tests
- updated ecoc22/tests
- updated ofc22/tests
parent 57bfda9d
Loading
Loading
Loading
Loading
+13 −32
Original line number Original line Diff line number Diff line
@@ -13,10 +13,10 @@
# limitations under the License.
# limitations under the License.


import logging, time
import logging, time
from common.Constants import DEFAULT_CONTEXT_NAME
from common.proto.context_pb2 import ContextId, Empty
from common.proto.context_pb2 import ContextId, Empty
from common.proto.monitoring_pb2 import KpiDescriptorList
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.grpc.Tools import grpc_message_to_json_string
from common.tools.object_factory.Context import json_context_id
from common.tools.object_factory.Context import json_context_id
from context.client.ContextClient import ContextClient
from context.client.ContextClient import ContextClient
from device.client.DeviceClient import DeviceClient
from device.client.DeviceClient import DeviceClient
@@ -27,44 +27,25 @@ LOGGER = logging.getLogger(__name__)
LOGGER.setLevel(logging.DEBUG)
LOGGER.setLevel(logging.DEBUG)


DESCRIPTOR_FILE = 'ofc22/descriptors_emulated.json'
DESCRIPTOR_FILE = 'ofc22/descriptors_emulated.json'
ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_NAME))


def test_scenario_bootstrap(
def test_scenario_bootstrap(
    context_client : ContextClient, # pylint: disable=redefined-outer-name
    context_client : ContextClient, # pylint: disable=redefined-outer-name
    device_client : DeviceClient,   # pylint: disable=redefined-outer-name
    device_client : DeviceClient,   # pylint: disable=redefined-outer-name
) -> None:
) -> None:
    # ----- List entities - Ensure database is empty -------------------------------------------------------------------
    validate_empty_scenario(context_client)
    response = context_client.ListContexts(Empty())
    assert len(response.contexts) == 0


    response = context_client.ListDevices(Empty())
    descriptor_loader = DescriptorLoader(
    assert len(response.devices) == 0
        descriptors_file=DESCRIPTOR_FILE, context_client=context_client, device_client=device_client)

    results = descriptor_loader.process()
    response = context_client.ListLinks(Empty())
    check_descriptor_load_results(results, descriptor_loader)
    assert len(response.links) == 0
    descriptor_loader.validate()


    # ----- 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())
    # Verify the scenario has no services/slices
    assert len(response.links) == descriptor_loader.num_links
    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(
def test_scenario_kpis_created(
    context_client : ContextClient,         # pylint: disable=redefined-outer-name
    context_client : ContextClient,         # pylint: disable=redefined-outer-name
+16 −52
Original line number Original line Diff line number Diff line
@@ -13,9 +13,10 @@
# limitations under the License.
# limitations under the License.


import logging
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.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 context.client.ContextClient import ContextClient
from device.client.DeviceClient import DeviceClient
from device.client.DeviceClient import DeviceClient
from tests.Fixtures import context_client, device_client    # pylint: disable=unused-import
from tests.Fixtures import context_client, device_client    # pylint: disable=unused-import
@@ -24,57 +25,20 @@ LOGGER = logging.getLogger(__name__)
LOGGER.setLevel(logging.DEBUG)
LOGGER.setLevel(logging.DEBUG)


DESCRIPTOR_FILE = 'ofc22/descriptors_emulated.json'
DESCRIPTOR_FILE = 'ofc22/descriptors_emulated.json'
ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_NAME))



def test_scenario_cleanup(
def test_services_removed(
    context_client : ContextClient, # pylint: disable=redefined-outer-name
    context_client : ContextClient, # pylint: disable=redefined-outer-name
    device_client : DeviceClient,   # pylint: disable=redefined-outer-name
    device_client : DeviceClient,   # pylint: disable=redefined-outer-name
) -> None:
) -> None:
    # ----- List entities - Ensure service is removed ------------------------------------------------------------------
    # Verify the scenario has no services/slices
    with open(DESCRIPTOR_FILE, 'r', encoding='UTF-8') as f:
    response = context_client.GetContext(ADMIN_CONTEXT_ID)
        descriptors = f.read()
    assert len(response.service_ids) == 0

    assert len(response.slice_ids) == 0
    descriptor_loader = DescriptorLoader(descriptors)


    # Load descriptors and validate the base scenario
    response = context_client.ListContexts(Empty())
    descriptor_loader = DescriptorLoader(
    assert len(response.contexts) == descriptor_loader.num_contexts
        descriptors_file=DESCRIPTOR_FILE, context_client=context_client, device_client=device_client)

    descriptor_loader.validate()
    for context_uuid, num_topologies in descriptor_loader.num_topologies.items():
    descriptor_loader.unload()
        response = context_client.ListTopologies(ContextId(**json_context_id(context_uuid)))
    validate_empty_scenario(context_client)
        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
+35 −57
Original line number Original line Diff line number Diff line
@@ -13,15 +13,15 @@
# limitations under the License.
# limitations under the License.


import logging, random
import logging, random
from common.DeviceTypes import DeviceTypeEnum
from common.Constants import DEFAULT_CONTEXT_NAME
from common.proto.context_pb2 import ContextId, Empty
from common.proto.context_pb2 import ContextId, Empty, ServiceTypeEnum
from common.proto.kpi_sample_types_pb2 import KpiSampleType
from common.proto.kpi_sample_types_pb2 import KpiSampleType
from common.tools.descriptor.Loader import DescriptorLoader
from common.tools.descriptor.Loader import DescriptorLoader
from common.tools.grpc.Tools import grpc_message_to_json_string
from common.tools.grpc.Tools import grpc_message_to_json_string
from common.tools.object_factory.Context import json_context_id
from common.tools.object_factory.Context import json_context_id
from context.client.ContextClient import ContextClient
from context.client.ContextClient import ContextClient
from monitoring.client.MonitoringClient import MonitoringClient
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 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
from .Objects import WIM_SERVICE_CONNECTION_POINTS, WIM_SERVICE_TYPE
@@ -29,67 +29,45 @@ from .Objects import WIM_SERVICE_CONNECTION_POINTS, WIM_SERVICE_TYPE
LOGGER = logging.getLogger(__name__)
LOGGER = logging.getLogger(__name__)
LOGGER.setLevel(logging.DEBUG)
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'
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
def test_service_creation(context_client : ContextClient, osm_wim : MockOSM): # pylint: disable=redefined-outer-name
    # ----- List entities - Ensure scenario is ready -------------------------------------------------------------------
    # Load descriptors and validate the base scenario
    with open(DESCRIPTOR_FILE, 'r', encoding='UTF-8') as f:
    descriptor_loader = DescriptorLoader(descriptors_file=DESCRIPTOR_FILE, context_client=context_client)
        descriptors = f.read()
    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) == 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


    # ----- Create Service ---------------------------------------------------------------------------------------------
    # Create Connectivity Service
    service_uuid = osm_wim.create_connectivity_service(WIM_SERVICE_TYPE, WIM_SERVICE_CONNECTION_POINTS)
    service_uuid = osm_wim.create_connectivity_service(WIM_SERVICE_TYPE, WIM_SERVICE_CONNECTION_POINTS)
    osm_wim.get_connectivity_service_status(service_uuid)
    osm_wim.get_connectivity_service_status(service_uuid)


    # 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


    # ----- List entities - Ensure service is created ------------------------------------------------------------------
    response = context_client.ListServices(ADMIN_CONTEXT_ID)
    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)))
    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)
    assert len(response.services) == 2 # 1xL3NM + 1xTAPI


    for service in response.services:
    for service in response.services:
        service_id = service.service_id
        service_id = service.service_id
        response = context_client.ListConnections(service_id)
        response = context_client.ListConnections(service_id)
        LOGGER.info('  ServiceId[{:s}] => Connections[{:d}] = {:s}'.format(
        LOGGER.info('  ServiceId[{:s}] => Connections[{:d}] = {:s}'.format(
                grpc_message_to_json_string(service_id), len(response.connections),
            grpc_message_to_json_string(service_id), len(response.connections), grpc_message_to_json_string(response)))
                grpc_message_to_json_string(response)))

            assert len(response.connections) == 1 # one connection per service
        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(
def test_scenario_kpi_values_created(
+33 −58
Original line number Original line Diff line number Diff line
@@ -14,86 +14,61 @@


import logging
import logging
from common.Constants import DEFAULT_CONTEXT_NAME
from common.Constants import DEFAULT_CONTEXT_NAME
from common.DeviceTypes import DeviceTypeEnum
from common.proto.context_pb2 import ContextId, ServiceTypeEnum
from common.proto.context_pb2 import ContextId, Empty, ServiceTypeEnum
from common.tools.descriptor.Loader import DescriptorLoader
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.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 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 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 = logging.getLogger(__name__)
LOGGER.setLevel(logging.DEBUG)
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'
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
def test_service_removal(context_client : ContextClient, osm_wim : MockOSM): # pylint: disable=redefined-outer-name
    # ----- List entities - Ensure service is created ------------------------------------------------------------------
    # Ensure slices and services are created
    with open(DESCRIPTOR_FILE, 'r', encoding='UTF-8') as f:
    response = context_client.ListSlices(ADMIN_CONTEXT_ID)
        descriptors = f.read()
    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())
    service_uuids = set()
    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)
    for service in response.services:
    for service in response.services:
        service_id = service.service_id
        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:
        if service.service_type == ServiceTypeEnum.SERVICETYPE_L3NM:
            assert len(response.connections) == 1 # 1 connection per service
            service_uuid = service_id.service_uuid.uuid
            service_uuid = service_id.service_uuid.uuid
            l3nm_service_uuids.add(service_uuid)
            service_uuids.add(service_uuid)
            osm_wim.conn_info[service_uuid] = {}
            osm_wim.conn_info[service_uuid] = {}

        elif service.service_type == ServiceTypeEnum.SERVICETYPE_TAPI_CONNECTIVITY_SERVICE:
        response = context_client.ListConnections(service_id)
            assert len(response.connections) == 1 # 1 connection per service
        LOGGER.info('  ServiceId[{:s}] => Connections[{:d}] = {:s}'.format(
        else:
            grpc_message_to_json_string(service_id), len(response.connections),
            str_service = grpc_message_to_json_string(service)
            grpc_message_to_json_string(response)))
            raise Exception('Unexpected ServiceType: {:s}'.format(str_service))
        assert len(response.connections) == 1 # one connection per service


    # Identify service to delete
    # Identify service to delete
    assert len(l3nm_service_uuids) == 1  # assume a single L3NM service has been created
    assert len(service_uuids) == 1  # assume a single L3NM service has been created
    l3nm_service_uuid = set(l3nm_service_uuids).pop()
    service_uuid = set(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


    response = context_client.ListDevices(Empty())
    # Delete Connectivity Service
    assert len(response.devices) == descriptor_loader.num_devices
    osm_wim.delete_connectivity_service(service_uuid)


    response = context_client.ListLinks(Empty())
    # Verify the scenario has no services/slices
    assert len(response.links) == descriptor_loader.num_links
    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():
    # Load descriptors and validate the base scenario
        response = context_client.ListServices(ContextId(**json_context_id(context_uuid)))
    descriptor_loader = DescriptorLoader(descriptors_file=DESCRIPTOR_FILE, context_client=context_client)
        assert len(response.services) == 0
    descriptor_loader.validate()
+9 −39
Original line number Original line Diff line number Diff line
@@ -14,8 +14,8 @@


import logging
import logging
from common.Constants import DEFAULT_CONTEXT_NAME
from common.Constants import DEFAULT_CONTEXT_NAME
from common.proto.context_pb2 import ContextId, Empty
from common.proto.context_pb2 import ContextId
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 common.tools.object_factory.Context import json_context_id
from context.client.ContextClient import ContextClient
from context.client.ContextClient import ContextClient
from device.client.DeviceClient import DeviceClient
from device.client.DeviceClient import DeviceClient
@@ -31,45 +31,15 @@ def test_scenario_bootstrap(
    context_client : ContextClient, # pylint: disable=redefined-outer-name
    context_client : ContextClient, # pylint: disable=redefined-outer-name
    device_client : DeviceClient,   # pylint: disable=redefined-outer-name
    device_client : DeviceClient,   # pylint: disable=redefined-outer-name
) -> None:
) -> None:
    # ----- List entities - Ensure database is empty -------------------------------------------------------------------
    validate_empty_scenario(context_client)
    response = context_client.ListContexts(Empty())
    assert len(response.contexts) == 0


    response = context_client.ListDevices(Empty())
    descriptor_loader = DescriptorLoader(
    assert len(response.devices) == 0
        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())
    # Verify the scenario has no services/slices
    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
    response = context_client.GetContext(ADMIN_CONTEXT_ID)
    response = context_client.GetContext(ADMIN_CONTEXT_ID)
    assert len(response.service_ids) == 0
    assert len(response.service_ids) == 0
    assert len(response.slice_ids) == 0
    assert len(response.slice_ids) == 0
Loading