diff --git a/src/integration_tester/Dockerfile b/src/integration_tester/Dockerfile index 5aabc8bc89115a45b40095aa325808eaf3c4cbaf..8b92f484b6d5fc8b9db1a6d12e75afc6c557e4ef 100644 --- a/src/integration_tester/Dockerfile +++ b/src/integration_tester/Dockerfile @@ -30,5 +30,5 @@ COPY integration_tester/. integration_tester # Run integration tester ENTRYPOINT ["pytest", "-v", "--log-level=DEBUG", \ - "integration_tester/test_context_device.py" \ + "integration_tester/test_context_device_service.py" \ ] diff --git a/src/integration_tester/definitions.py b/src/integration_tester/definitions.py index ebdc3a43de438722716bf4f8d87eab3165526980..768b84cd2498f5cf7dda636d77a330c02d9837c7 100644 --- a/src/integration_tester/definitions.py +++ b/src/integration_tester/definitions.py @@ -1,92 +1,148 @@ -from common.database.api.context.OperationalStatus import OperationalStatus +from common.database.api.context.Constants import DEFAULT_CONTEXT_ID, DEFAULT_TOPOLOGY_ID +from common.database.api.context.service.ServiceState import ServiceState +from common.database.api.context.service.ServiceType import ServiceType +from common.database.api.context.topology.device.OperationalStatus import OperationalStatus -TOPOLOGY_ID = { - 'contextId': {'contextUuid': {'uuid': 'admin'}}, - 'topoId': {'uuid': 'admin'} -} +CONTEXT_ID = {'contextUuid': {'uuid': DEFAULT_CONTEXT_ID}} + +TOPOLOGY_ID = {'contextId': CONTEXT_ID, 'topoId': {'uuid': DEFAULT_TOPOLOGY_ID}} DEVICE_ID_DEV1 = {'device_id': {'uuid': 'dev1'}} DEVICE_DEV1 = { - 'device_id': {'device_id': {'uuid': 'dev1'}}, 'device_type': 'ROADM', 'device_config': {'device_config': '<config/>'}, + 'device_id': DEVICE_ID_DEV1, 'device_type': 'ROADM', 'device_config': {'device_config': '<config/>'}, 'devOperationalStatus': OperationalStatus.ENABLED.value, 'endpointList' : [ - {'port_id': {'topoId': TOPOLOGY_ID, 'dev_id': {'device_id': {'uuid': 'dev1'}}, 'port_id': {'uuid' : 'to-dev2'}}, 'port_type': 'WDM'}, - {'port_id': {'topoId': TOPOLOGY_ID, 'dev_id': {'device_id': {'uuid': 'dev1'}}, 'port_id': {'uuid' : 'to-dev3'}}, 'port_type': 'WDM'}, + {'port_id': {'topoId': TOPOLOGY_ID, 'dev_id': DEVICE_ID_DEV1, 'port_id': {'uuid' : 'port2'}}, 'port_type': 'WDM'}, + {'port_id': {'topoId': TOPOLOGY_ID, 'dev_id': DEVICE_ID_DEV1, 'port_id': {'uuid' : 'port3'}}, 'port_type': 'WDM'}, + {'port_id': {'topoId': TOPOLOGY_ID, 'dev_id': DEVICE_ID_DEV1, 'port_id': {'uuid' : 'port101'}}, 'port_type': 'OCH'}, + {'port_id': {'topoId': TOPOLOGY_ID, 'dev_id': DEVICE_ID_DEV1, 'port_id': {'uuid' : 'port102'}}, 'port_type': 'OCH'}, + {'port_id': {'topoId': TOPOLOGY_ID, 'dev_id': DEVICE_ID_DEV1, 'port_id': {'uuid' : 'port103'}}, 'port_type': 'OCH'}, ] } DEVICE_ID_DEV2 = {'device_id': {'uuid': 'dev2'}} DEVICE_DEV2 = { - 'device_id': {'device_id': {'uuid': 'dev2'}}, 'device_type': 'ROADM', 'device_config': {'device_config': '<config/>'}, + 'device_id': DEVICE_ID_DEV2, 'device_type': 'ROADM', 'device_config': {'device_config': '<config/>'}, 'devOperationalStatus': OperationalStatus.ENABLED.value, 'endpointList' : [ - {'port_id': {'topoId': TOPOLOGY_ID, 'dev_id': {'device_id': {'uuid': 'dev2'}}, 'port_id': {'uuid' : 'to-dev1'}}, 'port_type': 'WDM'}, - {'port_id': {'topoId': TOPOLOGY_ID, 'dev_id': {'device_id': {'uuid': 'dev2'}}, 'port_id': {'uuid' : 'to-dev3'}}, 'port_type': 'WDM'}, + {'port_id': {'topoId': TOPOLOGY_ID, 'dev_id': DEVICE_ID_DEV2, 'port_id': {'uuid' : 'port1'}}, 'port_type': 'WDM'}, + {'port_id': {'topoId': TOPOLOGY_ID, 'dev_id': DEVICE_ID_DEV2, 'port_id': {'uuid' : 'port3'}}, 'port_type': 'WDM'}, + {'port_id': {'topoId': TOPOLOGY_ID, 'dev_id': DEVICE_ID_DEV2, 'port_id': {'uuid' : 'port101'}}, 'port_type': 'OCH'}, + {'port_id': {'topoId': TOPOLOGY_ID, 'dev_id': DEVICE_ID_DEV2, 'port_id': {'uuid' : 'port102'}}, 'port_type': 'OCH'}, + {'port_id': {'topoId': TOPOLOGY_ID, 'dev_id': DEVICE_ID_DEV2, 'port_id': {'uuid' : 'port103'}}, 'port_type': 'OCH'}, ] } DEVICE_ID_DEV3 = {'device_id': {'uuid': 'dev3'}} DEVICE_DEV3 = { - 'device_id': {'device_id': {'uuid': 'dev3'}}, + 'device_id': DEVICE_ID_DEV3, 'device_type': 'ROADM', 'device_config': {'device_config': '<config/>'}, 'devOperationalStatus': OperationalStatus.ENABLED.value, 'endpointList' : [ - {'port_id': {'topoId': TOPOLOGY_ID, 'dev_id': {'device_id': {'uuid': 'dev3'}}, 'port_id': {'uuid' : 'to-dev1'}}, 'port_type': 'WDM'}, - {'port_id': {'topoId': TOPOLOGY_ID, 'dev_id': {'device_id': {'uuid': 'dev3'}}, 'port_id': {'uuid' : 'to-dev2'}}, 'port_type': 'WDM'}, + {'port_id': {'topoId': TOPOLOGY_ID, 'dev_id': DEVICE_ID_DEV3, 'port_id': {'uuid' : 'port1'}}, 'port_type': 'WDM'}, + {'port_id': {'topoId': TOPOLOGY_ID, 'dev_id': DEVICE_ID_DEV3, 'port_id': {'uuid' : 'port2'}}, 'port_type': 'WDM'}, + {'port_id': {'topoId': TOPOLOGY_ID, 'dev_id': DEVICE_ID_DEV3, 'port_id': {'uuid' : 'port101'}}, 'port_type': 'OCH'}, + {'port_id': {'topoId': TOPOLOGY_ID, 'dev_id': DEVICE_ID_DEV3, 'port_id': {'uuid' : 'port102'}}, 'port_type': 'OCH'}, + {'port_id': {'topoId': TOPOLOGY_ID, 'dev_id': DEVICE_ID_DEV3, 'port_id': {'uuid' : 'port103'}}, 'port_type': 'OCH'}, ] } -LINK_ID_DEV1_DEV2 = {'link_id': {'uuid': 'dev1/to-dev2 ==> dev2/to-dev1'}} +LINK_ID_DEV1_DEV2 = {'link_id': {'uuid': 'dev1/port2 ==> dev2/port1'}} LINK_DEV1_DEV2 = { - 'link_id': {'link_id': {'uuid': 'dev1/to-dev2 ==> dev2/to-dev1'}}, + 'link_id': LINK_ID_DEV1_DEV2, 'endpointList' : [ - {'topoId': TOPOLOGY_ID, 'dev_id': {'device_id': {'uuid': 'dev1'}}, 'port_id': {'uuid' : 'to-dev2'}}, - {'topoId': TOPOLOGY_ID, 'dev_id': {'device_id': {'uuid': 'dev2'}}, 'port_id': {'uuid' : 'to-dev1'}}, + {'topoId': TOPOLOGY_ID, 'dev_id': DEVICE_ID_DEV1, 'port_id': {'uuid' : 'port2'}}, + {'topoId': TOPOLOGY_ID, 'dev_id': DEVICE_ID_DEV2, 'port_id': {'uuid' : 'port1'}}, ] } -LINK_ID_DEV1_DEV3 = {'link_id': {'uuid': 'dev1/to-dev3 ==> dev3/to-dev1'}} +LINK_ID_DEV1_DEV3 = {'link_id': {'uuid': 'dev1/port3 ==> dev3/port1'}} LINK_DEV1_DEV3 = { - 'link_id': {'link_id': {'uuid': 'dev1/to-dev3 ==> dev3/to-dev1'}}, + 'link_id': LINK_ID_DEV1_DEV3, 'endpointList' : [ - {'topoId': TOPOLOGY_ID, 'dev_id': {'device_id': {'uuid': 'dev1'}}, 'port_id': {'uuid' : 'to-dev3'}}, - {'topoId': TOPOLOGY_ID, 'dev_id': {'device_id': {'uuid': 'dev3'}}, 'port_id': {'uuid' : 'to-dev1'}}, + {'topoId': TOPOLOGY_ID, 'dev_id': DEVICE_ID_DEV1, 'port_id': {'uuid' : 'port3'}}, + {'topoId': TOPOLOGY_ID, 'dev_id': DEVICE_ID_DEV3, 'port_id': {'uuid' : 'port1'}}, ] } -LINK_ID_DEV2_DEV1 = {'link_id': {'uuid': 'dev2/to-dev1 ==> dev1/to-dev2'}} +LINK_ID_DEV2_DEV1 = {'link_id': {'uuid': 'dev2/port1 ==> dev1/port2'}} LINK_DEV2_DEV1 = { - 'link_id': {'link_id': {'uuid': 'dev2/to-dev1 ==> dev1/to-dev2'}}, + 'link_id': LINK_ID_DEV2_DEV1, 'endpointList' : [ - {'topoId': TOPOLOGY_ID, 'dev_id': {'device_id': {'uuid': 'dev2'}}, 'port_id': {'uuid' : 'to-dev1'}}, - {'topoId': TOPOLOGY_ID, 'dev_id': {'device_id': {'uuid': 'dev1'}}, 'port_id': {'uuid' : 'to-dev2'}}, + {'topoId': TOPOLOGY_ID, 'dev_id': DEVICE_ID_DEV2, 'port_id': {'uuid' : 'port1'}}, + {'topoId': TOPOLOGY_ID, 'dev_id': DEVICE_ID_DEV1, 'port_id': {'uuid' : 'port2'}}, ] } -LINK_ID_DEV2_DEV3 = {'link_id': {'uuid': 'dev2/to-dev3 ==> dev3/to-dev2'}} +LINK_ID_DEV2_DEV3 = {'link_id': {'uuid': 'dev2/port3 ==> dev3/port2'}} LINK_DEV2_DEV3 = { - 'link_id': {'link_id': {'uuid': 'dev2/to-dev3 ==> dev3/to-dev2'}}, + 'link_id': LINK_ID_DEV2_DEV3, 'endpointList' : [ - {'topoId': TOPOLOGY_ID, 'dev_id': {'device_id': {'uuid': 'dev2'}}, 'port_id': {'uuid' : 'to-dev3'}}, - {'topoId': TOPOLOGY_ID, 'dev_id': {'device_id': {'uuid': 'dev3'}}, 'port_id': {'uuid' : 'to-dev2'}}, + {'topoId': TOPOLOGY_ID, 'dev_id': DEVICE_ID_DEV2, 'port_id': {'uuid' : 'port3'}}, + {'topoId': TOPOLOGY_ID, 'dev_id': DEVICE_ID_DEV3, 'port_id': {'uuid' : 'port2'}}, ] } -LINK_ID_DEV3_DEV1 = {'link_id': {'uuid': 'dev3/to-dev1 ==> dev1/to-dev3'}} +LINK_ID_DEV3_DEV1 = {'link_id': {'uuid': 'dev3/port1 ==> dev1/port3'}} LINK_DEV3_DEV1 = { - 'link_id': {'link_id': {'uuid': 'dev3/to-dev1 ==> dev1/to-dev3'}}, + 'link_id': LINK_ID_DEV3_DEV1, 'endpointList' : [ - {'topoId': TOPOLOGY_ID, 'dev_id': {'device_id': {'uuid': 'dev3'}}, 'port_id': {'uuid' : 'to-dev1'}}, - {'topoId': TOPOLOGY_ID, 'dev_id': {'device_id': {'uuid': 'dev1'}}, 'port_id': {'uuid' : 'to-dev3'}}, + {'topoId': TOPOLOGY_ID, 'dev_id': DEVICE_ID_DEV3, 'port_id': {'uuid' : 'port1'}}, + {'topoId': TOPOLOGY_ID, 'dev_id': DEVICE_ID_DEV1, 'port_id': {'uuid' : 'port3'}}, ] } -LINK_ID_DEV3_DEV2 = {'link_id': {'uuid': 'dev3/to-dev2 ==> dev2/to-dev3'}} +LINK_ID_DEV3_DEV2 = {'link_id': {'uuid': 'dev3/port2 ==> dev2/port3'}} LINK_DEV3_DEV2 = { - 'link_id': {'link_id': {'uuid': 'dev3/to-dev2 ==> dev2/to-dev3'}}, + 'link_id': LINK_ID_DEV3_DEV2, + 'endpointList' : [ + {'topoId': TOPOLOGY_ID, 'dev_id': DEVICE_ID_DEV3, 'port_id': {'uuid' : 'port2'}}, + {'topoId': TOPOLOGY_ID, 'dev_id': DEVICE_ID_DEV2, 'port_id': {'uuid' : 'port3'}}, + ] +} + +SERVICE_ID_SVC1 = {'contextId': CONTEXT_ID, 'cs_id': {'uuid': 'svc1'}} +SERVICE_SVC1 = { + 'cs_id': SERVICE_ID_SVC1, 'serviceType': ServiceType.L3NM.value, 'serviceConfig': {'serviceConfig': '<config/>'}, + 'serviceState': {'serviceState': ServiceState.PLANNED.value}, + 'constraint': [ + {'constraint_type': 'latency_ms', 'constraint_value': '100'}, + {'constraint_type': 'hops', 'constraint_value': '5'}, + ], + 'endpointList' : [ + {'topoId': TOPOLOGY_ID, 'dev_id': DEVICE_ID_DEV1, 'port_id': {'uuid' : 'port101'}}, + {'topoId': TOPOLOGY_ID, 'dev_id': DEVICE_ID_DEV2, 'port_id': {'uuid' : 'port101'}}, + {'topoId': TOPOLOGY_ID, 'dev_id': DEVICE_ID_DEV3, 'port_id': {'uuid' : 'port101'}}, + ] +} + +SERVICE_ID_SVC2 = {'contextId': CONTEXT_ID, 'cs_id': {'uuid': 'svc2'}} +SERVICE_SVC2 = { + 'cs_id': SERVICE_ID_SVC2, 'serviceType': ServiceType.L3NM.value, 'serviceConfig': {'serviceConfig': '<config/>'}, + 'serviceState': {'serviceState': ServiceState.PLANNED.value}, + 'constraint': [ + {'constraint_type': 'latency_ms', 'constraint_value': '100'}, + {'constraint_type': 'hops', 'constraint_value': '5'}, + ], + 'endpointList' : [ + {'topoId': TOPOLOGY_ID, 'dev_id': DEVICE_ID_DEV1, 'port_id': {'uuid' : 'port102'}}, + {'topoId': TOPOLOGY_ID, 'dev_id': DEVICE_ID_DEV2, 'port_id': {'uuid' : 'port102'}}, + {'topoId': TOPOLOGY_ID, 'dev_id': DEVICE_ID_DEV3, 'port_id': {'uuid' : 'port102'}}, + ] +} + +SERVICE_ID_SVC3 = {'contextId': CONTEXT_ID, 'cs_id': {'uuid': 'svc3'}} +SERVICE_SVC3 = { + 'cs_id': SERVICE_ID_SVC3, 'serviceType': ServiceType.L3NM.value, 'serviceConfig': {'serviceConfig': '<config/>'}, + 'serviceState': {'serviceState': ServiceState.PLANNED.value}, + 'constraint': [ + {'constraint_type': 'latency_ms', 'constraint_value': '100'}, + {'constraint_type': 'hops', 'constraint_value': '5'}, + ], 'endpointList' : [ - {'topoId': TOPOLOGY_ID, 'dev_id': {'device_id': {'uuid': 'dev3'}}, 'port_id': {'uuid' : 'to-dev2'}}, - {'topoId': TOPOLOGY_ID, 'dev_id': {'device_id': {'uuid': 'dev2'}}, 'port_id': {'uuid' : 'to-dev3'}}, + {'topoId': TOPOLOGY_ID, 'dev_id': DEVICE_ID_DEV1, 'port_id': {'uuid' : 'port103'}}, + {'topoId': TOPOLOGY_ID, 'dev_id': DEVICE_ID_DEV2, 'port_id': {'uuid' : 'port103'}}, + {'topoId': TOPOLOGY_ID, 'dev_id': DEVICE_ID_DEV3, 'port_id': {'uuid' : 'port103'}}, ] } diff --git a/src/integration_tester/test_context_device.py b/src/integration_tester/test_context_device_service.py similarity index 67% rename from src/integration_tester/test_context_device.py rename to src/integration_tester/test_context_device_service.py index 7c101f17dea8847de4e5579ffce28b3318586f9f..4f3cf4cfe4db6df6df8afd9c3e581a356abb873b 100644 --- a/src/integration_tester/test_context_device.py +++ b/src/integration_tester/test_context_device_service.py @@ -2,13 +2,18 @@ import logging, os, pytest from google.protobuf.json_format import MessageToDict from common.database.Factory import get_database, DatabaseEngineEnum from common.database.api.Database import Database -from common.tests.Assertions import validate_device_id, validate_link_id, validate_topology_has_devices, \ - validate_topology_has_links, validate_topology_is_empty +from common.tests.Assertions import validate_device_id, validate_link_id, validate_service_id, \ + validate_service_list_is_not_empty, validate_topology_has_devices, validate_topology_has_links, \ + validate_topology_is_empty from context.client.ContextClient import ContextClient from context.proto.context_pb2 import Device, Empty, Link from device.client.DeviceClient import DeviceClient -from .definitions import DEVICE_DEV1, DEVICE_DEV2, DEVICE_DEV3, LINK_DEV1_DEV2, LINK_DEV1_DEV3, LINK_DEV2_DEV1, \ - LINK_DEV2_DEV3, LINK_DEV3_DEV1, LINK_DEV3_DEV2 +from integration_tester.definitions import DEVICE_DEV1, DEVICE_DEV2, DEVICE_DEV3 +from integration_tester.definitions import LINK_DEV1_DEV2, LINK_DEV1_DEV3, LINK_DEV2_DEV1, LINK_DEV2_DEV3, \ + LINK_DEV3_DEV1, LINK_DEV3_DEV2 +from integration_tester.definitions import SERVICE_SVC1, SERVICE_SVC2, SERVICE_SVC3 +from service.client.ServiceClient import ServiceClient +from service.proto.service_pb2 import Service LOGGER = logging.getLogger(__name__) LOGGER.setLevel(logging.DEBUG) @@ -39,6 +44,14 @@ def device_client(): yield _client _client.close() +@pytest.fixture(scope='session') +def service_client(): + service_host = get_setting('SERVICESERVICE_SERVICE_HOST') + service_port = get_setting('SERVICESERVICE_SERVICE_PORT_GRPC') + _client = ServiceClient(address=service_host, port=service_port) + yield _client + _client.close() + def test_clean_database(redis_database : Database): # should work redis_database.clear_all() @@ -77,3 +90,17 @@ def test_add_links(context_client : ContextClient): context_client.GetTopology(Empty()), including_default_value_fields=True, preserving_proto_field_name=True, use_integers_for_enums=False)) + +def test_add_services(service_client : ServiceClient): + # should work + for service in [SERVICE_SVC1, SERVICE_SVC2, SERVICE_SVC3]: + validate_service_id(MessageToDict( + service_client.CreateService(Service(**service)), + including_default_value_fields=True, preserving_proto_field_name=True, + use_integers_for_enums=False)) + + # should work + validate_service_list_is_not_empty(MessageToDict( + service_client.GetServiceList(Empty()), + including_default_value_fields=True, preserving_proto_field_name=True, + use_integers_for_enums=False)) diff --git a/src/service/service/Tools.py b/src/service/service/Tools.py index f7d9bd9fe596f871e2d80466e711dafa64042e3f..71d4799e3d4801b996a0a0996987de265d304697 100644 --- a/src/service/service/Tools.py +++ b/src/service/service/Tools.py @@ -156,8 +156,6 @@ def check_device_endpoint_exists( raise ServiceException(grpc.StatusCode.NOT_FOUND, msg) db_context = database.context(context_id) - print('db_context.topologies', str(db_context.topologies.get())) - if not db_context.topologies.contains(topology_id): msg = 'Context({})/Topology({}) in {} does not exist in the database.' msg = msg.format(context_id, topology_id, parent_name)