diff --git a/src/tests/eucnc24/tests/test_functional_service_ietf.py b/src/tests/eucnc24/tests/test_functional_service_ietf.py index a54084c579414d7b4df44a0b7ef313d3f091f7c1..4b9e69bb04869759afa7533e8f4f90f1d7ce2ab9 100644 --- a/src/tests/eucnc24/tests/test_functional_service_ietf.py +++ b/src/tests/eucnc24/tests/test_functional_service_ietf.py @@ -16,18 +16,11 @@ import json, logging, os, pytest from typing import Dict from common.Constants import DEFAULT_CONTEXT_NAME from common.proto.context_pb2 import ContextId, ServiceStatusEnum, ServiceTypeEnum -from common.tools.descriptor.Loader import ( - DescriptorLoader, check_descriptor_load_results -) 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 device.client.DeviceClient import DeviceClient -from service.client.ServiceClient import ServiceClient -from tests.Fixtures import context_client, device_client, service_client # pylint: disable=unused-import -from .Tools import ( - do_rest_delete_request, do_rest_get_request, do_rest_post_request, -) +from tests.Fixtures import context_client # pylint: disable=unused-import +from .Tools import do_rest_delete_request, do_rest_get_request, do_rest_post_request LOGGER = logging.getLogger(__name__) @@ -41,10 +34,8 @@ def storage() -> Dict: yield dict() # pylint: disable=redefined-outer-name, unused-argument -def test_service_creation_ietf( +def test_service_ietf_creation( context_client : ContextClient, - device_client : DeviceClient, - service_client : ServiceClient, storage : Dict ): # Issue service creation request @@ -52,7 +43,8 @@ def test_service_creation_ietf( svc1_data = json.load(f) URL = '/restconf/data/ietf-l3vpn-svc:l3vpn-svc/vpn-services' do_rest_post_request(URL, body=svc1_data, logger=LOGGER, expected_status_codes={201}) - storage['svc-uuid'] = svc1_data['ietf-l3vpn-svc:l3vpn-svc']['vpn-services']['vpn-service'][0]['vpn-id'] + service_uuid = svc1_data['ietf-l3vpn-svc:l3vpn-svc']['vpn-services']['vpn-service'][0]['vpn-id'] + storage['svc-uuid'] = service_uuid # Verify service was created response = context_client.GetContext(ADMIN_CONTEXT_ID) @@ -68,6 +60,7 @@ def test_service_creation_ietf( for service in response.services: service_id = service.service_id + assert service_id.service_uuid.uuid == service_uuid assert service.service_status.service_status == ServiceStatusEnum.SERVICESTATUS_ACTIVE assert service.service_type == ServiceTypeEnum.SERVICETYPE_L3NM @@ -80,61 +73,35 @@ def test_service_creation_ietf( # pylint: disable=redefined-outer-name, unused-argument -def test_get_state_svc1(storage : Dict): - assert 'svc-uuid' in storage - service_uuid = storage['svc-uuid'] - URL = '/restconf/data/ietf-l3vpn-svc:l3vpn-svc/vpn-services/vpn-service={:s}/'.format(service_uuid) - do_rest_get_request(URL, logger=LOGGER, expected_status_codes={200}) +def test_service_ietf_retrieval( + context_client : ContextClient, # pylint: disable=redefined-outer-name + storage : Dict +): + # Verify the scenario has 1 service and 0 slices + response = context_client.GetContext(ADMIN_CONTEXT_ID) + assert len(response.service_ids) == 1 + assert len(response.slice_ids) == 0 + + # Check there are no slices + response = context_client.ListSlices(ADMIN_CONTEXT_ID) + LOGGER.warning('Slices[{:d}] = {:s}'.format(len(response.slices), grpc_message_to_json_string(response))) + assert len(response.slices) == 0 + + # Check there is 1 service + response = context_client.ListServices(ADMIN_CONTEXT_ID) + LOGGER.warning('Services[{:d}] = {:s}'.format(len(response.services), grpc_message_to_json_string(response))) + assert len(response.services) == 1 -# pylint: disable=redefined-outer-name, unused-argument -def test_delete_svc1(storage : Dict): assert 'svc-uuid' in storage service_uuid = storage['svc-uuid'] URL = '/restconf/data/ietf-l3vpn-svc:l3vpn-svc/vpn-services/vpn-service={:s}/'.format(service_uuid) - do_rest_delete_request(URL, logger=LOGGER, expected_status_codes={204}) - - - - - - - - - - -# Copyright 2022-2024 ETSI OSG/SDG TeraFlowSDN (TFS) (https://tfs.etsi.org/) -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -import logging -from typing import Set, Tuple -from common.Constants import DEFAULT_CONTEXT_NAME -from common.proto.context_pb2 import ContextId, ServiceId, ServiceStatusEnum, ServiceTypeEnum -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.Service import json_service_id -from context.client.ContextClient import ContextClient -from service.client.ServiceClient import ServiceClient -from tests.Fixtures import context_client, service_client # pylint: disable=unused-import - -LOGGER = logging.getLogger(__name__) -LOGGER.setLevel(logging.DEBUG) + do_rest_get_request(URL, logger=LOGGER, expected_status_codes={200}) -ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_NAME)) -def test_service_removal_bidir( +# pylint: disable=redefined-outer-name, unused-argument +def test_service_ietf_removal( context_client : ContextClient, # pylint: disable=redefined-outer-name - service_client : ServiceClient, # pylint: disable=redefined-outer-name + storage : Dict ): # Verify the scenario has 1 service and 0 slices response = context_client.GetContext(ADMIN_CONTEXT_ID) @@ -151,30 +118,24 @@ def test_service_removal_bidir( LOGGER.warning('Services[{:d}] = {:s}'.format(len(response.services), grpc_message_to_json_string(response))) assert len(response.services) == 1 - context_service_uuids : Set[Tuple[str, str]] = set() + assert 'svc-uuid' in storage + service_uuid = storage['svc-uuid'] + for service in response.services: service_id = service.service_id + assert service_id.service_uuid.uuid == service_uuid assert service.service_status.service_status == ServiceStatusEnum.SERVICESTATUS_ACTIVE + assert service.service_type == ServiceTypeEnum.SERVICETYPE_L3NM response = context_client.ListConnections(service_id) LOGGER.warning(' 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_OPTICAL_CONNECTIVITY: - assert len(response.connections) == 2 - context_uuid = service_id.context_id.context_uuid.uuid - service_uuid = service_id.service_uuid.uuid - context_service_uuids.add((context_uuid, service_uuid)) - else: - str_service = grpc_message_to_json_string(service) - raise Exception('Unexpected ServiceType: {:s}'.format(str_service)) - - # Identify service to delete - assert len(context_service_uuids) == 1 - context_uuid, service_uuid = set(context_service_uuids).pop() - - # Delete Service - service_client.DeleteService(ServiceId(**json_service_id(service_uuid, json_context_id(context_uuid)))) + grpc_message_to_json_string(service_id), len(response.connections), + grpc_message_to_json_string(response) + )) + assert len(response.connections) == 1 + + URL = '/restconf/data/ietf-l3vpn-svc:l3vpn-svc/vpn-services/vpn-service={:s}/'.format(service_uuid) + do_rest_delete_request(URL, logger=LOGGER, expected_status_codes={204}) # Verify the scenario has no services/slices response = context_client.GetContext(ADMIN_CONTEXT_ID) diff --git a/src/tests/eucnc24/tests/test_functional_service_tfs.py b/src/tests/eucnc24/tests/test_functional_service_tfs.py index 880211c39ddd7271b060111f9cae9bfaf3492a29..596da9a49321df2fd25d3760f95c9286e38d40a8 100644 --- a/src/tests/eucnc24/tests/test_functional_service_tfs.py +++ b/src/tests/eucnc24/tests/test_functional_service_tfs.py @@ -31,7 +31,7 @@ LOGGER.setLevel(logging.DEBUG) DESCRIPTOR_FILE = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'data', 'tfs-service.json') ADMIN_CONTEXT_ID = ContextId(**json_context_id(DEFAULT_CONTEXT_NAME)) -def test_service_creation_tfs( +def test_service_tfs_creation( context_client : ContextClient, # pylint: disable=redefined-outer-name device_client : DeviceClient, # pylint: disable=redefined-outer-name service_client : ServiceClient, # pylint: disable=redefined-outer-name @@ -75,7 +75,7 @@ def test_service_creation_tfs( )) assert len(response.connections) == 1 -def test_service_removal_tfs( +def test_service_tfs_removal( context_client : ContextClient, # pylint: disable=redefined-outer-name service_client : ServiceClient, # pylint: disable=redefined-outer-name ):