From db87ba733190c2e59997e00e0fe9199c9c74234d Mon Sep 17 00:00:00 2001 From: orenais Date: Fri, 15 Sep 2023 16:37:51 +0200 Subject: [PATCH] Migration to TAPI 2.4 Step3 - Correct some bugs associated with migration to T-API 2.4 - Adjust JUnit tests accordingly - Adjust functional tests JIRA: TRNSPRTPCE-734 Signed-off-by: orenais Change-Id: I54a3cc091cb75b145c81f3e0b251cfc8a0607d56 --- features/odl-transportpce-tapi/pom.xml | 2 +- .../controllers/tpce/utils/TPCEUtils.java | 24 +- .../impl/NbiNotificationsImpl.java | 18 + .../impl/NbiNotificationsImplTest.java | 10 +- .../utils/NotificationServiceDataUtils.java | 30 +- .../test/resources/expected_tapi_event.json | 4 +- .../src/test/resources/tapi_event.json | 4 +- .../impl/ServicehandlerImpl.java | 3 - .../tapi/R2RTapiLinkDiscovery.java | 5 +- .../tapi/TapiStringConstants.java | 3 +- .../tapi/connectivity/ConnectivityUtils.java | 391 +++++++++++----- .../connectivity/TapiConnectivityImpl.java | 114 +++-- .../transportpce/tapi/impl/TapiProvider.java | 5 +- .../TapiNetworkModelNotificationHandler.java | 19 +- .../listeners/TapiPceNotificationHandler.java | 326 ++++++++++---- .../TapiRendererNotificationHandler.java | 4 +- .../topology/ConvertORTopoToTapiFullTopo.java | 268 ++++------- .../topology/ConvertORTopoToTapiTopo.java | 233 +++++----- .../topology/TapiNetworkModelServiceImpl.java | 231 +++------- .../tapi/topology/TapiNetworkUtilsImpl.java | 4 +- .../tapi/topology/TapiOrLinkListener.java | 4 +- .../tapi/topology/TapiTopologyImpl.java | 183 ++++---- .../tapi/topology/TopologyUtils.java | 3 +- .../transportpce/tapi/utils/TapiContext.java | 2 + .../transportpce/tapi/utils/TapiLinkImpl.java | 14 +- .../TapiConnectivityImplTest.java | 23 +- .../ConvertORTopoToFullTapiTopoTest.java | 422 +++++++----------- .../topology/ConvertORTopoToTapiTopoTest.java | 287 ++++-------- .../tapi/topology/TapiTopologyImplTest.java | 272 +++++------ .../tapi/utils/TapiConnectivityDataUtils.java | 16 +- tests/transportpce_tests/common/test_utils.py | 3 + .../tapi/test01_abstracted_topology.py | 155 ++++--- .../tapi/test02_full_topology.py | 110 +++-- ...test03_tapi_device_change_notifications.py | 158 ++++--- 34 files changed, 1726 insertions(+), 1624 deletions(-) diff --git a/features/odl-transportpce-tapi/pom.xml b/features/odl-transportpce-tapi/pom.xml index c8c940a1a..e6f7f8842 100644 --- a/features/odl-transportpce-tapi/pom.xml +++ b/features/odl-transportpce-tapi/pom.xml @@ -58,7 +58,7 @@ and is available at http://www.eclipse.org/legal/epl-v10.html INTERNAL org.opendaylight.transportpce.models - odl-tapi-2.1.1-models + odl-tapi-2.4.0-models features xml diff --git a/lighty/src/main/java/io/lighty/controllers/tpce/utils/TPCEUtils.java b/lighty/src/main/java/io/lighty/controllers/tpce/utils/TPCEUtils.java index a0f210dde..a41e5afe5 100644 --- a/lighty/src/main/java/io/lighty/controllers/tpce/utils/TPCEUtils.java +++ b/lighty/src/main/java/io/lighty/controllers/tpce/utils/TPCEUtils.java @@ -269,19 +269,19 @@ public final class TPCEUtils { org.opendaylight.yang.gen.v1.http.org.openroadm.topology.rev230526.$YangModuleInfoImpl.getInstance(), // tapi models - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.oam.rev181210.$YangModuleInfoImpl.getInstance(), - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev181210.$YangModuleInfoImpl.getInstance(), - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.odu.rev181210.$YangModuleInfoImpl.getInstance(), - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev181210.$YangModuleInfoImpl.getInstance(), - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev181210.$YangModuleInfoImpl + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.oam.rev221121.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev221121.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.$YangModuleInfoImpl .getInstance(), - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev181210.$YangModuleInfoImpl + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.$YangModuleInfoImpl .getInstance(), - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.path.computation.rev181210.$YangModuleInfoImpl + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.path.computation.rev221121.$YangModuleInfoImpl .getInstance(), - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev181210.$YangModuleInfoImpl.getInstance(), - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.eth.rev181210.$YangModuleInfoImpl.getInstance(), - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev181210.$YangModuleInfoImpl + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.eth.rev221121.$YangModuleInfoImpl.getInstance(), + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.$YangModuleInfoImpl .getInstance(), // API models / opendaylight @@ -295,7 +295,7 @@ public final class TPCEUtils { .getInstance(), org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev220922.$YangModuleInfoImpl .getInstance(), - org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev210408 + org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.tapinetworkutils.rev230728 .$YangModuleInfoImpl.getInstance(), org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.device.renderer.rev211004 .$YangModuleInfoImpl.getInstance(), @@ -335,7 +335,7 @@ public final class TPCEUtils { .$YangModuleInfoImpl.getInstance(), org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.netconf.notifications.rev120206 .$YangModuleInfoImpl.getInstance(), - org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.tapi.rev180928.$YangModuleInfoImpl + org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.tapi.rev230728.$YangModuleInfoImpl .getInstance(), org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.$YangModuleInfoImpl .getInstance()); diff --git a/nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/impl/NbiNotificationsImpl.java b/nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/impl/NbiNotificationsImpl.java index 91e71eca1..e90bd2125 100644 --- a/nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/impl/NbiNotificationsImpl.java +++ b/nbinotifications/src/main/java/org/opendaylight/transportpce/nbinotifications/impl/NbiNotificationsImpl.java @@ -47,6 +47,10 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.OBJE import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.OBJECTTYPESERVICEINTERFACEPOINT; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.OBJECTTYPETAPICONTEXT; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Uuid; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.CONNECTIVITYOBJECTTYPE; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.CONNECTIVITYOBJECTTYPECONNECTION; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.CONNECTIVITYOBJECTTYPECONNECTIONENDPOINT; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.CONNECTIVITYOBJECTTYPECONNECTIVITYSERVICE; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.Context1; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.CreateNotificationSubscriptionService; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.CreateNotificationSubscriptionServiceInput; @@ -93,6 +97,11 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev22112 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.subscription.service.SubscriptionFilter; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.subscription.service.SubscriptionFilterBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.subscription.service.SubscriptionFilterKey; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.TOPOLOGYOBJECTTYPEINTERRULEGROUP; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.TOPOLOGYOBJECTTYPELINK; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.TOPOLOGYOBJECTTYPENODE; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.TOPOLOGYOBJECTTYPENODEEDGEPOINT; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.TOPOLOGYOBJECTTYPENODERULEGROUP; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.Rpc; import org.opendaylight.yangtools.yang.common.ErrorTag; @@ -188,6 +197,15 @@ public class NbiNotificationsImpl implements NbiNotificationsService, TapiNotifi objectTypeList.add(OBJECTTYPESERVICEINTERFACEPOINT.VALUE); objectTypeList.add(OBJECTTYPETAPICONTEXT.VALUE); objectTypeList.add(OBJECTTYPEPROFILE.VALUE); + objectTypeList.add(TOPOLOGYOBJECTTYPENODE.VALUE); + objectTypeList.add(TOPOLOGYOBJECTTYPELINK.VALUE); + objectTypeList.add(TOPOLOGYOBJECTTYPENODEEDGEPOINT.VALUE); + objectTypeList.add(TOPOLOGYOBJECTTYPENODERULEGROUP.VALUE); + objectTypeList.add(TOPOLOGYOBJECTTYPEINTERRULEGROUP.VALUE); + objectTypeList.add(CONNECTIVITYOBJECTTYPE.VALUE); + objectTypeList.add(CONNECTIVITYOBJECTTYPECONNECTIVITYSERVICE.VALUE); + objectTypeList.add(CONNECTIVITYOBJECTTYPECONNECTIONENDPOINT.VALUE); + objectTypeList.add(CONNECTIVITYOBJECTTYPECONNECTION.VALUE); // for (NotifSubscription notifSubscription:notificationContext.getNotifSubscription().values()) { // if (notifSubscription.getSupportedNotificationTypes() != null) { // notificationTypeList.addAll(notifSubscription.getSupportedNotificationTypes()); diff --git a/nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/impl/NbiNotificationsImplTest.java b/nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/impl/NbiNotificationsImplTest.java index 21a23225c..5b54e5345 100644 --- a/nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/impl/NbiNotificationsImplTest.java +++ b/nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/impl/NbiNotificationsImplTest.java @@ -32,7 +32,6 @@ import org.opendaylight.yang.gen.v1.nbi.notifications.rev230728.NotificationTapi import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.CreateNotificationSubscriptionServiceInputBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.CreateNotificationSubscriptionServiceOutput; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.GetNotificationListInputBuilder; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.GetNotificationListOutput; import org.opendaylight.yangtools.yang.common.RpcResult; public class NbiNotificationsImplTest extends AbstractTest { @@ -103,11 +102,10 @@ public class NbiNotificationsImplTest extends AbstractTest { = NotificationServiceDataUtils.buildNotificationSubscriptionServiceInputBuilder(); ListenableFuture> result = nbiNotificationsImpl.createNotificationSubscriptionService(builder.build()); - GetNotificationListInputBuilder builder1 = new GetNotificationListInputBuilder() + assertNull(nbiNotificationsImpl.getNotificationList(new GetNotificationListInputBuilder() .setTimeRange(null) - .setSubscriptionId(result.get().getResult().getSubscriptionService().getUuid()); - ListenableFuture> result1 = - nbiNotificationsImpl.getNotificationList(builder1.build()); - assertNull(result1.get().getResult().getNotification(), "Should be null"); + .setSubscriptionId(result.get().getResult().getSubscriptionService().getUuid()) + .build()) + .get().getResult().getNotification(), "Should be null"); } } diff --git a/nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/utils/NotificationServiceDataUtils.java b/nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/utils/NotificationServiceDataUtils.java index 67e0b9063..d36599912 100644 --- a/nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/utils/NotificationServiceDataUtils.java +++ b/nbinotifications/src/test/java/org/opendaylight/transportpce/nbinotifications/utils/NotificationServiceDataUtils.java @@ -44,11 +44,11 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Cont import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.ContextBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.DateAndTime; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.LayerProtocolName; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.OBJECTTYPETAPICONTEXT; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.OperationalState; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Uuid; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.local._class.Name; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.local._class.NameBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.CONNECTIVITYOBJECTTYPECONNECTIVITYSERVICE; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.Context1; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.Context1Builder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.context.ConnectivityContextBuilder; @@ -137,7 +137,7 @@ public final class NotificationServiceDataUtils { return new NotificationBuilder() .setNotificationType(NOTIFICATIONTYPEATTRIBUTEVALUECHANGE.VALUE) .setLayerProtocolName(LayerProtocolName.ETH) - .setTargetObjectType(OBJECTTYPETAPICONTEXT.VALUE) + .setTargetObjectType(CONNECTIVITYOBJECTTYPECONNECTIVITYSERVICE.VALUE) .setEventTimeStamp(datetime) .setUuid(new Uuid(UUID.randomUUID().toString())) .setTargetObjectIdentifier(targetObjectId) @@ -173,7 +173,7 @@ public final class NotificationServiceDataUtils { .setValueName("Subscription name") .build(); SubscriptionFilter subscriptionFilter = new SubscriptionFilterBuilder() - .setRequestedObjectTypes(new HashSet<>(List.of(OBJECTTYPETAPICONTEXT.VALUE))) + .setRequestedObjectTypes(new HashSet<>(List.of(CONNECTIVITYOBJECTTYPECONNECTIVITYSERVICE.VALUE))) .setRequestedNotificationTypes(new HashSet<>(List.of(NOTIFICATIONTYPEATTRIBUTEVALUECHANGE.VALUE, NOTIFICATIONTYPEOBJECTCREATION.VALUE, NOTIFICATIONTYPEOBJECTDELETION.VALUE))) .setRequestedLayerProtocols(new HashSet<>(List.of(LayerProtocolName.ETH))) @@ -253,13 +253,13 @@ public final class NotificationServiceDataUtils { org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.Context1 topologyContext = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.Context1Builder() - .setTopologyContext(new TopologyContextBuilder() - .setNwTopologyService(new NwTopologyServiceBuilder() - .setTopology(new HashMap<>()) - .setUuid( - new Uuid( - UUID.nameUUIDFromBytes("Network Topo Service".getBytes(Charset.forName("UTF-8"))) - .toString())) + .setTopologyContext(new TopologyContextBuilder() + .setNwTopologyService(new NwTopologyServiceBuilder() + .setTopology(new HashMap<>()) + .setUuid( + new Uuid( + UUID.nameUUIDFromBytes("Network Topo Service".getBytes(Charset.forName("UTF-8"))) + .toString())) .setName(Map.of(nwTopoServiceName.key(), nwTopoServiceName)) .build()) .setTopology(new HashMap<>()) @@ -268,11 +268,11 @@ public final class NotificationServiceDataUtils { org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.Context1 notificationContext = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.Context1Builder() - .setNotificationContext(new NotificationContextBuilder() - .setNotification(new HashMap<>()) - .setNotifSubscription(new HashMap<>()) - .build()) - .build(); + .setNotificationContext(new NotificationContextBuilder() + .setNotification(new HashMap<>()) + .setNotifSubscription(new HashMap<>()) + .build()) + .build(); ContextBuilder contextBuilder = new ContextBuilder() .setName(Map.of(contextName.key(), contextName)) diff --git a/nbinotifications/src/test/resources/expected_tapi_event.json b/nbinotifications/src/test/resources/expected_tapi_event.json index 068a5ed79..d7d4abe12 100755 --- a/nbinotifications/src/test/resources/expected_tapi_event.json +++ b/nbinotifications/src/test/resources/expected_tapi_event.json @@ -1,7 +1,7 @@ { "nbi-notifications:notification-tapi-service": { "layer-protocol-name": "ETH", - "notification-type": "ATTRIBUTE_VALUE_CHANGE", + "notification-type": "tapi-notification:NOTIFICATION_TYPE_ATTRIBUTE_VALUE_CHANGE", "changed-attributes": [ { "value-name": "administrativeState", @@ -21,7 +21,7 @@ } ], "uuid": "6ae49721-7f96-4924-b23b-31e5bee4946b", - "target-object-type": "CONNECTIVITY_SERVICE", + "target-object-type": "tapi-connectivity:CONNECTIVITY_OBJECT_TYPE_CONNECTIVITY_SERVICE", "event-time-stamp": "2022-04-06T09:06:01+00:00", "target-object-identifier": "76d8f07b-ead5-4132-8eb8-cf3fdef7e079" } diff --git a/nbinotifications/src/test/resources/tapi_event.json b/nbinotifications/src/test/resources/tapi_event.json index 068a5ed79..d7d4abe12 100644 --- a/nbinotifications/src/test/resources/tapi_event.json +++ b/nbinotifications/src/test/resources/tapi_event.json @@ -1,7 +1,7 @@ { "nbi-notifications:notification-tapi-service": { "layer-protocol-name": "ETH", - "notification-type": "ATTRIBUTE_VALUE_CHANGE", + "notification-type": "tapi-notification:NOTIFICATION_TYPE_ATTRIBUTE_VALUE_CHANGE", "changed-attributes": [ { "value-name": "administrativeState", @@ -21,7 +21,7 @@ } ], "uuid": "6ae49721-7f96-4924-b23b-31e5bee4946b", - "target-object-type": "CONNECTIVITY_SERVICE", + "target-object-type": "tapi-connectivity:CONNECTIVITY_OBJECT_TYPE_CONNECTIVITY_SERVICE", "event-time-stamp": "2022-04-06T09:06:01+00:00", "target-object-identifier": "76d8f07b-ead5-4132-8eb8-cf3fdef7e079" } diff --git a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/ServicehandlerImpl.java b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/ServicehandlerImpl.java index 4931ec32a..0529f832a 100644 --- a/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/ServicehandlerImpl.java +++ b/servicehandler/src/main/java/org/opendaylight/transportpce/servicehandler/impl/ServicehandlerImpl.java @@ -343,7 +343,6 @@ public class ServicehandlerImpl implements OrgOpenroadmServiceService { public final ListenableFuture> serviceDelete(ServiceDeleteInput input) { String serviceName = input.getServiceDeleteReqInfo().getServiceName(); LOG.info("RPC serviceDelete request received for {}", serviceName); - /* * Upon receipt of service-deleteService RPC, service header and sdnc-request * header compliance are verified. @@ -358,7 +357,6 @@ public class ServicehandlerImpl implements OrgOpenroadmServiceService { input, ResponseCodes.FINAL_ACK_YES, LogMessages.SERVICE_NON_COMPLIANT, ResponseCodes.RESPONSE_FAILED); } - //Check presence of service to be deleted Optional serviceOpt = this.serviceDataStoreOperations.getService(serviceName); Services service; @@ -383,7 +381,6 @@ public class ServicehandlerImpl implements OrgOpenroadmServiceService { org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteOutput output = this.rendererServiceWrapper.performRenderer( serviceDeleteInput, ServiceNotificationTypes.ServiceDeleteResult, service); - if (output == null) { LOG.error(SERVICE_DELETE_MSG, LogMessages.RENDERER_DELETE_FAILED); sendNbiNotification(new PublishNotificationProcessServiceBuilder() diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/R2RTapiLinkDiscovery.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/R2RTapiLinkDiscovery.java index 33ce9959c..feafd42da 100644 --- a/tapi/src/main/java/org/opendaylight/transportpce/tapi/R2RTapiLinkDiscovery.java +++ b/tapi/src/main/java/org/opendaylight/transportpce/tapi/R2RTapiLinkDiscovery.java @@ -249,11 +249,14 @@ public class R2RTapiLinkDiscovery { + "DestDegId: {}, DestTPId: {}", nodeId.getValue(), srcDegId, srcTpTx, destNodeId, destDegId, destTpRx); Link omsLink = this.tapiLink.createTapiLink(nodeId.getValue(), srcTpTx, destNodeId.getValue(), destTpTx, TapiStringConstants.OMS_RDM_RDM_LINK, TapiStringConstants.PHTNC_MEDIA, TapiStringConstants.PHTNC_MEDIA, - TapiStringConstants.PHTNC_MEDIA, TapiStringConstants.PHTNC_MEDIA, + TapiStringConstants.PHTNC_MEDIA_OTS, TapiStringConstants.PHTNC_MEDIA_OTS, this.tapiLink.getAdminState(nodeId.getValue(), destNodeId.getValue(), srcTpTx, destTpTx), this.tapiLink.getOperState(nodeId.getValue(), destNodeId.getValue(), srcTpTx, destTpTx), Set.of(LayerProtocolName.PHOTONICMEDIA), Set.of(LayerProtocolName.PHOTONICMEDIA.getName()), tapiTopoUuid); LOG.info("Tapi R2R Link OMS link created = {}", omsLink); + LOG.debug("inputAdminstate= {}, inputoperstate = {}", + this.tapiLink.getAdminState(nodeId.getValue(), destNodeId.getValue(), srcTpTx, destTpTx), + this.tapiLink.getOperState(nodeId.getValue(), destNodeId.getValue(), srcTpTx, destTpTx)); return omsLink; } diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/TapiStringConstants.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/TapiStringConstants.java index 0696936a0..a1adfff6a 100644 --- a/tapi/src/main/java/org/opendaylight/transportpce/tapi/TapiStringConstants.java +++ b/tapi/src/main/java/org/opendaylight/transportpce/tapi/TapiStringConstants.java @@ -31,7 +31,8 @@ public final class TapiStringConstants { public static final String RDM_INFRA = "ROADM-infra"; public static final String CLIENT = "-CLIENT"; public static final String NETWORK = "-NETWORK"; - public static final String XPDR = "-XPDR"; + public static final String XPDR = "XPONDER"; + public static final String XXPDR = "-XPDR"; public static final String TP = "TerminationPoint"; public static final String NODE = "Node"; public static final String LGX_PORT_NAME = "Some lgx-port-name"; diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/connectivity/ConnectivityUtils.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/connectivity/ConnectivityUtils.java index d0f788041..c9f60f4b3 100644 --- a/tapi/src/main/java/org/opendaylight/transportpce/tapi/connectivity/ConnectivityUtils.java +++ b/tapi/src/main/java/org/opendaylight/transportpce/tapi/connectivity/ConnectivityUtils.java @@ -8,6 +8,7 @@ package org.opendaylight.transportpce.tapi.connectivity; import java.math.BigDecimal; +import java.nio.charset.Charset; import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Collection; @@ -91,6 +92,8 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev22112 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connection.LowerConnectionKey; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connection.end.point.ClientNodeEdgePoint; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connection.end.point.ClientNodeEdgePointBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connection.end.point.ParentNodeEdgePoint; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connection.end.point.ParentNodeEdgePointBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.ConnectivityService; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.ConnectivityServiceBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.Connection; @@ -103,9 +106,15 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev22112 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.EndPointKey; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.end.point.CapacityBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.service.end.point.ServiceInterfacePointBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.PHOTONICLAYERQUALIFIERMC; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.PHOTONICLAYERQUALIFIEROTSiMC; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.context.TopologyContext; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePoint; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePointBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePointKey; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.MappedServiceInterfacePointKey; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.SupportedCepLayerProtocolQualifierInstances; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.SupportedCepLayerProtocolQualifierInstancesBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.NodeKey; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.Topology; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.TopologyKey; @@ -127,8 +136,8 @@ public final class ConnectivityUtils { private final ServiceDataStoreOperations serviceDataStoreOperations; private final TapiContext tapiContext; private Map sipMap; - private final Map connectionFullMap; // this variable is for complete connection objects private final NetworkTransactionService networkTransactionService; @@ -304,8 +313,9 @@ public final class ConnectivityUtils { // Connection creation Map connMap = createConnectionsFromService(serviceAEnd, serviceZEnd, pathDescription); - ConnectivityConstraint conConstr = new ConnectivityConstraintBuilder() - .setServiceType(ServiceType.POINTTOPOINTCONNECTIVITY).build(); + LOG.debug("connectionMap for service {} = {} ", name.toString(), connMap.toString()); + ConnectivityConstraint conConstr = + new ConnectivityConstraintBuilder().setServiceType(ServiceType.POINTTOPOINTCONNECTIVITY).build(); // TODO: full connectivity service?? With constraints and the rest of fields... return new ConnectivityServiceBuilder() .setAdministrativeState(AdministrativeState.UNLOCKED) @@ -345,7 +355,7 @@ public final class ConnectivityUtils { private OpenroadmNodeType getOpenroadmType(String nodeName) { LOG.info("Node name = {}", nodeName); - Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+",nodeName, TapiStringConstants.DSR)) + Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+",nodeName, TapiStringConstants.XPDR)) .getBytes(StandardCharsets.UTF_8)).toString()); org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node tapiNode = this.tapiContext.getTapiNode(this.tapiTopoUuid, nodeUuid); @@ -503,7 +513,7 @@ public final class ConnectivityUtils { } if (openroadmNodeType.equals(OpenroadmNodeType.SWITCH)) { // TODO: We create both ODU and DSR because there is no ODU service creation for the switch - // - XC Connection OTSi betwwen iODU and eODU of xpdr + // - XC Connection OTSi between iODU and eODU of xpdr // - Top connection in the ODU layer, between xpdr eODU ports (?) connectionServMap.putAll(createXpdrCepsAndConnectionsDsr(xpdrClientTplist, xpdrNetworkTplist, xpdrNodelist)); @@ -519,6 +529,7 @@ public final class ConnectivityUtils { default: LOG.error("Service type format not supported"); } + LOG.debug("CONNSERVERMAP = {}", connectionServMap.toString()); return connectionServMap; } @@ -541,9 +552,10 @@ public final class ConnectivityUtils { LOG.info("Creating ceps and xc for xpdr {}", xpdr); String spcXpdrClient = xpdrClientTplist.stream().filter(netp -> netp.contains(xpdr)).findFirst() .orElseThrow(); - ConnectionEndPoint netCep1 = createCepXpdr(spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.DSR, + ConnectionEndPoint netCep1 = createCepXpdr(spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.XPDR, LayerProtocolName.DSR); - putXpdrCepInTopologyContext(xpdr, spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.DSR, netCep1); + putXpdrCepInTopologyContext(xpdr, spcXpdrClient, TapiStringConstants.DSR, + TapiStringConstants.XPDR, netCep1); cepMapDsr.put(netCep1.key(), netCep1); } @@ -583,23 +595,24 @@ public final class ConnectivityUtils { LOG.info("Creating ceps and xc for xpdr {}", xpdr); String spcXpdrClient = xpdrClientTplist.stream().filter(netp -> netp.contains(xpdr)).findFirst() .orElseThrow(); - ConnectionEndPoint netCep1 = createCepXpdr(spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.DSR, - LayerProtocolName.DSR); - putXpdrCepInTopologyContext(xpdr, spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.DSR, netCep1); + ConnectionEndPoint clientCep1 = createCepXpdr(spcXpdrClient, TapiStringConstants.DSR, + TapiStringConstants.XPDR, LayerProtocolName.DSR); + putXpdrCepInTopologyContext(xpdr, spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.XPDR, + clientCep1); - ConnectionEndPoint netCep2 = createCepXpdr(spcXpdrClient, TapiStringConstants.E_ODU, - TapiStringConstants.DSR, LayerProtocolName.ODU); - putXpdrCepInTopologyContext(xpdr, spcXpdrClient, TapiStringConstants.E_ODU, TapiStringConstants.DSR, - netCep2); + ConnectionEndPoint clientCep2 = createCepXpdr(spcXpdrClient, TapiStringConstants.E_ODU, + TapiStringConstants.XPDR, LayerProtocolName.ODU); + putXpdrCepInTopologyContext(xpdr, spcXpdrClient, TapiStringConstants.E_ODU, TapiStringConstants.XPDR, + clientCep2); String spcXpdrNetwork = getAssociatedNetworkPort(spcXpdrClient, xpdrNetworkTplist); ConnectionEndPoint netCep3 = getAssociatediODUCep(spcXpdrNetwork); - cepMapDsr.put(netCep1.key(), netCep1); - cepMapOdu.put(netCep2.key(), netCep2); + cepMapDsr.put(clientCep1.key(), clientCep1); + cepMapOdu.put(clientCep2.key(), clientCep2); // Create x connection between I_ODU and E_ODU within xpdr org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection - connection = createXCBetweenCeps(netCep2, netCep3, spcXpdrClient, spcXpdrNetwork, + connection = createXCBetweenCeps(clientCep2, netCep3, spcXpdrClient, spcXpdrNetwork, TapiStringConstants.ODU, LayerProtocolName.ODU); this.connectionFullMap.put(connection.key(), connection); @@ -653,8 +666,8 @@ public final class ConnectivityUtils { String spcXpdrNetwork = xpdrNetworkTplist.stream().filter(netp -> netp.contains(xpdr)).findFirst() .orElseThrow(); ConnectionEndPoint netCep1 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.I_ODU, - TapiStringConstants.DSR, LayerProtocolName.ODU); - putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.I_ODU, TapiStringConstants.DSR, + TapiStringConstants.XPDR, LayerProtocolName.ODU); + putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.I_ODU, TapiStringConstants.XPDR, netCep1); cepMap.put(netCep1.key(), netCep1); @@ -680,59 +693,50 @@ public final class ConnectivityUtils { private Map createXpdrCepsAndConnectionsPht(List xpdrNetworkTplist, List xpdrNodelist) { - Map connServMap = new HashMap<>(); - Map cepMap = new HashMap<>(); + // TODO: when upgrading the models to 2.1.3, get the connection inclusion because those connections will // be added to the lower connection of a top connection - Map xcMap = new HashMap<>(); - + Map cepMap = new HashMap<>(); // create ceps and x connections within xpdr for (String xpdr:xpdrNodelist) { LOG.info("Creating ceps and xc for xpdr {}", xpdr); String spcXpdrNetwork = xpdrNetworkTplist.stream().filter(netp -> netp.contains(xpdr)).findFirst() .orElseThrow(); // There should be 1 network tp per xpdr - // TODO photonic media model should be updated to have the corresponding CEPs. I will just create - // 3 different MC CEPs giving different IDs to show that they are different - // Create 3 CEPs for each xpdr otsi node and the corresponding cross connection matchin the NEPs - ConnectionEndPoint netCep1 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.PHTNC_MEDIA, - TapiStringConstants.OTSI, LayerProtocolName.PHOTONICMEDIA); - putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.PHTNC_MEDIA, TapiStringConstants.OTSI, - netCep1); - ConnectionEndPoint netCep2 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.E_OTSI, - TapiStringConstants.OTSI, LayerProtocolName.PHOTONICMEDIA); - putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.E_OTSI, TapiStringConstants.OTSI, + // Just create 2 different CEPs (1 OTS + 1 OTSI_MC) + ConnectionEndPoint netCep1 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.PHTNC_MEDIA_OTS, + TapiStringConstants.XPDR, LayerProtocolName.PHOTONICMEDIA); + putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.PHTNC_MEDIA_OTS, + TapiStringConstants.XPDR, netCep1); + ConnectionEndPoint netCep2 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.OTSI_MC, + TapiStringConstants.XPDR, LayerProtocolName.PHOTONICMEDIA); + putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.OTSI_MC, TapiStringConstants.XPDR, netCep2); - ConnectionEndPoint netCep3 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.I_OTSI, - TapiStringConstants.OTSI, LayerProtocolName.PHOTONICMEDIA); - putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.I_OTSI, TapiStringConstants.OTSI, - netCep3); +// ConnectionEndPoint netCep3 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.I_OTSI, +// TapiStringConstants.XPDR, LayerProtocolName.PHOTONICMEDIA); +// putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.I_OTSI, TapiStringConstants.OTSI, +// netCep3); + cepMap.put(netCep1.key(), netCep1); cepMap.put(netCep2.key(), netCep2); - cepMap.put(netCep3.key(), netCep3); - - // Create x connection between I_OTSi and E_OTSi within xpdr - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection - connection = createXCBetweenCeps(netCep2, netCep3, spcXpdrNetwork, spcXpdrNetwork, - TapiStringConstants.OTSI, LayerProtocolName.PHOTONICMEDIA); - this.connectionFullMap.put(connection.key(), connection); +// cepMap.put(netCep3.key(), netCep3); - // Create X connection that will be added to the service object - LowerConnection conn = new LowerConnectionBuilder().setConnectionUuid(connection.getUuid()).build(); - xcMap.put(conn.key(), conn); } - // OTSi top connection between edge I_OTSI Xpdr + + // OTSi top connection between edge OTSI_MC Xpdr + Map xcMap = new HashMap<>(); String spcXpdr1 = xpdrNetworkTplist.stream().filter(adp -> adp.contains(xpdrNodelist .get(0))).findFirst().orElseThrow(); String spcXpdr2 = xpdrNetworkTplist.stream().filter(adp -> adp.contains(xpdrNodelist .get(xpdrNodelist.size() - 1))).findFirst().orElseThrow(); org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection - connection = createTopConnection(spcXpdr1, spcXpdr2, cepMap, TapiStringConstants.I_OTSI, + connection = createTopConnection(spcXpdr1, spcXpdr2, cepMap, TapiStringConstants.OTSI_MC, LayerProtocolName.PHOTONICMEDIA, xcMap, this.topConnRdmRdm); this.connectionFullMap.put(connection.key(), connection); - // OTSi top connection that will be added to the service object + // OTSi top connection that will be added to the service object + Map connServMap = new HashMap<>(); Connection conn = new ConnectionBuilder().setConnectionUuid(connection.getUuid()).build(); connServMap.put(conn.key(), conn); this.topConnXpdrXpdrPhtn = conn; @@ -762,8 +766,8 @@ public final class ConnectivityUtils { // Create 3 CEPs for each AD and DEG and the corresponding cross connections, matching the NEPs // created in the topology creation // add CEPs to the topology to the corresponding ONEP - ConnectionEndPoint adCep1 = createCepRoadm(spcRdmAD, TapiStringConstants.PHTNC_MEDIA); - putRdmCepInTopologyContext(roadm, spcRdmAD, TapiStringConstants.PHTNC_MEDIA, adCep1); + ConnectionEndPoint adCep1 = createCepRoadm(spcRdmAD, TapiStringConstants.PHTNC_MEDIA_OTS); + putRdmCepInTopologyContext(roadm, spcRdmAD, TapiStringConstants.PHTNC_MEDIA_OTS, adCep1); ConnectionEndPoint adCep2 = createCepRoadm(spcRdmAD, TapiStringConstants.MC); putRdmCepInTopologyContext(roadm, spcRdmAD, TapiStringConstants.MC, adCep2); ConnectionEndPoint adCep3 = createCepRoadm(spcRdmAD, TapiStringConstants.OTSI_MC); @@ -775,12 +779,15 @@ public final class ConnectivityUtils { String spcRdmDEG = rdmDegTplist.stream().filter(adp -> adp.contains(roadm)).findFirst().orElseThrow(); LOG.info("Degree port of ROADm {} = {}", roadm, spcRdmDEG); - ConnectionEndPoint degCep1 = createCepRoadm(spcRdmDEG, TapiStringConstants.PHTNC_MEDIA); - putRdmCepInTopologyContext(roadm, spcRdmDEG, TapiStringConstants.PHTNC_MEDIA, degCep1); + ConnectionEndPoint degCep0 = createCepRoadm(spcRdmDEG, TapiStringConstants.PHTNC_MEDIA_OTS); + putRdmCepInTopologyContext(roadm, spcRdmDEG, TapiStringConstants.PHTNC_MEDIA_OTS, degCep0); + ConnectionEndPoint degCep1 = createCepRoadm(spcRdmDEG, TapiStringConstants.PHTNC_MEDIA_OMS); + putRdmCepInTopologyContext(roadm, spcRdmDEG, TapiStringConstants.PHTNC_MEDIA_OMS, degCep1); ConnectionEndPoint degCep2 = createCepRoadm(spcRdmDEG, TapiStringConstants.MC); putRdmCepInTopologyContext(roadm, spcRdmDEG, TapiStringConstants.MC, degCep2); ConnectionEndPoint degCep3 = createCepRoadm(spcRdmDEG, TapiStringConstants.OTSI_MC); putRdmCepInTopologyContext(roadm, spcRdmDEG, TapiStringConstants.OTSI_MC, degCep3); + cepMap.put(degCep0.key(), degCep0); cepMap.put(degCep1.key(), degCep1); cepMap.put(degCep2.key(), degCep2); cepMap.put(degCep3.key(), degCep3); @@ -811,12 +818,15 @@ public final class ConnectivityUtils { String spcRdmDEG1 = rdmDegTplist.stream().filter(adp -> adp.contains(roadm)).findFirst().orElseThrow(); LOG.info("Degree 1 port of ROADm {} = {}", roadm, spcRdmDEG1); - ConnectionEndPoint deg1Cep1 = createCepRoadm(spcRdmDEG1, TapiStringConstants.PHTNC_MEDIA); - putRdmCepInTopologyContext(roadm, spcRdmDEG1, TapiStringConstants.PHTNC_MEDIA, deg1Cep1); + ConnectionEndPoint deg1Cep0 = createCepRoadm(spcRdmDEG1, TapiStringConstants.PHTNC_MEDIA_OTS); + putRdmCepInTopologyContext(roadm, spcRdmDEG1, TapiStringConstants.PHTNC_MEDIA_OTS, deg1Cep0); + ConnectionEndPoint deg1Cep1 = createCepRoadm(spcRdmDEG1, TapiStringConstants.PHTNC_MEDIA_OMS); + putRdmCepInTopologyContext(roadm, spcRdmDEG1, TapiStringConstants.PHTNC_MEDIA_OMS, deg1Cep1); ConnectionEndPoint deg1Cep2 = createCepRoadm(spcRdmDEG1, TapiStringConstants.MC); putRdmCepInTopologyContext(roadm, spcRdmDEG1, TapiStringConstants.MC, deg1Cep2); ConnectionEndPoint deg1Cep3 = createCepRoadm(spcRdmDEG1, TapiStringConstants.OTSI_MC); putRdmCepInTopologyContext(roadm, spcRdmDEG1, TapiStringConstants.OTSI_MC, deg1Cep3); + cepMap.put(deg1Cep0.key(), deg1Cep0); cepMap.put(deg1Cep1.key(), deg1Cep1); cepMap.put(deg1Cep2.key(), deg1Cep2); cepMap.put(deg1Cep3.key(), deg1Cep3); @@ -825,12 +835,15 @@ public final class ConnectivityUtils { .orElseThrow(); LOG.info("Degree 2 port of ROADm {} = {}", roadm, spcRdmDEG2); - ConnectionEndPoint deg2Cep1 = createCepRoadm(spcRdmDEG2, TapiStringConstants.PHTNC_MEDIA); - putRdmCepInTopologyContext(roadm, spcRdmDEG2, TapiStringConstants.PHTNC_MEDIA, deg2Cep1); + ConnectionEndPoint deg2Cep0 = createCepRoadm(spcRdmDEG2, TapiStringConstants.PHTNC_MEDIA_OTS); + putRdmCepInTopologyContext(roadm, spcRdmDEG2, TapiStringConstants.PHTNC_MEDIA_OTS, deg2Cep0); + ConnectionEndPoint deg2Cep1 = createCepRoadm(spcRdmDEG2, TapiStringConstants.PHTNC_MEDIA_OMS); + putRdmCepInTopologyContext(roadm, spcRdmDEG2, TapiStringConstants.PHTNC_MEDIA_OMS, deg2Cep1); ConnectionEndPoint deg2Cep2 = createCepRoadm(spcRdmDEG2, TapiStringConstants.MC); putRdmCepInTopologyContext(roadm, spcRdmDEG2, TapiStringConstants.MC, deg2Cep2); ConnectionEndPoint deg2Cep3 = createCepRoadm(spcRdmDEG2, TapiStringConstants.OTSI_MC); putRdmCepInTopologyContext(roadm, spcRdmDEG2, TapiStringConstants.OTSI_MC, deg2Cep3); + cepMap.put(deg2Cep0.key(), deg2Cep0); cepMap.put(deg2Cep1.key(), deg2Cep1); cepMap.put(deg2Cep2.key(), deg2Cep2); cepMap.put(deg2Cep3.key(), deg2Cep3); @@ -910,13 +923,10 @@ public final class ConnectivityUtils { org.opendaylight.yang.gen.v1.urn .onf.otcc.yang.tapi.connectivity.rev221121.connection.ConnectionEndPoint cep1 = new org.opendaylight.yang.gen.v1.urn - .onf.otcc.yang.tapi.connectivity.rev221121.connection.ConnectionEndPointBuilder() - .setNodeEdgePointUuid(adCep1.getClientNodeEdgePoint() - .values().stream().findFirst().orElseThrow().getNodeEdgePointUuid()) - .setTopologyUuid(adCep1.getClientNodeEdgePoint() - .values().stream().findFirst().orElseThrow().getTopologyUuid()) - .setNodeUuid(adCep1.getClientNodeEdgePoint() - .values().stream().findFirst().orElseThrow().getNodeUuid()) + .onf.otcc.yang.tapi.connectivity.rev221121.connection.ConnectionEndPointBuilder() + .setNodeEdgePointUuid(adCep1.getParentNodeEdgePoint().getNodeEdgePointUuid()) + .setNodeUuid(adCep1.getParentNodeEdgePoint().getNodeUuid()) + .setTopologyUuid(adCep1.getParentNodeEdgePoint().getTopologyUuid()) .setConnectionEndPointUuid(adCep1.getUuid()) .build(); org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.ConnectionEndPoint adCep2 = @@ -929,13 +939,10 @@ public final class ConnectivityUtils { org.opendaylight.yang.gen.v1.urn .onf.otcc.yang.tapi.connectivity.rev221121.connection.ConnectionEndPoint cep2 = new org.opendaylight.yang.gen.v1.urn - .onf.otcc.yang.tapi.connectivity.rev221121.connection.ConnectionEndPointBuilder() - .setNodeEdgePointUuid(adCep2.getClientNodeEdgePoint() - .values().stream().findFirst().orElseThrow().getNodeEdgePointUuid()) - .setTopologyUuid(adCep2.getClientNodeEdgePoint() - .values().stream().findFirst().orElseThrow().getTopologyUuid()) - .setNodeUuid(adCep2.getClientNodeEdgePoint() - .values().stream().findFirst().orElseThrow().getNodeUuid()) + .onf.otcc.yang.tapi.connectivity.rev221121.connection.ConnectionEndPointBuilder() + .setNodeEdgePointUuid(adCep2.getParentNodeEdgePoint().getNodeEdgePointUuid()) + .setNodeUuid(adCep2.getParentNodeEdgePoint().getNodeUuid()) + .setTopologyUuid(adCep2.getParentNodeEdgePoint().getTopologyUuid()) .setConnectionEndPointUuid(adCep1.getUuid()) .build(); Map ceps = new HashMap<>(); ceps.put(cepServ1.key(), cepServ1); @@ -1025,12 +1026,45 @@ public final class ConnectivityUtils { .setValue(String.join("+", id.split("\\+")[0], qualifier, id.split("\\+")[1])) .build(); - ClientNodeEdgePoint cnep = new ClientNodeEdgePointBuilder() + ParentNodeEdgePoint pnep = new ParentNodeEdgePointBuilder() .setNodeEdgePointUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", id.split("\\+")[0], qualifier, id.split("\\+")[1])).getBytes(StandardCharsets.UTF_8)) .toString())) .setNodeUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+",id.split("\\+")[0], - qualifier)).getBytes(StandardCharsets.UTF_8)) + TapiStringConstants.PHTNC_MEDIA)).getBytes(StandardCharsets.UTF_8)) + .toString())) + .setTopologyUuid(new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER + .getBytes(StandardCharsets.UTF_8)).toString())) + .build(); + String clientQualifier = ""; + switch (qualifier) { + case TapiStringConstants.PHTNC_MEDIA_OTS: + clientQualifier = TapiStringConstants.PHTNC_MEDIA_OMS; + break; + case TapiStringConstants.PHTNC_MEDIA_OMS: + clientQualifier = TapiStringConstants.MC; + OwnedNodeEdgePoint onepMC = createRoadmNep(id.split("\\+")[0], id.split("\\+")[1], + false, OperationalState.ENABLED, AdministrativeState.UNLOCKED, clientQualifier); + putRdmNepInTopologyContext(id.split("\\+")[0], id.split("\\+")[1], TapiStringConstants.MC, onepMC); + break; + case TapiStringConstants.MC: + clientQualifier = TapiStringConstants.OTSI_MC; + OwnedNodeEdgePoint onepOTSiMC = createRoadmNep(id.split("\\+")[0], id.split("\\+")[1], + false, OperationalState.ENABLED, AdministrativeState.UNLOCKED, clientQualifier); + putRdmNepInTopologyContext(id.split("\\+")[0], id.split("\\+")[1], + TapiStringConstants.OTSI_MC, onepOTSiMC); + break; + default: + LOG.debug("not currently handling client NEP for OTSiMC CEP {}", + String.join("+", id.split("\\+")[0], qualifier, id.split("\\+")[1])); + break; + } + ClientNodeEdgePoint cnep = new ClientNodeEdgePointBuilder() + .setNodeEdgePointUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", id.split("\\+")[0], + clientQualifier, id.split("\\+")[1])).getBytes(StandardCharsets.UTF_8)) + .toString())) + .setNodeUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+",id.split("\\+")[0], + TapiStringConstants.PHTNC_MEDIA)).getBytes(StandardCharsets.UTF_8)) .toString())) .setTopologyUuid(new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER .getBytes(StandardCharsets.UTF_8)).toString())) @@ -1041,13 +1075,16 @@ public final class ConnectivityUtils { .setUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", "CEP", id.split("\\+")[0], qualifier, id.split("\\+")[1])).getBytes(StandardCharsets.UTF_8)) .toString())) - .setClientNodeEdgePoint(Map.of(cnep.key(), cnep)) + .setParentNodeEdgePoint(pnep) .setName(Map.of(cepName.key(), cepName)) .setConnectionPortRole(PortRole.SYMMETRIC) .setDirection(Direction.BIDIRECTIONAL) .setOperationalState(OperationalState.ENABLED) .setLifecycleState(LifecycleState.INSTALLED) .setLayerProtocolName(LayerProtocolName.PHOTONICMEDIA); + if (!(TapiStringConstants.OTSI_MC.equals(qualifier))) { + cepBldr.setClientNodeEdgePoint(Map.of(cnep.key(), cnep)); + } return cepBldr.build(); } @@ -1058,12 +1095,41 @@ public final class ConnectivityUtils { .setValue(String.join("+", id.split("\\+")[0], qualifier, id.split("\\+")[1])) .build(); - ClientNodeEdgePoint cnep = new ClientNodeEdgePointBuilder() + ParentNodeEdgePoint pnep = new ParentNodeEdgePointBuilder() .setNodeEdgePointUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", id.split("\\+")[0], qualifier, id.split("\\+")[1])).getBytes(StandardCharsets.UTF_8)) .toString())) .setNodeUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+",id.split("\\+")[0], - nodeLayer)).getBytes(StandardCharsets.UTF_8)) + TapiStringConstants.XPDR)).getBytes(StandardCharsets.UTF_8)) + .toString())) + .setTopologyUuid(new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER + .getBytes(StandardCharsets.UTF_8)).toString())) + .build(); + String clientQualifier = ""; + String clientNodeLayer = TapiStringConstants.PHTNC_MEDIA; + switch (qualifier) { + case TapiStringConstants.PHTNC_MEDIA_OTS: + clientQualifier = TapiStringConstants.OTSI_MC; + break; + case TapiStringConstants.OTSI_MC: + clientQualifier = TapiStringConstants.E_ODU; + clientNodeLayer = TapiStringConstants.ODU; + break; + case TapiStringConstants.E_ODU: + clientQualifier = TapiStringConstants.DSR; + clientNodeLayer = TapiStringConstants.DSR; + break; + default : + LOG.debug("no client CEP for DSR NEP {}", + String.join("+", id.split("\\+")[0], qualifier, id.split("\\+")[1])); + break; + } + ClientNodeEdgePoint cnep = new ClientNodeEdgePointBuilder() + .setNodeEdgePointUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", id.split("\\+")[0], + clientQualifier, id.split("\\+")[1])).getBytes(StandardCharsets.UTF_8)) + .toString())) + .setNodeUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+",id.split("\\+")[0], + TapiStringConstants.XPDR)).getBytes(StandardCharsets.UTF_8)) .toString())) .setTopologyUuid(new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER .getBytes(StandardCharsets.UTF_8)).toString())) @@ -1074,13 +1140,16 @@ public final class ConnectivityUtils { .setUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", "CEP", id.split("\\+")[0], qualifier, id.split("\\+")[1])).getBytes(StandardCharsets.UTF_8)) .toString())) - .setClientNodeEdgePoint(Map.of(cnep.key(), cnep)) + .setParentNodeEdgePoint(pnep) .setName(Map.of(cepName.key(), cepName)) .setConnectionPortRole(PortRole.SYMMETRIC) .setDirection(Direction.BIDIRECTIONAL) .setOperationalState(OperationalState.ENABLED) .setLifecycleState(LifecycleState.INSTALLED) .setLayerProtocolName(cepProtocol); + if (!(TapiStringConstants.DSR.equals(qualifier))) { + cepBldr.setClientNodeEdgePoint(Map.of(cnep.key(), cnep)); + } return cepBldr.build(); } @@ -1375,6 +1444,47 @@ public final class ConnectivityUtils { this.tapiContext.updateTopologyWithCep(topoUuid, nodeUuid, nepUuid, cep); } + + private void putRdmNepInTopologyContext(String orNodeId, String orTpId, String qual, OwnedNodeEdgePoint onep) { + LOG.info("NEP id before Merge = {}", String.join("+", orNodeId, qual, orTpId)); + LOG.info("Node of NEP id before Merge = {}", String.join("+", orNodeId, TapiStringConstants.PHTNC_MEDIA)); + // Give uuids so that it is easier to look for things: topology uuid, node uuid, nep uuid, cep + Uuid topoUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER + .getBytes(Charset.forName("UTF-8"))).toString()); + Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", orNodeId, TapiStringConstants.PHTNC_MEDIA) + .getBytes(Charset.forName("UTF-8"))).toString()); + Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", orNodeId, qual, orTpId) + .getBytes(Charset.forName("UTF-8"))).toString()); + updateTopologyWithNep(topoUuid, nodeUuid, nepUuid, onep); + } + + public void updateTopologyWithNep(Uuid topoUuid, Uuid nodeUuid, Uuid nepUuid, OwnedNodeEdgePoint onep) { + // TODO: verify this is correct. Should we identify the context IID with the context UUID?? + InstanceIdentifier onepIID = InstanceIdentifier.builder(Context.class) + .augmentation(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.Context1.class) + .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.context.TopologyContext.class) + .child(Topology.class, new TopologyKey(topoUuid)) + .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node.class, + new NodeKey(nodeUuid)) + .child(OwnedNodeEdgePoint.class, new OwnedNodeEdgePointKey(nepUuid)) + .build(); + try { + Optional optionalOnep = this.networkTransactionService.read( + LogicalDatastoreType.OPERATIONAL, onepIID).get(); + if (optionalOnep.isPresent()) { + LOG.error("ONEP is already present in datastore"); + return; + } + // merge in datastore + this.networkTransactionService.merge(LogicalDatastoreType.OPERATIONAL, onepIID, + onep); + this.networkTransactionService.commit().get(); + LOG.info("NEP {} added successfully.", onep.getName().toString()); + } catch (InterruptedException | ExecutionException e) { + LOG.error("Couldnt put NEP {} in topology, error = ", onep.getName().toString(), e); + } + } + public Map @@ -1397,11 +1507,11 @@ public final class ConnectivityUtils { ConnectionType connType = null; ServiceFormat serviceFormat = null; String nodeAid = String.join("+", endPointMap.values().stream().findFirst().orElseThrow().getLocalId(), - TapiStringConstants.DSR); + TapiStringConstants.XPDR); String nodeZid = String.join("+", endPointMap.values().stream().skip(1).findFirst().orElseThrow().getLocalId(), - TapiStringConstants.DSR); - LOG.debug("Node a = {}", nodeAid); - LOG.debug("Node z = {}", nodeZid); + TapiStringConstants.XPDR); + LOG.info("NodeAid = {}", nodeAid); + LOG.info("NodeZid = {}", nodeZid); //switch (constraint.getServiceLayer().getIntValue()) { switch (input.getLayerProtocolName().getIntValue()) { case 0: @@ -1423,17 +1533,6 @@ public final class ConnectivityUtils { LOG.info("PHOTONIC"); connType = getConnectionTypePhtnc(endPointMap.values()); serviceFormat = getServiceFormatPhtnc(endPointMap.values()); - if (serviceFormat.equals(ServiceFormat.OC)) { - nodeAid = String.join("+", endPointMap.values().stream().findFirst().orElseThrow().getLocalId(), - TapiStringConstants.PHTNC_MEDIA); - nodeZid = String.join("+", endPointMap.values().stream().skip(1).findFirst().orElseThrow() - .getLocalId(), TapiStringConstants.PHTNC_MEDIA); - } else { - nodeAid = String.join("+", endPointMap.values().stream().findFirst().orElseThrow().getLocalId(), - TapiStringConstants.OTSI); - nodeZid = String.join("+", endPointMap.values().stream().skip(1).findFirst().orElseThrow() - .getLocalId(), TapiStringConstants.OTSI); - } LOG.debug("Node a photonic = {}", nodeAid); LOG.debug("Node z photonic = {}", nodeZid); break; @@ -1502,7 +1601,15 @@ public final class ConnectivityUtils { LOG.error("Nep not found in datastore"); return null; } - String nodeName = endPoint.getName().values().stream().findFirst().orElseThrow().getValue(); + String nodeName = ""; + for (Map.Entry entry: + endPoint.getName().entrySet()) { + if (!("Node Type").equals(entry.getValue().getValueName())) { + nodeName = entry.getValue().getValue(); + } + } +// String nodeName = endPoint.getName().values().stream().findFirst().orElseThrow().getValue(); String nodeid = String.join("-", nodeName.split("-")[0], nodeName.split("-")[1]); String nepName = nep.getName().values().stream().findFirst().orElseThrow().getValue(); String txPortDeviceName = nepName.split("\\+")[0]; @@ -1585,6 +1692,7 @@ public final class ConnectivityUtils { Uuid sipUuid = endPoint.getServiceInterfacePoint().getServiceInterfacePointUuid(); // Todo -> need to find the NEP associated to that SIP Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes(nodeAid.getBytes(StandardCharsets.UTF_8)).toString()); + LOG.info("NodeA {} Uuid is {}", nodeAid, nodeUuid); org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node node = this.tapiContext.getTapiNode(this.tapiTopoUuid, nodeUuid); if (node == null) { @@ -1607,7 +1715,15 @@ public final class ConnectivityUtils { LOG.error("Nep not found in datastore"); return null; } - String nodeName = endPoint.getName().values().stream().findFirst().orElseThrow().getValue(); + String nodeName = ""; + for (Map.Entry entry: + endPoint.getName().entrySet()) { + if (!("Node Type").equals(entry.getValue().getValueName())) { + nodeName = entry.getValue().getValue(); + } + } +// String nodeName = endPoint.getName().values().stream().findFirst().orElseThrow().getValue(); String nodeid = String.join("-", nodeName.split("-")[0], nodeName.split("-")[1]); String nepName = nep.getName().values().stream().findFirst().orElseThrow().getValue(); String txPortDeviceName = nepName.split("\\+")[0]; @@ -1705,7 +1821,7 @@ public final class ConnectivityUtils { private ConnectionEndPoint getAssociatediODUCep(String spcXpdrNetwork) { Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", spcXpdrNetwork.split("\\+")[0], - TapiStringConstants.DSR).getBytes(StandardCharsets.UTF_8))).toString()); + TapiStringConstants.XPDR).getBytes(StandardCharsets.UTF_8))).toString()); Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", spcXpdrNetwork.split("\\+")[0], TapiStringConstants.I_ODU, spcXpdrNetwork.split("\\+")[1]).getBytes(StandardCharsets.UTF_8))) .toString()); @@ -1759,7 +1875,7 @@ public final class ConnectivityUtils { private OpenroadmNodeType getOpenRoadmNodeType(List xpdrNodelist) { List openroadmNodeTypeList = new ArrayList<>(); for (String xpdrNode:xpdrNodelist) { - Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+",xpdrNode, TapiStringConstants.DSR)) + Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+",xpdrNode, TapiStringConstants.XPDR)) .getBytes(StandardCharsets.UTF_8)).toString()); InstanceIdentifier nodeIID = InstanceIdentifier.builder( @@ -1791,4 +1907,41 @@ public final class ConnectivityUtils { } return openroadmNodeTypeList.get(0); } + + private OwnedNodeEdgePoint createRoadmNep(String orNodeId, String tpId, + boolean withSip, OperationalState operState, AdministrativeState adminState, String nepPhotonicSublayer) { + + //TODO : complete implementation with SIP + Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", orNodeId, nepPhotonicSublayer, + tpId)).getBytes(StandardCharsets.UTF_8)).toString()); + Name nepName = new NameBuilder() + .setValueName(TapiStringConstants.PHTNC_MEDIA + "NodeEdgePoint") + .setValue(String.join("+", orNodeId, nepPhotonicSublayer, tpId)) + .build(); + List sclpqiList = new ArrayList<>(); + if (TapiStringConstants.MC.equals(nepPhotonicSublayer)) { + sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() + .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIERMC.VALUE) + .setNumberOfCepInstances(Uint64.valueOf(1)) + .build()); + } else { + sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() + .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTSiMC.VALUE) + .setNumberOfCepInstances(Uint64.valueOf(1)) + .build()); + } + OwnedNodeEdgePoint onep = new OwnedNodeEdgePointBuilder() + .setUuid(nepUuid) + .setLayerProtocolName(LayerProtocolName.PHOTONICMEDIA) + .setName(Map.of(nepName.key(), nepName)) + .setSupportedCepLayerProtocolQualifierInstances(sclpqiList) + .setDirection(Direction.BIDIRECTIONAL) + .setLinkPortRole(PortRole.SYMMETRIC) + .setAdministrativeState(adminState).setOperationalState(operState) + .setLifecycleState(LifecycleState.INSTALLED) + .build(); + + return onep; + } + } diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/connectivity/TapiConnectivityImpl.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/connectivity/TapiConnectivityImpl.java index d29513049..c4b01670f 100644 --- a/tapi/src/main/java/org/opendaylight/transportpce/tapi/connectivity/TapiConnectivityImpl.java +++ b/tapi/src/main/java/org/opendaylight/transportpce/tapi/connectivity/TapiConnectivityImpl.java @@ -266,25 +266,29 @@ public class TapiConnectivityImpl implements TapiConnectivityService { @Override public ListenableFuture> deleteConnectivityService( DeleteConnectivityServiceInput input) { - // TODO Auto-generated method stub - // TODO add try - String serviceName = null; - try { - serviceName = getNameFromUuid(input.getUuid(), "Service").iterator().next(); - } catch (ExecutionException e) { - LOG.error("Service {} to be deleted not found in the DataStore", e.getMessage()); - return RpcResultBuilder.failed() - .withError(ErrorType.RPC, "Failed to delete Service") - .buildFuture(); - } + List serviceName = null; if (input.getUuid() != null) { + try { + serviceName = getNameFromUuid(input.getUuid(), "Service"); + } catch (ExecutionException e) { + LOG.error("Service {} to be deleted not found in the DataStore", e.getMessage()); + return RpcResultBuilder.failed() + .withError(ErrorType.RPC, "Failed to delete Service") + .buildFuture(); + } catch (NoSuchElementException e) { + LOG.error("Service {} to be deleted not found in the DataStore", e.getMessage()); + return RpcResultBuilder.failed() + .withError(ErrorType.RPC, "Failed to delete Service") + .buildFuture(); + } + LOG.debug("The service {}, of name {} has been found in the DS", input.getUuid().toString(), serviceName); try { Uuid serviceUuid = input.getUuid(); this.tapiContext.deleteConnectivityService(serviceUuid); ListenableFuture> output = this.serviceHandler.serviceDelete(new ServiceDeleteInputBuilder() .setServiceDeleteReqInfo(new ServiceDeleteReqInfoBuilder() - .setServiceName(serviceName) + .setServiceName(input.getUuid().getValue()) .setTailRetention(ServiceDeleteReqInfo.TailRetention.No) .build()) .setSdncRequestHeader(new SdncRequestHeaderBuilder() @@ -303,10 +307,13 @@ public class TapiConnectivityImpl implements TapiConnectivityService { LOG.error("Failed to delete service. Deletion process failed"); } catch (InterruptedException | ExecutionException e) { LOG.error("Failed to delete service.", e); + return RpcResultBuilder.failed() + .withError(ErrorType.RPC, "Failed to delete Service") + .buildFuture(); } } return RpcResultBuilder.failed() - .withError(ErrorType.RPC, "Failed to delete Service") + .withError(ErrorType.RPC, "Failed to delete Service, service uuid in input is null") .buildFuture(); } @@ -353,41 +360,10 @@ public class TapiConnectivityImpl implements TapiConnectivityService { .build(); } - private Map createEndPoints( - Map endPoints) { - Map endPointMap = new HashMap<>(); - for (org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121 - .create.connectivity.service.input.EndPoint ep: endPoints.values()) { - EndPoint endpoint = new EndPointBuilder() - .setServiceInterfacePoint(new ServiceInterfacePointBuilder() - .setServiceInterfacePointUuid(ep.getServiceInterfacePoint().getServiceInterfacePointUuid()) - .build()) - .setName(ep.getName()) - .setAdministrativeState(ep.getAdministrativeState()) - .setDirection(ep.getDirection()) - .setLifecycleState(ep.getLifecycleState()) - .setOperationalState(ep.getOperationalState()) - .setLayerProtocolName(ep.getLayerProtocolName()) - // TODO: implement bandwidth profile - .setCapacity(new CapacityBuilder() - .setTotalSize(new TotalSizeBuilder().build()) -// .setBandwidthProfile(new BandwidthProfileBuilder().build()) - .build()) - .setProtectionRole(ep.getProtectionRole()) - .setRole(ep.getRole()) - .setLocalId(ep.getLocalId()) - .build(); - endPointMap.put(endpoint.key(), endpoint); - } - return endPointMap; - } - - public List getNameFromUuid(Uuid uuid, String typeOfNode) throws ExecutionException { + public List getNameFromUuid(Uuid uuid, String typeOfNode) throws ExecutionException, + NoSuchElementException { Map nameMap = new HashMap<>(); - if ("service".equals(typeOfNode)) { + if ("Service".equals(typeOfNode)) { ConnectivityService conServ = null; InstanceIdentifier nodeIID = InstanceIdentifier.builder(Context.class) .augmentation( @@ -400,21 +376,61 @@ public class TapiConnectivityImpl implements TapiConnectivityService { try { conServ = conServFuture.get().orElseThrow(); } catch (InterruptedException e) { + LOG.error("GetNamefromUuid Interrupt exception: Service not in Datastore, Interruption of the process"); Thread.currentThread().interrupt(); //TODO: investigate on how to throw Interrupted exception (generate a check violation error) } catch (ExecutionException e) { throw new ExecutionException("Unable to get from mdsal service: " + nodeIID .firstKeyOf(ConnectivityService.class).getUuid().getValue(), e); } catch (NoSuchElementException e) { - return null; + throw new NoSuchElementException("Unable to get from mdsal service: " + nodeIID + .firstKeyOf(ConnectivityService.class).getUuid().getValue(), e); + //return null; } nameMap = conServ.getName(); } List nameList = new ArrayList<>(); for (Map.Entry entry : nameMap.entrySet()) { - nameList.add(entry.getValue().getValueName()); + nameList.add(entry.getValue().getValue()); } + LOG.debug("The service name of service {}, is {}", uuid.toString(), nameList.toString()); return nameList; } + + private Map createEndPoints( + Map endPoints) { + Map endPointMap = new HashMap<>(); + for (org.opendaylight.yang.gen.v1.urn + .onf.otcc.yang.tapi.connectivity.rev221121.create.connectivity.service.input.EndPoint ep: + endPoints.values()) { + EndPoint endpoint = new EndPointBuilder() + .setServiceInterfacePoint(new ServiceInterfacePointBuilder() + .setServiceInterfacePointUuid(ep.getServiceInterfacePoint().getServiceInterfacePointUuid()) + .build()) + .setName(ep.getName()) + .setAdministrativeState(ep.getAdministrativeState()) + .setDirection(ep.getDirection()) + .setLifecycleState(ep.getLifecycleState()) + .setOperationalState(ep.getOperationalState()) + .setLayerProtocolName(ep.getLayerProtocolName()) + // TODO: implement bandwidth profile + .setCapacity(new CapacityBuilder() + .setTotalSize(new TotalSizeBuilder().build()) +// .setBandwidthProfile(new BandwidthProfileBuilder().build()) // TODO: implement bandwidth profile + .build()) + .setProtectionRole(ep.getProtectionRole()) + .setRole(ep.getRole()) + .setLocalId(ep.getLocalId()) + .build(); + endPointMap.put(endpoint.key(), endpoint); + } + return endPointMap; + } + + + } diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/TapiProvider.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/TapiProvider.java index b1bddf85c..fe13e5906 100644 --- a/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/TapiProvider.java +++ b/tapi/src/main/java/org/opendaylight/transportpce/tapi/impl/TapiProvider.java @@ -114,8 +114,9 @@ public class TapiProvider { TapiRendererNotificationHandler rendererListenerImpl = new TapiRendererNotificationHandler(dataBroker, notificationPublishService); - new TapiConnectivityImpl(this.serviceHandler, tapiContext, connectivityUtils, pceListenerImpl, - rendererListenerImpl, networkTransactionService); + TapiConnectivityImpl tapiConnectivity = new TapiConnectivityImpl(this.serviceHandler, tapiContext, + connectivityUtils, pceListenerImpl, rendererListenerImpl, networkTransactionService); + rpcRegistrations.add(rpcProviderService.registerRpcImplementations(tapiConnectivity.registerRPCs())); TapiTopologyImpl topo = new TapiTopologyImpl(this.dataBroker, tapiContext, topologyUtils, tapiLink); rpcRegistrations.add(rpcProviderService.registerRpcImplementations(topo.registerRPCs())); diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/listeners/TapiNetworkModelNotificationHandler.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/listeners/TapiNetworkModelNotificationHandler.java index c2e0af056..b312517e2 100644 --- a/tapi/src/main/java/org/opendaylight/transportpce/tapi/listeners/TapiNetworkModelNotificationHandler.java +++ b/tapi/src/main/java/org/opendaylight/transportpce/tapi/listeners/TapiNetworkModelNotificationHandler.java @@ -35,11 +35,11 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Admi import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Context; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.DateAndTime; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.LayerProtocolName; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.OBJECTTYPETAPICONTEXT; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.OperationalState; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Uuid; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.Name; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.NameKey; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.CONNECTIVITYOBJECTTYPECONNECTIVITYSERVICE; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.OwnedNodeEdgePoint1; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connection.LowerConnection; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection; @@ -49,7 +49,6 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev22112 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.ConnectivityServiceBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.ConnectivityServiceKey; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.context.ConnectivityContext; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.EventNotification; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.NOTIFICATIONTYPEATTRIBUTEVALUECHANGE; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.NameAndValueChange; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.Notification; @@ -61,6 +60,7 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev22112 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.notification.rev221121.notification.TargetObjectNameKey; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.Context1; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.NodeEdgePointRef; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.TOPOLOGYOBJECTTYPENODEEDGEPOINT; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.context.TopologyContext; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePoint; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePointKey; @@ -105,7 +105,7 @@ public class TapiNetworkModelNotificationHandler { private void onNotification(Notification notification) { LOG.info("Received network model notification {}", notification); if (notification.getNotificationType().equals(NOTIFICATIONTYPEATTRIBUTEVALUECHANGE.VALUE) - && notification.getTargetObjectType().equals(OBJECTTYPETAPICONTEXT.VALUE)) { + && notification.getTargetObjectType().equals(TOPOLOGYOBJECTTYPENODEEDGEPOINT.VALUE)) { if (notification.getChangedAttributes() == null) { return; } @@ -123,10 +123,11 @@ public class TapiNetworkModelNotificationHandler { } } - public void onEventNotification(EventNotification notification) { - LOG.info("Received network model notification {}", notification); - //TODO: see if implementation needed as this is declared as obsolete - } +// @Override +// public void onEventNotification(EventNotification notification) { +// LOG.info("Received network model notification {}", notification); +// //TODO: see if implementation needed and if in TAPI2.4, something supersedes this method +// } private PublishTapiNotificationService createNbiNotification(ConnectivityService connService) { if (connService == null) { @@ -168,7 +169,7 @@ public class TapiNetworkModelNotificationHandler { .setChangedAttributes(changedStates) .setEventTimeStamp(datetime) .setTargetObjectName(targetObjectNames) - .setTargetObjectType(OBJECTTYPETAPICONTEXT.VALUE) + .setTargetObjectType(CONNECTIVITYOBJECTTYPECONNECTIVITYSERVICE.VALUE) .setLayerProtocolName(connService.getLayerProtocolName()) .build(); } @@ -338,7 +339,7 @@ public class TapiNetworkModelNotificationHandler { // To check if the oneps are from the original Top connection newConnState = getConnectionState(changedOneps, onepStates, newConn); } - + LOG.debug("Analysing connection = {} ", newConn.getName().toString()); LOG.info("Previous connection state = {} & New connection state = {}", newConn.getOperationalState().getName(), newConnState.getName()); Connection changedConn = new ConnectionBuilder(newConn).setOperationalState(newConnState).build(); diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/listeners/TapiPceNotificationHandler.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/listeners/TapiPceNotificationHandler.java index 3ff959799..5fbb2ff2f 100644 --- a/tapi/src/main/java/org/opendaylight/transportpce/tapi/listeners/TapiPceNotificationHandler.java +++ b/tapi/src/main/java/org/opendaylight/transportpce/tapi/listeners/TapiPceNotificationHandler.java @@ -9,6 +9,7 @@ package org.opendaylight.transportpce.tapi.listeners; import edu.umd.cs.findbugs.annotations.SuppressFBWarnings; import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.Comparator; import java.util.HashMap; @@ -38,6 +39,7 @@ import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdes import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.resource.resource.Node; import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.pathdescription.rev230501.pce.resource.resource.resource.TerminationPoint; import org.opendaylight.yang.gen.v1.http.org.transportpce.b.c._interface.service.types.rev220118.RpcStatusEx; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.AdministrativeState; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Context; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Direction; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.ForwardingDirection; @@ -61,6 +63,8 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev22112 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connection.LowerConnectionKey; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connection.end.point.ClientNodeEdgePoint; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connection.end.point.ClientNodeEdgePointBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connection.end.point.ParentNodeEdgePoint; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connection.end.point.ParentNodeEdgePointBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.ConnectivityService; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.ConnectivityServiceBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.ConnectivityServiceKey; @@ -70,14 +74,19 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev22112 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.context.ConnectivityContextBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.context.topology.context.topology.node.owned.node.edge.point.CepList; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.context.topology.context.topology.node.owned.node.edge.point.CepListBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.PHOTONICLAYERQUALIFIERMC; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.PHOTONICLAYERQUALIFIEROTSiMC; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.context.TopologyContext; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePoint; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePointBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePointKey; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.SupportedCepLayerProtocolQualifierInstances; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.SupportedCepLayerProtocolQualifierInstancesBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.NodeKey; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.Topology; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.TopologyKey; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; +import org.opendaylight.yangtools.yang.common.Uint64; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -173,6 +182,8 @@ public class TapiPceNotificationHandler { // Connections must be with a locked stated. As the renderer hasnt implemented yet the oc's Map connectionMap = createConnectionsAndCepsForService(pathDescription, input.getLayerProtocolName()); + LOG.debug("Connection Map from createConnectionsAndCepsForService is {}, LAYERPROTOCOL of service is {} ", + connectionMap.toString(), input.getLayerProtocolName()); // add connections to connection context and to connectivity context updateConnectionContextWithConn(this.connectionFullMap, connectionMap, serviceUuid); } @@ -341,6 +352,7 @@ public class TapiPceNotificationHandler { default: LOG.error("Service type format {} not supported", serviceProtName.getName()); } + LOG.info("CONNSERVERMAP PceListener= {}", connectionServMap.toString()); return connectionServMap; } @@ -416,9 +428,10 @@ public class TapiPceNotificationHandler { LOG.info("Creating ceps and xc for xpdr {}", xpdr); String spcXpdrClient = xpdrClientTplist.stream().filter(netp -> netp.contains(xpdr)).findFirst() .orElseThrow(); - ConnectionEndPoint netCep1 = createCepXpdr(spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.DSR, + ConnectionEndPoint netCep1 = createCepXpdr(spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.XPDR, LayerProtocolName.DSR); - putXpdrCepInTopologyContext(xpdr, spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.DSR, netCep1); + putXpdrCepInTopologyContext(xpdr, spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.XPDR, + netCep1); cepMapDsr.put(netCep1.key(), netCep1); } @@ -458,23 +471,24 @@ public class TapiPceNotificationHandler { LOG.info("Creating ceps and xc for xpdr {}", xpdr); String spcXpdrClient = xpdrClientTplist.stream().filter(netp -> netp.contains(xpdr)).findFirst() .orElseThrow(); - ConnectionEndPoint netCep1 = createCepXpdr(spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.DSR, - LayerProtocolName.DSR); - putXpdrCepInTopologyContext(xpdr, spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.DSR, netCep1); + ConnectionEndPoint clientCep1 = createCepXpdr(spcXpdrClient, TapiStringConstants.DSR, + TapiStringConstants.XPDR, LayerProtocolName.DSR); + putXpdrCepInTopologyContext(xpdr, spcXpdrClient, TapiStringConstants.DSR, TapiStringConstants.XPDR, + clientCep1); - ConnectionEndPoint netCep2 = createCepXpdr(spcXpdrClient, TapiStringConstants.E_ODU, - TapiStringConstants.DSR, LayerProtocolName.ODU); - putXpdrCepInTopologyContext(xpdr, spcXpdrClient, TapiStringConstants.E_ODU, TapiStringConstants.DSR, - netCep2); + ConnectionEndPoint clientCep2 = createCepXpdr(spcXpdrClient, TapiStringConstants.E_ODU, + TapiStringConstants.XPDR, LayerProtocolName.ODU); + putXpdrCepInTopologyContext(xpdr, spcXpdrClient, TapiStringConstants.E_ODU, TapiStringConstants.XPDR, + clientCep2); String spcXpdrNetwork = getAssociatedNetworkPort(spcXpdrClient, xpdrNetworkTplist); ConnectionEndPoint netCep3 = getAssociatediODUCep(spcXpdrNetwork); - cepMapDsr.put(netCep1.key(), netCep1); - cepMapOdu.put(netCep2.key(), netCep2); + cepMapDsr.put(clientCep1.key(), clientCep1); + cepMapOdu.put(clientCep2.key(), clientCep2); // Create x connection between I_ODU and E_ODU within xpdr org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection - connection = createXCBetweenCeps(netCep2, netCep3, spcXpdrClient, spcXpdrNetwork, + connection = createXCBetweenCeps(clientCep2, netCep3, spcXpdrClient, spcXpdrNetwork, TapiStringConstants.ODU, LayerProtocolName.ODU); this.connectionFullMap.put(connection.key(), connection); @@ -528,8 +542,8 @@ public class TapiPceNotificationHandler { String spcXpdrNetwork = xpdrNetworkTplist.stream().filter(netp -> netp.contains(xpdr)).findFirst() .orElseThrow(); ConnectionEndPoint netCep1 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.I_ODU, - TapiStringConstants.DSR, LayerProtocolName.ODU); - putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.I_ODU, TapiStringConstants.DSR, + TapiStringConstants.XPDR, LayerProtocolName.ODU); + putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.I_ODU, TapiStringConstants.XPDR, netCep1); cepMap.put(netCep1.key(), netCep1); @@ -555,12 +569,11 @@ public class TapiPceNotificationHandler { private Map createXpdrCepsAndConnectionsPht(List xpdrNetworkTplist, List xpdrNodelist) { - Map connServMap = new HashMap<>(); Map cepMap = new HashMap<>(); // TODO: when upgrading the models to 2.1.3, get the connection inclusion because those connections will // be added to the lower connection of a top connection - Map xcMap = new HashMap<>(); +// Map xcMap = new HashMap<>(); // create ceps and xc connections within xpdr for (String xpdr:xpdrNodelist) { @@ -568,46 +581,39 @@ public class TapiPceNotificationHandler { String spcXpdrNetwork = xpdrNetworkTplist.stream().filter(netp -> netp.contains(xpdr)).findFirst() .orElseThrow(); // There should be 1 network tp per xpdr - // TODO photonic media model should be updated to have the corresponding CEPs. I will just create - // 3 different MC CEPs giving different IDs to show that they are different - // Create 3 CEPs for each xpdr otsi node and the corresponding cross connection matchin the NEPs - ConnectionEndPoint netCep1 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.PHTNC_MEDIA, - TapiStringConstants.OTSI, LayerProtocolName.PHOTONICMEDIA); - putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.PHTNC_MEDIA, TapiStringConstants.OTSI, - netCep1); - ConnectionEndPoint netCep2 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.E_OTSI, - TapiStringConstants.OTSI, LayerProtocolName.PHOTONICMEDIA); - putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.E_OTSI, TapiStringConstants.OTSI, + // Just create 2 different CEPs (1 OTS + 1 OTSI_MC) + ConnectionEndPoint netCep1 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.PHTNC_MEDIA_OTS, + TapiStringConstants.XPDR, LayerProtocolName.PHOTONICMEDIA); + putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.PHTNC_MEDIA_OTS, + TapiStringConstants.XPDR, netCep1); + ConnectionEndPoint netCep2 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.OTSI_MC, + TapiStringConstants.XPDR, LayerProtocolName.PHOTONICMEDIA); + putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.OTSI_MC, TapiStringConstants.XPDR, netCep2); - ConnectionEndPoint netCep3 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.I_OTSI, - TapiStringConstants.OTSI, LayerProtocolName.PHOTONICMEDIA); - putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.I_OTSI, TapiStringConstants.OTSI, - netCep3); +// ConnectionEndPoint netCep3 = createCepXpdr(spcXpdrNetwork, TapiStringConstants.I_OTSI, +// TapiStringConstants.XPDR, LayerProtocolName.PHOTONICMEDIA); +// putXpdrCepInTopologyContext(xpdr, spcXpdrNetwork, TapiStringConstants.I_OTSI, TapiStringConstants.OTSI, +// netCep3); +// cepMap.put(netCep3.key(), netCep3); cepMap.put(netCep1.key(), netCep1); cepMap.put(netCep2.key(), netCep2); - cepMap.put(netCep3.key(), netCep3); - // Create x connection between I_OTSi and E_OTSi within xpdr - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection - connection = createXCBetweenCeps(netCep2, netCep3, spcXpdrNetwork, spcXpdrNetwork, - TapiStringConstants.OTSI, LayerProtocolName.PHOTONICMEDIA); - this.connectionFullMap.put(connection.key(), connection); - // Create X connection that will be added to the service object - LowerConnection conn = new LowerConnectionBuilder().setConnectionUuid(connection.getUuid()).build(); - xcMap.put(conn.key(), conn); } - // OTSi top connection between edge I_OTSI Xpdr + + // OTSi top connection between edge OTSI_MC Xpdr + Map xcMap = new HashMap<>(); String spcXpdr1 = xpdrNetworkTplist.stream().filter(adp -> adp.contains(xpdrNodelist .get(0))).findFirst().orElseThrow(); String spcXpdr2 = xpdrNetworkTplist.stream().filter(adp -> adp.contains(xpdrNodelist .get(xpdrNodelist.size() - 1))).findFirst().orElseThrow(); org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.Connection - connection = createTopConnection(spcXpdr1, spcXpdr2, cepMap, TapiStringConstants.I_OTSI, - LayerProtocolName.PHOTONICMEDIA, xcMap, this.topConnRdmRdm); + connection = createTopConnection(spcXpdr1, spcXpdr2, cepMap, TapiStringConstants.OTSI_MC, + LayerProtocolName.PHOTONICMEDIA, xcMap, this.topConnRdmRdm); this.connectionFullMap.put(connection.key(), connection); - // OTSi top connection that will be added to the service object + // OTSi top connection that will be added to the service object + Map connServMap = new HashMap<>(); Connection conn = new ConnectionBuilder().setConnectionUuid(connection.getUuid()).build(); connServMap.put(conn.key(), conn); this.topConnXpdrXpdrPhtn = conn; @@ -636,8 +642,8 @@ public class TapiPceNotificationHandler { // Create 3 CEPs for each AD and DEG and the corresponding cross connections, matching the NEPs // created in the topology creation // add CEPs to the topology to the corresponding ONEP - ConnectionEndPoint adCep1 = createCepRoadm(spcRdmAD, TapiStringConstants.PHTNC_MEDIA); - putRdmCepInTopologyContext(roadm, spcRdmAD, TapiStringConstants.PHTNC_MEDIA, adCep1); + ConnectionEndPoint adCep1 = createCepRoadm(spcRdmAD, TapiStringConstants.PHTNC_MEDIA_OTS); + putRdmCepInTopologyContext(roadm, spcRdmAD, TapiStringConstants.PHTNC_MEDIA_OTS, adCep1); ConnectionEndPoint adCep2 = createCepRoadm(spcRdmAD, TapiStringConstants.MC); putRdmCepInTopologyContext(roadm, spcRdmAD, TapiStringConstants.MC, adCep2); ConnectionEndPoint adCep3 = createCepRoadm(spcRdmAD, TapiStringConstants.OTSI_MC); @@ -649,12 +655,15 @@ public class TapiPceNotificationHandler { String spcRdmDEG = rdmDegTplist.stream().filter(adp -> adp.contains(roadm)).findFirst().orElseThrow(); LOG.info("Degree port of ROADm {} = {}", roadm, spcRdmDEG); - ConnectionEndPoint degCep1 = createCepRoadm(spcRdmDEG, TapiStringConstants.PHTNC_MEDIA); - putRdmCepInTopologyContext(roadm, spcRdmDEG, TapiStringConstants.PHTNC_MEDIA, degCep1); + ConnectionEndPoint degCep0 = createCepRoadm(spcRdmDEG, TapiStringConstants.PHTNC_MEDIA_OTS); + putRdmCepInTopologyContext(roadm, spcRdmDEG, TapiStringConstants.PHTNC_MEDIA_OTS, degCep0); + ConnectionEndPoint degCep1 = createCepRoadm(spcRdmDEG, TapiStringConstants.PHTNC_MEDIA_OMS); + putRdmCepInTopologyContext(roadm, spcRdmDEG, TapiStringConstants.PHTNC_MEDIA_OMS, degCep1); ConnectionEndPoint degCep2 = createCepRoadm(spcRdmDEG, TapiStringConstants.MC); putRdmCepInTopologyContext(roadm, spcRdmDEG, TapiStringConstants.MC, degCep2); ConnectionEndPoint degCep3 = createCepRoadm(spcRdmDEG, TapiStringConstants.OTSI_MC); putRdmCepInTopologyContext(roadm, spcRdmDEG, TapiStringConstants.OTSI_MC, degCep3); + cepMap.put(degCep0.key(), degCep0); cepMap.put(degCep1.key(), degCep1); cepMap.put(degCep2.key(), degCep2); cepMap.put(degCep3.key(), degCep3); @@ -685,12 +694,15 @@ public class TapiPceNotificationHandler { String spcRdmDEG1 = rdmDegTplist.stream().filter(adp -> adp.contains(roadm)).findFirst().orElseThrow(); LOG.info("Degree 1 port of ROADm {} = {}", roadm, spcRdmDEG1); - ConnectionEndPoint deg1Cep1 = createCepRoadm(spcRdmDEG1, TapiStringConstants.PHTNC_MEDIA); - putRdmCepInTopologyContext(roadm, spcRdmDEG1, TapiStringConstants.PHTNC_MEDIA, deg1Cep1); + ConnectionEndPoint deg1Cep0 = createCepRoadm(spcRdmDEG1, TapiStringConstants.PHTNC_MEDIA_OTS); + putRdmCepInTopologyContext(roadm, spcRdmDEG1, TapiStringConstants.PHTNC_MEDIA_OTS, deg1Cep0); + ConnectionEndPoint deg1Cep1 = createCepRoadm(spcRdmDEG1, TapiStringConstants.PHTNC_MEDIA_OMS); + putRdmCepInTopologyContext(roadm, spcRdmDEG1, TapiStringConstants.PHTNC_MEDIA_OMS, deg1Cep1); ConnectionEndPoint deg1Cep2 = createCepRoadm(spcRdmDEG1, TapiStringConstants.MC); putRdmCepInTopologyContext(roadm, spcRdmDEG1, TapiStringConstants.MC, deg1Cep2); ConnectionEndPoint deg1Cep3 = createCepRoadm(spcRdmDEG1, TapiStringConstants.OTSI_MC); putRdmCepInTopologyContext(roadm, spcRdmDEG1, TapiStringConstants.OTSI_MC, deg1Cep3); + cepMap.put(deg1Cep0.key(), deg1Cep0); cepMap.put(deg1Cep1.key(), deg1Cep1); cepMap.put(deg1Cep2.key(), deg1Cep2); cepMap.put(deg1Cep3.key(), deg1Cep3); @@ -699,12 +711,15 @@ public class TapiPceNotificationHandler { .orElseThrow(); LOG.info("Degree 2 port of ROADm {} = {}", roadm, spcRdmDEG2); - ConnectionEndPoint deg2Cep1 = createCepRoadm(spcRdmDEG2, TapiStringConstants.PHTNC_MEDIA); - putRdmCepInTopologyContext(roadm, spcRdmDEG2, TapiStringConstants.PHTNC_MEDIA, deg2Cep1); + ConnectionEndPoint deg2Cep0 = createCepRoadm(spcRdmDEG2, TapiStringConstants.PHTNC_MEDIA_OTS); + putRdmCepInTopologyContext(roadm, spcRdmDEG2, TapiStringConstants.PHTNC_MEDIA_OTS, deg2Cep0); + ConnectionEndPoint deg2Cep1 = createCepRoadm(spcRdmDEG2, TapiStringConstants.PHTNC_MEDIA_OMS); + putRdmCepInTopologyContext(roadm, spcRdmDEG2, TapiStringConstants.PHTNC_MEDIA_OMS, deg2Cep1); ConnectionEndPoint deg2Cep2 = createCepRoadm(spcRdmDEG2, TapiStringConstants.MC); putRdmCepInTopologyContext(roadm, spcRdmDEG2, TapiStringConstants.MC, deg2Cep2); ConnectionEndPoint deg2Cep3 = createCepRoadm(spcRdmDEG2, TapiStringConstants.OTSI_MC); putRdmCepInTopologyContext(roadm, spcRdmDEG2, TapiStringConstants.OTSI_MC, deg2Cep3); + cepMap.put(deg2Cep0.key(), deg2Cep0); cepMap.put(deg2Cep1.key(), deg2Cep1); cepMap.put(deg2Cep2.key(), deg2Cep2); cepMap.put(deg2Cep3.key(), deg2Cep3); @@ -785,12 +800,9 @@ public class TapiPceNotificationHandler { .onf.otcc.yang.tapi.connectivity.rev221121.connection.ConnectionEndPoint cep1 = new org.opendaylight.yang.gen.v1.urn .onf.otcc.yang.tapi.connectivity.rev221121.connection.ConnectionEndPointBuilder() - .setNodeEdgePointUuid(adCep1.getClientNodeEdgePoint() - .values().stream().findFirst().orElseThrow().getNodeEdgePointUuid()) - .setTopologyUuid(adCep1.getClientNodeEdgePoint() - .values().stream().findFirst().orElseThrow().getTopologyUuid()) - .setNodeUuid(adCep1.getClientNodeEdgePoint() - .values().stream().findFirst().orElseThrow().getNodeUuid()) + .setNodeEdgePointUuid(adCep1.getParentNodeEdgePoint().getNodeEdgePointUuid()) + .setNodeUuid(adCep1.getParentNodeEdgePoint().getNodeUuid()) + .setTopologyUuid(adCep1.getParentNodeEdgePoint().getTopologyUuid()) .setConnectionEndPointUuid(adCep1.getUuid()) .build(); org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.ConnectionEndPoint adCep2 = @@ -804,12 +816,9 @@ public class TapiPceNotificationHandler { .onf.otcc.yang.tapi.connectivity.rev221121.connection.ConnectionEndPoint cep2 = new org.opendaylight.yang.gen.v1.urn .onf.otcc.yang.tapi.connectivity.rev221121.connection.ConnectionEndPointBuilder() - .setNodeEdgePointUuid(adCep2.getClientNodeEdgePoint() - .values().stream().findFirst().orElseThrow().getNodeEdgePointUuid()) - .setTopologyUuid(adCep2.getClientNodeEdgePoint() - .values().stream().findFirst().orElseThrow().getTopologyUuid()) - .setNodeUuid(adCep2.getClientNodeEdgePoint() - .values().stream().findFirst().orElseThrow().getNodeUuid()) + .setNodeEdgePointUuid(adCep2.getParentNodeEdgePoint().getNodeEdgePointUuid()) + .setNodeUuid(adCep2.getParentNodeEdgePoint().getNodeUuid()) + .setTopologyUuid(adCep2.getParentNodeEdgePoint().getTopologyUuid()) .setConnectionEndPointUuid(adCep1.getUuid()) .build(); Map onepIID = InstanceIdentifier.builder(Context.class) + .augmentation(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.Context1.class) + .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.context.TopologyContext.class) + .child(Topology.class, new TopologyKey(topoUuid)) + .child(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node.class, + new NodeKey(nodeUuid)) + .child(OwnedNodeEdgePoint.class, new OwnedNodeEdgePointKey(nepUuid)) + .build(); + try { + Optional optionalOnep = this.networkTransactionService.read( + LogicalDatastoreType.OPERATIONAL, onepIID).get(); + if (optionalOnep.isPresent()) { + LOG.error("ONEP is already present in datastore"); + return; + } + // merge in datastore + this.networkTransactionService.merge(LogicalDatastoreType.OPERATIONAL, onepIID, + onep); + this.networkTransactionService.commit().get(); + LOG.info("NEP {} added successfully.", onep.getName().toString()); + } catch (InterruptedException | ExecutionException e) { + LOG.error("Couldnt put NEP {} in topology, error = ", onep.getName().toString(), e); + } + } + + private void updateConnectionContextWithConn( Map xpdrNodelist) { List openroadmNodeTypeList = new ArrayList<>(); for (String xpdrNode:xpdrNodelist) { - Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+",xpdrNode, TapiStringConstants.DSR)) + Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+",xpdrNode, TapiStringConstants.XPDR)) .getBytes(Charset.forName("UTF-8"))).toString()); InstanceIdentifier nodeIID @@ -1243,6 +1355,42 @@ public class TapiPceNotificationHandler { return clientPortList; } + private OwnedNodeEdgePoint createRoadmNep(String orNodeId, String tpId, + boolean withSip, OperationalState operState, AdministrativeState adminState, String nepPhotonicSublayer) { + + //TODO : complete implementation with SIP + Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", orNodeId, nepPhotonicSublayer, + tpId)).getBytes(StandardCharsets.UTF_8)).toString()); + Name nepName = new NameBuilder() + .setValueName(TapiStringConstants.PHTNC_MEDIA + "NodeEdgePoint") + .setValue(String.join("+", orNodeId, nepPhotonicSublayer, tpId)) + .build(); + List sclpqiList = new ArrayList<>(); + if (TapiStringConstants.MC.equals(nepPhotonicSublayer)) { + sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() + .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIERMC.VALUE) + .setNumberOfCepInstances(Uint64.valueOf(1)) + .build()); + } else { + sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() + .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTSiMC.VALUE) + .setNumberOfCepInstances(Uint64.valueOf(1)) + .build()); + } + OwnedNodeEdgePoint onep = new OwnedNodeEdgePointBuilder() + .setUuid(nepUuid) + .setLayerProtocolName(LayerProtocolName.PHOTONICMEDIA) + .setName(Map.of(nepName.key(), nepName)) + .setSupportedCepLayerProtocolQualifierInstances(sclpqiList) + .setDirection(Direction.BIDIRECTIONAL) + .setLinkPortRole(PortRole.SYMMETRIC) + .setAdministrativeState(adminState).setOperationalState(operState) + .setLifecycleState(LifecycleState.INSTALLED) + .build(); + + return onep; + } + public void setInput(CreateConnectivityServiceInput input) { this.input = input; } diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/listeners/TapiRendererNotificationHandler.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/listeners/TapiRendererNotificationHandler.java index 96e8dd95f..f65f35808 100644 --- a/tapi/src/main/java/org/opendaylight/transportpce/tapi/listeners/TapiRendererNotificationHandler.java +++ b/tapi/src/main/java/org/opendaylight/transportpce/tapi/listeners/TapiRendererNotificationHandler.java @@ -31,11 +31,11 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Admi import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Context; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.DateAndTime; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.LifecycleState; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.OBJECTTYPETAPICONTEXT; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.OperationalState; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Uuid; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.Name; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.global._class.NameKey; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.CONNECTIVITYOBJECTTYPECONNECTIVITYSERVICE; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.Context1; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.ConnectionBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.connectivity.context.ConnectionKey; @@ -361,7 +361,7 @@ public class TapiRendererNotificationHandler { .setChangedAttributes(changedStates) .setEventTimeStamp(datetime) .setTargetObjectName(targetObjectNames) - .setTargetObjectType(OBJECTTYPETAPICONTEXT.VALUE) + .setTargetObjectType(CONNECTIVITYOBJECTTYPECONNECTIVITYSERVICE.VALUE) .setLayerProtocolName(connService.getLayerProtocolName()) .build(); } diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/ConvertORTopoToTapiFullTopo.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/ConvertORTopoToTapiFullTopo.java index c1f13f119..59437a68d 100644 --- a/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/ConvertORTopoToTapiFullTopo.java +++ b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/ConvertORTopoToTapiFullTopo.java @@ -69,6 +69,8 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.no import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePoint; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePointBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePointKey; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.RiskParameterPac; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.RiskParameterPacBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.MappedServiceInterfacePoint; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.MappedServiceInterfacePointBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.MappedServiceInterfacePointKey; @@ -174,16 +176,16 @@ public class ConvertORTopoToTapiFullTopo { TapiStringConstants.XPDR)).getBytes(Charset.forName("UTF-8"))).toString()); this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.XPDR), nodeUuid); Name nameDsrNode = new NameBuilder().setValueName("dsr/odu node name").setValue( - String.join("+", this.ietfNodeId, TapiStringConstants.DSR)).build(); -// Name nameOtsiNode = new NameBuilder().setValueName("otsi node name").setValue( -// String.join("+", this.ietfNodeId, TapiStringConstants.OTSI)).build(); + String.join("+", this.ietfNodeId, TapiStringConstants.XPDR)).build(); + Name nameOtsiNode = new NameBuilder().setValueName("otsi node name").setValue( + String.join("+", this.ietfNodeId, TapiStringConstants.XPDR)).build(); Name nameNodeType = new NameBuilder().setValueName("Node Type") .setValue(this.ietfNodeType.getName()).build(); Set dsrLayerProtocols = Set.of(LayerProtocolName.DSR, LayerProtocolName.ODU, - LayerProtocolName.PHOTONICMEDIA); + LayerProtocolName.DIGITALOTN, LayerProtocolName.PHOTONICMEDIA); org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology - .Node dsrNode = createTapiNode(Map.of(nameDsrNode.key(), nameDsrNode, nameNodeType.key(), nameNodeType), - dsrLayerProtocols); + .Node dsrNode = createTapiNode(Map.of(nameDsrNode.key(), nameDsrNode, nameOtsiNode.key(), nameOtsiNode, + nameNodeType.key(), nameNodeType), dsrLayerProtocols); LOG.info("XPDR Node {} should have {} NEPs and {} SIPs", this.ietfNodeId, this.oorClientPortList.size() + this.oorNetworkPortList.size(), this.oorClientPortList.size() + this.oorNetworkPortList.size()); @@ -231,9 +233,10 @@ public class ConvertORTopoToTapiFullTopo { link.getDestination().getDestNode().getValue().split("-")[0], link.getDestination().getDestNode().getValue().split("-")[1]), link.getDestination().getDestTp().getValue(), TapiStringConstants.OMS_RDM_RDM_LINK, - TapiStringConstants.PHTNC_MEDIA, TapiStringConstants.PHTNC_MEDIA, TapiStringConstants.PHTNC_MEDIA, - TapiStringConstants.PHTNC_MEDIA, adminState, operState, Set.of(LayerProtocolName.PHOTONICMEDIA), - Set.of(LayerProtocolName.PHOTONICMEDIA.getName()), this.tapiTopoUuid); + TapiStringConstants.PHTNC_MEDIA, TapiStringConstants.PHTNC_MEDIA, + TapiStringConstants.PHTNC_MEDIA_OTS, TapiStringConstants.PHTNC_MEDIA_OTS, adminState, operState, + Set.of(LayerProtocolName.PHOTONICMEDIA), Set.of(LayerProtocolName.PHOTONICMEDIA.getName()), + this.tapiTopoUuid); linksToNotConvert.add(link .augmentation(Link1.class) .getOppositeLink().getValue()); @@ -258,7 +261,7 @@ public class ConvertORTopoToTapiFullTopo { for (Node node:nodeList) { if (node.getSupportingNode().values().stream().noneMatch(sp -> sp.getNodeRef().getValue() .equals(this.ietfNodeId))) { - LOG.warn("Abstracted node {} is not part of {}", + LOG.debug("Abstracted node {} is not part of {}", node.getNodeId().getValue(), this.ietfNodeId); continue; } @@ -292,8 +295,6 @@ public class ConvertORTopoToTapiFullTopo { // TODO: deg port could be sip. e.g. MDONS oneplist.putAll(populateNepsForRdmNode(degPortList, false, TapiStringConstants.PHTNC_MEDIA_OTS)); oneplist.putAll(populateNepsForRdmNode(degPortList, false, TapiStringConstants.PHTNC_MEDIA_OMS)); - // oneplist.putAll(populateNepsForRdmNode(node.getNodeId().getValue(), degPortList, false - //, TapiStringConstants.PHTNC_MEDIA_OTS)); numNeps += degPortList.size() * 2; break; case 12: @@ -310,8 +311,6 @@ public class ConvertORTopoToTapiFullTopo { // Convert TP List in NEPs and put it in onepl LOG.info("Srg port List: {}", srgPortList); oneplist.putAll(populateNepsForRdmNode(srgPortList, true, TapiStringConstants.PHTNC_MEDIA_OTS)); - // oneplist.putAll(populateNepsForRdmNode(node.getNodeId().getValue(), srgPortList, true - // TapiStringConstants.PHTNC_MEDIA_OTS)); numNeps += srgPortList.size(); numSips += srgPortList.size(); break; @@ -321,9 +320,9 @@ public class ConvertORTopoToTapiFullTopo { } // create tapi Node // UUID - LOG.info("Creation of PHOTONIC node for {}", roadm.getNodeId().getValue()); Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", roadm.getNodeId().getValue(), TapiStringConstants.PHTNC_MEDIA)).getBytes(Charset.forName("UTF-8"))).toString()); + LOG.info("Creation of PHOTONIC node for {}, of Uuid {}", roadm.getNodeId().getValue(), nodeUuid.toString()); // Names Name nodeNames = new NameBuilder().setValueName("roadm node name") .setValue(String.join("+", roadm.getNodeId().getValue(), TapiStringConstants.PHTNC_MEDIA)).build(); @@ -383,10 +382,9 @@ public class ConvertORTopoToTapiFullTopo { .setRuleType(ruleTypes) .build(); ruleList.put(rule.key(), rule); - if (layerProtocols.contains(LayerProtocolName.DSR)) { + if (layerProtocols.contains(LayerProtocolName.DSR) + || layerProtocols.contains(LayerProtocolName.PHOTONICMEDIA)) { nodeUuid = getNodeUuid4Dsr(onepl, nodeRuleGroupList, ruleList); - } else if (layerProtocols.contains(LayerProtocolName.PHOTONICMEDIA)) { - nodeUuid = getNodeUuid4Photonic(onepl, nodeRuleGroupList, ruleList); } else { LOG.error("Undefined LayerProtocolName for {} node {}", nodeNames.get(nodeNames.keySet().iterator().next()) .getValueName(), nodeNames.get(nodeNames.keySet().iterator().next()).getValue()); @@ -404,6 +402,13 @@ public class ConvertORTopoToTapiFullTopo { .setWanderCharacteristic(TapiStringConstants.WANDER_VALUE) .setTrafficPropertyName("FIXED_LATENCY") .build(); + RiskCharacteristic riskCharacteristic = new RiskCharacteristicBuilder() + .setRiskCharacteristicName("risk characteristic") + .setRiskIdentifierList(Set.of("risk identifier1", "risk identifier2")) + .build(); + RiskParameterPac riskParamPac = new RiskParameterPacBuilder() + .setRiskCharacteristic(Map.of(riskCharacteristic.key(), riskCharacteristic)) + .build(); return new NodeBuilder() .setUuid(nodeUuid) .setName(nodeNames) @@ -415,6 +420,7 @@ public class ConvertORTopoToTapiFullTopo { .setNodeRuleGroup(nodeRuleGroupList) .setCostCharacteristic(Map.of(costCharacteristic.key(), costCharacteristic)) .setLatencyCharacteristic(Map.of(latencyCharacteristic.key(), latencyCharacteristic)) + .setRiskParameterPac(riskParamPac) .setErrorCharacteristic("error") .setLossCharacteristic("loss") .setRepeatDeliveryCharacteristic("repeat delivery") @@ -425,8 +431,8 @@ public class ConvertORTopoToTapiFullTopo { } private org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node - createRoadmTapiNode(Uuid nodeUuid, Map nameMap, Set layerProtocols, - Map oneplist) { + createRoadmTapiNode(Uuid nodeUuid, Map nameMap, Set layerProtocols, + Map oneplist) { // Empty random creation of mandatory fields for avoiding errors.... CostCharacteristic costCharacteristic = new CostCharacteristicBuilder() .setCostAlgorithm("Restricted Shortest Path - RSP") @@ -440,6 +446,13 @@ public class ConvertORTopoToTapiFullTopo { .setWanderCharacteristic(TapiStringConstants.WANDER_VALUE) .setTrafficPropertyName("FIXED_LATENCY") .build(); + RiskCharacteristic riskCharacteristic = new RiskCharacteristicBuilder() + .setRiskCharacteristicName("risk characteristic") + .setRiskIdentifierList(Set.of("risk identifier1", "risk identifier2")) + .build(); + RiskParameterPac riskParamPac = new RiskParameterPacBuilder() + .setRiskCharacteristic(Map.of(riskCharacteristic.key(), riskCharacteristic)) + .build(); return new NodeBuilder() .setUuid(nodeUuid) .setName(nameMap) @@ -451,6 +464,7 @@ public class ConvertORTopoToTapiFullTopo { .setNodeRuleGroup(createNodeRuleGroupForRdmNode(nodeUuid, oneplist.values())) .setCostCharacteristic(Map.of(costCharacteristic.key(), costCharacteristic)) .setLatencyCharacteristic(Map.of(latencyCharacteristic.key(), latencyCharacteristic)) + .setRiskParameterPac(riskParamPac) .setErrorCharacteristic("error") .setLossCharacteristic("loss") .setRepeatDeliveryCharacteristic("repeat delivery") @@ -460,138 +474,10 @@ public class ConvertORTopoToTapiFullTopo { .build(); } - private Uuid getNodeUuid4Photonic(Map onepl, - Map nodeRuleGroupList, - Map ruleList) { - Uuid nodeUuid; - nodeUuid = this.uuidMap.get(String.join("+", this.ietfNodeId, TapiStringConstants.OTSI)); - // iNep creation on otsi node - for (int i = 0; i < oorNetworkPortList.size(); i++) { - LOG.info("NEP = {}", String.join("+", this.ietfNodeId, TapiStringConstants.I_OTSI, - oorNetworkPortList.get(i).getTpId().getValue())); - Uuid nepUuid1 = new Uuid(UUID.nameUUIDFromBytes( - (String.join("+", this.ietfNodeId, TapiStringConstants.I_OTSI, - oorNetworkPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8"))) - .toString()); - this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.I_OTSI, - oorNetworkPortList.get(i).getTpId().getValue()), nepUuid1); - Name onedName = new NameBuilder() - .setValueName("iNodeEdgePoint") - .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.I_OTSI, - oorNetworkPortList.get(i).getTpId().getValue())) - .build(); - - OwnedNodeEdgePoint onep = createNep(oorNetworkPortList.get(i), Map.of(onedName.key(), onedName), - LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA, true, - String.join("+", this.ietfNodeId, TapiStringConstants.I_OTSI)); - onepl.put(onep.key(), onep); - } - // eNep creation on otsi node - for (int i = 0; i < oorNetworkPortList.size(); i++) { - LOG.info("NEP = {}", String.join("+", this.ietfNodeId, TapiStringConstants.E_OTSI, - oorNetworkPortList.get(i).getTpId().getValue())); - Uuid nepUuid2 = new Uuid(UUID.nameUUIDFromBytes( - (String.join("+", this.ietfNodeId, TapiStringConstants.E_OTSI, - oorNetworkPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8"))) - .toString()); - this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.E_OTSI, - oorNetworkPortList.get(i).getTpId().getValue()), nepUuid2); - Name onedName = new NameBuilder() - .setValueName("eNodeEdgePoint") - .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.E_OTSI, - oorNetworkPortList.get(i).getTpId().getValue())) - .build(); - - OwnedNodeEdgePoint onep = createNep(oorNetworkPortList.get(i), Map.of(onedName.key(), onedName), - LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA, false, - String.join("+", this.ietfNodeId, TapiStringConstants.E_OTSI)); - onepl.put(onep.key(), onep); - } - // Photonic Media Nep creation on otsi node - for (int i = 0; i < oorNetworkPortList.size(); i++) { - LOG.info("NEP = {}", String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA, - oorNetworkPortList.get(i).getTpId().getValue())); - Uuid nepUuid3 = new Uuid(UUID.nameUUIDFromBytes( - (String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA, - oorNetworkPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8"))) - .toString()); - this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA, - oorNetworkPortList.get(i).getTpId().getValue()), nepUuid3); - Name onedName = new NameBuilder() - .setValueName("PhotMedNodeEdgePoint") - .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA, - oorNetworkPortList.get(i).getTpId().getValue())) - .build(); - - OwnedNodeEdgePoint onep = createNep(oorNetworkPortList.get(i), Map.of(onedName.key(), onedName), - LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA, false, - String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA)); - onepl.put(onep.key(), onep); - } - // create NodeRuleGroup - int count = 1; - LOG.info("OTSi switching pool = {}", this.oorOduSwitchingPool.nonnullNonBlockingList().values()); - for (TerminationPoint tp : this.oorNetworkPortList) { - Map - nepList = new HashMap<>(); - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group - .NodeEdgePoint inep = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121 - .node.rule.group.NodeEdgePointBuilder() - .setTopologyUuid(tapiTopoUuid) - .setNodeUuid(this.uuidMap.get(String.join("+", this.ietfNodeId, TapiStringConstants.OTSI))) - .setNodeEdgePointUuid( - this.uuidMap.get(String.join("+", this.ietfNodeId, TapiStringConstants.I_OTSI, - tp.getTpId().getValue()))) - .build(); - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group - .NodeEdgePoint enep = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121 - .node.rule.group.NodeEdgePointBuilder() - .setTopologyUuid(tapiTopoUuid) - .setNodeUuid(this.uuidMap.get(String.join("+", this.ietfNodeId, TapiStringConstants.OTSI))) - .setNodeEdgePointUuid( - this.uuidMap.get(String.join("+", this.ietfNodeId, TapiStringConstants.E_OTSI, - tp.getTpId().getValue()))) - .build(); - nepList.put(inep.key(), inep); - nepList.put(enep.key(), enep); - // Empty random creation of mandatory fields for avoiding errors.... - CostCharacteristic costCharacteristic = new CostCharacteristicBuilder() - .setCostAlgorithm("Restricted Shortest Path - RSP") - .setCostName("HOP_COUNT") - .setCostValue(TapiStringConstants.COST_HOP_VALUE) - .build(); - LatencyCharacteristic latencyCharacteristic = new LatencyCharacteristicBuilder() - .setFixedLatencyCharacteristic(TapiStringConstants.FIXED_LATENCY_VALUE) - .setQueuingLatencyCharacteristic(TapiStringConstants.QUEING_LATENCY_VALUE) - .setJitterCharacteristic(TapiStringConstants.JITTER_VALUE) - .setWanderCharacteristic(TapiStringConstants.WANDER_VALUE) - .setTrafficPropertyName("FIXED_LATENCY") - .build(); - RiskCharacteristic riskCharacteristic = new RiskCharacteristicBuilder() - .setRiskCharacteristicName("risk characteristic") - .setRiskIdentifierList(Set.of("risk identifier1", "risk identifier2")) - .build(); - NodeRuleGroup nodeRuleGroup = new NodeRuleGroupBuilder() - .setUuid(new Uuid( - UUID.nameUUIDFromBytes(("otsi node rule group " + count).getBytes(Charset.forName("UTF-8"))) - .toString())) - .setRule(ruleList) - .setNodeEdgePoint(nepList) - .setRiskCharacteristic(Map.of(riskCharacteristic.key(), riskCharacteristic)) - .setCostCharacteristic(Map.of(costCharacteristic.key(), costCharacteristic)) - .setLatencyCharacteristic(Map.of(latencyCharacteristic.key(), latencyCharacteristic)) - .build(); - nodeRuleGroupList.put(nodeRuleGroup.key(), nodeRuleGroup); - count++; - } - return nodeUuid; - } - private Uuid getNodeUuid4Dsr(Map onepl, Map nodeRuleGroupList, Map ruleList) { Uuid nodeUuid; - nodeUuid = this.uuidMap.get(String.join("+", this.ietfNodeId, TapiStringConstants.DSR)); + nodeUuid = this.uuidMap.get(String.join("+", this.ietfNodeId, TapiStringConstants.XPDR)); // client nep creation on DSR node for (int i = 0; i < oorClientPortList.size(); i++) { LOG.info("NEP = {}", String.join("+", this.ietfNodeId, TapiStringConstants.DSR, @@ -620,11 +506,11 @@ public class ConvertORTopoToTapiFullTopo { for (int i = 0; i < oorNetworkPortList.size(); i++) { LOG.info("NEP = {}", String.join("+", this.ietfNodeId, TapiStringConstants.I_ODU, oorNetworkPortList.get(i).getTpId().getValue())); - Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes( + Uuid nepUuid1 = new Uuid(UUID.nameUUIDFromBytes( (String.join("+", this.ietfNodeId, TapiStringConstants.I_ODU, oorNetworkPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8"))).toString()); this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.I_ODU, - oorNetworkPortList.get(i).getTpId().getValue()), nepUuid); + oorNetworkPortList.get(i).getTpId().getValue()), nepUuid1); Name onedName = new NameBuilder() .setValueName("iNodeEdgePoint_N") .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.I_ODU, @@ -640,11 +526,11 @@ public class ConvertORTopoToTapiFullTopo { for (int i = 0; i < oorClientPortList.size(); i++) { LOG.info("NEP = {}", String.join("+", this.ietfNodeId, TapiStringConstants.E_ODU, oorClientPortList.get(i).getTpId().getValue())); - Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes( + Uuid nepUuid1 = new Uuid(UUID.nameUUIDFromBytes( (String.join("+", this.ietfNodeId, TapiStringConstants.E_ODU, oorClientPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8"))).toString()); this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.E_ODU, - oorClientPortList.get(i).getTpId().getValue()), nepUuid); + oorClientPortList.get(i).getTpId().getValue()), nepUuid1); Name onedName = new NameBuilder() .setValueName("eNodeEdgePoint_N") .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.E_ODU, @@ -656,6 +542,48 @@ public class ConvertORTopoToTapiFullTopo { TapiStringConstants.E_ODU)); onepl.put(onep.key(), onep); } + // OTS network nep creation + for (int i = 0; i < oorNetworkPortList.size(); i++) { + LOG.info("NEP = {}", String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA_OTS, + oorNetworkPortList.get(i).getTpId().getValue())); + Uuid nepUuid2 = new Uuid(UUID.nameUUIDFromBytes( + (String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA_OTS, + oorNetworkPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8"))) + .toString()); + this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA_OTS, + oorNetworkPortList.get(i).getTpId().getValue()), nepUuid2); + Name onedName = new NameBuilder() + .setValueName("eNodeEdgePoint") + .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA_OTS, + oorNetworkPortList.get(i).getTpId().getValue())) + .build(); + + OwnedNodeEdgePoint onep = createNep(oorNetworkPortList.get(i), Map.of(onedName.key(), onedName), + LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA, true, + String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA_OTS)); + onepl.put(onep.key(), onep); + } + // OTSI_MC network nep creation + for (int i = 0; i < oorNetworkPortList.size(); i++) { + LOG.info("NEP = {}", String.join("+", this.ietfNodeId, TapiStringConstants.OTSI_MC, + oorNetworkPortList.get(i).getTpId().getValue())); + Uuid nepUuid3 = new Uuid(UUID.nameUUIDFromBytes( + (String.join("+", this.ietfNodeId, TapiStringConstants.OTSI_MC, + oorNetworkPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8"))) + .toString()); + this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.OTSI_MC, + oorNetworkPortList.get(i).getTpId().getValue()), nepUuid3); + Name onedName = new NameBuilder() + .setValueName("PhotMedNodeEdgePoint") + .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.OTSI_MC, + oorNetworkPortList.get(i).getTpId().getValue())) + .build(); + + OwnedNodeEdgePoint onep = createNep(oorNetworkPortList.get(i), Map.of(onedName.key(), onedName), + LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA, true, + String.join("+", this.ietfNodeId, TapiStringConstants.OTSI_MC)); + onepl.put(onep.key(), onep); + } // create NodeRuleGroup int count = 1; LOG.info("ODU switching pool = {}", this.oorOduSwitchingPool.nonnullNonBlockingList().values()); @@ -678,7 +606,7 @@ public class ConvertORTopoToTapiFullTopo { .onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePointBuilder() .setTopologyUuid(tapiTopoUuid) .setNodeUuid(this.uuidMap.get(String.join("+", this.ietfNodeId, - TapiStringConstants.DSR))) + TapiStringConstants.XPDR))) .setNodeEdgePointUuid(this.uuidMap.get(String.join( "+", this.ietfNodeId, TapiStringConstants.DSR, tp.getValue()))) .build(); @@ -687,7 +615,7 @@ public class ConvertORTopoToTapiFullTopo { .onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePointBuilder() .setTopologyUuid(tapiTopoUuid) .setNodeUuid(this.uuidMap.get(String.join("+", this.ietfNodeId, - TapiStringConstants.DSR))) + TapiStringConstants.XPDR))) .setNodeEdgePointUuid(this.uuidMap.get(String.join( "+", this.ietfNodeId, TapiStringConstants.E_ODU, tp.getValue()))) .build(); @@ -695,6 +623,7 @@ public class ConvertORTopoToTapiFullTopo { nepList.put(nep2.key(), nep2); } } + //LOG.info("NEPLIST is {}", nepList.toString()); // Empty random creation of mandatory fields for avoiding errors.... CostCharacteristic costCharacteristic = new CostCharacteristicBuilder() .setCostAlgorithm("Restricted Shortest Path - RSP") @@ -755,8 +684,6 @@ public class ConvertORTopoToTapiFullTopo { .setAdministrativeState(adminState) .setOperationalState(operState) .setLifecycleState(LifecycleState.INSTALLED); -// .setTerminationDirection(TerminationDirection.BIDIRECTIONAL) -// .setTerminationState(TerminationState.TERMINATEDBIDIRECTIONAL); return onepBldr.build(); } @@ -769,7 +696,7 @@ public class ConvertORTopoToTapiFullTopo { AdminStates admin = tp.augmentation(TerminationPoint1.class).getAdministrativeState(); State oper = tp.augmentation(TerminationPoint1.class).getOperationalState(); // PHOTONIC MEDIA nep - LOG.info("PHOTO NEP = {}", String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA, + LOG.info("PHOTO NEP = {}", String.join("+", this.ietfNodeId, nepPhotonicSublayer, tp.getTpId().getValue())); Name nepName = new NameBuilder() .setValueName(nepPhotonicSublayer + "NodeEdgePoint") @@ -798,8 +725,6 @@ public class ConvertORTopoToTapiFullTopo { .setAdministrativeState(this.tapiLink.setTapiAdminState(admin.getName())) .setOperationalState(this.tapiLink.setTapiOperationalState(oper.getName())) .setLifecycleState(LifecycleState.INSTALLED) -// .setTerminationDirection(TerminationDirection.BIDIRECTIONAL) -// .setTerminationState(TerminationState.TERMINATEDBIDIRECTIONAL) .build(); onepMap.put(onep.key(), onep); } @@ -898,11 +823,6 @@ public class ConvertORTopoToTapiFullTopo { LayerProtocolName lpn) { List sclpqiList = new ArrayList<>(); - sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121 - .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder() - .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROMS.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(1)) - .build()); org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.TerminationPoint1 tp1 = tp.augmentation(org.opendaylight.yang.gen.v1.http .org.openroadm.otn.network.topology.rev230526.TerminationPoint1.class); @@ -1047,7 +967,7 @@ public class ConvertORTopoToTapiFullTopo { .build()); sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121 .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder() - .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROMS.VALUE) + .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTS.VALUE) .setNumberOfCepInstances(Uint64.valueOf(0)) .build()); } @@ -1057,16 +977,12 @@ public class ConvertORTopoToTapiFullTopo { break; } } - return sclpqiList; + return sclpqiList.stream().distinct().toList(); } private List createSupportedLayerProtocolQualifier(TerminationPoint tp, LayerProtocolName lpn) { List sclpqiList = new ArrayList<>(); - sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() - .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROMS.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(1)) - .build()); org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.TerminationPoint1 tp1 = tp.augmentation(org.opendaylight.yang.gen.v1.http .org.openroadm.otn.network.topology.rev230526.TerminationPoint1.class); @@ -1194,7 +1110,7 @@ public class ConvertORTopoToTapiFullTopo { .setNumberOfCepInstances(Uint64.valueOf(0)) .build()); sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() - .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROMS.VALUE) + .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTS.VALUE) .setNumberOfCepInstances(Uint64.valueOf(0)) .build()); } @@ -1204,7 +1120,7 @@ public class ConvertORTopoToTapiFullTopo { break; } } - return sclpqiList; + return sclpqiList.stream().distinct().toList(); } public void convertXpdrToRdmLinks(List oorClientPortList; - private List oorNetworkPortList; - private OduSwitchingPools oorOduSwitchingPool; + private AdminStates ietfNodeAdminState = null; + private State ietfNodeOperState = null; + private List oorClientPortList = null; + private List oorNetworkPortList = null; + private OduSwitchingPools oorOduSwitchingPool = null; private Uuid tapiTopoUuid; private Map tapiNodes; @@ -169,15 +177,17 @@ public class ConvertORTopoToTapiTopo { this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.XPDR), nodeUuid); Name nameDsr = new NameBuilder().setValueName("dsr/odu node name") .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.XPDR)).build(); + Name namePhot = new NameBuilder().setValueName("otsi node name") + .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.XPDR)).build(); Name nameNodeType = new NameBuilder().setValueName("Node Type") .setValue(this.ietfNodeType.getName()).build(); Set dsrLayerProtocols = Set.of(LayerProtocolName.DSR, LayerProtocolName.ODU, - LayerProtocolName.PHOTONICMEDIA); + LayerProtocolName.DIGITALOTN,LayerProtocolName.PHOTONICMEDIA); org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology - .Node dsrNode = createTapiNode(Map.of(nameDsr.key(), nameDsr, nameNodeType.key(), nameNodeType), + .Node dsrNode = createTapiNode(Map.of(nameDsr.key(), nameDsr, namePhot.key(), namePhot,nameNodeType.key(), + nameNodeType), dsrLayerProtocols); tapiNodes.put(dsrNode.key(), dsrNode); - } public void convertLinks(Map< @@ -218,9 +228,9 @@ public class ConvertORTopoToTapiTopo { ? null : this.tapiLink.setTapiOperationalState( otnlink.augmentation(Link1.class).getOperationalState(), oppLnkOpState).getName(); - + // TODO: Handle not only OTU4 but also other cases String prefix = otnlink.getLinkId().getValue().split("-")[0]; - String nodesQual = prefix.equals("OTU4") ? TapiStringConstants.OTSI : TapiStringConstants.DSR; + String nodesQual = TapiStringConstants.XPDR; String tpsQual = prefix.equals("OTU4") ? TapiStringConstants.I_OTSI : TapiStringConstants.E_ODU; LayerProtocolName layerProtocolName = prefix.equals("OTU4") ? LayerProtocolName.PHOTONICMEDIA : LayerProtocolName.ODU; @@ -232,6 +242,7 @@ public class ConvertORTopoToTapiTopo { Set.of(layerProtocolName.getName()), this.tapiTopoUuid); linksToNotConvert.add(oppositeLinkId); tapiLinks.put(tapLink.key(), tapLink); + LOG.debug("Links converted are as follow {}", tapiLinks.toString()); } } } @@ -245,15 +256,35 @@ public class ConvertORTopoToTapiTopo { Name nameNodeType = new NameBuilder().setValueName("Node Type") .setValue(OpenroadmNodeType.ROADM.getName()).build(); Set nodeLayerProtocols = Set.of(LayerProtocolName.PHOTONICMEDIA); - List tapiPhotonicNodes = pruneTapiPhotonicNodes(); + //At that stage, there is no Roadm in the tapiPhotonicNodes Map / only the transponders Map photonicNepUuisMap = convertListNodeWithListNepToMapForUuidAndName(tapiPhotonicNodes); // nep creation for rdm infra abstraction node Map onepMap = createNepForRdmNode(photonicNepUuisMap.size()); // node rule group creation Map nodeRuleGroupList = createNodeRuleGroupForRdmNode(nodeUuid, onepMap.values()); + // Empty random creation of mandatory fields for avoiding errors.... + CostCharacteristic costCharacteristic = new CostCharacteristicBuilder() + .setCostAlgorithm("Restricted Shortest Path - RSP") + .setCostName("HOP_COUNT") + .setCostValue(TapiStringConstants.COST_HOP_VALUE) + .build(); + LatencyCharacteristic latencyCharacteristic = new LatencyCharacteristicBuilder() + .setFixedLatencyCharacteristic(TapiStringConstants.FIXED_LATENCY_VALUE) + .setQueuingLatencyCharacteristic(TapiStringConstants.QUEING_LATENCY_VALUE) + .setJitterCharacteristic(TapiStringConstants.JITTER_VALUE) + .setWanderCharacteristic(TapiStringConstants.WANDER_VALUE) + .setTrafficPropertyName("FIXED_LATENCY") + .build(); + RiskCharacteristic riskCharacteristic = new RiskCharacteristicBuilder() + .setRiskCharacteristicName("risk characteristic") + .setRiskIdentifierList(Set.of("risk identifier1", "risk identifier2")) + .build(); + RiskParameterPac riskParamPac = new RiskParameterPacBuilder() + .setRiskCharacteristic(Map.of(riskCharacteristic.key(), riskCharacteristic)) + .build(); // build RDM infra node abstraction org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node rdmNode = new NodeBuilder() .setUuid(nodeUuid) @@ -264,15 +295,27 @@ public class ConvertORTopoToTapiTopo { .setLifecycleState(LifecycleState.INSTALLED) .setOwnedNodeEdgePoint(onepMap) .setNodeRuleGroup(nodeRuleGroupList) + .setCostCharacteristic(Map.of(costCharacteristic.key(), costCharacteristic)) + .setLatencyCharacteristic(Map.of(latencyCharacteristic.key(), latencyCharacteristic)) + .setRiskParameterPac(riskParamPac) .build(); tapiNodes.put(rdmNode.key(), rdmNode); - - // OMS link creation between photonoci nodes and RDM infra abstraction node + // OTS link creation between photonic nodes and RDM infra abstraction node : + //onepMap is a list of nep which Uuid is formed from THE ROADM node name, "nep" and an integer (order of the nep) + // It has absolutely no relationship with the real ROADM infrastructure (SRG ports) + //rdmInfraNepUuisMap is a Map built from onepMap + //photonicNepUuisMap is a Map built from TapiPhotonicNode Map rdmInfraNepUuisMap = convertListNodeWithListNepToMapForUuidAndName(List.of(rdmNode)); if (photonicNepUuisMap.size() != rdmInfraNepUuisMap.size()) { - LOG.warn("Unable to build OMS links between photonics nodes and RDM infrasctructure abstraction"); + LOG.warn("Unable to build OTS links between photonics nodes and RDM infrasctructure abstraction"); } else { - createTapiOmsLinks(photonicNepUuisMap, rdmInfraNepUuisMap); + //Tapi OtsLinks are created between Neps corresponding to the eNEPs of transponders (existing network ports) + //and Generic NEPS with abstracted names created in the ROADM infrastructure corresponding to tps mirroring + //transponders NETWORK PORTs. There is a simplification here considering that any network port of + //transponders will have a mirroring SRG client port in the ROADM infrastructure. + // TODO: Do not understand that we build OTS link without checking that existing transponder ports + //are effectively connected. Need some consolidation + createTapiOtsLinks(photonicNepUuisMap, rdmInfraNepUuisMap); } } @@ -306,9 +349,8 @@ public class ConvertORTopoToTapiTopo { prunedTapiPhotonicNodes = new ArrayList<>(); List tapiPhotonicNodes = this.tapiNodes.values().stream() - .filter(n -> LayerProtocolName.PHOTONICMEDIA.equals(n.getLayerProtocolName().stream().findFirst() - .orElseThrow())) - .collect(Collectors.toList()); + .filter(n -> n.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA)) + .collect(Collectors.toList()); for (org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node node : tapiPhotonicNodes) { Map onepM = new HashMap<>(); @@ -356,14 +398,33 @@ public class ConvertORTopoToTapiTopo { .setRuleType(ruleTypes) .build(); ruleList.put(rule.key(), rule); - if (layerProtocols.contains(LayerProtocolName.DSR)) { + if (layerProtocols.contains(LayerProtocolName.DSR) + || layerProtocols.contains(LayerProtocolName.PHOTONICMEDIA)) { nodeUuid = getNodeUuid4Dsr(onepl, nodeRuleGroupList, ruleList); - } else if (layerProtocols.contains(LayerProtocolName.PHOTONICMEDIA)) { - nodeUuid = getNodeUuid4Photonic(onepl, nodeRuleGroupList, ruleList); } else { LOG.error("Undefined LayerProtocolName for {} node {}", nodeNames.get(nodeNames.keySet().iterator().next()) .getValueName(), nodeNames.get(nodeNames.keySet().iterator().next()).getValue()); } + // Empty random creation of mandatory fields for avoiding errors.... + CostCharacteristic costCharacteristic = new CostCharacteristicBuilder() + .setCostAlgorithm("Restricted Shortest Path - RSP") + .setCostName("HOP_COUNT") + .setCostValue(TapiStringConstants.COST_HOP_VALUE) + .build(); + LatencyCharacteristic latencyCharacteristic = new LatencyCharacteristicBuilder() + .setFixedLatencyCharacteristic(TapiStringConstants.FIXED_LATENCY_VALUE) + .setQueuingLatencyCharacteristic(TapiStringConstants.QUEING_LATENCY_VALUE) + .setJitterCharacteristic(TapiStringConstants.JITTER_VALUE) + .setWanderCharacteristic(TapiStringConstants.WANDER_VALUE) + .setTrafficPropertyName("FIXED_LATENCY") + .build(); + RiskCharacteristic riskCharacteristic = new RiskCharacteristicBuilder() + .setRiskCharacteristicName("risk characteristic") + .setRiskIdentifierList(Set.of("risk identifier1", "risk identifier2")) + .build(); + RiskParameterPac riskParamPac = new RiskParameterPacBuilder() + .setRiskCharacteristic(Map.of(riskCharacteristic.key(), riskCharacteristic)) + .build(); return new NodeBuilder() .setUuid(nodeUuid) .setName(nodeNames) @@ -373,94 +434,16 @@ public class ConvertORTopoToTapiTopo { .setLifecycleState(LifecycleState.INSTALLED) .setOwnedNodeEdgePoint(onepl) .setNodeRuleGroup(nodeRuleGroupList) + .setCostCharacteristic(Map.of(costCharacteristic.key(), costCharacteristic)) + .setLatencyCharacteristic(Map.of(latencyCharacteristic.key(), latencyCharacteristic)) + .setRiskParameterPac(riskParamPac) .build(); } - private Uuid getNodeUuid4Photonic(Map onepl, - Map nodeRuleGroupList, - Map ruleList) { - Uuid nodeUuid; - nodeUuid = this.uuidMap.get(String.join("+", this.ietfNodeId, TapiStringConstants.OTSI)); - // iNep creation on otsi node - for (int i = 0; i < oorNetworkPortList.size(); i++) { - Uuid nepUuid1 = new Uuid(UUID.nameUUIDFromBytes( - (String.join("+", this.ietfNodeId, TapiStringConstants.I_OTSI, - oorNetworkPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8"))) - .toString()); - this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.I_OTSI, - oorNetworkPortList.get(i).getTpId().getValue()), nepUuid1); - Name onedName = new NameBuilder() - .setValueName("iNodeEdgePoint") - .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.I_OTSI, - oorNetworkPortList.get(i).getTpId().getValue())) - .build(); - - OwnedNodeEdgePoint onep = createNep(oorNetworkPortList.get(i), Map.of(onedName.key(), onedName), - LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA, true, - String.join("+", this.ietfNodeId, TapiStringConstants.I_OTSI)); - onepl.put(onep.key(), onep); - } - // eNep creation on otsi node - for (int i = 0; i < oorNetworkPortList.size(); i++) { - Uuid nepUuid2 = new Uuid(UUID.nameUUIDFromBytes( - (String.join("+", this.ietfNodeId, TapiStringConstants.E_OTSI, - oorNetworkPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8"))) - .toString()); - this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.E_OTSI, - oorNetworkPortList.get(i).getTpId().getValue()), nepUuid2); - Name onedName = new NameBuilder() - .setValueName("eNodeEdgePoint") - .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.E_OTSI, - oorNetworkPortList.get(i).getTpId().getValue())) - .build(); - - OwnedNodeEdgePoint onep = createNep(oorNetworkPortList.get(i), Map.of(onedName.key(), onedName), - LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA, true, - String.join("+", this.ietfNodeId, TapiStringConstants.E_OTSI)); - onepl.put(onep.key(), onep); - } - // create NodeRuleGroup - int count = 1; - for (TerminationPoint tp : this.oorNetworkPortList) { - Map - nepList = new HashMap<>(); - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group - .NodeEdgePoint inep = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121 - .node.rule.group.NodeEdgePointBuilder() - .setTopologyUuid(tapiTopoUuid) - .setNodeUuid(this.uuidMap.get(String.join("+", this.ietfNodeId, TapiStringConstants.OTSI))) - .setNodeEdgePointUuid( - this.uuidMap.get(String.join("+", this.ietfNodeId, TapiStringConstants.I_OTSI, - tp.getTpId().getValue()))).build(); - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group - .NodeEdgePoint enep = new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121 - .node.rule.group.NodeEdgePointBuilder() - .setTopologyUuid(tapiTopoUuid) - .setNodeUuid(this.uuidMap.get(String.join("+", this.ietfNodeId, TapiStringConstants.OTSI))) - .setNodeEdgePointUuid( - this.uuidMap.get(String.join("+", this.ietfNodeId, TapiStringConstants.E_OTSI, - tp.getTpId().getValue()))) - .build(); - nepList.put(inep.key(), inep); - nepList.put(enep.key(), enep); - NodeRuleGroup nodeRuleGroup = new NodeRuleGroupBuilder() - .setUuid(new Uuid( - UUID.nameUUIDFromBytes(("otsi node rule group " + count).getBytes(Charset.forName("UTF-8"))) - .toString())) - .setRule(ruleList) - .setNodeEdgePoint(nepList) - .build(); - nodeRuleGroupList.put(nodeRuleGroup.key(), nodeRuleGroup); - count++; - } - return nodeUuid; - } - private Uuid getNodeUuid4Dsr(Map onepl, Map nodeRuleGroupList, Map ruleList) { Uuid nodeUuid; - nodeUuid = this.uuidMap.get(String.join("+", this.ietfNodeId, TapiStringConstants.DSR)); + nodeUuid = this.uuidMap.get(String.join("+", this.ietfNodeId, TapiStringConstants.XPDR)); // client nep creation on DSR/ODU node for (int i = 0; i < oorClientPortList.size(); i++) { Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes( @@ -500,6 +483,25 @@ public class ConvertORTopoToTapiTopo { TapiStringConstants.I_ODU)); onepl.put(onep.key(), onep); } + // eNep creation on otsi node + for (int i = 0; i < oorNetworkPortList.size(); i++) { + Uuid nepUuid2 = new Uuid(UUID.nameUUIDFromBytes( + (String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA_OTS, + oorNetworkPortList.get(i).getTpId().getValue())).getBytes(Charset.forName("UTF-8"))) + .toString()); + this.uuidMap.put(String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA_OTS, + oorNetworkPortList.get(i).getTpId().getValue()), nepUuid2); + Name onedName = new NameBuilder() + .setValueName("eNodeEdgePoint") + .setValue(String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA_OTS, + oorNetworkPortList.get(i).getTpId().getValue())) + .build(); + + OwnedNodeEdgePoint onep = createNep(oorNetworkPortList.get(i), Map.of(onedName.key(), onedName), + LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA, true, + String.join("+", this.ietfNodeId, TapiStringConstants.PHTNC_MEDIA_OTS)); + onepl.put(onep.key(), onep); + } // create NodeRuleGroup int count = 1; for (NonBlockingList nbl : this.oorOduSwitchingPool.nonnullNonBlockingList().values()) { @@ -517,7 +519,7 @@ public class ConvertORTopoToTapiTopo { .NodeEdgePointBuilder() .setTopologyUuid(tapiTopoUuid) .setNodeUuid(this.uuidMap.get(String.join("+", this.ietfNodeId, - TapiStringConstants.DSR))) + TapiStringConstants.XPDR))) .setNodeEdgePointUuid(this.uuidMap.get(String.join("+", this.ietfNodeId, qual, tp.getValue()))) .build(); @@ -560,8 +562,6 @@ public class ConvertORTopoToTapiTopo { .setAdministrativeState(adminState) .setOperationalState(operState) .setLifecycleState(LifecycleState.INSTALLED); -// .setTerminationDirection(TerminationDirection.BIDIRECTIONAL) -// .setTerminationState(TerminationState.TERMINATEDBIDIRECTIONAL); if (withSip) { onepBldr.setMappedServiceInterfacePoint(createSIP(1, oorTp, keyword)); } @@ -590,8 +590,6 @@ public class ConvertORTopoToTapiTopo { .setDirection(Direction.BIDIRECTIONAL).setLinkPortRole(PortRole.SYMMETRIC) .setAdministrativeState(AdministrativeState.UNLOCKED).setOperationalState(OperationalState.ENABLED) .setLifecycleState(LifecycleState.INSTALLED) -// .setTerminationDirection(TerminationDirection.BIDIRECTIONAL) -// .setTerminationState(TerminationState.TERMINATEDBIDIRECTIONAL) .build(); onepMap.put(onep.key(), onep); } @@ -637,6 +635,7 @@ public class ConvertORTopoToTapiTopo { String nodeId) { Map msipl = new HashMap<>(); for (int i = 0; i < nb; i++) { + //TODO : verify why i is not included to proceed Uuid MappedServiceInterfacePoint msip = new MappedServiceInterfacePointBuilder() .setServiceInterfacePointUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", "SIP", nodeId, tp.getTpId().getValue())).getBytes(Charset.forName("UTF-8"))).toString())) @@ -649,10 +648,6 @@ public class ConvertORTopoToTapiTopo { private List createSupportedCepLayerProtocolQualifier( TerminationPoint tp, LayerProtocolName lpn) { List sclpqiList = new ArrayList<>(); - sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() - .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROMS.VALUE) - .setNumberOfCepInstances(Uint64.valueOf(1)) - .build()); org.opendaylight.yang.gen.v1.http.org.openroadm.otn.network.topology.rev230526.TerminationPoint1 tp1 = tp.augmentation(org.opendaylight.yang.gen.v1.http .org.openroadm.otn.network.topology.rev230526.TerminationPoint1.class); @@ -781,7 +776,7 @@ public class ConvertORTopoToTapiTopo { .setNumberOfCepInstances(Uint64.valueOf(0)) .build()); sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() - .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROMS.VALUE) + .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTS.VALUE) .setNumberOfCepInstances(Uint64.valueOf(0)) .build()); } @@ -791,10 +786,10 @@ public class ConvertORTopoToTapiTopo { break; } } - return sclpqiList; + return sclpqiList.stream().distinct().toList(); } - private void createTapiOmsLinks(Map photonicNepUuisMap, Map rdmInfraNepUuisMap) { + private void createTapiOtsLinks(Map photonicNepUuisMap, Map rdmInfraNepUuisMap) { Iterator> it1 = photonicNepUuisMap.entrySet().iterator(); Iterator> it2 = rdmInfraNepUuisMap.entrySet().iterator(); while (it1.hasNext()) { @@ -817,10 +812,10 @@ public class ConvertORTopoToTapiTopo { .setNodeEdgePointUuid(destUuidTp) .build(); nepMap.put(destNep.key(), destNep); - Name linkName = new NameBuilder().setValueName("OMS link name") + Name linkName = new NameBuilder().setValueName("OTS link name") .setValue(String.join(" and ", photonicEntry.getValue(), rdmEntry.getValue())) .build(); - Link omsLink = new LinkBuilder() + Link otsLink = new LinkBuilder() .setUuid(new Uuid( UUID.nameUUIDFromBytes((String.join(" and ", photonicEntry.getValue(), rdmEntry.getValue())) .getBytes(Charset.forName("UTF-8"))) @@ -830,7 +825,7 @@ public class ConvertORTopoToTapiTopo { .setNodeEdgePoint(nepMap) .setDirection(ForwardingDirection.BIDIRECTIONAL) .build(); - this.tapiLinks.put(omsLink.key(), omsLink); + this.tapiLinks.put(otsLink.key(), otsLink); } } diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiNetworkModelServiceImpl.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiNetworkModelServiceImpl.java index d3827534b..65953989e 100644 --- a/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiNetworkModelServiceImpl.java +++ b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiNetworkModelServiceImpl.java @@ -54,7 +54,6 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Cont import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Direction; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.LayerProtocolName; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.LifecycleState; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.OBJECTTYPETAPICONTEXT; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.OperationalState; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.PortRole; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Uuid; @@ -101,6 +100,7 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.Co import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.FORWARDINGRULEMAYFORWARDACROSSGROUP; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.NodeEdgePointRef; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.RuleType; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.TOPOLOGYOBJECTTYPENODEEDGEPOINT; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.context.TopologyContext; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.NodeRuleGroup; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.NodeRuleGroupBuilder; @@ -108,6 +108,8 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.no import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePoint; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePointBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.OwnedNodeEdgePointKey; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.RiskParameterPac; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.RiskParameterPacBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.MappedServiceInterfacePoint; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.MappedServiceInterfacePointBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.edge.point.MappedServiceInterfacePointKey; @@ -231,7 +233,7 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService { Map xpdrMap = new HashMap<>(); for (Mapping mapping : networkMappings) { Integer xpdrNb = Integer.parseInt(mapping.getLogicalConnectionPoint().split("XPDR")[1].split("-")[0]); - String nodeId = node.getNodeId() + TapiStringConstants.XPDR + xpdrNb; + String nodeId = node.getNodeId() + TapiStringConstants.XXPDR + xpdrNb; if (!xpdrMap.containsKey(xpdrNb)) { List xpdrNetMaps = node.nonnullMapping().values() .stream().filter(k -> k.getLogicalConnectionPoint() @@ -275,7 +277,7 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService { .setNotificationType(NOTIFICATIONTYPEATTRIBUTEVALUECHANGE.VALUE) // .setTargetObjectType(ObjectType.NODEEDGEPOINT) //TODO: Change this : modification in Models 2.4 does not provide for Object type Node EdgePoint - .setTargetObjectType(OBJECTTYPETAPICONTEXT.VALUE) + .setTargetObjectType(TOPOLOGYOBJECTTYPENODEEDGEPOINT.VALUE) .setChangedAttributes(getChangedAttributes(changedOneps, mapping)) .setUuid(tapiTopoUuid) .build(); @@ -311,9 +313,12 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService { LOG.error("Could not update TAPI links"); return; } + int nbAffectedLinks = 0; + LOG.info("UUIDofAffectedONEPS = {} ", changedOneps.toString()); for (Link link : optTopology.orElseThrow().nonnullLink().values()) { List linkNeps = Objects.requireNonNull(link.getNodeEdgePoint()).values().stream() .map(NodeEdgePointRef::getNodeEdgePointUuid).collect(Collectors.toList()); + LOG.info("LinkEndPointsUUID = {} for link Name {}", linkNeps.toString(), link.getName().toString()); if (!Collections.disjoint(changedOneps, linkNeps)) { InstanceIdentifier linkIID = InstanceIdentifier.builder(Context.class) .augmentation(Context1.class).child(TopologyContext.class) @@ -323,8 +328,10 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService { .setAdministrativeState(transformAdminState(mapping.getPortAdminState())) .setOperationalState(transformOperState(mapping.getPortOperState())).build(); this.networkTransactionService.merge(LogicalDatastoreType.OPERATIONAL, linkIID, linkblr); + nbAffectedLinks++ ; } } + LOG.info("AffectedLinksNb = {} ", nbAffectedLinks); this.networkTransactionService.commit().get(); } catch (InterruptedException | ExecutionException e) { LOG.error("Could not update TAPI links"); @@ -361,6 +368,10 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService { .setAdministrativeState(transformAdminState(mapping.getPortAdminState())) .setOperationalState(transformOperState(mapping.getPortOperState())).build(); this.networkTransactionService.merge(LogicalDatastoreType.OPERATIONAL, onepIID, onepblr); + LOG.info("UpdatedNEP {} of UUID {} to ADMIN {} OPER {}", + onep.getName().toString(), onep.getUuid(), + transformAdminState(mapping.getPortAdminState()), + transformOperState(mapping.getPortOperState())); } this.networkTransactionService.commit().get(); } @@ -390,17 +401,11 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService { if (nodeId.contains("ROADM")) { uuids.add(new Uuid(UUID.nameUUIDFromBytes((String.join("+", nodeId, TapiStringConstants.PHTNC_MEDIA)) .getBytes(StandardCharsets.UTF_8)).toString())); - } else if (nodeId.contains("PDR") && mapping.getLogicalConnectionPoint().contains("CLIENT")) { + } else if (nodeId.contains("PDR")) { + LOG.debug("ANALYSING change in {}", nodeId); int xpdrNb = Integer.parseInt(mapping.getLogicalConnectionPoint().split("XPDR")[1].split("-")[0]); - String xpdrNodeId = nodeId + TapiStringConstants.XPDR + xpdrNb; - uuids.add(new Uuid(UUID.nameUUIDFromBytes((String.join("+", xpdrNodeId, TapiStringConstants.DSR)) - .getBytes(StandardCharsets.UTF_8)).toString())); - } else if (nodeId.contains("PDR") && mapping.getLogicalConnectionPoint().contains("NETWORK")) { - int xpdrNb = Integer.parseInt(mapping.getLogicalConnectionPoint().split("XPDR")[1].split("-")[0]); - String xpdrNodeId = nodeId + TapiStringConstants.XPDR + xpdrNb; - uuids.add(new Uuid(UUID.nameUUIDFromBytes((String.join("+", xpdrNodeId, TapiStringConstants.DSR)) - .getBytes(StandardCharsets.UTF_8)).toString())); - uuids.add(new Uuid(UUID.nameUUIDFromBytes((String.join("+", xpdrNodeId, TapiStringConstants.OTSI)) + String xpdrNodeId = nodeId + TapiStringConstants.XXPDR + xpdrNb; + uuids.add(new Uuid(UUID.nameUUIDFromBytes((String.join("+", xpdrNodeId, TapiStringConstants.XPDR)) .getBytes(StandardCharsets.UTF_8)).toString())); } else { LOG.error("Updating this device is currently not supported"); @@ -434,35 +439,21 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService { OduSwitchingPools oorOduSwitchingPool) { Map nodeMap = new HashMap<>(); LOG.info("creation of a DSR/ODU node for {}", nodeId); - Uuid nodeUuidDsr = new Uuid(UUID.nameUUIDFromBytes((String.join("+", nodeId, TapiStringConstants.DSR)) + Uuid nodeUuidDsr = new Uuid(UUID.nameUUIDFromBytes((String.join("+", nodeId, TapiStringConstants.XPDR)) .getBytes(StandardCharsets.UTF_8)).toString()); Name nameDsr = new NameBuilder().setValueName("dsr/odu node name").setValue( - String.join("+", nodeId, TapiStringConstants.DSR)).build(); + String.join("+", nodeId, TapiStringConstants.XPDR)).build(); + Name nameOtsi = new NameBuilder().setValueName("otsi node name").setValue( + String.join("+", nodeId, TapiStringConstants.XPDR)).build(); Name nameNodeType = new NameBuilder().setValueName("Node Type") .setValue(getNodeType(xponderType)).build(); - Set dsrLayerProtocols = Set.of(LayerProtocolName.DSR, LayerProtocolName.ODU); - Node dsrNode = createTapiXpdrNode(Map.of(nameDsr.key(), nameDsr, nameNodeType.key(), nameNodeType), - dsrLayerProtocols, nodeId, nodeUuidDsr, xpdrClMaps, xpdrNetMaps, xponderType, oorOduSwitchingPool); + Set dsrLayerProtocols = Set.of(LayerProtocolName.DSR, LayerProtocolName.ODU, + LayerProtocolName.DIGITALOTN, LayerProtocolName.PHOTONICMEDIA); + Node dsrNode = createTapiXpdrNode(Map.of(nameDsr.key(), nameDsr, nameOtsi.key(), nameOtsi, nameNodeType.key(), + nameNodeType), dsrLayerProtocols, nodeId, nodeUuidDsr, xpdrClMaps, xpdrNetMaps, xponderType, + oorOduSwitchingPool); nodeMap.put(dsrNode.key(), dsrNode); - - // node creation [otsi] - LOG.info("creation of an OTSi node for {}", nodeId); - Uuid nodeUuidOtsi = new Uuid(UUID.nameUUIDFromBytes((String.join("+", nodeId, TapiStringConstants.OTSI)) - .getBytes(StandardCharsets.UTF_8)).toString()); - Name nameOtsi = new NameBuilder().setValueName("otsi node name").setValue( - String.join("+", nodeId, TapiStringConstants.OTSI)).build(); - Set otsiLayerProtocols = Set.of(LayerProtocolName.PHOTONICMEDIA); - Node otsiNode = createTapiXpdrNode(Map.of(nameOtsi.key(), nameOtsi, nameNodeType.key(), nameNodeType), - otsiLayerProtocols, nodeId, nodeUuidOtsi, xpdrClMaps, xpdrNetMaps, xponderType, null); - - nodeMap.put(otsiNode.key(), otsiNode); - - // transitional link cration between network nep of DSR/ODU node and iNep of otsi node - LOG.info("creation of transitional links between DSR/ODU and OTSi nodes"); - Map linkMap = createTapiTransitionalLinks(nodeId, xpdrNetMaps); - mergeLinkinTopology(linkMap); - return nodeMap; } @@ -628,8 +619,7 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService { private Node createTapiXpdrNode(Map nameMap, Set layerProtocols, String nodeId, Uuid nodeUuid, List xpdrClMaps, List xpdrNetMaps, XpdrNodeTypes xponderType, OduSwitchingPools oorOduSwitchingPool) { - Map onepl = new HashMap<>(); - Map nodeRuleGroupList = new HashMap<>(); + Map ruleList = new HashMap<>(); Set ruleTypes = new HashSet<>(); ruleTypes.add(RuleType.FORWARDING); @@ -639,22 +629,17 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService { .setRuleType(ruleTypes) .build(); ruleList.put(rule.key(), rule); - if (layerProtocols.contains(LayerProtocolName.DSR)) { - // neps for dsr/odu layer - Map dsroduNeps = - createXpdrDsrOduNeps(nodeId, xpdrClMaps, xpdrNetMaps, xponderType); - onepl.putAll(dsroduNeps); - nodeRuleGroupList = createNodeRuleGroupForDsrNode(nodeId, oorOduSwitchingPool, ruleList, onepl); - } else if (layerProtocols.contains(LayerProtocolName.PHOTONICMEDIA)) { - // neps for photonic layer - Map phtmdNeps = - createXpdrPhtnMdNeps(nodeId, xpdrNetMaps); - onepl.putAll(phtmdNeps); - nodeRuleGroupList = createNodeRuleGroupForOtsiNode(nodeId, xpdrNetMaps, ruleList); - } else { + if (!(layerProtocols.contains(LayerProtocolName.DSR) + && layerProtocols.contains(LayerProtocolName.PHOTONICMEDIA))) { LOG.error("Undefined LayerProtocolName for {} node {}", nameMap.get(nameMap.keySet().iterator().next()) - .getValueName(), nameMap.get(nameMap.keySet().iterator().next()).getValue()); + .getValueName(), nameMap.get(nameMap.keySet().iterator().next()).getValue()); } + Map onepl = new HashMap<>(); + onepl.putAll(createXpdrDsrOduNeps(nodeId, xpdrClMaps, xpdrNetMaps, xponderType)); + Map nodeRuleGroupList = createNodeRuleGroupForDsrNode( + nodeId, oorOduSwitchingPool, ruleList, onepl); + onepl.putAll(createXpdrPhtnMdNeps(nodeId, xpdrNetMaps)); + // Empty random creation of mandatory fields for avoiding errors.... CostCharacteristic costCharacteristic = new CostCharacteristicBuilder() .setCostAlgorithm("Restricted Shortest Path - RSP") @@ -668,6 +653,13 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService { .setWanderCharacteristic(TapiStringConstants.WANDER_VALUE) .setTrafficPropertyName("FIXED_LATENCY") .build(); + RiskCharacteristic riskCharacteristic = new RiskCharacteristicBuilder() + .setRiskCharacteristicName("risk characteristic") + .setRiskIdentifierList(Set.of("risk identifier1", "risk identifier2")) + .build(); + RiskParameterPac riskParamPac = new RiskParameterPacBuilder() + .setRiskCharacteristic(Map.of(riskCharacteristic.key(), riskCharacteristic)) + .build(); return new NodeBuilder() .setUuid(nodeUuid) .setName(nameMap) @@ -685,6 +677,7 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService { .setDeliveryOrderCharacteristic("delivery order") .setUnavailableTimeCharacteristic("unavailable time") .setServerIntegrityProcessCharacteristic("server integrity process") + .setRiskParameterPac(riskParamPac) .build(); } @@ -692,35 +685,14 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService { List xpdrNetMaps) { Map onepl = new HashMap<>(); - // iNep creation on otsi node - for (int i = 0; i < xpdrNetMaps.size(); i++) { - Uuid nepUuid1 = new Uuid(UUID.nameUUIDFromBytes( - (String.join("+", nodeId, TapiStringConstants.I_OTSI, - xpdrNetMaps.get(i).getLogicalConnectionPoint())).getBytes(StandardCharsets.UTF_8)).toString()); - Name onedName = new NameBuilder() - .setValueName("iNodeEdgePoint") - .setValue(String.join("+", nodeId, TapiStringConstants.I_OTSI, - xpdrNetMaps.get(i).getLogicalConnectionPoint())) - .build(); - - List newSupIfCapList = - new ArrayList<>(xpdrNetMaps.get(i).getSupportedInterfaceCapability()); - - OwnedNodeEdgePoint onep = createNep(nepUuid1, xpdrNetMaps.get(i).getLogicalConnectionPoint(), - Map.of(onedName.key(), onedName), LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA, - true, String.join("+", nodeId, TapiStringConstants.I_OTSI), newSupIfCapList, - transformOperState(xpdrNetMaps.get(i).getPortOperState()), - transformAdminState(xpdrNetMaps.get(i).getPortAdminState())); - onepl.put(onep.key(), onep); - } // eNep creation on otsi node for (int i = 0; i < xpdrNetMaps.size(); i++) { Uuid nepUuid2 = new Uuid(UUID.nameUUIDFromBytes( - (String.join("+", nodeId, TapiStringConstants.E_OTSI, + (String.join("+", nodeId, TapiStringConstants.PHTNC_MEDIA_OTS, xpdrNetMaps.get(i).getLogicalConnectionPoint())).getBytes(StandardCharsets.UTF_8)).toString()); Name onedName = new NameBuilder() .setValueName("eNodeEdgePoint") - .setValue(String.join("+", nodeId, TapiStringConstants.E_OTSI, + .setValue(String.join("+", nodeId, TapiStringConstants.PHTNC_MEDIA_OTS, xpdrNetMaps.get(i).getLogicalConnectionPoint())) .build(); @@ -729,19 +701,19 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService { OwnedNodeEdgePoint onep = createNep(nepUuid2, xpdrNetMaps.get(i).getLogicalConnectionPoint(), Map.of(onedName.key(), onedName), LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA, - false, String.join("+", nodeId, TapiStringConstants.E_OTSI), newSupIfCapList, + true, String.join("+", nodeId, TapiStringConstants.PHTNC_MEDIA_OTS), newSupIfCapList, transformOperState(xpdrNetMaps.get(i).getPortOperState()), transformAdminState(xpdrNetMaps.get(i).getPortAdminState())); onepl.put(onep.key(), onep); } - // Photonic Media Nep creation on otsi node + // OTSi_MC Nep creation on otsi node for (int i = 0; i < xpdrNetMaps.size(); i++) { Uuid nepUuid3 = new Uuid(UUID.nameUUIDFromBytes( - (String.join("+", nodeId, TapiStringConstants.PHTNC_MEDIA, + (String.join("+", nodeId, TapiStringConstants.OTSI_MC, xpdrNetMaps.get(i).getLogicalConnectionPoint())).getBytes(StandardCharsets.UTF_8)).toString()); Name onedName = new NameBuilder() .setValueName("PhotMedNodeEdgePoint") - .setValue(String.join("+", nodeId, TapiStringConstants.PHTNC_MEDIA, + .setValue(String.join("+", nodeId, TapiStringConstants.OTSI_MC, xpdrNetMaps.get(i).getLogicalConnectionPoint())) .build(); @@ -750,7 +722,7 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService { OwnedNodeEdgePoint onep = createNep(nepUuid3, xpdrNetMaps.get(i).getLogicalConnectionPoint(), Map.of(onedName.key(), onedName), LayerProtocolName.PHOTONICMEDIA, LayerProtocolName.PHOTONICMEDIA, - false, String.join("+", nodeId, TapiStringConstants.PHTNC_MEDIA), newSupIfCapList, + false, String.join("+", nodeId, TapiStringConstants.OTSI_MC), newSupIfCapList, transformOperState(xpdrNetMaps.get(i).getPortOperState()), transformAdminState(xpdrNetMaps.get(i).getPortAdminState())); onepl.put(onep.key(), onep); @@ -830,7 +802,7 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService { OwnedNodeEdgePoint onep = createNep(nepUuid, xpdrClMaps.get(i).getLogicalConnectionPoint(), Map.of(onedName.key(), onedName), - LayerProtocolName.ODU, LayerProtocolName.DSR, false, + LayerProtocolName.ODU, LayerProtocolName.DSR, true, String.join("+", nodeId, TapiStringConstants.E_ODU), newSupIfCapList, transformOperState(xpdrClMaps.get(i).getPortOperState()), transformAdminState(xpdrClMaps.get(i).getPortAdminState())); @@ -869,8 +841,6 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService { onepBldr.setDirection(Direction.BIDIRECTIONAL).setLinkPortRole(PortRole.SYMMETRIC) .setAdministrativeState(adminState).setOperationalState(operState) .setLifecycleState(LifecycleState.INSTALLED); -// .setTerminationDirection(TerminationDirection.BIDIRECTIONAL) -// .setTerminationState(TerminationState.TERMINATEDBIDIRECTIONAL); return onepBldr.build(); } @@ -879,10 +849,10 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService { Map onepMap = new HashMap<>(); // PHOTONIC MEDIA nep Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes((String.join("+", orNodeId, - TapiStringConstants.PHTNC_MEDIA, tpId)).getBytes(StandardCharsets.UTF_8)).toString()); + nepPhotonicSublayer, tpId)).getBytes(StandardCharsets.UTF_8)).toString()); Name nepName = new NameBuilder() .setValueName(TapiStringConstants.PHTNC_MEDIA + "NodeEdgePoint") - .setValue(String.join("+", orNodeId, TapiStringConstants.PHTNC_MEDIA, tpId)) + .setValue(String.join("+", orNodeId, nepPhotonicSublayer, tpId)) .build(); List sclpqiList = new ArrayList<>(); sclpqiList.add( @@ -902,8 +872,6 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService { .setLinkPortRole(PortRole.SYMMETRIC) .setAdministrativeState(adminState).setOperationalState(operState) .setLifecycleState(LifecycleState.INSTALLED) -// .setTerminationDirection(TerminationDirection.BIDIRECTIONAL) -// .setTerminationState(TerminationState.TERMINATEDBIDIRECTIONAL) .build(); onepMap.put(onep.key(), onep); return onepMap; @@ -922,9 +890,10 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService { ServiceInterfacePoint sip = createSIP(sipUuid, layerProtocol, tpid, nodeid, supportedInterfaceCapability, operState, adminState); this.sipMap.put(sip.key(), sip); - LOG.info("SIP created {}", sip.getUuid()); // this.tapiSips.put(sip.key(), sip); msipl.put(msip.key(), msip); + LOG.info("SIP created {}", sip.getUuid()); + LOG.info("This SIP corresponds to SIP+nodeId {} + TpId {}", nodeid, tpid); } return msipl; } @@ -976,6 +945,13 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService { .setWanderCharacteristic(TapiStringConstants.WANDER_VALUE) .setTrafficPropertyName("FIXED_LATENCY") .build(); + RiskCharacteristic riskCharacteristic = new RiskCharacteristicBuilder() + .setRiskCharacteristicName("risk characteristic") + .setRiskIdentifierList(Set.of("risk identifier1", "risk identifier2")) + .build(); + RiskParameterPac riskParamPac = new RiskParameterPacBuilder() + .setRiskCharacteristic(Map.of(riskCharacteristic.key(), riskCharacteristic)) + .build(); return new NodeBuilder() .setUuid(nodeUuid) .setName(Map.of(nodeNames.key(), nodeNames, nameNodeType.key(), nameNodeType)) @@ -993,6 +969,7 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService { .setDeliveryOrderCharacteristic("delivery order") .setUnavailableTimeCharacteristic("unavailable time") .setServerIntegrityProcessCharacteristic("server integrity process") + .setRiskParameterPac(riskParamPac) .build(); } @@ -1028,21 +1005,6 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService { return nodeRuleGroupMap; } - private Map createTapiTransitionalLinks(String nodeId, List xpdrNetMaps) { - Map linkMap = new HashMap<>(); - for (Mapping mapping : xpdrNetMaps) { - Link transiLink = tapiLink.createTapiLink(nodeId, mapping.getLogicalConnectionPoint(), nodeId, - mapping.getLogicalConnectionPoint(), TapiStringConstants.TRANSITIONAL_LINK, TapiStringConstants.DSR, - TapiStringConstants.OTSI, TapiStringConstants.I_ODU, TapiStringConstants.I_OTSI, - "inService", "inService", Set.of(LayerProtocolName.ODU, LayerProtocolName.PHOTONICMEDIA), - Set.of(LayerProtocolName.ODU.getName(), LayerProtocolName.PHOTONICMEDIA.getName()), - this.tapiTopoUuid); - linkMap.put(transiLink.key(), transiLink); - } - // return a map of links and then we can do merge the corresponding link map into the topology context - return linkMap; - } - private OduSwitchingPools createTpdrSwitchPool(List xpdrNetMaps) { Map nblMap = new HashMap<>(); int count = 1; @@ -1116,65 +1078,6 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService { .build(); } - private Map createNodeRuleGroupForOtsiNode(String nodeId, - List xpdrNetMaps, - Map ruleList) { - Map nodeRuleGroupMap = new HashMap<>(); - // create NodeRuleGroup - int count = 1; - for (Mapping tpMapping : xpdrNetMaps) { - Map nepList = new HashMap<>(); - NodeEdgePoint inep = new NodeEdgePointBuilder() - .setTopologyUuid(this.tapiTopoUuid) - .setNodeUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", nodeId, - TapiStringConstants.OTSI)).getBytes(StandardCharsets.UTF_8)).toString())) - .setNodeEdgePointUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", nodeId, - TapiStringConstants.I_OTSI, tpMapping.getLogicalConnectionPoint())) - .getBytes(StandardCharsets.UTF_8)).toString())) - .build(); - NodeEdgePoint enep = new NodeEdgePointBuilder() - .setTopologyUuid(this.tapiTopoUuid) - .setNodeUuid(new Uuid(UUID.nameUUIDFromBytes((String.join("+", nodeId, - TapiStringConstants.OTSI)).getBytes(StandardCharsets.UTF_8)).toString())) - .setNodeEdgePointUuid(new Uuid(UUID.nameUUIDFromBytes( - (String.join("+", nodeId, TapiStringConstants.E_OTSI, - tpMapping.getLogicalConnectionPoint())).getBytes(StandardCharsets.UTF_8)).toString())) - .build(); - nepList.put(inep.key(), inep); - nepList.put(enep.key(), enep); - // Empty random creation of mandatory fields for avoiding errors.... - CostCharacteristic costCharacteristic = new CostCharacteristicBuilder() - .setCostAlgorithm("Restricted Shortest Path - RSP") - .setCostName("HOP_COUNT") - .setCostValue(TapiStringConstants.COST_HOP_VALUE) - .build(); - LatencyCharacteristic latencyCharacteristic = new LatencyCharacteristicBuilder() - .setFixedLatencyCharacteristic(TapiStringConstants.FIXED_LATENCY_VALUE) - .setQueuingLatencyCharacteristic(TapiStringConstants.QUEING_LATENCY_VALUE) - .setJitterCharacteristic(TapiStringConstants.JITTER_VALUE) - .setWanderCharacteristic(TapiStringConstants.WANDER_VALUE) - .setTrafficPropertyName("FIXED_LATENCY") - .build(); - RiskCharacteristic riskCharacteristic = new RiskCharacteristicBuilder() - .setRiskCharacteristicName("risk characteristic") - .setRiskIdentifierList(Set.of("risk identifier1", "risk identifier2")) - .build(); - NodeRuleGroup nodeRuleGroup = new NodeRuleGroupBuilder() - .setUuid(new Uuid( - UUID.nameUUIDFromBytes(("otsi node rule group " + count).getBytes(StandardCharsets.UTF_8)) - .toString())) - .setRule(ruleList) - .setNodeEdgePoint(nepList) - .setRiskCharacteristic(Map.of(riskCharacteristic.key(), riskCharacteristic)) - .setCostCharacteristic(Map.of(costCharacteristic.key(), costCharacteristic)) - .setLatencyCharacteristic(Map.of(latencyCharacteristic.key(), latencyCharacteristic)) - .build(); - nodeRuleGroupMap.put(nodeRuleGroup.key(), nodeRuleGroup); - count++; - } - return nodeRuleGroupMap; - } - private Map createNodeRuleGroupForDsrNode(String nodeId, OduSwitchingPools oorOduSwitchingPool, Map ruleList, @@ -1405,7 +1308,7 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService { .build()); sclpqiList.add(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121 .service._interface.point.SupportedCepLayerProtocolQualifierInstancesBuilder() - .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROMS.VALUE) + .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTS.VALUE) .setNumberOfCepInstances(Uint64.valueOf(0)) .build()); } @@ -1552,7 +1455,7 @@ public class TapiNetworkModelServiceImpl implements TapiNetworkModelService { .setNumberOfCepInstances(Uint64.valueOf(0)) .build()); sclpqiList.add(new SupportedCepLayerProtocolQualifierInstancesBuilder() - .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROMS.VALUE) + .setLayerProtocolQualifier(PHOTONICLAYERQUALIFIEROTS.VALUE) .setNumberOfCepInstances(Uint64.valueOf(0)) .build()); } diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiNetworkUtilsImpl.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiNetworkUtilsImpl.java index 5b3b87da3..e2a94fef5 100644 --- a/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiNetworkUtilsImpl.java +++ b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiNetworkUtilsImpl.java @@ -94,7 +94,7 @@ public class TapiNetworkUtilsImpl implements TransportpceTapinetworkutilsService String destTp = input.getDegZTp(); Link link = this.tapiLink.createTapiLink(sourceNode, sourceTp, destNode, destTp, TapiStringConstants.OMS_RDM_RDM_LINK, TapiStringConstants.PHTNC_MEDIA, TapiStringConstants.PHTNC_MEDIA, - TapiStringConstants.PHTNC_MEDIA, TapiStringConstants.PHTNC_MEDIA, + TapiStringConstants.PHTNC_MEDIA_OTS, TapiStringConstants.PHTNC_MEDIA_OTS, this.tapiLink.getAdminState(sourceNode, sourceTp, destNode, destTp), this.tapiLink.getOperState(sourceNode, sourceTp, destNode, destTp), Set.of(LayerProtocolName.PHOTONICMEDIA), Set.of(LayerProtocolName.PHOTONICMEDIA.getName()), tapiTopoUuid); @@ -122,7 +122,7 @@ public class TapiNetworkUtilsImpl implements TransportpceTapinetworkutilsService String sourceTp = input.getNetworkTp(); Link link = this.tapiLink.createTapiLink(sourceNode, sourceTp, destNode, destTp, TapiStringConstants.OMS_XPDR_RDM_LINK, TapiStringConstants.OTSI, TapiStringConstants.PHTNC_MEDIA, - TapiStringConstants.PHTNC_MEDIA, TapiStringConstants.PHTNC_MEDIA, + TapiStringConstants.PHTNC_MEDIA_OTS, TapiStringConstants.PHTNC_MEDIA_OTS, this.tapiLink.getAdminState(sourceNode, sourceTp, destNode, destTp), this.tapiLink.getOperState(sourceNode, sourceTp, destNode, destTp), Set.of(LayerProtocolName.PHOTONICMEDIA), Set.of(LayerProtocolName.PHOTONICMEDIA.getName()), tapiTopoUuid); diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiOrLinkListener.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiOrLinkListener.java index 8fad0dec5..b8e3a64fa 100644 --- a/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiOrLinkListener.java +++ b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiOrLinkListener.java @@ -87,7 +87,7 @@ public class TapiOrLinkListener implements DataTreeChangeListener { String destTp = link.getDestination().getDestTp().getValue(); putTapiLinkInTopology(this.tapiLink.createTapiLink(srcNode, srcTp, destNode, destTp, TapiStringConstants.OMS_XPDR_RDM_LINK, getQual(srcNode), getQual(destNode), - TapiStringConstants.PHTNC_MEDIA, TapiStringConstants.PHTNC_MEDIA, + TapiStringConstants.PHTNC_MEDIA_OTS, TapiStringConstants.PHTNC_MEDIA_OTS, link1.getAdministrativeState().getName(), link1.getOperationalState().getName(), Set.of(LayerProtocolName.PHOTONICMEDIA), Set.of(LayerProtocolName.PHOTONICMEDIA.getName()), tapiTopoUuid)); @@ -121,7 +121,7 @@ public class TapiOrLinkListener implements DataTreeChangeListener { if (node.contains("ROADM")) { return TapiStringConstants.PHTNC_MEDIA; } - return TapiStringConstants.OTSI; + return TapiStringConstants.XPDR; } private boolean oppositeLinkExists(LinkId oppositeLink) { diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImpl.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImpl.java index cff1608f7..55993bd00 100644 --- a/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImpl.java +++ b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImpl.java @@ -141,19 +141,6 @@ public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService this.tapiLink = tapiLink; } - public ImmutableClassToInstanceMap> registerRPCs() { - return ImmutableClassToInstanceMap.>builder() - .put(GetNodeDetails.class, this::getNodeDetails) - .put(GetTopologyDetails.class, this::getTopologyDetails) - .put(GetNodeEdgePointDetails.class, this::getNodeEdgePointDetails) - .put(GetLinkDetails.class, this::getLinkDetails) - .put(GetTopologyList.class, this::getTopologyList) - .put(GetServiceInterfacePointDetails.class, this::getServiceInterfacePointDetails) - .put(GetServiceInterfacePointList.class, this::getServiceInterfacePointList) - .put(UpdateServiceInterfacePoint.class, this::updateServiceInterfacePoint) - .build(); - } - @Override public ListenableFuture> getNodeDetails(GetNodeDetailsInput input) { // TODO Auto-generated method stub @@ -178,43 +165,27 @@ public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService @Override public ListenableFuture> getTopologyDetails(GetTopologyDetailsInput input) { // TODO -> Add check for Full T0 Multilayer - List topoNameList = null; - try { - topoNameList = topologyUtils.readTopologyName(input.getTopologyId()); - } catch (TapiTopologyException e) { - LOG.error("Topology {} not found in datastore", input.getTopologyId()); - return RpcResultBuilder.failed() - .withError(ErrorType.RPC, "Invalid Topology name") - .buildFuture(); - } - if (!topoNameList.contains(TapiStringConstants.T0_MULTILAYER) - && !topoNameList.contains(TapiStringConstants.TPDR_100G)) { - if (topoNameList.contains(TapiStringConstants.T0_FULL_MULTILAYER)) { - Uuid topoUuid = input.getTopologyId(); - Context context = this.tapiContext.getTapiContext(); - Map - topologyMap = context.augmentation(Context1.class).getTopologyContext().getTopology(); - if (!(topologyMap != null && topologyMap.containsKey(new TopologyKey(topoUuid)))) { - LOG.error("Topology {} not found in datastore", input.getTopologyId()); - return RpcResultBuilder.failed() - .withError(ErrorType.RPC, "Invalid Topology name") - .buildFuture(); - } - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.Topology - topology = topologyMap.get(new TopologyKey(topoUuid)); - return RpcResultBuilder - .success(new GetTopologyDetailsOutputBuilder() - .setTopology(this.topologyUtils.transformTopology(topology)) - .build()) + Uuid topologyUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER.getBytes( + Charset.forName("UTF-8"))).toString()); + if (input.getTopologyId().equals(topologyUuid)) { + Context context = this.tapiContext.getTapiContext(); + Map + topologyMap = context.augmentation(Context1.class).getTopologyContext().getTopology(); + if (topologyMap == null || !topologyMap.containsKey(new TopologyKey(topologyUuid))) { + LOG.error("Topology {} not found in datastore", input.getTopologyId()); + return RpcResultBuilder.failed() + .withError(ErrorType.RPC, "Invalid Topology name") .buildFuture(); } - LOG.error("Invalid TAPI topology name"); - return RpcResultBuilder.failed() - .withError(ErrorType.RPC, "Invalid Topology name") + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.Topology + topology = topologyMap.get(new TopologyKey(topologyUuid)); + return RpcResultBuilder.success(new GetTopologyDetailsOutputBuilder() + .setTopology(this.topologyUtils.transformTopology(topology)) + .build()) .buildFuture(); } - Uuid topologyUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.TPDR_100G.getBytes( + topologyUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.TPDR_100G.getBytes( Charset.forName("UTF-8"))).toString()); try { LOG.info("Building TAPI Topology abstraction for {}", input.getTopologyId()); @@ -232,6 +203,61 @@ public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService } } + @Override + public ListenableFuture> getTopologyList(GetTopologyListInput input) { + // TODO Auto-generated method stub + // TODO -> maybe we get errors when having CEPs? + Map + topologyMap = this.tapiContext.getTopologyContext(); + if (topologyMap.isEmpty()) { + LOG.error("No topologies exist in tapi context"); + return RpcResultBuilder.failed() + .withError(ErrorType.APPLICATION, "No topologies exist in tapi context") + .buildFuture(); + } + Map + newTopoMap = new HashMap<>(); + for (org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.Topology + topo:topologyMap.values()) { + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.get.topology.list.output.Topology + newTopo = new org.opendaylight.yang.gen.v1.urn + .onf.otcc.yang.tapi.topology.rev221121.get.topology.list.output.TopologyBuilder(topo).build(); + newTopoMap.put(newTopo.key(), newTopo); + } + return RpcResultBuilder.success(new GetTopologyListOutputBuilder().setTopology(newTopoMap).build()) + .buildFuture(); + } + + @Override + public ListenableFuture> + getServiceInterfacePointList(GetServiceInterfacePointListInput input) { + Map sips = + this.tapiContext.getTapiContext().getServiceInterfacePoint(); + if (sips == null || sips.isEmpty()) { + return RpcResultBuilder.failed() + .withError(ErrorType.RPC, "No sips in datastore") + .buildFuture(); + } + Map outSipMap = new HashMap<>(); + for (ServiceInterfacePoint sip : sips.values()) { + Sip si = new SipBuilder(sip).build(); + outSipMap.put(si.key(), si); + } + return RpcResultBuilder + .success(new GetServiceInterfacePointListOutputBuilder().setSip(outSipMap).build()) + .buildFuture(); + } + + @Override + public ListenableFuture> + updateServiceInterfacePoint(UpdateServiceInterfacePointInput input) { + return RpcResultBuilder.failed() + .withError(ErrorType.RPC, ErrorTag.OPERATION_NOT_SUPPORTED, "RPC not implemented yet") + .buildFuture(); + } + @Override public ListenableFuture> getNodeEdgePointDetails( GetNodeEdgePointDetailsInput input) { @@ -268,37 +294,11 @@ public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService .withError(ErrorType.RPC, "Invalid Link name") .buildFuture(); } + LOG.info("debug link is : {}", link.getName().toString()); return RpcResultBuilder.success(new GetLinkDetailsOutputBuilder().setLink(new LinkBuilder(link).build()) .build()).buildFuture(); } - @Override - public ListenableFuture> getTopologyList(GetTopologyListInput input) { - // TODO Auto-generated method stub - // TODO -> maybe we get errors when having CEPs? - Map - topologyMap = this.tapiContext.getTopologyContext(); - if (topologyMap.isEmpty()) { - LOG.error("No topologies exist in tapi context"); - return RpcResultBuilder.failed() - .withError(ErrorType.APPLICATION, "No topologies exist in tapi context") - .buildFuture(); - } - Map - newTopoMap = new HashMap<>(); - for (org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.context.Topology - topo:topologyMap.values()) { - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.get.topology.list.output.Topology - newTopo = new org.opendaylight.yang.gen.v1.urn - .onf.otcc.yang.tapi.topology.rev221121.get.topology.list.output.TopologyBuilder(topo).build(); - newTopoMap.put(newTopo.key(), newTopo); - } - return RpcResultBuilder.success(new GetTopologyListOutputBuilder().setTopology(newTopoMap).build()) - .buildFuture(); - } - @Override public ListenableFuture> getServiceInterfacePointDetails(GetServiceInterfacePointDetailsInput input) { @@ -325,32 +325,17 @@ public class TapiTopologyImpl implements TapiTopologyService, TapiCommonService .buildFuture(); } - @Override - public ListenableFuture> - getServiceInterfacePointList(GetServiceInterfacePointListInput input) { - Map sips = - this.tapiContext.getTapiContext().getServiceInterfacePoint(); - if (sips == null || sips.isEmpty()) { - return RpcResultBuilder.failed() - .withError(ErrorType.RPC, "No sips in datastore") - .buildFuture(); - } - Map outSipMap = new HashMap<>(); - for (ServiceInterfacePoint sip : sips.values()) { - Sip si = new SipBuilder(sip).build(); - outSipMap.put(si.key(), si); - } - return RpcResultBuilder - .success(new GetServiceInterfacePointListOutputBuilder().setSip(outSipMap).build()) - .buildFuture(); - } - - @Override - public ListenableFuture> - updateServiceInterfacePoint(UpdateServiceInterfacePointInput input) { - return RpcResultBuilder.failed() - .withError(ErrorType.RPC, ErrorTag.OPERATION_NOT_SUPPORTED, "RPC not implemented yet") - .buildFuture(); + public ImmutableClassToInstanceMap> registerRPCs() { + return ImmutableClassToInstanceMap.>builder() + .put(GetNodeDetails.class, this::getNodeDetails) + .put(GetTopologyDetails.class, this::getTopologyDetails) + .put(GetNodeEdgePointDetails.class, this::getNodeEdgePointDetails) + .put(GetLinkDetails.class, this::getLinkDetails) + .put(GetTopologyList.class, this::getTopologyList) + .put(GetServiceInterfacePointDetails.class, this::getServiceInterfacePointDetails) + .put(GetServiceInterfacePointList.class, this::getServiceInterfacePointList) + .put(UpdateServiceInterfacePoint.class, this::updateServiceInterfacePoint) + .build(); } private Topology createAbstracted100GTpdrTopology(Topology topology) { diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TopologyUtils.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TopologyUtils.java index b8745ebe7..8e8d042ab 100644 --- a/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TopologyUtils.java +++ b/tapi/src/main/java/org/opendaylight/transportpce/tapi/topology/TopologyUtils.java @@ -128,8 +128,9 @@ public final class TopologyUtils { } List nameList = new ArrayList<>(); for (Map.Entry entry : topology.getName().entrySet()) { - nameList.add(entry.getValue().getValueName()); + nameList.add(entry.getValue().getValue()); } + LOG.debug("Topology nameList {} = ", nameList.toString()); return nameList; } diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/utils/TapiContext.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/utils/TapiContext.java index 366050fa8..b75cb2d70 100644 --- a/tapi/src/main/java/org/opendaylight/transportpce/tapi/utils/TapiContext.java +++ b/tapi/src/main/java/org/opendaylight/transportpce/tapi/utils/TapiContext.java @@ -211,6 +211,8 @@ public class TapiContext { connectivityContext); this.networkTransactionService.commit().get(); LOG.info("TAPI connectivity merged successfully."); + LOG.debug("TAPI connectivity merged successfully for services {}", connServMap.entrySet().iterator() + .next().getKey().toString()); } catch (InterruptedException | ExecutionException e) { LOG.error("Failed to merge TAPI connectivity", e); } diff --git a/tapi/src/main/java/org/opendaylight/transportpce/tapi/utils/TapiLinkImpl.java b/tapi/src/main/java/org/opendaylight/transportpce/tapi/utils/TapiLinkImpl.java index 617fd62ce..0213e03fa 100644 --- a/tapi/src/main/java/org/opendaylight/transportpce/tapi/utils/TapiLinkImpl.java +++ b/tapi/src/main/java/org/opendaylight/transportpce/tapi/utils/TapiLinkImpl.java @@ -188,6 +188,7 @@ public class TapiLinkImpl implements TapiLink { .build(); } + @Override public AdministrativeState setTapiAdminState(String adminState) { if (adminState == null) { return null; @@ -197,6 +198,7 @@ public class TapiLinkImpl implements TapiLink { : AdministrativeState.LOCKED; } + @Override public AdministrativeState setTapiAdminState(AdminStates adminState1, AdminStates adminState2) { if (adminState1 == null || adminState2 == null) { return null; @@ -206,6 +208,7 @@ public class TapiLinkImpl implements TapiLink { ? AdministrativeState.UNLOCKED : AdministrativeState.LOCKED; } + @Override public OperationalState setTapiOperationalState(String operState) { if (operState == null) { return null; @@ -214,6 +217,7 @@ public class TapiLinkImpl implements TapiLink { ? OperationalState.ENABLED : OperationalState.DISABLED; } + @Override public OperationalState setTapiOperationalState(State operState1, State operState2) { if (operState1 == null || operState2 == null) { return null; @@ -222,13 +226,14 @@ public class TapiLinkImpl implements TapiLink { ? OperationalState.ENABLED : OperationalState.DISABLED; } + @Override public String getOperState(String srcNodeId, String destNodeId, String sourceTpId, String destTpId) { Uuid tapiTopoUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER .getBytes(Charset.forName("UTF-8"))).toString()); Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", srcNodeId, TapiStringConstants.PHTNC_MEDIA).getBytes(Charset.forName("UTF-8"))).toString()); Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", srcNodeId, - TapiStringConstants.PHTNC_MEDIA, sourceTpId).getBytes(Charset.forName("UTF-8"))).toString()); + TapiStringConstants.PHTNC_MEDIA_OTS, sourceTpId).getBytes(Charset.forName("UTF-8"))).toString()); InstanceIdentifier onepIID = InstanceIdentifier.builder(Context.class) .augmentation(Context1.class).child(TopologyContext.class) .child(Topology.class, new TopologyKey(tapiTopoUuid)).child(Node.class, new NodeKey(nodeUuid)) @@ -237,7 +242,7 @@ public class TapiLinkImpl implements TapiLink { Uuid node1Uuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", destNodeId, TapiStringConstants.PHTNC_MEDIA).getBytes(Charset.forName("UTF-8"))).toString()); Uuid nep1Uuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", destNodeId, - TapiStringConstants.PHTNC_MEDIA, destTpId).getBytes(Charset.forName("UTF-8"))).toString()); + TapiStringConstants.PHTNC_MEDIA_OTS, destTpId).getBytes(Charset.forName("UTF-8"))).toString()); InstanceIdentifier onep1IID = InstanceIdentifier.builder(Context.class) .augmentation(Context1.class).child(TopologyContext.class) .child(Topology.class, new TopologyKey(tapiTopoUuid)).child(Node.class, new NodeKey(node1Uuid)) @@ -261,13 +266,14 @@ public class TapiLinkImpl implements TapiLink { } } + @Override public String getAdminState(String srcNodeId, String destNodeId, String sourceTpId, String destTpId) { Uuid tapiTopoUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER .getBytes(Charset.forName("UTF-8"))).toString()); Uuid nodeUuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", srcNodeId, TapiStringConstants.PHTNC_MEDIA).getBytes(Charset.forName("UTF-8"))).toString()); Uuid nepUuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", srcNodeId, - TapiStringConstants.PHTNC_MEDIA, sourceTpId).getBytes(Charset.forName("UTF-8"))).toString()); + TapiStringConstants.PHTNC_MEDIA_OTS, sourceTpId).getBytes(Charset.forName("UTF-8"))).toString()); InstanceIdentifier onepIID = InstanceIdentifier.builder(Context.class) .augmentation(Context1.class).child(TopologyContext.class) .child(Topology.class, new TopologyKey(tapiTopoUuid)).child(Node.class, new NodeKey(nodeUuid)) @@ -276,7 +282,7 @@ public class TapiLinkImpl implements TapiLink { Uuid node1Uuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", destNodeId, TapiStringConstants.PHTNC_MEDIA).getBytes(Charset.forName("UTF-8"))).toString()); Uuid nep1Uuid = new Uuid(UUID.nameUUIDFromBytes(String.join("+", destNodeId, - TapiStringConstants.PHTNC_MEDIA, destTpId).getBytes(Charset.forName("UTF-8"))).toString()); + TapiStringConstants.PHTNC_MEDIA_OTS, destTpId).getBytes(Charset.forName("UTF-8"))).toString()); InstanceIdentifier onep1IID = InstanceIdentifier.builder(Context.class) .augmentation(Context1.class).child(TopologyContext.class) .child(Topology.class, new TopologyKey(tapiTopoUuid)).child(Node.class, new NodeKey(node1Uuid)) diff --git a/tapi/src/test/java/org/opendaylight/transportpce/tapi/connectivity/TapiConnectivityImplTest.java b/tapi/src/test/java/org/opendaylight/transportpce/tapi/connectivity/TapiConnectivityImplTest.java index 687b33bd7..837a61fe6 100644 --- a/tapi/src/test/java/org/opendaylight/transportpce/tapi/connectivity/TapiConnectivityImplTest.java +++ b/tapi/src/test/java/org/opendaylight/transportpce/tapi/connectivity/TapiConnectivityImplTest.java @@ -51,6 +51,10 @@ import org.opendaylight.transportpce.tapi.utils.TapiLinkImpl; import org.opendaylight.transportpce.tapi.utils.TapiTopologyDataUtils; import org.opendaylight.transportpce.test.AbstractTest; import org.opendaylight.transportpce.test.utils.TopologyDataUtils; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteOutput; +import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.renderer.rev210915.ServiceDeleteOutputBuilder; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.configuration.response.common.ConfigurationResponseCommon; +import org.opendaylight.yang.gen.v1.http.org.openroadm.common.service.types.rev230526.configuration.response.common.ConfigurationResponseCommonBuilder; import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.OrgOpenroadmServiceService; import org.opendaylight.yang.gen.v1.http.org.openroadm.service.rev230526.ServiceCreateInput; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.CreateConnectivityServiceInput; @@ -177,7 +181,7 @@ public class TapiConnectivityImplTest extends AbstractTest { }, executorService); endSignal.await(); - + LOG.info("INPUT= {}", input.toString()); RpcResult rpcResult = result.get(); assertTrue(rpcResult.isSuccessful()); } @@ -212,7 +216,6 @@ public class TapiConnectivityImplTest extends AbstractTest { OrgOpenroadmServiceService serviceHandler = new ServicehandlerImpl(rpcProviderService, pathComputationService, rendererServiceOperations, notificationPublishService, pceListenerImpl, rendererListenerImpl, networkModelListenerImpl, serviceDataStoreOperations, catalogDataStoreOperations); - TapiConnectivityImpl tapiConnectivity = new TapiConnectivityImpl(serviceHandler, tapiContext, connectivityUtils, tapipceNotificationHandler, tapirendererNotificationHandler, networkTransactionService); ListenableFuture> result = @@ -232,7 +235,15 @@ public class TapiConnectivityImplTest extends AbstractTest { @Test void deleteConnServiceShouldBeSuccessForExistingService() throws ExecutionException, InterruptedException { - when(rendererServiceOperations.serviceDelete(any(), any())).thenReturn(Futures.immediateFuture(any())); + ConfigurationResponseCommon crc = new ConfigurationResponseCommonBuilder() + .setRequestId("request 1") + .setResponseCode("OK") + .setAckFinalIndicator("requestProcessed").build(); + ServiceDeleteOutput sdo = new ServiceDeleteOutputBuilder() + .setConfigurationResponseCommon(crc) + .build(); + when(rendererServiceOperations.serviceDelete(any(), any())) + .thenReturn(Futures.immediateFuture(sdo)); OrgOpenroadmServiceService serviceHandler = new ServicehandlerImpl(rpcProviderService, pathComputationService, rendererServiceOperations, notificationPublishService, pceListenerImpl, rendererListenerImpl, @@ -240,11 +251,9 @@ public class TapiConnectivityImplTest extends AbstractTest { TapiConnectivityImpl tapiConnectivity = new TapiConnectivityImpl(serviceHandler, tapiContext, connectivityUtils, tapipceNotificationHandler, tapirendererNotificationHandler, networkTransactionService); - ServiceCreateInput createInput = TapiConnectivityDataUtils.buildServiceCreateInput(); serviceDataStoreOperations.createService(createInput); tapiContext.updateConnectivityContext(TapiConnectivityDataUtils.createConnService(), new HashMap<>()); - DeleteConnectivityServiceInput input = TapiConnectivityDataUtils.buildConnServiceDeleteInput(); ListenableFuture> result = tapiConnectivity.deleteConnectivityService(input); @@ -256,8 +265,8 @@ public class TapiConnectivityImplTest extends AbstractTest { }, executorService); endSignal.await(); - + LOG.debug("RESULT = {}", result.toString()); RpcResult rpcResult = result.get(); assertTrue(rpcResult.isSuccessful()); } -} \ No newline at end of file +} diff --git a/tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/ConvertORTopoToFullTapiTopoTest.java b/tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/ConvertORTopoToFullTapiTopoTest.java index 5f62a406d..09960dc33 100644 --- a/tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/ConvertORTopoToFullTapiTopoTest.java +++ b/tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/ConvertORTopoToFullTapiTopoTest.java @@ -67,7 +67,6 @@ import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.top import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPointBuilder; import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.node.TerminationPointKey; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.AdministrativeState; -import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.CAPACITYUNITGBPS; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.Direction; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.ForwardingDirection; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.common.rev221121.LAYERPROTOCOLQUALIFIER; @@ -85,6 +84,7 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev221121.DIGITALSIGNALTYPE100GigE; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev221121.DIGITALSIGNALTYPE10GigELAN; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.PHOTONICLAYERQUALIFIEROMS; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.PHOTONICLAYERQUALIFIEROTS; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.PHOTONICLAYERQUALIFIEROTSi; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.FORWARDINGRULEMAYFORWARDACROSSGROUP; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.RuleType; @@ -96,7 +96,6 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.no import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.Rule; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier; -import org.opendaylight.yangtools.yang.common.Uint64; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -213,7 +212,7 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest { ConvertORTopoToTapiFullTopo tapiFactory = new ConvertORTopoToTapiFullTopo(topologyUuid, tapiLink); tapiFactory.convertNode(tpdr, networkPortList); - Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+DSR".getBytes(Charset.forName("UTF-8"))) + Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+XPONDER".getBytes(Charset.forName("UTF-8"))) .toString()); org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node dsrNode = tapiFactory .getTapiNodes().get(new @@ -231,32 +230,6 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest { OwnedNodeEdgePoint inepN = dsrNode.nonnullOwnedNodeEdgePoint().get(new OwnedNodeEdgePointKey(inetworkNepUuid)); assertNull(inepN.getAdministrativeState(), "Administrative State should not be present"); assertNull(inepN.getOperationalState(), "Operational State should not be present"); - - Uuid otsiNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+OTSi".getBytes(Charset.forName("UTF-8"))) - .toString()); - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node otsiNode = tapiFactory - .getTapiNodes().get(new - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.NodeKey(otsiNodeUuid)); - Uuid enepUuid = new Uuid( - UUID.nameUUIDFromBytes(("XPDR-A1-XPDR1+eOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8"))) - .toString()); - OwnedNodeEdgePoint enep = otsiNode.nonnullOwnedNodeEdgePoint().get(new OwnedNodeEdgePointKey(enepUuid)); - assertNull(enep.getAdministrativeState(), "Administrative State should not be present"); - assertNull(enep.getOperationalState(), "Operational State should not be present"); - - Uuid inepUuid = new Uuid( - UUID.nameUUIDFromBytes(("XPDR-A1-XPDR1+iOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8"))) - .toString()); - OwnedNodeEdgePoint inep = otsiNode.nonnullOwnedNodeEdgePoint().get(new OwnedNodeEdgePointKey(inepUuid)); - assertNull(inep.getAdministrativeState(), "Administrative State should not be present"); - assertNull(inep.getOperationalState(), "Operational State should not be present"); - - Uuid photnepUuid = new Uuid( - UUID.nameUUIDFromBytes(("XPDR-A1-XPDR1+PHOTONIC_MEDIA+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8"))) - .toString()); - OwnedNodeEdgePoint photnep = otsiNode.nonnullOwnedNodeEdgePoint().get(new OwnedNodeEdgePointKey(photnepUuid)); - assertNull(photnep.getAdministrativeState(), "Administrative State should not be present"); - assertNull(photnep.getOperationalState(), "Operational State should not be present"); } @Test @@ -272,7 +245,7 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest { ConvertORTopoToTapiFullTopo tapiFactory = new ConvertORTopoToTapiFullTopo(topologyUuid, tapiLink); tapiFactory.convertNode(tpdr, networkPortList); - Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+DSR".getBytes(Charset.forName("UTF-8"))) + Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+XPONDER".getBytes(Charset.forName("UTF-8"))) .toString()); org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node dsrNode = tapiFactory .getTapiNodes().get(new @@ -292,35 +265,6 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest { assertEquals(AdministrativeState.LOCKED, inepN.getAdministrativeState(), "Administrative State should be Locked"); assertEquals(OperationalState.DISABLED, inepN.getOperationalState(), "Operational State should be Disabled"); - - Uuid otsiNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+OTSi".getBytes(Charset.forName("UTF-8"))) - .toString()); - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node otsiNode = tapiFactory - .getTapiNodes().get(new - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.NodeKey(otsiNodeUuid)); - Uuid enepUuid = new Uuid( - UUID.nameUUIDFromBytes(("XPDR-A1-XPDR1+eOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8"))) - .toString()); - OwnedNodeEdgePoint enep = otsiNode.nonnullOwnedNodeEdgePoint().get(new OwnedNodeEdgePointKey(enepUuid)); - assertEquals(AdministrativeState.LOCKED, enep.getAdministrativeState(), - "Administrative State should be Locked"); - assertEquals(OperationalState.DISABLED, enep.getOperationalState(), "Operational State should be Disabled"); - - Uuid inepUuid = new Uuid( - UUID.nameUUIDFromBytes(("XPDR-A1-XPDR1+iOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8"))) - .toString()); - OwnedNodeEdgePoint inep = otsiNode.nonnullOwnedNodeEdgePoint().get(new OwnedNodeEdgePointKey(inepUuid)); - assertEquals(AdministrativeState.LOCKED, inep.getAdministrativeState(), - "Administrative State should be Locked"); - assertEquals(OperationalState.DISABLED, inep.getOperationalState(), "Operational State should be Disabled"); - - Uuid photnepUuid = new Uuid( - UUID.nameUUIDFromBytes(("XPDR-A1-XPDR1+PHOTONIC_MEDIA+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8"))) - .toString()); - OwnedNodeEdgePoint photnep = otsiNode.nonnullOwnedNodeEdgePoint().get(new OwnedNodeEdgePointKey(photnepUuid)); - assertEquals(AdministrativeState.LOCKED, photnep.getAdministrativeState(), - "Administrative State should be Locked"); - assertEquals(OperationalState.DISABLED, photnep.getOperationalState(), "Operational State should be Disabled"); } @Test @@ -336,7 +280,7 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest { ConvertORTopoToTapiFullTopo tapiFactory = new ConvertORTopoToTapiFullTopo(topologyUuid, tapiLink); tapiFactory.convertNode(tpdr, networkPortList); - Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+DSR".getBytes(Charset.forName("UTF-8"))) + Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+XPONDER".getBytes(Charset.forName("UTF-8"))) .toString()); org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node dsrNode = tapiFactory .getTapiNodes().get(new @@ -357,34 +301,6 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest { "Administrative State should be Locked"); assertEquals(OperationalState.DISABLED, inepN.getOperationalState(), "Operational State should be Disabled"); - Uuid otsiNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+OTSi".getBytes(Charset.forName("UTF-8"))) - .toString()); - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node otsiNode = tapiFactory - .getTapiNodes().get(new - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.NodeKey(otsiNodeUuid)); - Uuid enepUuid = new Uuid( - UUID.nameUUIDFromBytes(("XPDR-A1-XPDR1+eOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8"))) - .toString()); - OwnedNodeEdgePoint enep = otsiNode.nonnullOwnedNodeEdgePoint().get(new OwnedNodeEdgePointKey(enepUuid)); - assertEquals(AdministrativeState.LOCKED, enep.getAdministrativeState(), - "Administrative State should be Locked"); - assertEquals(OperationalState.DISABLED, enep.getOperationalState(), "Operational State should be Disabled"); - - Uuid inepUuid = new Uuid( - UUID.nameUUIDFromBytes(("XPDR-A1-XPDR1+iOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8"))) - .toString()); - OwnedNodeEdgePoint inep = otsiNode.nonnullOwnedNodeEdgePoint().get(new OwnedNodeEdgePointKey(inepUuid)); - assertEquals(AdministrativeState.LOCKED, inep.getAdministrativeState(), - "Administrative State should be Locked"); - assertEquals(OperationalState.DISABLED, inep.getOperationalState(), "Operational State should be Disabled"); - - Uuid photnepUuid = new Uuid( - UUID.nameUUIDFromBytes(("XPDR-A1-XPDR1+PHOTONIC_MEDIA+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8"))) - .toString()); - OwnedNodeEdgePoint photnep = otsiNode.nonnullOwnedNodeEdgePoint().get(new OwnedNodeEdgePointKey(photnepUuid)); - assertEquals(AdministrativeState.LOCKED, photnep.getAdministrativeState(), - "Administrative State should be Locked"); - assertEquals(OperationalState.DISABLED, photnep.getOperationalState(), "Operational State should be Disabled"); } @Test @@ -402,22 +318,12 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest { .sorted((n1, n2) -> n1.getUuid().getValue().compareTo(n2.getUuid().getValue())) .collect(Collectors.toList()); - assertEquals(2, tapiFactory.getTapiNodes().size(), "Node list size should be 2"); - assertEquals(2, tapiFactory.getTapiLinks().size(), "Link list size should be 2"); + assertEquals(1, tapiFactory.getTapiNodes().size(), "Node list size should be 1 (DSR-ODU merged)"); + assertEquals(0, tapiFactory.getTapiLinks().size(), "Link list size should be 0 : no more transitional link"); - Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+DSR".getBytes(Charset.forName("UTF-8"))) - .toString()); - checkDsrNode(tapiNodes.get(1), dsrNodeUuid, "tpdr", "XPDR-A1-XPDR1"); - Uuid otsiNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+OTSi".getBytes(Charset.forName("UTF-8"))) + Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+XPONDER".getBytes(Charset.forName("UTF-8"))) .toString()); - checkOtsiNode(tapiNodes.get(0), otsiNodeUuid, "tpdr", "XPDR-A1-XPDR1"); - - List tapiLinks - = tapiFactory.getTapiLinks().values().stream() - .sorted((l1, l2) -> l1.getUuid().getValue().compareTo(l2.getUuid().getValue())) - .collect(Collectors.toList()); - checkTransitionalLink(tapiLinks.get(1), dsrNodeUuid, otsiNodeUuid, - "XPDR-A1-XPDR1+iODU+XPDR1-NETWORK1", "XPDR-A1-XPDR1+iOTSi+XPDR1-NETWORK1", "XPDR-A1-XPDR1"); + checkDsrNode(tapiNodes.get(0), dsrNodeUuid, "tpdr", "XPDR-A1-XPDR1"); } @Test @@ -435,21 +341,11 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest { .sorted((n1, n2) -> n1.getUuid().getValue().compareTo(n2.getUuid().getValue())) .collect(Collectors.toList()); - assertEquals(2, tapiFactory.getTapiNodes().size(), "Node list size should be 2"); - assertEquals(1, tapiFactory.getTapiLinks().size(), "Link list size should be 1"); - Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+DSR".getBytes(Charset.forName("UTF-8"))) + assertEquals(1, tapiFactory.getTapiNodes().size(), "Node list size should be 1 (DSR-ODU merged)"); + assertEquals(0, tapiFactory.getTapiLinks().size(), "Link list size should be 0 : no more transitional link"); + Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+XPONDER".getBytes(Charset.forName("UTF-8"))) .toString()); checkDsrNode(tapiNodes.get(0), dsrNodeUuid, "mux", "SPDR-SA1-XPDR1"); - Uuid otsiNodeUuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+OTSi".getBytes(Charset.forName("UTF-8"))) - .toString()); - checkOtsiNode(tapiNodes.get(1), otsiNodeUuid, "mux", "SPDR-SA1-XPDR1"); - - List tapiLinks - = tapiFactory.getTapiLinks().values().stream() - .sorted((l1, l2) -> l1.getUuid().getValue().compareTo(l2.getUuid().getValue())) - .collect(Collectors.toList()); - checkTransitionalLink(tapiLinks.get(0), dsrNodeUuid, otsiNodeUuid, - "SPDR-SA1-XPDR1+iODU+XPDR1-NETWORK1", "SPDR-SA1-XPDR1+iOTSi+XPDR1-NETWORK1", "SPDR-SA1-XPDR1"); } @Test @@ -467,22 +363,12 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest { .sorted((n1, n2) -> n1.getUuid().getValue().compareTo(n2.getUuid().getValue())) .collect(Collectors.toList()); - assertEquals(2, tapiFactory.getTapiNodes().size(), "Node list size should be 2"); - assertEquals(4, tapiFactory.getTapiLinks().size(), "Link list size should be 4"); + assertEquals(1, tapiFactory.getTapiNodes().size(), "Node list size should be 1 (DSR-ODU merged)"); + assertEquals(0, tapiFactory.getTapiLinks().size(), "Link list size should be 0 : no more transitional link"); - Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR2+DSR".getBytes(Charset.forName("UTF-8"))) + Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR2+XPONDER".getBytes(Charset.forName("UTF-8"))) .toString()); checkDsrNode(tapiNodes.get(0), dsrNodeUuid, "switch", "SPDR-SA1-XPDR2"); - Uuid otsiNodeUuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR2+OTSi".getBytes(Charset.forName("UTF-8"))) - .toString()); - checkOtsiNode(tapiNodes.get(1), otsiNodeUuid, "switch", "SPDR-SA1-XPDR2"); - - List tapiLinks - = tapiFactory.getTapiLinks().values().stream() - .sorted((l1, l2) -> l1.getUuid().getValue().compareTo(l2.getUuid().getValue())) - .collect(Collectors.toList()); - checkTransitionalLink(tapiLinks.get(2), dsrNodeUuid, otsiNodeUuid, - "SPDR-SA1-XPDR2+iODU+XPDR2-NETWORK4", "SPDR-SA1-XPDR2+iOTSi+XPDR2-NETWORK4", "SPDR-SA1-XPDR2"); } @Test @@ -496,7 +382,7 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest { = tapiFactory.getTapiNodes().values().stream().collect(Collectors.toList()); Uuid roadmNodeUuid = new Uuid(UUID.nameUUIDFromBytes((roadmA.getNodeId().getValue() + "+PHOTONIC_MEDIA") .getBytes(Charset.forName("UTF-8"))).toString()); - checkOtsiNode(tapiNodes.get(0), roadmNodeUuid, "roadm", "ROADM-A1"); + checkOtsiNode(tapiNodes.get(getNodeRank("ROADM-A1", tapiNodes)), roadmNodeUuid, "roadm", "ROADM-A1"); } @Test @@ -515,9 +401,19 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest { List tapiNodes = tapiFactory.getTapiNodes().values().stream().collect(Collectors.toList()); + int myInt = 0; + for (org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node node : tapiNodes) { + if (node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA) + && !node.getLayerProtocolName().contains(LayerProtocolName.DSR)) { + LOG.info("LOOP ROADM node found at rank {}, with Name {} and Uuid {}", + myInt, node.getName().toString(), node.getUuid()); + } + myInt++; + } Uuid roadmaNodeUuid = new Uuid(UUID.nameUUIDFromBytes((roadmA.getNodeId().getValue() + "+PHOTONIC_MEDIA") .getBytes(Charset.forName("UTF-8"))).toString()); - checkOtsiNode(tapiNodes.get(1), roadmaNodeUuid, "roadm", "ROADM-A1"); + LOG.info("ROADM node found at rank {} from getrank", getNodeRank("ROADM-A1", tapiNodes)); + checkOtsiNode(tapiNodes.get(getNodeRank("ROADM-A1", tapiNodes)), roadmaNodeUuid, "roadm", "ROADM-A1"); List links = tapiFactory.getTapiLinks().values().stream() @@ -527,16 +423,16 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest { .toString()); Uuid node2Uuid = new Uuid(UUID.nameUUIDFromBytes("ROADM-C1+PHOTONIC_MEDIA".getBytes(Charset.forName("UTF-8"))) .toString()); - Uuid tp1Uuid = new Uuid(UUID.nameUUIDFromBytes("ROADM-A1+PHOTONIC_MEDIA+DEG2-TTP-TXRX" + Uuid tp1Uuid = new Uuid(UUID.nameUUIDFromBytes("ROADM-A1+PHOTONIC_MEDIA_OTS+DEG2-TTP-TXRX" .getBytes(Charset.forName("UTF-8"))).toString()); - Uuid tp2Uuid = new Uuid(UUID.nameUUIDFromBytes(("ROADM-C1+PHOTONIC_MEDIA+DEG1-TTP-TXRX") + Uuid tp2Uuid = new Uuid(UUID.nameUUIDFromBytes(("ROADM-C1+PHOTONIC_MEDIA_OTS+DEG1-TTP-TXRX") .getBytes(Charset.forName("UTF-8"))).toString()); Uuid linkUuid = new Uuid(UUID.nameUUIDFromBytes( - "ROADM-C1+PHOTONIC_MEDIA+DEG1-TTP-TXRXtoROADM-A1+PHOTONIC_MEDIA+DEG2-TTP-TXRX" + "ROADM-C1+PHOTONIC_MEDIA_OTS+DEG1-TTP-TXRXtoROADM-A1+PHOTONIC_MEDIA_OTS+DEG2-TTP-TXRX" .getBytes(Charset.forName("UTF-8"))).toString()); checkOmsLink(links.get(0), node1Uuid, node2Uuid, tp1Uuid, tp2Uuid, linkUuid, - "ROADM-C1+PHOTONIC_MEDIA+DEG1-TTP-TXRXtoROADM-A1+PHOTONIC_MEDIA+DEG2-TTP-TXRX"); + "ROADM-C1+PHOTONIC_MEDIA_OTS+DEG1-TTP-TXRXtoROADM-A1+PHOTONIC_MEDIA_OTS+DEG2-TTP-TXRX"); } @Test @@ -566,40 +462,41 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest { .collect(Collectors.toList()); xponderInLinkList.addAll(xponderOutLinkList); tapiFactory.convertXpdrToRdmLinks(xponderInLinkList); - assertEquals(3, tapiFactory.getTapiNodes().size(), "Node list size should be 3"); - assertEquals(2, tapiFactory.getTapiLinks().size(), "Link list size should be 2"); + assertEquals(2, tapiFactory.getTapiNodes().size(), "Node list size should be 2 (XPDR, DSR-ODU merged; ROADM)"); + assertEquals(1, tapiFactory.getTapiLinks().size(), "Link list size should be 1 : no more transitional link"); List tapiNodes = tapiFactory.getTapiNodes().values().stream() .sorted((n1, n2) -> n1.getUuid().getValue().compareTo(n2.getUuid().getValue())) .collect(Collectors.toList()); Uuid roadmNodeUuid = new Uuid(UUID.nameUUIDFromBytes((roadmA.getNodeId().getValue() + "+PHOTONIC_MEDIA") .getBytes(Charset.forName("UTF-8"))).toString()); - checkOtsiNode(tapiNodes.get(1), roadmNodeUuid, "roadm", "ROADM-A1"); + checkOtsiNode(tapiNodes.get(getNodeRank("ROADM-A1", tapiNodes)), roadmNodeUuid, "roadm", "ROADM-A1"); - List links - = tapiFactory.getTapiLinks().values().stream() - .sorted((l1, l2) -> l1.getUuid().getValue().compareTo(l2.getUuid().getValue())) - .collect(Collectors.toList()); - Uuid node1Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+OTSi".getBytes(Charset.forName("UTF-8"))) + Uuid node1Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+XPONDER".getBytes(Charset.forName("UTF-8"))) .toString()); Uuid node2Uuid = new Uuid(UUID.nameUUIDFromBytes("ROADM-A1+PHOTONIC_MEDIA".getBytes(Charset.forName("UTF-8"))) .toString()); - Uuid tp1Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+PHOTONIC_MEDIA+XPDR1-NETWORK1" + LOG.info("ROADM-A1+PHOTONIC_MEDIA UUID is {}", node2Uuid); + Uuid tp1Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+PHOTONIC_MEDIA_OTS+XPDR1-NETWORK1" .getBytes(Charset.forName("UTF-8"))).toString()); - Uuid tp2Uuid = new Uuid(UUID.nameUUIDFromBytes(("ROADM-A1+PHOTONIC_MEDIA+SRG1-PP2-TXRX") + Uuid tp2Uuid = new Uuid(UUID.nameUUIDFromBytes(("ROADM-A1+PHOTONIC_MEDIA_OTS+SRG1-PP2-TXRX") .getBytes(Charset.forName("UTF-8"))).toString()); Uuid linkUuid = new Uuid(UUID.nameUUIDFromBytes( - "ROADM-A1+PHOTONIC_MEDIA+SRG1-PP2-TXRXtoSPDR-SA1-XPDR1+PHOTONIC_MEDIA+XPDR1-NETWORK1" + "ROADM-A1+PHOTONIC_MEDIA_OTS+SRG1-PP2-TXRXtoSPDR-SA1-XPDR1+PHOTONIC_MEDIA_OTS+XPDR1-NETWORK1" .getBytes(Charset.forName("UTF-8"))).toString()); - checkXpdrRdmLink(links.get(1), node1Uuid, node2Uuid, tp1Uuid, tp2Uuid, linkUuid, - "ROADM-A1+PHOTONIC_MEDIA+SRG1-PP2-TXRXtoSPDR-SA1-XPDR1+PHOTONIC_MEDIA+XPDR1-NETWORK1"); + List links + = tapiFactory.getTapiLinks().values().stream() + .sorted((l1, l2) -> l1.getUuid().getValue().compareTo(l2.getUuid().getValue())) + .collect(Collectors.toList()); + checkXpdrRdmLink(links.get(0), node1Uuid, node2Uuid, tp1Uuid, tp2Uuid, linkUuid, + "ROADM-A1+PHOTONIC_MEDIA_OTS+SRG1-PP2-TXRXtoSPDR-SA1-XPDR1+PHOTONIC_MEDIA_OTS+XPDR1-NETWORK1"); } private void checkDsrNode(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node node, - Uuid nodeUuid, String dsrNodeType, String nodeId) { - assertEquals(nodeUuid, node.getUuid(), "incorrect node uuid"); - assertEquals(nodeId + "+DSR", node.getName().get(new NameKey("dsr/odu node name")).getValue(), + Uuid node9Uuid, String dsrNodeType, String nodeId) { + assertEquals(node9Uuid, node.getUuid(), "incorrect node uuid"); + assertEquals(nodeId + "+XPONDER", node.getName().get(new NameKey("dsr/odu node name")).getValue(), "incorrect node name"); assertEquals(AdministrativeState.UNLOCKED, node.getAdministrativeState(), "administrative state should be UNLOCKED"); @@ -607,7 +504,8 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest { assertEquals(OperationalState.ENABLED, node.getOperationalState(), "operational state should be ENABLED"); assertThat("one value-name should be 'dsr/odu node name'", new ArrayList<>(node.nonnullName().keySet()), hasItem(new NameKey("dsr/odu node name"))); - assertEquals(2, node.getLayerProtocolName().size(), "dsr node should manage 2 protocol layers : dsr and odu"); + assertEquals(4, node.getLayerProtocolName().size(), "dsr node should manage 4 protocol layers : dsr and odu" + + " DIGITALOTN, PHOTONICMEDIA"); assertThat("dsr node should manage 2 protocol layers : dsr and odu", node.getLayerProtocolName(), hasItems(LayerProtocolName.DSR, LayerProtocolName.ODU)); List inepsN = node.nonnullOwnedNodeEdgePoint().values().stream() @@ -646,7 +544,7 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest { List nrgList = node.nonnullNodeRuleGroup().values().stream() .sorted((nrg1, nrg2) -> nrg1.getUuid().getValue().compareTo(nrg2.getUuid().getValue())) .collect(Collectors.toList()); - checkNodeRuleGroupForSwitchDSR(nrgList, client4NepUuid, enetworkNepUuid, nodeUuid); + checkNodeRuleGroupForSwitchDSR(nrgList, client4NepUuid, enetworkNepUuid, node9Uuid); break; case "mux": nepsC = node.nonnullOwnedNodeEdgePoint().values().stream() @@ -675,7 +573,7 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest { List nrgList2 = node.nonnullNodeRuleGroup().values().stream() .sorted((nrg1, nrg2) -> nrg1.getUuid().getValue().compareTo(nrg2.getUuid().getValue())) .collect(Collectors.toList()); - checkNodeRuleGroupForMuxDSR(nrgList2, client3NepUuid, enetworkNepUuid2, nodeUuid); + checkNodeRuleGroupForMuxDSR(nrgList2, client3NepUuid, enetworkNepUuid2, node9Uuid); break; case "tpdr": nepsC = node.nonnullOwnedNodeEdgePoint().values().stream() @@ -704,7 +602,7 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest { List nrgList3 = node.nonnullNodeRuleGroup().values().stream() .sorted((nrg1, nrg2) -> nrg1.getUuid().getValue().compareTo(nrg2.getUuid().getValue())) .collect(Collectors.toList()); - checkNodeRuleGroupForTpdrDSR(nrgList3, client1NepUuid, enetworkNepUuid3, nodeUuid); + checkNodeRuleGroupForTpdrDSR(nrgList3, client1NepUuid, enetworkNepUuid3, node9Uuid); break; default: fail(); @@ -715,18 +613,22 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest { private void checkOtsiNode( org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node node, Uuid nodeUuid, String otsiNodeType, String nodeId) { + if (!node.getUuid().equals(nodeUuid)) { + LOG.info("ERRORUUID on Node.getNodeId {}, NodeId {}", node.getName().toString(), nodeId); + LOG.info("ERRORUUID TapiUuid {}, transmitted Node Uuid {}", node.getUuid(), nodeUuid); + } assertEquals(nodeUuid, node.getUuid(), "incorrect node uuid"); List nepsI = null; List nepsE = null; List nepsP = null; - List nepsMc = null; - List nepsOtsimc = null; + List nepsOMS = null; + List nepsOTS = null; List nepsPhot = null; if (!otsiNodeType.equals("roadm")) { - assertEquals(nodeId + "+OTSi", node.getName().get(new NameKey("otsi node name")).getValue(), + assertEquals(nodeId + "+XPONDER", node.getName().get(new NameKey("dsr/odu node name")).getValue(), "incorrect node name"); assertThat("one value-name should be 'dsr/odu node name'", - new ArrayList<>(node.nonnullName().keySet()), hasItem(new NameKey("otsi node name"))); + new ArrayList<>(node.nonnullName().keySet()), hasItem(new NameKey("dsr/odu node name"))); nepsI = node.nonnullOwnedNodeEdgePoint().values().stream() .filter(n -> n.getName().containsKey(new NameKey("iNodeEdgePoint"))) .sorted((nep1, nep2) -> nep1.getUuid().getValue().compareTo(nep2.getUuid().getValue())) @@ -744,18 +646,22 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest { "incorrect node name"); assertThat("one value-name should be 'dsr/odu node name'", new ArrayList<>(node.nonnullName().keySet()), hasItem(new NameKey("roadm node name"))); - nepsMc = node.nonnullOwnedNodeEdgePoint().values().stream() - .filter(n -> n.getName().containsKey(new NameKey("MEDIA_CHANNELNodeEdgePoint"))) + nepsOMS = node.nonnullOwnedNodeEdgePoint().values().stream() + .filter(n -> n.getName().containsKey(new NameKey("PHOTONIC_MEDIA_OMSNodeEdgePoint"))) .sorted((nep1, nep2) -> nep1.getUuid().getValue().compareTo(nep2.getUuid().getValue())) .collect(Collectors.toList()); - nepsOtsimc = node.nonnullOwnedNodeEdgePoint().values().stream() - .filter(n -> n.getName().containsKey(new NameKey("OTSi_MEDIA_CHANNELNodeEdgePoint"))) + nepsOTS = node.nonnullOwnedNodeEdgePoint().values().stream() + .filter(n -> n.getName().containsKey(new NameKey("PHOTONIC_MEDIA_OTSNodeEdgePoint"))) .sorted((nep1, nep2) -> nep1.getUuid().getValue().compareTo(nep2.getUuid().getValue())) .collect(Collectors.toList()); nepsPhot = node.nonnullOwnedNodeEdgePoint().values().stream() - .filter(n -> n.getName().containsKey(new NameKey("PHOTONIC_MEDIANodeEdgePoint"))) + .filter(n -> n.getName().containsKey(new NameKey("PHOTONIC_MEDIA_OMSNodeEdgePoint"))) .sorted((nep1, nep2) -> nep1.getUuid().getValue().compareTo(nep2.getUuid().getValue())) .collect(Collectors.toList()); + nepsPhot.addAll(node.nonnullOwnedNodeEdgePoint().values().stream() + .filter(n -> n.getName().containsKey(new NameKey("PHOTONIC_MEDIA_OTSNodeEdgePoint"))) + .sorted((nep1, nep2) -> nep1.getUuid().getValue().compareTo(nep2.getUuid().getValue())) + .collect(Collectors.toList())); } assertEquals(AdministrativeState.UNLOCKED, node.getAdministrativeState(), "administrative state should be UNLOCKED"); @@ -778,9 +684,11 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest { checkNepOtsiNode(nep1, inepUuid, nodeId + "+iOTSi+XPDR2-NETWORK2", "iNodeEdgePoint", true); OwnedNodeEdgePoint nep2 = nepsE.get(0); Uuid enepUuid = new Uuid( - UUID.nameUUIDFromBytes((nodeId + "+eOTSi+XPDR2-NETWORK2").getBytes(Charset.forName("UTF-8"))) + UUID.nameUUIDFromBytes((nodeId + "+PHOTONIC_MEDIA_OTS+XPDR2-NETWORK2") + .getBytes(Charset.forName("UTF-8"))) .toString()); - checkNepOtsiNode(nep2, enepUuid, nodeId + "+eOTSi+XPDR2-NETWORK2", "eNodeEdgePoint", false); + checkNepOtsiNode(nep2, enepUuid, nodeId + "+PHOTONIC_MEDIA_OTS+XPDR2-NETWORK2", + "eNodeEdgePoint", false); OwnedNodeEdgePoint photNep = nepsP.get(1); Uuid pnepUuid = new Uuid( UUID.nameUUIDFromBytes((nodeId + "+PHOTONIC_MEDIA+XPDR2-NETWORK2") @@ -798,9 +706,11 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest { assertEquals(1, nepsP.size(), "Mux-OTSi node should have 1 photNEPs"); OwnedNodeEdgePoint nep3 = nepsE.get(0); Uuid enepUuid2 = new Uuid( - UUID.nameUUIDFromBytes((nodeId + "+eOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8"))) + UUID.nameUUIDFromBytes((nodeId + "+PHOTONIC_MEDIA_OTS+XPDR1-NETWORK1") + .getBytes(Charset.forName("UTF-8"))) .toString()); - checkNepOtsiNode(nep3, enepUuid2, nodeId + "+eOTSi+XPDR1-NETWORK1", "eNodeEdgePoint", false); + checkNepOtsiNode(nep3, enepUuid2, nodeId + "+PHOTONIC_MEDIA_OTS+XPDR1-NETWORK1", + "eNodeEdgePoint", false); OwnedNodeEdgePoint nep4 = nepsI.get(0); Uuid inepUuid2 = new Uuid( UUID.nameUUIDFromBytes((nodeId + "+iOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8"))) @@ -823,9 +733,11 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest { assertEquals(2, nepsP.size(), "Tpdr-OTSi node should have 2 photNEPs"); OwnedNodeEdgePoint nep5 = nepsE.get(0); Uuid enepUuid3 = new Uuid( - UUID.nameUUIDFromBytes((nodeId + "+eOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8"))) + UUID.nameUUIDFromBytes((nodeId + "+PHOTONIC_MEDIA_OTS+XPDR1-NETWORK1") + .getBytes(Charset.forName("UTF-8"))) .toString()); - checkNepOtsiNode(nep5, enepUuid3, nodeId + "+eOTSi+XPDR1-NETWORK1", "eNodeEdgePoint", false); + checkNepOtsiNode(nep5, enepUuid3, nodeId + "+PHOTONIC_MEDIA_OTS+XPDR1-NETWORK1", + "eNodeEdgePoint", false); OwnedNodeEdgePoint nep6 = nepsI.get(0); Uuid inepUuid3 = new Uuid( UUID.nameUUIDFromBytes((nodeId + "+iOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8"))) @@ -843,47 +755,42 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest { checkNodeRuleGroupForTpdrOTSi(nrgList3, enepUuid3, inepUuid3, nodeUuid); break; case "roadm": - assertEquals(10, nepsMc.size(), "Roadm node should have 10 MC NEPs"); - assertEquals(10, nepsOtsimc.size(), "Roadm node should have 10 OTSiMC NEPs"); - assertEquals(10, nepsPhot.size(), "Roadm node should have 10 PHOT_MEDIA NEPs"); +// assertEquals(0, nepsMc.size(), "MC NEP no more configured, Roadm node should have 0 MC NEPs"); +// assertEquals(0, nepsOtsimc.size(), "Roadm node should have 10 OTSiMC NEPs"); + assertEquals(12, nepsPhot.size(), "Roadm node should have 12 PHOT_MEDIA NEPs (2x4 OTS +2x(OTS+OMS)"); // For Degree node - OwnedNodeEdgePoint nep7 = nepsMc.get(6); + OwnedNodeEdgePoint nep7 = nepsOMS.get(getRank("DEG1-TTP", nepsOMS)); Uuid mcnepUuid3 = new Uuid( - UUID.nameUUIDFromBytes((nodeId + "+MEDIA_CHANNEL+DEG1-TTP-TXRX").getBytes(Charset.forName("UTF-8"))) - .toString()); - checkNepOtsiRdmNode(nep7, mcnepUuid3, nodeId + "+MEDIA_CHANNEL+DEG1-TTP-TXRX", - "MEDIA_CHANNELNodeEdgePoint", false); - OwnedNodeEdgePoint nep8 = nepsOtsimc.get(0); - Uuid otmcnepUuid3 = new Uuid(UUID.nameUUIDFromBytes((nodeId + "+OTSi_MEDIA_CHANNEL+DEG1-TTP-TXRX") + UUID.nameUUIDFromBytes((nodeId + "+PHOTONIC_MEDIA_OMS+DEG1-TTP-TXRX").getBytes(Charset + .forName("UTF-8"))).toString()); + checkNepOtsiRdmNode(nep7, mcnepUuid3, nodeId + "+PHOTONIC_MEDIA_OMS+DEG1-TTP-TXRX", + "PHOTONIC_MEDIA_OMSNodeEdgePoint", false); + OwnedNodeEdgePoint nep8 = nepsOTS.get(getRank("DEG1-TTP", nepsOTS)); + Uuid otmcnepUuid3 = new Uuid(UUID.nameUUIDFromBytes((nodeId + "+PHOTONIC_MEDIA_OTS+DEG1-TTP-TXRX") .getBytes(Charset.forName("UTF-8"))).toString()); - checkNepOtsiRdmNode(nep8, otmcnepUuid3, nodeId + "+OTSi_MEDIA_CHANNEL+DEG1-TTP-TXRX", - "OTSi_MEDIA_CHANNELNodeEdgePoint", false); - OwnedNodeEdgePoint photNep3 = nepsPhot.get(3); - Uuid pnep3Uuid = new Uuid( - UUID.nameUUIDFromBytes((nodeId + "+PHOTONIC_MEDIA+DEG1-TTP-TXRX") + checkNepOtsiRdmNode(nep8, otmcnepUuid3, nodeId + "+PHOTONIC_MEDIA_OTS+DEG1-TTP-TXRX", + "PHOTONIC_MEDIA_OTSNodeEdgePoint", false); + OwnedNodeEdgePoint omsNep3 = nepsOMS.get(getRank("DEG1-TTP", nepsOMS)); + Uuid omsNep3Uuid = new Uuid( + UUID.nameUUIDFromBytes((nodeId + "+PHOTONIC_MEDIA_OMS+DEG1-TTP-TXRX") .getBytes(Charset.forName("UTF-8"))).toString()); - checkNepOtsiRdmNode(photNep3, pnep3Uuid, nodeId + "+PHOTONIC_MEDIA+DEG1-TTP-TXRX", - "PHOTONIC_MEDIANodeEdgePoint", false); + checkNepOtsiRdmNode(omsNep3, omsNep3Uuid, nodeId + "+PHOTONIC_MEDIA_OMS+DEG1-TTP-TXRX", + "PHOTONIC_MEDIA_OMSNodeEdgePoint", false); // For srg node - OwnedNodeEdgePoint nep9 = nepsMc.get(0); - Uuid mcnepUuid4 = new Uuid(UUID.nameUUIDFromBytes((nodeId + "+MEDIA_CHANNEL+SRG1-PP1-TXRX") - .getBytes(Charset.forName("UTF-8"))).toString()); - checkNepOtsiRdmNode(nep9, mcnepUuid4, nodeId + "+MEDIA_CHANNEL+SRG1-PP1-TXRX", - "MEDIA_CHANNELNodeEdgePoint", true); - OwnedNodeEdgePoint nep10 = nepsOtsimc.get(9); - Uuid otmcnepUuid4 = new Uuid(UUID.nameUUIDFromBytes((nodeId + "+OTSi_MEDIA_CHANNEL+SRG1-PP1-TXRX") + OwnedNodeEdgePoint nep10 = nepsOTS.get(getRank("SRG1-PP1", nepsOTS)); + Uuid otsnepUuid4 = new Uuid(UUID.nameUUIDFromBytes((nodeId + "+PHOTONIC_MEDIA_OTS+SRG1-PP1-TXRX") .getBytes(Charset.forName("UTF-8"))).toString()); - checkNepOtsiRdmNode(nep10, otmcnepUuid4, nodeId + "+OTSi_MEDIA_CHANNEL+SRG1-PP1-TXRX", - "OTSi_MEDIA_CHANNELNodeEdgePoint", false); - OwnedNodeEdgePoint photNep4 = nepsPhot.get(4); - Uuid pnep4Uuid = new Uuid(UUID.nameUUIDFromBytes((nodeId + "+PHOTONIC_MEDIA+SRG1-PP1-TXRX") + checkNepOtsiRdmNode(nep10, otsnepUuid4, nodeId + "+PHOTONIC_MEDIA_OTS+SRG1-PP1-TXRX", + "PHOTONIC_MEDIA_OTSNodeEdgePoint", false); + OwnedNodeEdgePoint otsNep4 = nepsOTS.get(getRank("SRG1-PP3", nepsOTS)); + Uuid otsNep4Uuid = new Uuid(UUID.nameUUIDFromBytes((nodeId + "+PHOTONIC_MEDIA_OTS+SRG1-PP3-TXRX") .getBytes(Charset.forName("UTF-8"))).toString()); - checkNepOtsiRdmNode(photNep4, pnep4Uuid, nodeId + "+PHOTONIC_MEDIA+SRG1-PP1-TXRX", - "PHOTONIC_MEDIANodeEdgePoint", false); + checkNepOtsiRdmNode(otsNep4, otsNep4Uuid, nodeId + "+PHOTONIC_MEDIA_OTS+SRG1-PP3-TXRX", + "PHOTONIC_MEDIA_OTSNodeEdgePoint", false); List nrgList4 = node.nonnullNodeRuleGroup().values().stream() .sorted((nrg1, nrg2) -> nrg1.getUuid().getValue().compareTo(nrg2.getUuid().getValue())) .collect(Collectors.toList()); - checkNodeRuleGroupForRdm(nrgList4, 30); + checkNodeRuleGroupForRdm(nrgList4, 12); break; default: fail(); @@ -898,6 +805,8 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest { assertEquals(portName, name.getValue(), "value of client nep should be '" + portName + "'"); assertEquals(nepName, name.getValueName(), "value-name of client nep for '" + portName + "' should be '" + nepName + "'"); + LOG.info("checkNEPClient10G-NEP {} has following supported CEP {}", nepName, nep + .getSupportedCepLayerProtocolQualifierInstances().toString()); assertEquals(3, nep.getSupportedCepLayerProtocolQualifierInstances() .size(), "Client nep should support 3 kind of cep"); List lpql = new ArrayList<>(); @@ -983,7 +892,8 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest { assertEquals("forward", rule.get(0).getLocalId(), "local-id of the rule should be 'forward'"); assertEquals(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE, rule.get(0).getForwardingRule(), "the forwarding rule should be 'MAYFORWARDACROSSGROUP'"); - assertEquals(RuleType.FORWARDING, rule.get(0).getRuleType(), "the rule type should be 'FORWARDING'"); + assertEquals(RuleType.FORWARDING, rule.get(0).getRuleType().stream().findFirst().orElseThrow(), + "the rule type should be 'FORWARDING'"); } private void checkNodeRuleGroupForMuxDSR(List nrgList, Uuid clientNepUuid, Uuid networkNepUuid, @@ -1006,7 +916,8 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest { assertEquals("forward", rule.get(0).getLocalId(), "local-id of the rule should be 'forward'"); assertEquals(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE, rule.get(0).getForwardingRule(), "the forwarding rule should be 'MAYFORWARDACROSSGROUP'"); - assertEquals(RuleType.FORWARDING, rule.get(0).getRuleType(), "the rule type should be 'FORWARDING'"); + assertEquals(RuleType.FORWARDING, rule.get(0).getRuleType().stream().findFirst().orElseThrow(), + "the rule type should be 'FORWARDING'"); } private void checkNodeRuleGroupForSwitchDSR(List nrgList, Uuid clientNepUuid, Uuid networkNepUuid, @@ -1031,7 +942,8 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest { assertEquals("forward", ruleList.get(0).getLocalId(), "local-id of the rule should be 'forward'"); assertEquals(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE, ruleList.get(0).getForwardingRule(), "the forwarding rule should be 'MAYFORWARDACROSSGROUP'"); - assertEquals(RuleType.FORWARDING, ruleList.get(0).getRuleType(), "the rule type should be 'FORWARDING'"); + assertEquals(RuleType.FORWARDING, ruleList.get(0).getRuleType().stream().findFirst().orElseThrow(), + "the rule type should be 'FORWARDING'"); } private void checkNodeRuleGroupForRdm(List nrgList, int nbNeps) { @@ -1048,7 +960,8 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest { assertEquals("forward", ruleList.get(0).getLocalId(), "local-id of the rule should be 'forward'"); assertEquals(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE, ruleList.get(0).getForwardingRule(), "the forwarding rule should be 'MAYFORWARDACROSSGROUP'"); - assertEquals(RuleType.FORWARDING, ruleList.get(0).getRuleType(), "the rule type should be 'FORWARDING'"); + assertEquals(RuleType.FORWARDING, ruleList.get(0).getRuleType().stream().findFirst().orElseThrow(), + "the rule type should be 'FORWARDING'"); } private void checkNodeRuleGroupForTpdrOTSi(List nrgList, Uuid enepUuid, Uuid inepUuid, @@ -1071,7 +984,8 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest { assertEquals("forward", ruleList.get(0).getLocalId(), "local-id of the rule should be 'forward'"); assertEquals(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE, ruleList.get(0).getForwardingRule(), "the forwarding rule should be 'MAYFORWARDACROSSGROUP'"); - assertEquals(RuleType.FORWARDING, ruleList.get(0).getRuleType(), "the rule type should be 'FORWARDING'"); + assertEquals(RuleType.FORWARDING, ruleList.get(0).getRuleType().stream().findFirst().orElseThrow(), + "the rule type should be 'FORWARDING'"); } private void checkNodeRuleGroupForMuxOTSi(List nrgList, Uuid enepUuid, Uuid inepUuid, @@ -1094,7 +1008,8 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest { assertEquals("forward", ruleList.get(0).getLocalId(), "local-id of the rule should be 'forward'"); assertEquals(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE, ruleList.get(0).getForwardingRule(), "the forwarding rule should be 'MAYFORWARDACROSSGROUP'"); - assertEquals(RuleType.FORWARDING, ruleList.get(0).getRuleType(), "the rule type should be 'FORWARDING'"); + assertEquals(RuleType.FORWARDING, ruleList.get(0).getRuleType().stream().findFirst().orElseThrow(), + "the rule type should be 'FORWARDING'"); } private void checkNodeRuleGroupForSwitchOTSi(List nrgList, Uuid enepUuid, Uuid inepUuid, @@ -1121,7 +1036,8 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest { assertEquals("forward", ruleList0.get(0).getLocalId(), "local-id of the rule should be 'forward'"); assertEquals(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE, ruleList0.get(0).getForwardingRule(), "the forwarding rule should be 'MAYFORWARDACROSSGROUP'"); - assertEquals(RuleType.FORWARDING, ruleList0.get(0).getRuleType(), "the rule type should be 'FORWARDING'"); + assertEquals(RuleType.FORWARDING, ruleList0.get(0).getRuleType().stream().findFirst().orElseThrow(), + "the rule type should be 'FORWARDING'"); } private void checkNepClient100GSwitch(OwnedNodeEdgePoint nep, Uuid nepUuid, String portName, String nepName) { @@ -1137,6 +1053,8 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest { for (SupportedCepLayerProtocolQualifierInstances entry : lsclpqi) { lpql.add(entry.getLayerProtocolQualifier()); } + LOG.info("checkNEPClient100G-NEP {} has following supported CEP {}", nepName, nep + .getSupportedCepLayerProtocolQualifierInstances().toString()); assertEquals(2, lpql.size(), "Client nep should support 2 kind of cep"); assertThat("client nep should support 2 kind of cep", lpql, hasItems(ODUTYPEODU4.VALUE, DIGITALSIGNALTYPE100GigE.VALUE)); @@ -1184,6 +1102,9 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest { private void checkNepOtsiRdmNode(OwnedNodeEdgePoint nep, Uuid nepUuid, String portName, String nepName, boolean withSip) { + if (!nep.getUuid().equals(nepUuid)) { + LOG.info("ERRORUUIDNEP on Nep {}, expected {}", nep.getName().toString(), portName); + } assertEquals(nepUuid, nep.getUuid(), "bad uuid for " + portName); List nameList = new ArrayList<>(nep.nonnullName().values()); assertEquals(portName, nameList.get(0).getValue(), @@ -1196,10 +1117,17 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest { for (SupportedCepLayerProtocolQualifierInstances entry : lsclpqi) { lpql.add(entry.getLayerProtocolQualifier()); } - assertEquals(1, lpql.size(), "OTSi nep of RDM infra node should support only 1 kind of cep"); - assertThat("OTSi nep should support 2 kind of cep", lpql, hasItems(PHOTONICLAYERQUALIFIEROMS.VALUE)); - assertEquals(LayerProtocolName.PHOTONICMEDIA, nep.getLayerProtocolName(), - "OTSi nep should be of PHOTONIC_MEDIA protocol type"); + if (nepName.contains("OMS")) { + assertEquals(1, lpql.size(), "OTSi nep of RDM infra node should support only 1 kind of cep"); + assertThat("OTSi nep should support 1 kind of cep", lpql, hasItems(PHOTONICLAYERQUALIFIEROMS.VALUE)); + assertEquals(LayerProtocolName.PHOTONICMEDIA, nep.getLayerProtocolName(), + "OTSi nep should be of PHOTONIC_MEDIA protocol type"); + } else if (nepName.contains("OTS")) { + assertEquals(1, lpql.size(), "OTSi nep of RDM infra node should support only 1 kind of cep"); + assertThat("OTSi nep should support 1 kind of cep", lpql, hasItems(PHOTONICLAYERQUALIFIEROTS.VALUE)); + assertEquals(LayerProtocolName.PHOTONICMEDIA, nep.getLayerProtocolName(), + "OTSi nep should be of PHOTONIC_MEDIA protocol type"); + } checkCommonPartOfNep(nep, withSip); } @@ -1223,45 +1151,6 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest { "link-port-role of client nep should be SYMMETRIC"); } - private void checkTransitionalLink( - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Link link, Uuid node1Uuid, - Uuid node2Uuid, String tp1, String tp2, String ietfNodeId) { - Uuid linkUuid = new Uuid(UUID.nameUUIDFromBytes((tp1 + "to" + tp2).getBytes(Charset.forName("UTF-8"))) - .toString()); - assertEquals(linkUuid, link.getUuid(), "bad uuid for link between DSR node " + tp1 + " and iOTSI port " + tp2); - assertEquals(CAPACITYUNITGBPS.VALUE, link.getAvailableCapacity().getTotalSize().getUnit(), - "Available capacity unit should be GBPS"); - assertEquals(Uint64.valueOf(100), link.getAvailableCapacity().getTotalSize().getValue(), - "Available capacity -total size value should be 100"); - assertEquals(2, link.getTransitionedLayerProtocolName().size(), - "transitional link should be between 2 nodes of protocol layers ODU and PHOTONIC_MEDIA"); - assertThat("transitional link should be between 2 nodes of protocol layers ODU and PHOTONIC_MEDIA", - link.getTransitionedLayerProtocolName(), - hasItems(LayerProtocolName.ODU.getName(), LayerProtocolName.PHOTONICMEDIA.getName())); - assertEquals(ForwardingDirection.BIDIRECTIONAL, link.getDirection(), - "transitional link should be BIDIRECTIONAL"); - List nodeEdgePointList = new ArrayList<>(link.nonnullNodeEdgePoint().values()); - assertEquals(topologyUuid, nodeEdgePointList.get(0).getTopologyUuid(), - "topology uuid should be the same for the two termination point of the link"); - assertEquals(topologyUuid, nodeEdgePointList.get(1).getTopologyUuid(), - "topology uuid should be the same for the two termination point of the link"); - assertThat("transitional links should terminate on DSR node and Photonic node", - nodeEdgePointList.get(0).getNodeUuid().getValue(), - either(containsString(node1Uuid.getValue())).or(containsString(node2Uuid.getValue()))); - assertThat("transitional links should terminate on DSR node and Photonic node", - nodeEdgePointList.get(1).getNodeUuid().getValue(), - either(containsString(node1Uuid.getValue())).or(containsString(node2Uuid.getValue()))); - Uuid nep1Uuid = new Uuid(UUID.nameUUIDFromBytes(tp1.getBytes(Charset.forName("UTF-8"))).toString()); - Uuid nep2Uuid = new Uuid(UUID.nameUUIDFromBytes(tp2.getBytes(Charset.forName("UTF-8"))).toString()); - assertThat("transitional links should terminate on " + tp1 + " and " + tp2 + " neps", - nodeEdgePointList.get(0).getNodeEdgePointUuid().getValue(), - either(containsString(nep1Uuid.getValue())).or(containsString(nep2Uuid.getValue()))); - assertThat("transitional links should terminate on DSR node and Photonic node", - nodeEdgePointList.get(1).getNodeEdgePointUuid().getValue(), - either(containsString(nep1Uuid.getValue())).or(containsString(nep2Uuid.getValue()))); - } - private void checkOmsLink(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Link link, Uuid node1Uuid, Uuid node2Uuid, Uuid tp1Uuid, Uuid tp2Uuid, Uuid linkUuid, String linkName) { assertEquals(linkName, link.getName().get(new NameKey("OMS link name")).getValue(), "bad name for the link"); @@ -1348,4 +1237,35 @@ public class ConvertORTopoToFullTapiTopoTest extends AbstractTest { tpdr1Bldr.setTerminationPoint(tps); return new NodeBuilder(initialNode).addAugmentation(tpdr1Bldr.build()).build(); } -} \ No newline at end of file + + private int getRank(String searchedChar, List onepList) { + int foundAtRank = 0; + int rank = 0; + for (OwnedNodeEdgePoint onep: onepList) { + for (Map.Entry entry: onep.getName().entrySet()) { + if (entry.getValue().getValue().contains(searchedChar)) { + foundAtRank = rank; + } + } + rank++; + } + LOG.info("searched Char {} found at rank {}", searchedChar, foundAtRank); + return foundAtRank; + } + + private int getNodeRank(String searchedChar, + List nodeList) { + int foundAtRank = 0; + int rank = 0; + for (org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node node: nodeList) { + for (Map.Entry entry: node.getName().entrySet()) { + if (entry.getValue().getValue().contains(searchedChar)) { + foundAtRank = rank; + } + } + rank++; + } + LOG.info("searched Char {} found at rank {}", searchedChar, foundAtRank); + return foundAtRank; + } +} diff --git a/tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/ConvertORTopoToTapiTopoTest.java b/tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/ConvertORTopoToTapiTopoTest.java index 0794d50a8..ce76cc983 100644 --- a/tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/ConvertORTopoToTapiTopoTest.java +++ b/tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/ConvertORTopoToTapiTopoTest.java @@ -81,6 +81,7 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.digital.otn.rev221121 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev221121.DIGITALSIGNALTYPE100GigE; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.dsr.rev221121.DIGITALSIGNALTYPE10GigELAN; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.PHOTONICLAYERQUALIFIEROMS; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.PHOTONICLAYERQUALIFIEROTS; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.photonic.media.rev221121.PHOTONICLAYERQUALIFIEROTSi; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.FORWARDINGRULEMAYFORWARDACROSSGROUP; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.RuleType; @@ -94,6 +95,7 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.no import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Link; import org.opendaylight.yangtools.yang.binding.InstanceIdentifier; import org.opendaylight.yangtools.yang.binding.KeyedInstanceIdentifier; +import org.opendaylight.yangtools.yang.common.Decimal64; import org.opendaylight.yangtools.yang.common.Uint64; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -180,7 +182,7 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest { ConvertORTopoToTapiTopo tapiFactory = new ConvertORTopoToTapiTopo(topologyUuid, tapiLink); tapiFactory.convertNode(tpdr, networkPortList); - Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+DSR".getBytes(Charset.forName("UTF-8"))) + Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+XPONDER".getBytes(Charset.forName("UTF-8"))) .toString()); org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node dsrNode = tapiFactory .getTapiNodes().get(new @@ -192,24 +194,6 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest { assertNull(nepN.getAdministrativeState(), "Administrative State should not be present"); assertNull(nepN.getOperationalState(), "Operational State should not be present"); - Uuid otsiNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+OTSi".getBytes(Charset.forName("UTF-8"))) - .toString()); - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node otsiNode = tapiFactory - .getTapiNodes().get(new - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.NodeKey(otsiNodeUuid)); - Uuid enepUuid = new Uuid( - UUID.nameUUIDFromBytes(("XPDR-A1-XPDR1+eOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8"))) - .toString()); - Uuid inepUuid = new Uuid( - UUID.nameUUIDFromBytes(("XPDR-A1-XPDR1+iOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8"))) - .toString()); - OwnedNodeEdgePoint enep = otsiNode.nonnullOwnedNodeEdgePoint().get(new OwnedNodeEdgePointKey(enepUuid)); - assertNull(enep.getAdministrativeState(), "Administrative State should not be present"); - assertNull(enep.getOperationalState(), "Operational State should not be present"); - - OwnedNodeEdgePoint inep = otsiNode.nonnullOwnedNodeEdgePoint().get(new OwnedNodeEdgePointKey(inepUuid)); - assertNull(inep.getAdministrativeState(), "Administrative State should not be present"); - assertNull(inep.getOperationalState(), "Operational State should not be present"); } @Test @@ -225,7 +209,7 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest { ConvertORTopoToTapiTopo tapiFactory = new ConvertORTopoToTapiTopo(topologyUuid, tapiLink); tapiFactory.convertNode(tpdr, networkPortList); - Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+DSR".getBytes(Charset.forName("UTF-8"))) + Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+XPONDER".getBytes(Charset.forName("UTF-8"))) .toString()); org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node dsrNode = tapiFactory .getTapiNodes().get(new @@ -237,27 +221,6 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest { assertEquals(AdministrativeState.LOCKED, nepN.getAdministrativeState(), "Administrative State should be Locked"); assertEquals(OperationalState.DISABLED, nepN.getOperationalState(), "Operational State should be Disabled"); - - Uuid otsiNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+OTSi".getBytes(Charset.forName("UTF-8"))) - .toString()); - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node otsiNode = tapiFactory - .getTapiNodes().get(new - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.NodeKey(otsiNodeUuid)); - Uuid enepUuid = new Uuid( - UUID.nameUUIDFromBytes(("XPDR-A1-XPDR1+eOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8"))) - .toString()); - Uuid inepUuid = new Uuid( - UUID.nameUUIDFromBytes(("XPDR-A1-XPDR1+iOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8"))) - .toString()); - OwnedNodeEdgePoint enep = otsiNode.nonnullOwnedNodeEdgePoint().get(new OwnedNodeEdgePointKey(enepUuid)); - assertEquals(AdministrativeState.LOCKED, enep.getAdministrativeState(), - "Administrative State should be Locked"); - assertEquals(OperationalState.DISABLED, enep.getOperationalState(), "Operational State should be Disabled"); - - OwnedNodeEdgePoint inep = otsiNode.nonnullOwnedNodeEdgePoint().get(new OwnedNodeEdgePointKey(inepUuid)); - assertEquals(AdministrativeState.LOCKED, inep.getAdministrativeState(), - "Administrative State should be Locked"); - assertEquals(OperationalState.DISABLED, inep.getOperationalState(), "Operational State should be Disabled"); } @Test @@ -273,7 +236,7 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest { ConvertORTopoToTapiTopo tapiFactory = new ConvertORTopoToTapiTopo(topologyUuid, tapiLink); tapiFactory.convertNode(tpdr, networkPortList); - Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+DSR".getBytes(Charset.forName("UTF-8"))) + Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+XPONDER".getBytes(Charset.forName("UTF-8"))) .toString()); org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node dsrNode = tapiFactory .getTapiNodes().get(new @@ -285,27 +248,6 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest { assertEquals(AdministrativeState.LOCKED, nepN.getAdministrativeState(), "Administrative State should be Locked"); assertEquals(OperationalState.DISABLED, nepN.getOperationalState(), "Operational State should be Disabled"); - - Uuid otsiNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+OTSi".getBytes(Charset.forName("UTF-8"))) - .toString()); - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node otsiNode = tapiFactory - .getTapiNodes().get(new - org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.NodeKey(otsiNodeUuid)); - Uuid enepUuid = new Uuid( - UUID.nameUUIDFromBytes(("XPDR-A1-XPDR1+eOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8"))) - .toString()); - Uuid inepUuid = new Uuid( - UUID.nameUUIDFromBytes(("XPDR-A1-XPDR1+iOTSi+XPDR1-NETWORK1").getBytes(Charset.forName("UTF-8"))) - .toString()); - OwnedNodeEdgePoint enep = otsiNode.nonnullOwnedNodeEdgePoint().get(new OwnedNodeEdgePointKey(enepUuid)); - assertEquals(AdministrativeState.LOCKED, enep.getAdministrativeState(), - "Administrative State should be Locked"); - assertEquals(OperationalState.DISABLED, enep.getOperationalState(), "Operational State should be Disabled"); - - OwnedNodeEdgePoint inep = otsiNode.nonnullOwnedNodeEdgePoint().get(new OwnedNodeEdgePointKey(inepUuid)); - assertEquals(AdministrativeState.LOCKED, inep.getAdministrativeState(), - "Administrative State should be Locked"); - assertEquals(OperationalState.DISABLED, inep.getOperationalState(), "Operational State should be Disabled"); } @Test @@ -337,10 +279,10 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest { List tapiLinks = tapiFactory.getTapiLinks().values().stream() .sorted((l1, l2) -> l1.getUuid().getValue().compareTo(l2.getUuid().getValue())) .collect(Collectors.toList()); - assertNull(tapiLinks.get(3).getAdministrativeState(), "Administrative State should not be present"); + assertNull(tapiLinks.get(1).getAdministrativeState(), "Administrative State should not be present"); assertEquals(AdministrativeState.UNLOCKED, tapiLinks.get(0).getAdministrativeState(), "Administrative state should be UNLOCKED"); - assertNull(tapiLinks.get(3).getOperationalState(), "Operational State should not be present"); + assertNull(tapiLinks.get(1).getOperationalState(), "Operational State should not be present"); assertEquals(OperationalState.ENABLED, tapiLinks.get(0).getOperationalState(), "Operational state should be ENABLED"); } @@ -374,10 +316,10 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest { List tapiLinks = tapiFactory.getTapiLinks().values().stream() .sorted((l1, l2) -> l1.getUuid().getValue().compareTo(l2.getUuid().getValue())) .collect(Collectors.toList()); - assertNull(tapiLinks.get(3).getAdministrativeState(), "Administrative State should not be present"); + assertNull(tapiLinks.get(1).getAdministrativeState(), "Administrative State should not be present"); assertEquals(AdministrativeState.UNLOCKED, tapiLinks.get(0).getAdministrativeState(), "Administrative state should be UNLOCKED"); - assertNull(tapiLinks.get(3).getOperationalState(), "Operational State should not be present"); + assertNull(tapiLinks.get(1).getOperationalState(), "Operational State should not be present"); assertEquals(OperationalState.ENABLED, tapiLinks.get(0).getOperationalState(), "Operational state should be ENABLED"); } @@ -412,11 +354,12 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest { List tapiLinks = tapiFactory.getTapiLinks().values().stream() .sorted((l1, l2) -> l1.getUuid().getValue().compareTo(l2.getUuid().getValue())) .collect(Collectors.toList()); - assertEquals(AdministrativeState.LOCKED, tapiLinks.get(3).getAdministrativeState(), + LOG.info("TapiLinks are as follow : {}", tapiLinks.toString()); + assertEquals(AdministrativeState.LOCKED, tapiLinks.get(1).getAdministrativeState(), "Administrative state should be LOCKED"); assertEquals(AdministrativeState.UNLOCKED, tapiLinks.get(0).getAdministrativeState(), "Administrative state should be UNLOCKED"); - assertEquals(OperationalState.DISABLED, tapiLinks.get(3).getOperationalState(), + assertEquals(OperationalState.DISABLED, tapiLinks.get(1).getOperationalState(), "Operational state should be DISABLED"); assertEquals(OperationalState.ENABLED, tapiLinks.get(0).getOperationalState(), "Operational state should be ENABLED"); @@ -452,11 +395,11 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest { List tapiLinks = tapiFactory.getTapiLinks().values().stream() .sorted((l1, l2) -> l1.getUuid().getValue().compareTo(l2.getUuid().getValue())) .collect(Collectors.toList()); - assertEquals(AdministrativeState.LOCKED, tapiLinks.get(3).getAdministrativeState(), + assertEquals(AdministrativeState.LOCKED, tapiLinks.get(1).getAdministrativeState(), "Administrative state should be LOCKED"); assertEquals(AdministrativeState.UNLOCKED, tapiLinks.get(0).getAdministrativeState(), "Administrative state should be UNLOCKED"); - assertEquals(OperationalState.DISABLED, tapiLinks.get(3).getOperationalState(), + assertEquals(OperationalState.DISABLED, tapiLinks.get(1).getOperationalState(), "Operational state should be DISABLED"); assertEquals(OperationalState.ENABLED, tapiLinks.get(0).getOperationalState(), "Operational state should be ENABLED"); @@ -492,11 +435,11 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest { List tapiLinks = tapiFactory.getTapiLinks().values().stream() .sorted((l1, l2) -> l1.getUuid().getValue().compareTo(l2.getUuid().getValue())) .collect(Collectors.toList()); - assertEquals(AdministrativeState.LOCKED, tapiLinks.get(3).getAdministrativeState(), + assertEquals(AdministrativeState.LOCKED, tapiLinks.get(1).getAdministrativeState(), "Administrative state should be LOCKED"); assertEquals(AdministrativeState.UNLOCKED, tapiLinks.get(0).getAdministrativeState(), "Administrative state should be UNLOCKED"); - assertEquals(OperationalState.DISABLED, tapiLinks.get(3).getOperationalState(), + assertEquals(OperationalState.DISABLED, tapiLinks.get(1).getOperationalState(), "Operational state should be DISABLED"); assertEquals(OperationalState.ENABLED, tapiLinks.get(0).getOperationalState(), "Operational state should be ENABLED"); @@ -517,21 +460,12 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest { .sorted((n1, n2) -> n1.getUuid().getValue().compareTo(n2.getUuid().getValue())) .collect(Collectors.toList()); - assertEquals(2, tapiFactory.getTapiNodes().size(), "Node list size should be 2"); - assertEquals(2, tapiFactory.getTapiLinks().size(), "Link list size should be 2"); + assertEquals(1, tapiFactory.getTapiNodes().size(), "Node list size should be 1 (DSR-ODU merged)"); + assertEquals(0, tapiFactory.getTapiLinks().size(), "Link list size should be 0 (no more transitional links)"); - Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+DSR".getBytes(Charset.forName("UTF-8"))) + Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+XPONDER".getBytes(Charset.forName("UTF-8"))) .toString()); - checkDsrNode(tapiNodes.get(1), dsrNodeUuid, "tpdr", "XPDR-A1-XPDR1+DSR"); - Uuid otsiNodeUuid = new Uuid(UUID.nameUUIDFromBytes("XPDR-A1-XPDR1+OTSi".getBytes(Charset.forName("UTF-8"))) - .toString()); - checkOtsiNode(tapiNodes.get(0), otsiNodeUuid, "tpdr", "XPDR-A1-XPDR1+OTSi"); - - List tapiLinks = tapiFactory.getTapiLinks().values().stream() - .sorted((l1, l2) -> l1.getUuid().getValue().compareTo(l2.getUuid().getValue())) - .collect(Collectors.toList()); - checkTransitionalLink(tapiLinks.get(1), dsrNodeUuid, otsiNodeUuid, - "XPDR-A1-XPDR1+iODU+XPDR1-NETWORK1", "XPDR-A1-XPDR1+iOTSi+XPDR1-NETWORK1", "XPDR-A1-XPDR1"); + checkDsrNode(tapiNodes.get(getNodeRank("SPDR-SA1", tapiNodes)), dsrNodeUuid, "tpdr", "XPDR-A1-XPDR1+XPONDER"); } @Test @@ -549,20 +483,11 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest { .sorted((n1, n2) -> n1.getUuid().getValue().compareTo(n2.getUuid().getValue())) .collect(Collectors.toList()); - assertEquals(2, tapiFactory.getTapiNodes().size(), "Node list size should be 2"); - assertEquals(1, tapiFactory.getTapiLinks().size(), "Link list size should be 1"); - Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+DSR".getBytes(Charset.forName("UTF-8"))) + assertEquals(1, tapiFactory.getTapiNodes().size(), "Node list size should be 1 (DSR & ODU merged"); + assertEquals(0, tapiFactory.getTapiLinks().size(), "Link list size should be 0, no more transitional links"); + Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+XPONDER".getBytes(Charset.forName("UTF-8"))) .toString()); - checkDsrNode(tapiNodes.get(0), dsrNodeUuid, "mux", "SPDR-SA1-XPDR1+DSR"); - Uuid otsiNodeUuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+OTSi".getBytes(Charset.forName("UTF-8"))) - .toString()); - checkOtsiNode(tapiNodes.get(1), otsiNodeUuid, "mux", "SPDR-SA1-XPDR1+OTSi"); - - List tapiLinks = tapiFactory.getTapiLinks().values().stream() - .sorted((l1, l2) -> l1.getUuid().getValue().compareTo(l2.getUuid().getValue())) - .collect(Collectors.toList()); - checkTransitionalLink(tapiLinks.get(0), dsrNodeUuid, otsiNodeUuid, - "SPDR-SA1-XPDR1+iODU+XPDR1-NETWORK1", "SPDR-SA1-XPDR1+iOTSi+XPDR1-NETWORK1", "SPDR-SA1-XPDR1"); + checkDsrNode(tapiNodes.get(getNodeRank("SPDR-SA1", tapiNodes)), dsrNodeUuid, "mux", "SPDR-SA1-XPDR1+XPONDER"); } @Test @@ -580,21 +505,14 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest { .sorted((n1, n2) -> n1.getUuid().getValue().compareTo(n2.getUuid().getValue())) .collect(Collectors.toList()); - assertEquals(2, tapiFactory.getTapiNodes().size(), "Node list size should be 2"); - assertEquals(4, tapiFactory.getTapiLinks().size(), "Link list size should be 4"); + assertEquals(1, tapiFactory.getTapiNodes().size(), "Node list size should be 1 (DSR/ODU merged)"); + assertEquals(0, tapiFactory.getTapiLinks().size(), "Link list size should be 0 : no more transitional link"); - Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR2+DSR".getBytes(Charset.forName("UTF-8"))) - .toString()); - checkDsrNode(tapiNodes.get(0), dsrNodeUuid, "switch", "SPDR-SA1-XPDR2+DSR"); - Uuid otsiNodeUuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR2+OTSi".getBytes(Charset.forName("UTF-8"))) + Uuid dsrNodeUuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR2+XPONDER".getBytes(Charset.forName("UTF-8"))) .toString()); - checkOtsiNode(tapiNodes.get(1), otsiNodeUuid, "switch", "SPDR-SA1-XPDR2+OTSi"); - - List tapiLinks = tapiFactory.getTapiLinks().values().stream() - .sorted((l1, l2) -> l1.getUuid().getValue().compareTo(l2.getUuid().getValue())) - .collect(Collectors.toList()); - checkTransitionalLink(tapiLinks.get(2), dsrNodeUuid, otsiNodeUuid, - "SPDR-SA1-XPDR2+iODU+XPDR2-NETWORK4", "SPDR-SA1-XPDR2+iOTSi+XPDR2-NETWORK4", "SPDR-SA1-XPDR2"); + //get(0) + checkDsrNode(tapiNodes.get(getNodeRank("SPDR-SA1", tapiNodes)), dsrNodeUuid, "switch", + "SPDR-SA1-XPDR2+XPONDER"); } @Test @@ -615,15 +533,15 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest { } tapiFactory.convertNode(otnMuxC, networkPortListC); tapiFactory.convertLinks(otnLinks); - assertEquals(4, tapiFactory.getTapiLinks().size(), "Link list size should be 4"); + assertEquals(2, tapiFactory.getTapiLinks().size(), "Link list size should be 2 : no transitional link"); - Uuid node1Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+DSR".getBytes(Charset.forName("UTF-8"))) + Uuid node1Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+XPONDER".getBytes(Charset.forName("UTF-8"))) .toString()); - Uuid node2Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SC1-XPDR1+DSR".getBytes(Charset.forName("UTF-8"))) + Uuid node2Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SC1-XPDR1+XPONDER".getBytes(Charset.forName("UTF-8"))) .toString()); - Uuid node3Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+OTSi".getBytes(Charset.forName("UTF-8"))) + Uuid node3Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+XPONDER".getBytes(Charset.forName("UTF-8"))) .toString()); - Uuid node4Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SC1-XPDR1+OTSi".getBytes(Charset.forName("UTF-8"))) + Uuid node4Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SC1-XPDR1+XPONDER".getBytes(Charset.forName("UTF-8"))) .toString()); Uuid tp1Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+eODU+XPDR1-NETWORK1" .getBytes(Charset.forName("UTF-8"))).toString()); @@ -643,10 +561,12 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest { List links = tapiFactory.getTapiLinks().values().stream() .sorted((l1, l2) -> l1.getUuid().getValue().compareTo(l2.getUuid().getValue())) .collect(Collectors.toList()); - checkOtnLink(links.get(3), node1Uuid, node2Uuid, tp1Uuid, tp2Uuid, link1Uuid, + LOG.info("Node3 {}, Node4 = {},", node3Uuid.toString(), node4Uuid.toString()); + checkOtnLink(links.get(1), node1Uuid, node2Uuid, tp1Uuid, tp2Uuid, link1Uuid, "SPDR-SA1-XPDR1+eODU+XPDR1-NETWORK1toSPDR-SC1-XPDR1+eODU+XPDR1-NETWORK1"); - checkOtnLink(links.get(2), node3Uuid, node4Uuid, tp3Uuid, tp4Uuid, link2Uuid, + checkOtnLink(links.get(0), node3Uuid, node4Uuid, tp3Uuid, tp4Uuid, link2Uuid, "SPDR-SA1-XPDR1+iOTSi+XPDR1-NETWORK1toSPDR-SC1-XPDR1+iOTSi+XPDR1-NETWORK1"); + LOG.info("The link we check has name {}", links.get(0).getName().toString()); } @Test @@ -658,9 +578,9 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest { assertEquals(0, tapiFactory.getTapiLinks().size(), "Link list size should be empty"); List tapiNodes = tapiFactory.getTapiNodes().values().stream().collect(Collectors.toList()); - Uuid otsiNodeUuid = new Uuid(UUID.nameUUIDFromBytes("ROADM-infra".getBytes(Charset.forName("UTF-8"))) + Uuid photNodeUuid = new Uuid(UUID.nameUUIDFromBytes("ROADM-infra".getBytes(Charset.forName("UTF-8"))) .toString()); - checkOtsiNode(tapiNodes.get(0), otsiNodeUuid, "infra", "ROADM-infra"); + checkOtsiNode(tapiNodes.get(0), photNodeUuid, "infra", "ROADM-infra"); } @Test @@ -675,33 +595,34 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest { tapiFactory.convertNode(otnMuxA, networkPortListA); tapiFactory.convertRoadmInfrastructure(); - assertEquals(3, tapiFactory.getTapiNodes().size(), "Node list size should be 3"); - assertEquals(2, tapiFactory.getTapiLinks().size(), "Link list size should be 2"); + assertEquals(2, tapiFactory.getTapiNodes().size(), "Node list size should be 2"); + assertEquals(1, tapiFactory.getTapiLinks().size(), "Link list size should be 1 : no more transitional links"); List tapiNodes = tapiFactory.getTapiNodes().values().stream() .sorted((n1, n2) -> n1.getUuid().getValue().compareTo(n2.getUuid().getValue())) .collect(Collectors.toList()); Uuid otsiNodeUuid = new Uuid(UUID.nameUUIDFromBytes("ROADM-infra".getBytes(Charset.forName("UTF-8"))) .toString()); - checkOtsiNode(tapiNodes.get(2), otsiNodeUuid, "infra", "ROADM-infra"); + //get (2) + checkOtsiNode(tapiNodes.get(getNodeRank("ROADM", tapiNodes)), otsiNodeUuid, "infra", "ROADM-infra"); List links = tapiFactory.getTapiLinks().values().stream() .sorted((l1, l2) -> l1.getUuid().getValue().compareTo(l2.getUuid().getValue())) .collect(Collectors.toList()); - Uuid node1Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+OTSi".getBytes(Charset.forName("UTF-8"))) + Uuid node1Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+XPONDER".getBytes(Charset.forName("UTF-8"))) .toString()); Uuid node2Uuid = new Uuid(UUID.nameUUIDFromBytes("ROADM-infra".getBytes(Charset.forName("UTF-8"))) .toString()); - Uuid tp1Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+eOTSi+XPDR1-NETWORK1" + Uuid tp1Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+PHOTONIC_MEDIA_OTS+XPDR1-NETWORK1" .getBytes(Charset.forName("UTF-8"))).toString()); Uuid tp2Uuid = new Uuid(UUID.nameUUIDFromBytes(("roadm node+nep+1") .getBytes(Charset.forName("UTF-8"))).toString()); + String str1 = "SPDR-SA1-XPDR1+XPONDER--SPDR-SA1-XPDR1+PHOTONIC_MEDIA_OTS+XPDR1-NETWORK1 and ROADM-infra-" + + "-NodeEdgePoint_1"; Uuid linkUuid = - new Uuid(UUID.nameUUIDFromBytes( - "SPDR-SA1-XPDR1+OTSi--SPDR-SA1-XPDR1+eOTSi+XPDR1-NETWORK1 and ROADM-infra--NodeEdgePoint_1" - .getBytes(Charset.forName("UTF-8"))).toString()); - checkOmsLink(links.get(1), node1Uuid, node2Uuid, tp1Uuid, tp2Uuid, linkUuid, - "SPDR-SA1-XPDR1+OTSi--SPDR-SA1-XPDR1+eOTSi+XPDR1-NETWORK1 and ROADM-infra--NodeEdgePoint_1"); + new Uuid(UUID.nameUUIDFromBytes(str1.getBytes(Charset.forName("UTF-8"))).toString()); + LOG.info("LinksCheck 0 = {} ", links.get(0).getName().toString()); + checkOmsLink(links.get(0), node1Uuid, node2Uuid, tp1Uuid, tp2Uuid, linkUuid, str1); } private void checkDsrNode(org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node node, @@ -714,10 +635,11 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest { assertEquals(OperationalState.ENABLED, node.getOperationalState(), "operational state should be ENABLED"); assertThat("one value-name should be 'dsr/odu node name'", new ArrayList<>(node.nonnullName().keySet()), hasItem(new NameKey("dsr/odu node name"))); - assertEquals(2, node.getLayerProtocolName().size(), - "dsr node should manage 2 protocol layers : dsr and odu"); - assertThat("dsr node should manage 2 protocol layers : dsr and odu", - node.getLayerProtocolName(), hasItems(LayerProtocolName.DSR, LayerProtocolName.ODU)); + assertEquals(4, node.getLayerProtocolName().size(), + "dsr node should manage 4 protocol layers : dsr, odu, DIGITALOTN and photonic"); + assertThat("dsr node should manage 3 protocol layers : dsr, odu and photonic", + node.getLayerProtocolName(), hasItems(LayerProtocolName.DSR, LayerProtocolName.ODU, + LayerProtocolName.PHOTONICMEDIA)); List nepsN = node.nonnullOwnedNodeEdgePoint().values().stream() .filter(n -> n.getName().containsKey(new NameKey("iNodeEdgePoint_N"))) .sorted((nep1, nep2) -> nep1.getUuid().getValue().compareTo(nep2.getUuid().getValue())) @@ -839,10 +761,10 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest { otnSwitch.getNodeId().getValue(), TapiStringConstants.I_OTSI); OwnedNodeEdgePoint nep2 = nepsE.get(0); Uuid enepUuid = new Uuid( - UUID.nameUUIDFromBytes((nodeId.split("\\+")[0] + "+eOTSi+XPDR2-NETWORK2") + UUID.nameUUIDFromBytes((nodeId.split("\\+")[0] + "+PHOTONIC_MEDIA_OTS+XPDR2-NETWORK2") .getBytes(Charset.forName("UTF-8"))).toString()); checkNepOtsiNode(nep2, enepUuid, "XPDR2-NETWORK2", "eNodeEdgePoint", - otnSwitch.getNodeId().getValue(), TapiStringConstants.E_OTSI); + otnSwitch.getNodeId().getValue(), TapiStringConstants.PHTNC_MEDIA_OTS); List nrgList = node.nonnullNodeRuleGroup().values().stream() .sorted((nrg1, nrg2) -> nrg1.getUuid().getValue().compareTo(nrg2.getUuid().getValue())) .collect(Collectors.toList()); @@ -853,10 +775,10 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest { assertEquals(1, nepsI.size(), "Mux-OTSi node should have 1 iNEPs"); OwnedNodeEdgePoint nep3 = nepsE.get(0); Uuid enepUuid2 = new Uuid( - UUID.nameUUIDFromBytes((nodeId.split("\\+")[0] + "+eOTSi+XPDR1-NETWORK1") + UUID.nameUUIDFromBytes((nodeId.split("\\+")[0] + "+PHOTONIC_MEDIA_OTS+XPDR1-NETWORK1") .getBytes(Charset.forName("UTF-8"))).toString()); checkNepOtsiNode(nep3, enepUuid2, "XPDR1-NETWORK1", "eNodeEdgePoint", - otnMuxA.getNodeId().getValue(), TapiStringConstants.E_OTSI); + otnMuxA.getNodeId().getValue(), TapiStringConstants.PHTNC_MEDIA_OTS); OwnedNodeEdgePoint nep4 = nepsI.get(0); Uuid inepUuid2 = new Uuid( UUID.nameUUIDFromBytes((nodeId.split("\\+")[0] + "+iOTSi+XPDR1-NETWORK1") @@ -873,10 +795,10 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest { assertEquals(2, nepsI.size(), "Tpdr-OTSi node should have 2 iNEPs"); OwnedNodeEdgePoint nep5 = nepsE.get(0); Uuid enepUuid3 = new Uuid( - UUID.nameUUIDFromBytes((nodeId.split("\\+")[0] + "+eOTSi+XPDR1-NETWORK1") + UUID.nameUUIDFromBytes((nodeId.split("\\+")[0] + "+PHOTONIC_MEDIA_OTS+XPDR1-NETWORK1") .getBytes(Charset.forName("UTF-8"))).toString()); checkNepOtsiNode(nep5, enepUuid3, "XPDR1-NETWORK1", "eNodeEdgePoint", - tpdr100G.getNodeId().getValue(), TapiStringConstants.E_OTSI); + tpdr100G.getNodeId().getValue(), TapiStringConstants.PHTNC_MEDIA_OTS); OwnedNodeEdgePoint nep6 = nepsI.get(0); Uuid inepUuid3 = new Uuid( UUID.nameUUIDFromBytes((nodeId.split("\\+")[0] + "+iOTSi+XPDR1-NETWORK1") @@ -976,7 +898,8 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest { assertEquals("forward", rule.get(0).getLocalId(), "local-id of the rule should be 'forward'"); assertEquals(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE, rule.get(0).getForwardingRule(), "the forwarding rule should be 'MAYFORWARDACROSSGROUP'"); - assertEquals(RuleType.FORWARDING, rule.get(0).getRuleType(), "the rule type should be 'FORWARDING'"); + assertEquals(RuleType.FORWARDING, rule.get(0).getRuleType().iterator().next(), + "the rule type should be 'FORWARDING'"); } private void checkNodeRuleGroupForMuxDSR(List nrgList, Uuid clientNepUuid, Uuid networkNepUuid, @@ -1002,7 +925,8 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest { assertEquals("forward", rule.get(0).getLocalId(), "local-id of the rule should be 'forward'"); assertEquals(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE, rule.get(0).getForwardingRule(), "the forwarding rule should be 'MAYFORWARDACROSSGROUP'"); - assertEquals(RuleType.FORWARDING, rule.get(0).getRuleType(), "the rule type should be 'FORWARDING'"); + assertEquals(RuleType.FORWARDING, rule.get(0).getRuleType().iterator().next(), + "the rule type should be 'FORWARDING'"); } private void checkNodeRuleGroupForSwitchDSR(List nrgList, Uuid clientNepUuid, Uuid networkNepUuid, @@ -1027,7 +951,8 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest { assertEquals("forward", ruleList.get(0).getLocalId(), "local-id of the rule should be 'forward'"); assertEquals(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE, ruleList.get(0).getForwardingRule(), "the forwarding rule should be 'MAYFORWARDACROSSGROUP'"); - assertEquals(RuleType.FORWARDING, ruleList.get(0).getRuleType(), "the rule type should be 'FORWARDING'"); + assertEquals(RuleType.FORWARDING, ruleList.get(0).getRuleType().iterator().next(), + "the rule type should be 'FORWARDING'"); } private void checkNodeRuleGroupForRdmInfra(List nrgList, int nbNeps) { @@ -1044,7 +969,8 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest { assertEquals("forward", ruleList.get(0).getLocalId(), "local-id of the rule should be 'forward'"); assertEquals(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE, ruleList.get(0).getForwardingRule(), "the forwarding rule should be 'MAYFORWARDACROSSGROUP'"); - assertEquals(RuleType.FORWARDING, ruleList.get(0).getRuleType(), "the rule type should be 'FORWARDING'"); + assertEquals(RuleType.FORWARDING, ruleList.get(0).getRuleType().iterator().next(), + "the rule type should be 'FORWARDING'"); } private void checkNodeRuleGroupForTpdrOTSi(List nrgList, Uuid enepUuid, Uuid inepUuid, @@ -1067,7 +993,8 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest { assertEquals("forward", ruleList.get(0).getLocalId(), "local-id of the rule should be 'forward'"); assertEquals(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE, ruleList.get(0).getForwardingRule(), "the forwarding rule should be 'MAYFORWARDACROSSGROUP'"); - assertEquals(RuleType.FORWARDING, ruleList.get(0).getRuleType(), "the rule type should be 'FORWARDING'"); + assertEquals(RuleType.FORWARDING, ruleList.get(0).getRuleType().iterator().next(), + "the rule type should be 'FORWARDING'"); } private void checkNodeRuleGroupForMuxOTSi(List nrgList, Uuid enepUuid, Uuid inepUuid, @@ -1090,7 +1017,8 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest { assertEquals("forward", ruleList.get(0).getLocalId(), "local-id of the rule should be 'forward'"); assertEquals(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE, ruleList.get(0).getForwardingRule(), "the forwarding rule should be 'MAYFORWARDACROSSGROUP'"); - assertEquals(RuleType.FORWARDING, ruleList.get(0).getRuleType(), "the rule type should be 'FORWARDING'"); + assertEquals(RuleType.FORWARDING, ruleList.get(0).getRuleType().iterator().next(), + "the rule type should be 'FORWARDING'"); } private void checkNodeRuleGroupForSwitchOTSi(List nrgList, Uuid enepUuid, Uuid inepUuid, @@ -1117,7 +1045,8 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest { assertEquals("forward", ruleList0.get(0).getLocalId(),"local-id of the rule should be 'forward'"); assertEquals(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE, ruleList0.get(0).getForwardingRule(), "the forwarding rule should be 'MAYFORWARDACROSSGROUP'"); - assertEquals(RuleType.FORWARDING, ruleList0.get(0).getRuleType(), "the rule type should be 'FORWARDING'"); + assertEquals(RuleType.FORWARDING, ruleList0.get(0).getRuleType().iterator().next(), + "the rule type should be 'FORWARDING'"); } private void checkNepClient100GSwitch(OwnedNodeEdgePoint nep, Uuid nepUuid, String portName, String nepName, @@ -1209,7 +1138,7 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest { lpql.add(entry.getLayerProtocolQualifier()); } assertEquals(1, lpql.size(), "OTSi nep of RDM infra node should support only 1 kind of cep"); - assertThat("OTSi nep should support 2 kind of cep", lpql, hasItems(PHOTONICLAYERQUALIFIEROMS.VALUE)); + assertThat("OTSi nep should support OTS cep", lpql, hasItems(PHOTONICLAYERQUALIFIEROTS.VALUE)); assertEquals(LayerProtocolName.PHOTONICMEDIA, nep.getLayerProtocolName(), "OTSi nep should be of PHOTONIC_MEDIA protocol type"); assertEquals(0, nep.nonnullMappedServiceInterfacePoint().size(), "OTSi nep of RDM infra should support no SIP"); @@ -1237,44 +1166,6 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest { assertEquals(PortRole.SYMMETRIC, nep.getLinkPortRole(), "link-port-role of client nep should be SYMMETRIC"); } - private void checkTransitionalLink(Link link, Uuid node1Uuid, Uuid node2Uuid, String tp1, String tp2, - String ietfNodeId) { - Uuid linkUuid = new Uuid(UUID.nameUUIDFromBytes((tp1 + "to" + tp2) - .getBytes(Charset.forName("UTF-8"))).toString()); - assertEquals(linkUuid, link.getUuid(), "bad uuid for link between DSR node " + tp1 + " and iOTSI port " + tp2); - assertEquals(CAPACITYUNITGBPS.VALUE, link.getAvailableCapacity().getTotalSize().getUnit(), - "Available capacity unit should be GBPS"); - assertEquals(Uint64.valueOf(100), link.getAvailableCapacity().getTotalSize().getValue(), - "Available capacity -total size value should be 100"); - assertEquals(2, link.getTransitionedLayerProtocolName().size(), - "transitional link should be between 2 nodes of protocol layers ODU and PHOTONIC_MEDIA"); - assertThat("transitional link should be between 2 nodes of protocol layers ODU and PHOTONIC_MEDIA", - link.getTransitionedLayerProtocolName(), - hasItems(LayerProtocolName.ODU.getName(), LayerProtocolName.PHOTONICMEDIA.getName())); - assertEquals(ForwardingDirection.BIDIRECTIONAL, link.getDirection(), - "transitional link should be BIDIRECTIONAL"); - List nodeEdgePointList = new ArrayList<>(link.nonnullNodeEdgePoint().values()); - assertEquals(topologyUuid, nodeEdgePointList.get(0).getTopologyUuid(), - "topology uuid should be the same for the two termination point of the link"); - assertEquals(topologyUuid, nodeEdgePointList.get(1).getTopologyUuid(), - "topology uuid should be the same for the two termination point of the link"); - assertThat("transitional links should terminate on DSR node and Photonic node", - nodeEdgePointList.get(0).getNodeUuid().getValue(), - either(containsString(node1Uuid.getValue())).or(containsString(node2Uuid.getValue()))); - assertThat("transitional links should terminate on DSR node and Photonic node", - nodeEdgePointList.get(1).getNodeUuid().getValue(), - either(containsString(node1Uuid.getValue())).or(containsString(node2Uuid.getValue()))); - Uuid nep1Uuid = new Uuid(UUID.nameUUIDFromBytes(tp1.getBytes(Charset.forName("UTF-8"))).toString()); - Uuid nep2Uuid = new Uuid(UUID.nameUUIDFromBytes(tp2.getBytes(Charset.forName("UTF-8"))).toString()); - assertThat("transitional links should terminate on " + tp1 + " and " + tp2 + " neps", - nodeEdgePointList.get(0).getNodeEdgePointUuid().getValue(), - either(containsString(nep1Uuid.getValue())).or(containsString(nep2Uuid.getValue()))); - assertThat("transitional links should terminate on DSR node and Photonic node", - nodeEdgePointList.get(1).getNodeEdgePointUuid().getValue(), - either(containsString(nep1Uuid.getValue())).or(containsString(nep2Uuid.getValue()))); - } - private void checkOtnLink(Link link, Uuid node1Uuid, Uuid node2Uuid, Uuid tp1Uuid, Uuid tp2Uuid, Uuid linkUuid, String linkName) { assertEquals(linkName, link.getName().get(new NameKey("otn link name")).getValue(), "bad name for the link"); @@ -1291,7 +1182,7 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest { } assertEquals(CAPACITYUNITGBPS.VALUE, link.getTotalPotentialCapacity().getTotalSize().getUnit(), "Total capacity unit should be GBPS"); - assertEquals(Uint64.valueOf(100), link.getTotalPotentialCapacity().getTotalSize().getValue(), + assertEquals(Decimal64.valueOf("100"), link.getTotalPotentialCapacity().getTotalSize().getValue(), "Total capacity -total size value should be 100"); if ("OTU4".equals(prefix)) { assertEquals( @@ -1307,6 +1198,8 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest { assertEquals(ForwardingDirection.BIDIRECTIONAL, link.getDirection(), "otn tapi link should be BIDIRECTIONAL"); List nodeEdgePointList = new ArrayList<>(link.nonnullNodeEdgePoint().values()); + LOG.info("OUTPUT: Node1UUID = {}, Node2UU2D = {},", node1Uuid.toString(), node2Uuid.toString()); + LOG.info("NEPLIST = {}", nodeEdgePointList.toString()); assertEquals(topologyUuid, nodeEdgePointList.get(0).getTopologyUuid(), "topology uuid should be the same for the two termination point of the link"); assertEquals(topologyUuid, nodeEdgePointList.get(1).getTopologyUuid(), @@ -1330,7 +1223,7 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest { private void checkOmsLink(Link link, Uuid node1Uuid, Uuid node2Uuid, Uuid tp1Uuid, Uuid tp2Uuid, Uuid linkUuid, String linkName) { - assertEquals(linkName, link.getName().get(new NameKey("OMS link name")).getValue(), "bad name for the link"); + assertEquals(linkName, link.getName().get(new NameKey("OTS link name")).getValue(), "bad name for the link"); assertEquals(linkUuid, link.getUuid(), "bad uuid for link"); assertEquals( LayerProtocolName.PHOTONICMEDIA.getName(), @@ -1389,4 +1282,20 @@ public class ConvertORTopoToTapiTopoTest extends AbstractTest { linkBldr.addAugmentation(link1Bldr.build()); return linkBldr.build(); } + + private int getNodeRank(String searchedChar, + List nodeList) { + int foundAtRank = 0; + int rank = 0; + for (org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node node: nodeList) { + for (Map.Entry entry: node.getName().entrySet()) { + if (entry.getValue().getValue().contains(searchedChar)) { + foundAtRank = rank; + } + } + rank++; + } + LOG.info("searched Char {} found at rank {}", searchedChar, foundAtRank); + return foundAtRank; + } } \ No newline at end of file diff --git a/tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImplTest.java b/tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImplTest.java index e19f5d4ed..71a6aaf55 100644 --- a/tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImplTest.java +++ b/tapi/src/test/java/org/opendaylight/transportpce/tapi/topology/TapiTopologyImplTest.java @@ -75,6 +75,8 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.no import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.NodeEdgePoint; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.node.rule.group.Rule; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Link; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.LinkKey; +import org.opendaylight.yangtools.yang.common.Decimal64; import org.opendaylight.yangtools.yang.common.RpcResult; import org.opendaylight.yangtools.yang.common.Uint64; import org.slf4j.Logger; @@ -125,9 +127,11 @@ public class TapiTopologyImplTest extends AbstractTest { throws ExecutionException, InterruptedException { Uuid topologyUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.TPDR_100G.getBytes( Charset.forName("UTF-8"))).toString()); + LOG.info("TPDR100GUuid = {}", topologyUuid); GetTopologyDetailsInput input = TapiTopologyDataUtils.buildGetTopologyDetailsInput(topologyUuid); TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(getDataBroker(), tapiContext, topologyUtils, tapiLink); ListenableFuture> result = tapiTopoImpl.getTopologyDetails(input); + LOG.info("RESULT of getTopoDetailsTopo/name = {}", result.get().getResult().getTopology().getName().toString()); result.addListener(new Runnable() { @Override public void run() { @@ -164,7 +168,8 @@ public class TapiTopologyImplTest extends AbstractTest { assertEquals("forward", ruleList.get(0).getLocalId(), "local-id of the rule should be 'forward'"); assertEquals(FORWARDINGRULEMAYFORWARDACROSSGROUP.VALUE, ruleList.get(0).getForwardingRule(), "the forwarding rule should be 'MAYFORWARDACROSSGROUP'"); - assertEquals(RuleType.FORWARDING, ruleList.get(0).getRuleType(), "the rule type should be 'FORWARDING'"); + assertEquals(RuleType.FORWARDING, ruleList.get(0).getRuleType().iterator().next(), + "the rule type should be 'FORWARDING'"); } @Test @@ -172,6 +177,7 @@ public class TapiTopologyImplTest extends AbstractTest { throws ExecutionException, InterruptedException { Uuid topologyUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_MULTILAYER.getBytes( Charset.forName("UTF-8"))).toString()); + LOG.info("T0MultilayerUuid = {}", topologyUuid); GetTopologyDetailsInput input = TapiTopologyDataUtils.buildGetTopologyDetailsInput(topologyUuid); TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(getDataBroker(), tapiContext, topologyUtils, tapiLink); ListenableFuture> result = tapiTopoImpl.getTopologyDetails(input); @@ -186,11 +192,17 @@ public class TapiTopologyImplTest extends AbstractTest { @Nullable Topology topology = rpcResult.getResult().getTopology(); assertNotNull(topology, "Topology should not be null"); - assertEquals(13, topology.getNode().size(), "Node list size should be 13"); + for (Map.Entry< + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.NodeKey, + org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.topology.rev221121.topology.Node> entry : + topology.getNode().entrySet()) { + LOG.debug("NODESDETECTED = {}",entry.getValue().getName().toString()); + } + assertEquals(7, topology.getNode().size(), "Node list size should be 7"); long nb1 = topology.getNode().values().stream() .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR)) .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue() - .equals("XPDR-A1-XPDR1+DSR")) + .equals("XPDR-A1-XPDR1+XPONDER")) .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream() .filter(nep -> nep.getName().containsKey(new NameKey("100G-tpdr")))) .count(); @@ -198,7 +210,7 @@ public class TapiTopologyImplTest extends AbstractTest { long nb2 = topology.getNode().values().stream() .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR)) .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue() - .equals("SPDR-SA1-XPDR1+DSR")) + .equals("SPDR-SA1-XPDR1+XPONDER")) .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream() .filter(nep -> nep.getName().containsKey(new NameKey("NodeEdgePoint_C")))) .count(); @@ -206,7 +218,7 @@ public class TapiTopologyImplTest extends AbstractTest { long nb3 = topology.getNode().values().stream() .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR)) .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue() - .equals("SPDR-SA1-XPDR1+DSR")) + .equals("SPDR-SA1-XPDR1+XPONDER")) .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream() .filter(nep -> nep.getName().containsKey(new NameKey("iNodeEdgePoint_N")))) .count(); @@ -214,7 +226,7 @@ public class TapiTopologyImplTest extends AbstractTest { long nb4 = topology.getNode().values().stream() .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR)) .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue() - .equals("SPDR-SA1-XPDR2+DSR")) + .equals("SPDR-SA1-XPDR2+XPONDER")) .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream() .filter(nep -> nep.getName().containsKey(new NameKey("NodeEdgePoint_C")))) .count(); @@ -222,12 +234,40 @@ public class TapiTopologyImplTest extends AbstractTest { long nb5 = topology.getNode().values().stream() .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR)) .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue() - .equals("SPDR-SA1-XPDR2+DSR")) + .equals("SPDR-SA1-XPDR2+XPONDER")) .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream() .filter(nep -> nep.getName().containsKey(new NameKey("iNodeEdgePoint_N")))) .count(); assertEquals(2, nb5, "SPDR-SA1-XPDR2 (switch) should have 2 network neps"); - assertEquals(18, topology.getLink().size(), "Link list size should be 18"); + long nb7 = topology.getNode().values().stream() + .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA) + && node.getLayerProtocolName().contains(LayerProtocolName.DSR)) + .filter(node -> node.getName().get(new NameKey("otsi node name")).getValue() + .equals("XPDR-A1-XPDR1+XPONDER")) + .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream() + .filter(nep -> nep.getName().containsKey(new NameKey("eNodeEdgePoint")))) + .count(); + assertEquals(1, nb7, "XPDR-A1-XPDR1 should only have 1 OTSI network nep"); + long nb8 = topology.getNode().values().stream() + .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA) + && node.getLayerProtocolName().contains(LayerProtocolName.DSR)) + .filter(node -> node.getName().get(new NameKey("otsi node name")).getValue() + .equals("SPDR-SA1-XPDR1+XPONDER")) + .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream() + .filter(nep -> nep.getName().containsKey(new NameKey("eNodeEdgePoint")))) + .count(); + assertEquals(1, nb8, "SPDR-SA1-XPDR1 (mux) should have a single OTSI network nep"); + long nb9 = topology.getNode().values().stream() + .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA) + && node.getLayerProtocolName().contains(LayerProtocolName.DSR)) + .filter(node -> node.getName().get(new NameKey("otsi node name")).getValue() + .equals("SPDR-SA1-XPDR2+XPONDER")) + .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream() + .filter(nep -> nep.getName().containsKey(new NameKey("eNodeEdgePoint")))) + .count(); + assertEquals(2, nb9, "SPDR-SA1-XPDR2 (switch) should have 2 OTSI network nep"); + + assertEquals(10, topology.getLink().size(), "Link list size should be 10, no more transitionnal links"); Uuid topoUuid = new Uuid(UUID.nameUUIDFromBytes("T0 - Multi-layer topology".getBytes()).toString()); assertEquals(topoUuid, topology.getUuid(), "incorrect topology uuid"); assertEquals( @@ -240,24 +280,21 @@ public class TapiTopologyImplTest extends AbstractTest { long nbPhotonicNodes = topology.nonnullNode().values().stream() .filter(n -> n.getName().containsKey(new NameKey("otsi node name"))).count(); assertEquals(6, nbDsrOduNodes, "Node list should contain 6 DSR-ODU nodes"); - assertEquals(7, nbPhotonicNodes, "Node list should contain 7 Photonics nodes"); - long nbTransititionalLinks = topology.getLink().values().stream() - .filter(l -> l.getName().containsKey(new NameKey("transitional link name"))).count(); - long nbOmsLinks = topology.getLink().values().stream() - .filter(l -> l.getName().containsKey(new NameKey("OMS link name"))).count(); + assertEquals(7, nbPhotonicNodes, "Node list should contain 7 Photonics node"); + long nbOtsLinks = topology.getLink().values().stream() + .filter(l -> l.getName().containsKey(new NameKey("OTS link name"))).count(); long nbOtnLinks = topology.getLink().values().stream() .filter(l -> l.getName().containsKey(new NameKey("otn link name"))).count(); - assertEquals(8, nbTransititionalLinks, "Link list should contain 8 transitional links"); - assertEquals(8, nbOmsLinks, "Link list should contain 8 transitional links"); + assertEquals(8, nbOtsLinks, "Link list should contain 8 OTS links"); assertEquals(2, nbOtnLinks, "Link list should contain 2 OTN links"); - Uuid node1Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+DSR".getBytes(StandardCharsets.UTF_8)) + Uuid node1Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+XPONDER".getBytes(StandardCharsets.UTF_8)) .toString()); - Uuid node2Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SC1-XPDR1+DSR".getBytes(StandardCharsets.UTF_8)) + Uuid node2Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SC1-XPDR1+XPONDER".getBytes(StandardCharsets.UTF_8)) .toString()); - Uuid node3Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+OTSi".getBytes(StandardCharsets.UTF_8)) + Uuid node3Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+XPONDER".getBytes(StandardCharsets.UTF_8)) .toString()); - Uuid node4Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SC1-XPDR1+OTSi".getBytes(StandardCharsets.UTF_8)) + Uuid node4Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SC1-XPDR1+XPONDER".getBytes(StandardCharsets.UTF_8)) .toString()); Uuid tp1Uuid = new Uuid(UUID.nameUUIDFromBytes("SPDR-SA1-XPDR1+eODU+XPDR1-NETWORK1" .getBytes(StandardCharsets.UTF_8)).toString()); @@ -282,13 +319,15 @@ public class TapiTopologyImplTest extends AbstractTest { "SPDR-SA1-XPDR1+iOTSi+XPDR1-NETWORK1toSPDR-SC1-XPDR1+iOTSi+XPDR1-NETWORK1"); checkOtnLink(links.get(1), topoUuid, node1Uuid, node2Uuid, tp1Uuid, tp2Uuid, link2Uuid, "SPDR-SA1-XPDR1+eODU+XPDR1-NETWORK1toSPDR-SC1-XPDR1+eODU+XPDR1-NETWORK1"); + } @Test void getTopologyDetailsForFullTapiTopologyWithLinksWhenSuccessful() throws ExecutionException, InterruptedException { - Uuid topologyUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_MULTILAYER.getBytes( + Uuid topologyUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER.getBytes( Charset.forName("UTF-8"))).toString()); + LOG.info("T0FullMultilayerUuid = {}", topologyUuid); GetTopologyDetailsInput input = TapiTopologyDataUtils.buildGetTopologyDetailsInput(topologyUuid); TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(getDataBroker(), tapiContext, topologyUtils, tapiLink); ListenableFuture> result = tapiTopoImpl.getTopologyDetails(input); @@ -303,177 +342,156 @@ public class TapiTopologyImplTest extends AbstractTest { @Nullable Topology topology = rpcResult.getResult().getTopology(); assertNotNull(topology, "Topology should not be null"); - // 2 Nodes per Xpdr/Spdr node (DSR-ODU & PHOT) + 1 Node per Roadm - assertEquals(18, topology.getNode().size(), "Node list size should be 18"); + // 2 Nodes per Xpdr/Spdr node (DSR-ODU & PHOT) + 3 Node per Roadm + assertEquals(10, topology.getNode().size(), "Node list size should be 10"); + List> nodeNames = topology.getNode().values().stream() + .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA)) + .map(Node::getName).collect(Collectors.toList()); + LOG.info("TopologyNodes = {}", nodeNames.toString()); + Node nodeTsp = topology.getNode().values().stream() + .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR)) + .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue() + .equals("XPDR-A1-XPDR1+XPONDER")) + .findAny().orElseThrow(); + LOG.debug("XPDRA1 NEPs = {}", nodeTsp.getOwnedNodeEdgePoint().toString()); long nb1 = topology.getNode().values().stream() .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR)) - .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue() - .equals("XPDR-A1-XPDR1+DSR")) + .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue() + .equals("XPDR-A1-XPDR1+XPONDER")) .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream() .filter(nep -> nep.getName().containsKey(new NameKey("100G-tpdr")))) .count(); // 2 client ports in configuration -> removed the checkTp so we have 2 NEPs - assertEquals(2, nb1, "XPDR-A1-XPDR1+DSR should only have two client neps"); + assertEquals(2, nb1, "XPDR-A1-XPDR1+XPONDER should only have two client neps"); long inb1 = topology.getNode().values().stream() .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR)) - .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue() - .equals("XPDR-A1-XPDR1+DSR")) + .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue() + .equals("XPDR-A1-XPDR1+XPONDER")) .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream() .filter(nep -> nep.getName().containsKey(new NameKey("iNodeEdgePoint_N")))) .count(); - assertEquals(2, inb1, "XPDR-A1-XPDR1+DSR should only have two internal network neps"); + assertEquals(2, inb1, "XPDR-A1-XPDR1+XPONDER should only have two internal network neps"); long enb1 = topology.getNode().values().stream() .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR)) - .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue() - .equals("XPDR-A1-XPDR1+DSR")) + .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue() + .equals("XPDR-A1-XPDR1+XPONDER")) .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream() .filter(nep -> nep.getName().containsKey(new NameKey("eNodeEdgePoint_N")))) .count(); - assertEquals(2, enb1, "XPDR-A1-XPDR1+DSR should only have two external network neps"); + assertEquals(2, enb1, "XPDR-A1-XPDR1+XPONDER should only have two external network neps"); long nb2 = topology.getNode().values().stream() .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR)) - .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue() - .equals("SPDR-SA1-XPDR1+DSR")) + .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue() + .equals("SPDR-SA1-XPDR1+XPONDER")) .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream() .filter(nep -> nep.getName().containsKey(new NameKey("NodeEdgePoint_C")))) .count(); - assertEquals(4, nb2, "SPDR-SA1-XPDR1+DSR (mux) should have 4 client neps"); + assertEquals(4, nb2, "SPDR-SA1-XPDR1+XPONDER (mux) should have 4 client neps"); long inb3 = topology.getNode().values().stream() .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR)) - .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue() - .equals("SPDR-SA1-XPDR1+DSR")) + .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue() + .equals("SPDR-SA1-XPDR1+XPONDER")) .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream() .filter(nep -> nep.getName().containsKey(new NameKey("iNodeEdgePoint_N")))) .count(); - assertEquals(1, inb3, "SPDR-SA1-XPDR1+DSR (mux) should have a single internal network nep"); + assertEquals(1, inb3, "SPDR-SA1-XPDR1+XPONDER (mux) should have a single internal network nep"); long enb3 = topology.getNode().values().stream() .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR)) - .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue() - .equals("SPDR-SA1-XPDR1+DSR")) + .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue() + .equals("SPDR-SA1-XPDR1+XPONDER")) .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream() .filter(nep -> nep.getName().containsKey(new NameKey("eNodeEdgePoint_N")))) .count(); - assertEquals(4, enb3, "SPDR-SA1-XPDR1+DSR (mux) should have 4 external network nep"); + assertEquals(4, enb3, "SPDR-SA1-XPDR1+XPONDER (mux) should have 4 external network nep"); long nb4 = topology.getNode().values().stream() .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR)) - .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue() - .equals("SPDR-SA1-XPDR2+DSR")) + .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue() + .equals("SPDR-SA1-XPDR2+XPONDER")) .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream() .filter(nep -> nep.getName().containsKey(new NameKey("NodeEdgePoint_C")))) .count(); - assertEquals(4, nb4, "SPDR-SA1-XPDR2+DSR (switch) should have 4 client neps"); + assertEquals(4, nb4, "SPDR-SA1-XPDR2+XPONDER (switch) should have 4 client neps"); long inb5 = topology.getNode().values().stream() .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR)) - .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue() - .equals("SPDR-SA1-XPDR2+DSR")) + .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue() + .equals("SPDR-SA1-XPDR2+XPONDER")) .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream() .filter(nep -> nep.getName().containsKey(new NameKey("iNodeEdgePoint_N")))) .count(); - assertEquals(4, inb5, "SPDR-SA1-XPDR2+DSR (switch) should have 4 internal network neps"); + assertEquals(4, inb5, "SPDR-SA1-XPDR2+XPONDER (switch) should have 4 internal network neps"); long enb5 = topology.getNode().values().stream() .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR)) - .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue() - .equals("SPDR-SA1-XPDR2+DSR")) + .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue() + .equals("SPDR-SA1-XPDR1+XPONDER")) .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream() .filter(nep -> nep.getName().containsKey(new NameKey("eNodeEdgePoint_N")))) .count(); - assertEquals(4, enb5, "SPDR-SA1-XPDR2+DSR (switch) should have 4 external network neps"); + assertEquals(4, enb5, "SPDR-SA1-XPDR2+XPONDER (switch) should have 4 external network neps"); - // Now lets check for the Photonic media nodes (same nodes as for DSR + 1 Roadm node) - nb1 = topology.getNode().values().stream() - .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA)) - .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue() - .equals("XPDR-A1-XPDR1+OTSi")) - .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream() - .filter(nep -> nep.getName().containsKey(new NameKey("iNodeEdgePoint")))) - .count(); - // 2 client ports in configuration -> removed the checkTp so we have 2 NEPs - assertEquals(2, nb1, "XPDR-A1-XPDR1+OTSi should only have two internal network neps"); inb1 = topology.getNode().values().stream() - .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA)) - .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue() - .equals("XPDR-A1-XPDR1+OTSi")) + .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR)) + .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue() + .equals("XPDR-A1-XPDR1+XPONDER")) .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream() - .filter(nep -> nep.getName().containsKey(new NameKey("eNodeEdgePoint")))) + .filter(nep -> nep.getName().containsKey(new NameKey("eNodeEdgePoint_N")))) .count(); - assertEquals(2, inb1, "XPDR-A1-XPDR1+OTSi should only have two external network neps"); + assertEquals(2, inb1, "XPDR-A1-XPDR1+XPONDER should only have two external network neps"); enb1 = topology.getNode().values().stream() - .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA)) - .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue() - .equals("XPDR-A1-XPDR1+OTSi")) - .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream() - .filter(nep -> nep.getName().containsKey(new NameKey("PhotMedNodeEdgePoint")))) - .count(); - assertEquals(2, enb1, "XPDR-A1-XPDR1+OTSi should only have two photonic network neps"); - nb2 = topology.getNode().values().stream() - .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA)) - .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue() - .equals("SPDR-SA1-XPDR1+OTSi")) + .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR)) + .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue() + .equals("XPDR-A1-XPDR1+XPONDER")) .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream() - .filter(nep -> nep.getName().containsKey(new NameKey("iNodeEdgePoint")))) + .filter(nep -> nep.getName().containsKey(new NameKey("iNodeEdgePoint_N")))) .count(); - assertEquals(1, nb2, "SPDR-SA1-XPDR1+OTSi (mux) should have a single internal network nep"); + assertEquals(2, enb1, "XPDR-A1-XPDR1+XPONDER should only have two photonic network neps"); inb3 = topology.getNode().values().stream() - .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA)) - .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue() - .equals("SPDR-SA1-XPDR1+OTSi")) + .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR)) + .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue() + .equals("SPDR-SA1-XPDR1+XPONDER")) .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream() .filter(nep -> nep.getName().containsKey(new NameKey("eNodeEdgePoint")))) .count(); - assertEquals(1, inb3, "SPDR-SA1-XPDR1+OTSi (mux) should have a single external network nep"); - enb3 = topology.getNode().values().stream() - .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA)) - .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue() - .equals("SPDR-SA1-XPDR1+OTSi")) - .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream() - .filter(nep -> nep.getName().containsKey(new NameKey("PhotMedNodeEdgePoint")))) - .count(); - assertEquals(1, enb3, "SPDR-SA1-XPDR1+OTSi (mux) should have a single photonic network nep"); - nb4 = topology.getNode().values().stream() - .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA)) - .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue() - .equals("SPDR-SA1-XPDR2+OTSi")) - .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream() - .filter(nep -> nep.getName().containsKey(new NameKey("iNodeEdgePoint")))) - .count(); - assertEquals(4, nb4, "SPDR-SA1-XPDR2+OTSi (switch) should have 4 internal network neps"); + assertEquals(1, inb3, "SPDR-SA1-XPDR1+XPONDER (mux) should have a single external network nep"); inb5 = topology.getNode().values().stream() - .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA)) - .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue() - .equals("SPDR-SA1-XPDR2+OTSi")) + .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.DSR)) + .filter(node -> node.getName().get(new NameKey("dsr/odu node name")).getValue() + .equals("SPDR-SA1-XPDR2+XPONDER")) .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream() .filter(nep -> nep.getName().containsKey(new NameKey("eNodeEdgePoint")))) .count(); - assertEquals(4, inb5, "SPDR-SA1-XPDR2+OTSi (switch) should have 4 external network neps"); - enb5 = topology.getNode().values().stream() - .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA)) - .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue() - .equals("SPDR-SA1-XPDR2+OTSi")) - .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream() - .filter(nep -> nep.getName().containsKey(new NameKey("PhotMedNodeEdgePoint")))) - .count(); - assertEquals(4, enb5, "SPDR-SA1-XPDR2+OTSi (switch) should have 4 photonic network neps"); - // We should have 3 neps per DEGREE-TTP port and 3 neps per SRG-PP port + assertEquals(4, inb5, "SPDR-SA1-XPDR2+XPONDER (switch) should have 4 external network neps"); + Node nodeRoadm = topology.getNode().values().stream() + .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA) + && !node.getLayerProtocolName().contains(LayerProtocolName.DSR)) + .filter(node -> node.getName().get(new NameKey("roadm node name")).getValue() + .equals("ROADM-A1+PHOTONIC_MEDIA")) + .findAny().orElseThrow(); long inb6 = topology.getNode().values().stream() - .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA)) - .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue().equals( - "ROADM-A1+PHOTONIC_MEDIA")) + .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA) + && !node.getLayerProtocolName().contains(LayerProtocolName.DSR)) + .filter(node -> node.getName().get(new NameKey("roadm node name")).getValue() + .equals("ROADM-A1+PHOTONIC_MEDIA")) .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream() - .filter(nep -> nep.getName().values().stream().findFirst().orElseThrow().getValue().contains("DEG"))) + .filter(nep -> nep.getName().values().stream().findAny().orElseThrow().getValue().contains("DEG"))) .count(); - assertEquals(6, inb6, "ROADM-A1+PHOTONIC_MEDIA (DEGREE) should have 6 network neps"); + assertEquals(4, inb6, "ROADM-A1+PHOTONIC_MEDIA (DEGREE) should have 4 network neps"); long enb6 = topology.getNode().values().stream() - .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA)) - .filter(node -> node.getName().values().stream().findFirst().orElseThrow().getValue().equals( - "ROADM-A1+PHOTONIC_MEDIA")) + .filter(node -> node.getLayerProtocolName().contains(LayerProtocolName.PHOTONICMEDIA) + && !node.getLayerProtocolName().contains(LayerProtocolName.DSR)) + .filter(node -> node.getName().get(new NameKey("roadm node name")).getValue() + .equals("ROADM-A1+PHOTONIC_MEDIA")) .flatMap(node -> node.getOwnedNodeEdgePoint().values().stream() - .filter(nep -> nep.getName().values().stream().findFirst().orElseThrow().getValue().contains("SRG"))) + .filter(nep -> nep.getName().values().stream().findAny().orElseThrow().getValue().contains("SRG"))) .count(); - assertEquals(24, enb6, "ROADM-A1+PHOTONIC_MEDIA (SRG) should have 24 network neps"); + assertEquals(8, enb6, "ROADM-A1+PHOTONIC_MEDIA (SRG) should have 8 network neps (OTS)"); // Links in openroadm topology which include Roadm-to-Roadm and Xpdr-to-Roadm (ortopo / 2) - // + transitional links -> 1 per network port of Xpdr + OTN links / 2 - assertEquals(25, topology.getLink().size(), "Link list size should be 25"); + // + transitional links -> 0 per network port of Xpdr + OTN links / 2 + List linkList = new ArrayList<>(); + for (Map.Entry entry : topology.getLink().entrySet()) { + linkList.add(entry.getValue().getName().entrySet().iterator().next().getValue().toString()); + } + assertEquals(9, topology.getLink().size(), "Link list size should be 8 XPDR To SRG and 1 DEG2A-DEG1C"); Uuid topoUuid = new Uuid(UUID.nameUUIDFromBytes("T0 - Full Multi-layer topology".getBytes()).toString()); assertEquals(topoUuid, topology.getUuid(), "incorrect topology uuid"); assertEquals( @@ -489,16 +507,12 @@ public class TapiTopologyImplTest extends AbstractTest { assertEquals(8, nbDsrOduNodes, "Node list should contain 8 DSR-ODU nodes"); // We need to add the Roadms as Photonic nodes. Instead of 1 node as roadm infra we have 2 roadm nodes assertEquals(8, nbPhotonicNodes, "Node list should contain 8 Photonics nodes"); - long nbTransititionalLinks = topology.getLink().values().stream() - .filter(l -> l.getName().containsKey(new NameKey("transitional link name"))).count(); // Roadm-to-Roadm long nbOmsLinks = topology.getLink().values().stream() .filter(l -> l.getName().containsKey(new NameKey("OMS link name"))).count(); // Xpdr-to-Roadm long nbOmsLinks1 = topology.getLink().values().stream() .filter(l -> l.getName().containsKey(new NameKey("XPDR-RDM link name"))).count(); - // 1 transitional link per NETWORK port - assertEquals(16, nbTransititionalLinks, "Link list should contain 16 transitional links"); // 1 OMS per ROADM-to-ROADM link + Existing XPDR-tp-ROADM link in openroadm topology assertEquals(9, nbOmsLinks + nbOmsLinks1, "Link list should contain 9 OMS links"); } @@ -506,7 +520,7 @@ public class TapiTopologyImplTest extends AbstractTest { @Test void getNodeAndNepsDetailsWhenSuccessful() throws ExecutionException, InterruptedException { - Uuid topologyUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_MULTILAYER.getBytes( + Uuid topologyUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER.getBytes( Charset.forName("UTF-8"))).toString()); GetTopologyDetailsInput input = TapiTopologyDataUtils.buildGetTopologyDetailsInput(topologyUuid); TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(getDataBroker(), tapiContext, topologyUtils, tapiLink); @@ -563,7 +577,7 @@ public class TapiTopologyImplTest extends AbstractTest { @Test void getLinkDetailsWhenSuccessful() throws ExecutionException, InterruptedException { - Uuid topologyUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_MULTILAYER.getBytes( + Uuid topologyUuid = new Uuid(UUID.nameUUIDFromBytes(TapiStringConstants.T0_FULL_MULTILAYER.getBytes( Charset.forName("UTF-8"))).toString()); GetTopologyDetailsInput input = TapiTopologyDataUtils.buildGetTopologyDetailsInput(topologyUuid); TapiTopologyImpl tapiTopoImpl = new TapiTopologyImpl(getDataBroker(), tapiContext, topologyUtils, tapiLink); @@ -651,7 +665,7 @@ public class TapiTopologyImplTest extends AbstractTest { } assertEquals(CAPACITYUNITGBPS.VALUE, link.getTotalPotentialCapacity().getTotalSize().getUnit(), "Total capacity unit should be GBPS"); - assertEquals(Uint64.valueOf(100), link.getTotalPotentialCapacity().getTotalSize().getValue(), + assertEquals(Decimal64.valueOf("100"), link.getTotalPotentialCapacity().getTotalSize().getValue(), "Total capacity -total size value should be 100"); if ("OTU4".equals(prefix)) { assertEquals("otn link should be between 2 nodes of protocol layers PHOTONIC_MEDIA", diff --git a/tapi/src/test/java/org/opendaylight/transportpce/tapi/utils/TapiConnectivityDataUtils.java b/tapi/src/test/java/org/opendaylight/transportpce/tapi/utils/TapiConnectivityDataUtils.java index aff6798ef..bb3b4774d 100644 --- a/tapi/src/test/java/org/opendaylight/transportpce/tapi/utils/TapiConnectivityDataUtils.java +++ b/tapi/src/test/java/org/opendaylight/transportpce/tapi/utils/TapiConnectivityDataUtils.java @@ -59,6 +59,9 @@ import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev22112 import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.create.connectivity.service.input.EndPoint; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.create.connectivity.service.input.EndPointBuilder; import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.create.connectivity.service.input.EndPointKey; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.create.connectivity.service.input.TopologyConstraint; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.create.connectivity.service.input.TopologyConstraintBuilder; +import org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121.create.connectivity.service.input.TopologyConstraintKey; import org.opendaylight.yangtools.yang.common.Decimal64; import org.opendaylight.yangtools.yang.common.Uint32; import org.opendaylight.yangtools.yang.common.Uint8; @@ -76,12 +79,13 @@ public final class TapiConnectivityDataUtils { .setEndPoint(endPointMap) .setLayerProtocolName(LayerProtocolName.DSR) .setConnectivityConstraint(new org.opendaylight.yang.gen.v1.urn.onf.otcc.yang.tapi.connectivity.rev221121 - .create.connectivity.service.input.ConnectivityConstraintBuilder() + .create.connectivity.service.input.ConnectivityConstraintBuilder() .setServiceType(ServiceType.POINTTOPOINTCONNECTIVITY).setServiceLevel("some service-level") - .setRequestedCapacity(new RequestedCapacityBuilder() + .setRequestedCapacity(new RequestedCapacityBuilder() .setTotalSize(new TotalSizeBuilder().setUnit(CAPACITYUNITGBPS.VALUE) .setValue(Decimal64.valueOf("10")).build()).build()).build()) .setState(AdministrativeState.UNLOCKED) + .setTopologyConstraint(getTopoConstraintMap()) .build(); } @@ -171,6 +175,14 @@ public final class TapiConnectivityDataUtils { .build()); } + private static Map getTopoConstraintMap() { + Map topoConstraintMap = new HashMap<>(); + TopologyConstraint topoConstraint = new TopologyConstraintBuilder() + .setLocalId("localIdTopoConstraint").build(); + topoConstraintMap.put(topoConstraint.key(), topoConstraint); + return topoConstraintMap; + } + public static Map createConnService() { EndPoint endPoint1 = getEndPoint1Builder().build(); EndPoint endPoint2 = getEndPoint2Builder().build(); diff --git a/tests/transportpce_tests/common/test_utils.py b/tests/transportpce_tests/common/test_utils.py index 888a8e91f..1c0bf202c 100644 --- a/tests/transportpce_tests/common/test_utils.py +++ b/tests/transportpce_tests/common/test_utils.py @@ -53,6 +53,9 @@ CODE_SHOULD_BE_201 = 'Http status code should be 201' T100GE = 'Transponder 100GE' T0_MULTILAYER_TOPO = 'T0 - Multi-layer topology' T0_FULL_MULTILAYER_TOPO = 'T0 - Full Multi-layer topology' +T100GE_UUID = 'cf51c729-3699-308a-a7d0-594c6a62ebbb' +T0_MULTILAYER_TOPO_UUID = '747c670e-7a07-3dab-b379-5b1cd17402a3' +T0_FULL_MULTILAYER_TOPO_UUID = '393f09a4-0a0b-3d82-a4f6-1fbbc14ca1a7' SIM_LOG_DIRECTORY = os.path.join(os.path.dirname(os.path.realpath(__file__)), 'log') diff --git a/tests/transportpce_tests/tapi/test01_abstracted_topology.py b/tests/transportpce_tests/tapi/test01_abstracted_topology.py index f74f298f6..8f44a16b2 100644 --- a/tests/transportpce_tests/tapi/test01_abstracted_topology.py +++ b/tests/transportpce_tests/tapi/test01_abstracted_topology.py @@ -138,7 +138,7 @@ class TransportTapitesting(unittest.TestCase): "tail-retention": "no"} } - tapi_topo = {"topology-id-or-name": "TBD"} + tapi_topo = {"topology-id": "TBD"} @classmethod def setUpClass(cls): @@ -184,7 +184,7 @@ class TransportTapitesting(unittest.TestCase): print("execution of {}".format(self.id().split(".")[-1])) def test_01_get_tapi_topology_T100G(self): - self.tapi_topo["topology-id-or-name"] = test_utils.T100GE + self.tapi_topo["topology-id"] = test_utils.T100GE_UUID response = test_utils.transportpce_api_rpc_request( 'tapi-topology', 'get-topology-details', self.tapi_topo) self.assertEqual(response['status_code'], requests.codes.ok) @@ -200,7 +200,7 @@ class TransportTapitesting(unittest.TestCase): 'node should contain 1 node rule group') def test_02_get_tapi_topology_T0(self): - self.tapi_topo["topology-id-or-name"] = test_utils.T0_MULTILAYER_TOPO + self.tapi_topo["topology-id"] = test_utils.T0_MULTILAYER_TOPO_UUID response = test_utils.transportpce_api_rpc_request( 'tapi-topology', 'get-topology-details', self.tapi_topo) self.assertEqual(response['status_code'], requests.codes.ok) @@ -212,14 +212,14 @@ class TransportTapitesting(unittest.TestCase): self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201) def test_04_check_tapi_topos(self): - self.tapi_topo["topology-id-or-name"] = test_utils.T100GE + self.tapi_topo["topology-id"] = test_utils.T100GE_UUID response = test_utils.transportpce_api_rpc_request( 'tapi-topology', 'get-topology-details', self.tapi_topo) self.assertEqual(response['status_code'], requests.codes.ok) self.assertEqual(len(response["output"]["topology"]["node"]), 1, 'Topology should contain 1 node') self.assertNotIn("link", response["output"]["topology"], 'Topology should contain no link') - self.tapi_topo["topology-id-or-name"] = test_utils.T0_MULTILAYER_TOPO + self.tapi_topo["topology-id"] = test_utils.T0_MULTILAYER_TOPO_UUID response = test_utils.transportpce_api_rpc_request( 'tapi-topology', 'get-topology-details', self.tapi_topo) self.assertEqual(response['status_code'], requests.codes.ok) @@ -235,7 +235,7 @@ class TransportTapitesting(unittest.TestCase): self.assertEqual(response.status_code, requests.codes.created, test_utils.CODE_SHOULD_BE_201) def test_07_check_tapi_topos(self): - self.tapi_topo["topology-id-or-name"] = test_utils.T0_MULTILAYER_TOPO + self.tapi_topo["topology-id"] = test_utils.T0_MULTILAYER_TOPO_UUID response = test_utils.transportpce_api_rpc_request( 'tapi-topology', 'get-topology-details', self.tapi_topo) self.assertEqual(response['status_code'], requests.codes.ok) @@ -252,15 +252,21 @@ class TransportTapitesting(unittest.TestCase): def test_10_check_tapi_topos(self): self.test_01_get_tapi_topology_T100G() - - self.tapi_topo["topology-id-or-name"] = test_utils.T0_MULTILAYER_TOPO + self.tapi_topo["topology-id"] = test_utils.T0_MULTILAYER_TOPO_UUID response = test_utils.transportpce_api_rpc_request( 'tapi-topology', 'get-topology-details', self.tapi_topo) self.assertEqual(response['status_code'], requests.codes.ok) self.assertEqual(1, len(response["output"]["topology"]["node"]), 'Topology should contain 1 node') self.assertNotIn("link", response["output"]["topology"], 'Topology should contain no link') - self.assertEqual("ROADM-infra", response["output"]["topology"]["node"][0]["name"][0]["value"], +# self.assertEqual("ROADM-infra", response["output"]["topology"]["node"][0]["name"][0]["value"], +# 'node name should be: ROADM-infra') + nodes = response["output"]["topology"]["node"] + self.assertEqual("ROADM-infra", + response["output"]["topology"]["node"][0]["name"][count_position_name_from_value_name( + response["output"]["topology"]["node"][0]["name"], "otsi node name")]["value"], 'node name should be: ROADM-infra') + self.assertEqual(1, count_object_with_double_key(nodes, "name", "value-name", "otsi node name"), + 'Topology should contain 1 otsi nodes') self.assertIn("PHOTONIC_MEDIA", response["output"]["topology"]["node"][0]["layer-protocol-name"], 'Node layer protocol should contain PHOTONIC_MEDIA') self.assertEqual(1, len(response["output"]["topology"]["node"][0]["node-rule-group"]), @@ -287,7 +293,7 @@ class TransportTapitesting(unittest.TestCase): time.sleep(2) def test_13_check_tapi_topology_T100G(self): - self.tapi_topo["topology-id-or-name"] = test_utils.T100GE + self.tapi_topo["topology-id"] = test_utils.T100GE_UUID response = test_utils.transportpce_api_rpc_request( 'tapi-topology', 'get-topology-details', self.tapi_topo) self.assertEqual(response['status_code'], requests.codes.ok) @@ -298,22 +304,20 @@ class TransportTapitesting(unittest.TestCase): 'name of owned-node-edge-points should be XPDR-A1-XPDR1+DSR+XPDR1-CLIENT1') def test_14_check_tapi_topology_T0(self): - self.tapi_topo["topology-id-or-name"] = test_utils.T0_MULTILAYER_TOPO + self.tapi_topo["topology-id"] = test_utils.T0_MULTILAYER_TOPO_UUID response = test_utils.transportpce_api_rpc_request( 'tapi-topology', 'get-topology-details', self.tapi_topo) self.assertEqual(response['status_code'], requests.codes.ok) nodes = response["output"]["topology"]["node"] links = response["output"]["topology"]["link"] - self.assertEqual(3, len(nodes), 'Topology should contain 3 nodes') - self.assertEqual(2, len(links), 'Topology should contain 2 links') + self.assertEqual(2, len(nodes), 'Topology should contain 2 nodes') + self.assertEqual(1, len(links), 'Topology should contain 1 link') self.assertEqual(2, count_object_with_double_key(nodes, "name", "value-name", "otsi node name"), 'Topology should contain 2 otsi nodes') self.assertEqual(1, count_object_with_double_key(nodes, "name", "value-name", "dsr/odu node name"), 'Topology should contain 1 dsr node') - self.assertEqual(1, count_object_with_double_key(links, "name", "value-name", "transitional link name"), - 'Topology should contain 1 transitional link') - self.assertEqual(1, count_object_with_double_key(links, "name", "value-name", "OMS link name"), - 'Topology should contain 1 oms link') + self.assertEqual(1, count_object_with_double_key(links, "name", "value-name", "OTS link name"), + 'Topology should contain 1 ots link') def test_15_connect_xpdrc(self): response = test_utils.mount_device("XPDR-C1", ('xpdrc', self.NODE_VERSION)) @@ -340,7 +344,7 @@ class TransportTapitesting(unittest.TestCase): time.sleep(2) def test_18_check_tapi_topology_T100G(self): - self.tapi_topo["topology-id-or-name"] = test_utils.T100GE + self.tapi_topo["topology-id"] = test_utils.T100GE_UUID response = test_utils.transportpce_api_rpc_request( 'tapi-topology', 'get-topology-details', self.tapi_topo) self.assertEqual(response['status_code'], requests.codes.ok) @@ -354,22 +358,20 @@ class TransportTapitesting(unittest.TestCase): 'name of owned-node-edge-points should be XPDR-A1-XPDR1+DSR+XPDR1-CLIENT1') def test_19_check_tapi_topology_T0(self): - self.tapi_topo["topology-id-or-name"] = test_utils.T0_MULTILAYER_TOPO + self.tapi_topo["topology-id"] = test_utils.T0_MULTILAYER_TOPO_UUID response = test_utils.transportpce_api_rpc_request( 'tapi-topology', 'get-topology-details', self.tapi_topo) self.assertEqual(response['status_code'], requests.codes.ok) nodes = response["output"]["topology"]["node"] links = response["output"]["topology"]["link"] - self.assertEqual(5, len(nodes), 'Topology should contain 5 nodes') - self.assertEqual(4, len(links), 'Topology should contain 4 links') + self.assertEqual(3, len(nodes), 'Topology should contain 3 nodes') + self.assertEqual(2, len(links), 'Topology should contain 2 links') self.assertEqual(3, count_object_with_double_key(nodes, "name", "value-name", "otsi node name"), 'Topology should contain 3 otsi nodes') self.assertEqual(2, count_object_with_double_key(nodes, "name", "value-name", "dsr/odu node name"), 'Topology should contain 2 dsr nodes') - self.assertEqual(2, count_object_with_double_key(links, "name", "value-name", "transitional link name"), - 'Topology should contain 2 transitional links') - self.assertEqual(2, count_object_with_double_key(links, "name", "value-name", "OMS link name"), - 'Topology should contain 2 oms links') + self.assertEqual(2, count_object_with_double_key(links, "name", "value-name", "OTS link name"), + 'Topology should contain 2 ots links') def test_20_connect_spdr_sa1(self): response = test_utils.mount_device("SPDR-SA1", ('spdra', self.NODE_VERSION)) @@ -431,22 +433,20 @@ class TransportTapitesting(unittest.TestCase): self.test_18_check_tapi_topology_T100G() def test_29_check_tapi_topology_T0(self): - self.tapi_topo["topology-id-or-name"] = test_utils.T0_MULTILAYER_TOPO + self.tapi_topo["topology-id"] = test_utils.T0_MULTILAYER_TOPO_UUID response = test_utils.transportpce_api_rpc_request( 'tapi-topology', 'get-topology-details', self.tapi_topo) self.assertEqual(response['status_code'], requests.codes.ok) nodes = response["output"]["topology"]["node"] links = response["output"]["topology"]["link"] - self.assertEqual(9, len(nodes), 'Topology should contain 9 nodes') - self.assertEqual(8, len(links), 'Topology should contain 8 links') + self.assertEqual(5, len(nodes), 'Topology should contain 5 nodes') + self.assertEqual(4, len(links), 'Topology should contain 4 links') self.assertEqual(5, count_object_with_double_key(nodes, "name", "value-name", "otsi node name"), 'Topology should contain 5 otsi nodes') self.assertEqual(4, count_object_with_double_key(nodes, "name", "value-name", "dsr/odu node name"), 'Topology should contain 4 dsr nodes') - self.assertEqual(4, count_object_with_double_key(links, "name", "value-name", "transitional link name"), - 'Topology should contain 4 transitional links') - self.assertEqual(4, count_object_with_double_key(links, "name", "value-name", "OMS link name"), - 'Topology should contain 4 oms links') + self.assertEqual(4, count_object_with_double_key(links, "name", "value-name", "OTS link name"), + 'Topology should contain 4 ots links') def test_30_add_oms_attributes(self): # Config ROADMA-ROADMC oms-attributes @@ -488,27 +488,25 @@ class TransportTapitesting(unittest.TestCase): time.sleep(self.WAITING) def test_32_check_tapi_topology_T0(self): - self.tapi_topo["topology-id-or-name"] = test_utils.T0_MULTILAYER_TOPO + self.tapi_topo["topology-id"] = test_utils.T0_MULTILAYER_TOPO_UUID response = test_utils.transportpce_api_rpc_request( 'tapi-topology', 'get-topology-details', self.tapi_topo) self.assertEqual(response['status_code'], requests.codes.ok) nodes = response["output"]["topology"]["node"] links = response["output"]["topology"]["link"] - self.assertEqual(9, len(nodes), 'Topology should contain 9 nodes') - self.assertEqual(9, len(links), 'Topology should contain 9 links') - self.assertEqual(4, count_object_with_double_key(links, "name", "value-name", "transitional link name"), - 'Topology should contain 4 transitional links') - self.assertEqual(4, count_object_with_double_key(links, "name", "value-name", "OMS link name"), - 'Topology should contain 4 oms links') + self.assertEqual(5, len(nodes), 'Topology should contain 5 nodes') + self.assertEqual(5, len(links), 'Topology should contain 5 links') + self.assertEqual(4, count_object_with_double_key(links, "name", "value-name", "OTS link name"), + 'Topology should contain 4 ots links') self.assertEqual(1, count_object_with_double_key(links, "name", "value-name", "otn link name"), 'Topology should contain 1 otn link') for link in links: if link["name"][0]["value"] == "OTU4-SPDR-SA1-XPDR1-XPDR1-NETWORK1toSPDR-SC1-XPDR1-XPDR1-NETWORK1": self.assertEqual(100000, int(link["available-capacity"]["total-size"]["value"]), 'OTU4 link should have an available capacity of 100 000 Mbps') - elif link["name"][0]["value-name"] == "transitional link name": - self.assertEqual(100, int(link["available-capacity"]["total-size"]["value"]), - 'link should have an available capacity of 100 Gbps') +# elif link["name"][0]["value-name"] == "transitional link name": +# self.assertEqual(100, int(link["available-capacity"]["total-size"]["value"]), +# 'link should have an available capacity of 100 Gbps') self.assertEqual(2, len(link["node-edge-point"]), 'link should have 2 neps') def test_33_create_ODU4_service(self): @@ -529,18 +527,16 @@ class TransportTapitesting(unittest.TestCase): time.sleep(self.WAITING) def test_34_check_tapi_topology_T0(self): - self.tapi_topo["topology-id-or-name"] = test_utils.T0_MULTILAYER_TOPO + self.tapi_topo["topology-id"] = test_utils.T0_MULTILAYER_TOPO_UUID response = test_utils.transportpce_api_rpc_request( 'tapi-topology', 'get-topology-details', self.tapi_topo) self.assertEqual(response['status_code'], requests.codes.ok) nodes = response["output"]["topology"]["node"] links = response["output"]["topology"]["link"] - self.assertEqual(9, len(nodes), 'Topology should contain 9 nodes') - self.assertEqual(10, len(links), 'Topology should contain 10 links') - self.assertEqual(4, count_object_with_double_key(links, "name", "value-name", "transitional link name"), - 'Topology should contain 4 transitional links') - self.assertEqual(4, count_object_with_double_key(links, "name", "value-name", "OMS link name"), - 'Topology should contain 4 oms links') + self.assertEqual(5, len(nodes), 'Topology should contain 5 nodes') + self.assertEqual(6, len(links), 'Topology should contain 6 links') + self.assertEqual(4, count_object_with_double_key(links, "name", "value-name", "OTS link name"), + 'Topology should contain 4 ots links') self.assertEqual(2, count_object_with_double_key(links, "name", "value-name", "otn link name"), 'Topology should contain 2 otn links') for link in links: @@ -550,9 +546,9 @@ class TransportTapitesting(unittest.TestCase): elif link["name"][0]["value"] == "ODU4-SPDR-SA1-XPDR1-XPDR1-NETWORK1toSPDR-SC1-XPDR1-XPDR1-NETWORK1": self.assertEqual(100000, int(link["available-capacity"]["total-size"]["value"]), 'ODU4 link should have an available capacity of 100 000 Mbps') - elif link["name"][0]["value-name"] == "transitional link name": - self.assertEqual(100, int(link["available-capacity"]["total-size"]["value"]), - 'link should have an available capacity of 100 Gbps') +# elif link["name"][0]["value-name"] == "transitional link name": +# self.assertEqual(100, int(link["available-capacity"]["total-size"]["value"]), +# 'link should have an available capacity of 100 Gbps') self.assertEqual(2, len(link["node-edge-point"]), 'link should have 2 neps') def test_35_connect_sprda_2_n2_to_roadma_pp3(self): @@ -576,24 +572,22 @@ class TransportTapitesting(unittest.TestCase): time.sleep(2) def test_37_check_tapi_topology_T0(self): - self.tapi_topo["topology-id-or-name"] = test_utils.T0_MULTILAYER_TOPO + self.tapi_topo["topology-id"] = test_utils.T0_MULTILAYER_TOPO_UUID response = test_utils.transportpce_api_rpc_request( 'tapi-topology', 'get-topology-details', self.tapi_topo) self.assertEqual(response['status_code'], requests.codes.ok) nodes = response["output"]["topology"]["node"] links = response["output"]["topology"]["link"] - self.assertEqual(11, len(nodes), 'Topology should contain 11 nodes') - self.assertEqual(12, len(links), 'Topology should contain 12 links') + self.assertEqual(6, len(nodes), 'Topology should contain 6 nodes') + self.assertEqual(7, len(links), 'Topology should contain 7 links') self.assertEqual(6, count_object_with_double_key(nodes, "name", "value-name", "otsi node name"), 'Topology should contain 6 otsi nodes') - self.assertEqual(5, count_object_with_double_key(nodes, "name", "value-name", "dsr/odu node name"), - 'Topology should contain 5 dsr nodes') - self.assertEqual(5, count_object_with_double_key(links, "name", "value-name", "transitional link name"), - 'Topology should contain 5 transitional links') - self.assertEqual(5, count_object_with_double_key(links, "name", "value-name", "OMS link name"), - 'Topology should contain 5 oms links') + self.assertEqual(5, count_object_with_double_key(links, "name", "value-name", "OTS link name"), + 'Topology should contain 5 ots links') self.assertEqual(2, count_object_with_double_key(links, "name", "value-name", "otn link name"), 'Topology should contain 2 otn links') + self.assertEqual(5, count_object_with_double_key(nodes, "name", "value-name", "dsr/odu node name"), + 'Topology should contain 5 dsr nodes') def test_38_delete_ODU4_service(self): self.del_serv_input_data["service-delete-req-info"]["service-name"] = "service1-ODU4" @@ -616,14 +610,14 @@ class TransportTapitesting(unittest.TestCase): time.sleep(self.WAITING) def test_40_check_tapi_topology_T0(self): - self.tapi_topo["topology-id-or-name"] = test_utils.T0_MULTILAYER_TOPO + self.tapi_topo["topology-id"] = test_utils.T0_MULTILAYER_TOPO_UUID response = test_utils.transportpce_api_rpc_request( 'tapi-topology', 'get-topology-details', self.tapi_topo) self.assertEqual(response['status_code'], requests.codes.ok) nodes = response["output"]["topology"]["node"] links = response["output"]["topology"]["link"] - self.assertEqual(11, len(nodes), 'Topology should contain 11 nodes') - self.assertEqual(10, len(links), 'Topology should contain 10 links') + self.assertEqual(6, len(nodes), 'Topology should contain 6 nodes') + self.assertEqual(5, len(links), 'Topology should contain 5 links') self.assertEqual(0, count_object_with_double_key(links, "name", "value-name", "otn link name"), 'Topology should contain 0 otn link') @@ -638,17 +632,21 @@ class TransportTapitesting(unittest.TestCase): self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content)) def test_42_check_tapi_topology_T0(self): - self.tapi_topo["topology-id-or-name"] = test_utils.T0_MULTILAYER_TOPO + self.tapi_topo["topology-id"] = test_utils.T0_MULTILAYER_TOPO_UUID response = test_utils.transportpce_api_rpc_request( 'tapi-topology', 'get-topology-details', self.tapi_topo) self.assertEqual(response['status_code'], requests.codes.ok) self.assertEqual(1, len(response["output"]["topology"]["node"]), 'Topology should contain 1 node') self.assertNotIn("link", response["output"]["topology"], 'Topology should contain no link') - self.assertEqual("ROADM-infra", response["output"]["topology"]["node"][0]["name"][0]["value"], +# self.assertEqual("ROADM-infra", response["output"]["topology"]["node"][0]["name"][0]["value"], +# 'node name should be: ROADM-infra') + self.assertEqual("ROADM-infra", + response["output"]["topology"]["node"][0]["name"][count_position_name_from_value_name( + response["output"]["topology"]["node"][0]["name"], "otsi node name")]["value"], 'node name should be: ROADM-infra') def test_43_get_tapi_topology_T100G(self): - self.tapi_topo["topology-id-or-name"] = test_utils.T100GE + self.tapi_topo["topology-id"] = test_utils.T100GE response = test_utils.transportpce_api_rpc_request( 'tapi-topology', 'get-topology-details', self.tapi_topo) self.assertEqual(response['status_code'], requests.codes.ok) @@ -686,13 +684,32 @@ class TransportTapitesting(unittest.TestCase): self.assertIn(response.status_code, (requests.codes.ok, requests.codes.no_content)) +# def count_object_with_double_key(list_dicts, key1, key2, value): +# nb = 0 +# for dictio in list_dicts: +# print(dictio) +# if dictio[key1][0][key2] == value: +# nb += 1 +# return nb + def count_object_with_double_key(list_dicts, key1, key2, value): nb = 0 for dictio in list_dicts: - if dictio[key1][0][key2] == value: - nb += 1 + for name in dictio[key1]: + if name[key2] == value: + nb += 1 return nb +def count_position_name_from_value_name(name, valuename): + nb = 0 + index = 0 + for names in name: + if names["value-name"] == valuename: + index = nb + nb += 1 + return index + + if __name__ == "__main__": unittest.main(verbosity=2) diff --git a/tests/transportpce_tests/tapi/test02_full_topology.py b/tests/transportpce_tests/tapi/test02_full_topology.py index c8d79a78c..4da753d11 100644 --- a/tests/transportpce_tests/tapi/test02_full_topology.py +++ b/tests/transportpce_tests/tapi/test02_full_topology.py @@ -39,13 +39,36 @@ class TransportPCEtesting(unittest.TestCase): WAITING = 20 # nominal value is 300 NODE_VERSION = '2.2.1' uuid_services = UuidServices() + uuidTpAiOTSI = "f4c370be-e307-380d-a31b-7edc2b431e5d" + uuidTpZiOTSI = "febb4502-6b27-3701-990b-3aa4941f48c4" + uuidTpADSR = "3aca9b37-bc46-335d-b147-2423690dee18" + uuidTpZDSR = "709d3595-6d56-3ad6-a3cd-5a4a09ce6f9d" +# SIP uuids + # SIP+SPDR-SA1-XPDR1+PHOTONIC_MEDIA_OTS+XPDR1-NETWORK1 UUID IS + sAOTS = "38d81f55-1798-3520-ba16-08efa56630c4" + # SIP+SPDR-SC1-XPDR1+PHOTONIC_MEDIA_OTS+XPDR1-NETWORK1 UUID IS + sZOTS = "97d9ba27-0efa-3010-8b98-b4d73240120c" + # SIP+SPDR-SA1-XPDR1+eOTSi+XPDR1-NETWORK1 UUID IS + sAeOTS = "f4dbce65-6191-3c84-b351-29ccb0629221" + # SIP+SPDR-SC1-XPDR1+eOTSi+XPDR1-NETWORK1 UUID IS + sZeOTS = "faabebd3-d7af-3389-96a7-261672744591" + # SIP+SPDR-SA1-XPDR1+DSR+XPDR1-CLIENT1 UUID IS + sADSR = "c14797a0-adcc-3875-a1fe-df8949d1a2d7" + # SIP+SPDR-SC1-XPDR1+DSR+XPDR1-CLIENT1 UUID IS + sZDSR = "25812ef2-625d-3bf8-af55-5e93946d1c22" + # SIP+SPDR-SA1-XPDR1+eODU+XPDR1-CLIENT1 UUID IS + sAeODU = "b6421484-531f-3444-adfc-e11c503f1fab" + # SIP+SPDR-SC1-XPDR1+eODU+XPDR1-CLIENT1 UUID IS + sZeODU = "4511fca7-0cf7-3b27-a128-3b372d5e1fa8" + # uuid_A = uuid.UUID(bytes("SPDR-SA1-XPDR1+DSR+eOTSI+XPDR1-NETWORK1", 'utf-8')) + # uuid_C = uuid.UUID(bytes("SPDR-SC1-XPDR1+DSR+eOTSI+XPDR1-NETWORK1", 'utf-8')) cr_serv_input_data = { "end-point": [ { "layer-protocol-name": "PHOTONIC_MEDIA", "service-interface-point": { - "service-interface-point-uuid": "b1a0d883-32b8-3b0b-93d6-7ed074f6f107" + "service-interface-point-uuid": "c14797a0-adcc-3875-a1fe-df8949d1a2d7" }, "administrative-state": "UNLOCKED", "operational-state": "ENABLED", @@ -63,7 +86,7 @@ class TransportPCEtesting(unittest.TestCase): { "layer-protocol-name": "PHOTONIC_MEDIA", "service-interface-point": { - "service-interface-point-uuid": "d1d6305e-179b-346f-b02d-8260aebe1ce8" + "service-interface-point-uuid": "25812ef2-625d-3bf8-af55-5e93946d1c22" }, "administrative-state": "UNLOCKED", "operational-state": "ENABLED", @@ -80,21 +103,32 @@ class TransportPCEtesting(unittest.TestCase): } ], "connectivity-constraint": { - "service-layer": "PHOTONIC_MEDIA", "service-type": "POINT_TO_POINT_CONNECTIVITY", "service-level": "Some service-level", "requested-capacity": { "total-size": { "value": "100", - "unit": "GB" + "unit": "tapi-common:CAPACITY_UNIT_GBPS" } } }, - "state": "Some state"} + "topology-constraint": [ + { + "local-id": "localIdTopoConstraint", + "name": [ + { + "value-name": "Dumb constraint", + "value": "for debug1" + } + ] + } + ], + "state": "LOCKED", + "layer-protocol-name": "PHOTONIC_MEDIA"} - del_serv_input_data = {"service-id-or-name": "TBD"} + del_serv_input_data = {"uuid": "TBD"} - tapi_topo = {"topology-id-or-name": "TBD"} + tapi_topo = {"topology-id": "TBD"} @classmethod def setUpClass(cls): @@ -240,21 +274,26 @@ class TransportPCEtesting(unittest.TestCase): 'There should be 22 openroadm links') def test_13_get_tapi_topology_details(self): - self.tapi_topo["topology-id-or-name"] = test_utils.T0_FULL_MULTILAYER_TOPO + self.tapi_topo["topology-id"] = test_utils.T0_FULL_MULTILAYER_TOPO_UUID response = test_utils.transportpce_api_rpc_request( 'tapi-topology', 'get-topology-details', self.tapi_topo) time.sleep(2) self.assertEqual(response['status_code'], requests.codes.ok) - self.assertEqual(len(response['output']['topology']['node']), 14, 'There should be 14 TAPI nodes') - self.assertEqual(len(response['output']['topology']['link']), 15, 'There should be 15 TAPI links') + self.assertEqual(len(response['output']['topology']['node']), 8, 'There should be 8 TAPI nodes') + self.assertEqual(len(response['output']['topology']['link']), 3, 'There should be 3 TAPI links') + print(response['output']['topology']['node'][0]) + print(response['output']['topology']['node'][1]) + print(response['output']['topology']['node'][2]) def test_14_check_sip_details(self): response = test_utils.transportpce_api_rpc_request( 'tapi-common', 'get-service-interface-point-list', None) - self.assertEqual(len(response['output']['sip']), 60, 'There should be 60 service interface point') + self.assertEqual(len(response['output']['sip']), 72, 'There should be 72 service interface point') # test create connectivity service from spdrA to spdrC for Photonic_media def test_15_create_connectivity_service_PhotonicMedia(self): + self.cr_serv_input_data["end-point"][0]["service-interface-point"]["service-interface-point-uuid"] = self.sAOTS + self.cr_serv_input_data["end-point"][1]["service-interface-point"]["service-interface-point-uuid"] = self.sZOTS response = test_utils.transportpce_api_rpc_request( 'tapi-connectivity', 'create-connectivity-service', self.cr_serv_input_data) time.sleep(self.WAITING) @@ -266,9 +305,11 @@ class TransportPCEtesting(unittest.TestCase): input_dict_1 = {'administrative-state': 'LOCKED', 'lifecycle-state': 'PLANNED', 'operational-state': 'DISABLED', - 'service-type': 'POINT_TO_POINT_CONNECTIVITY', - 'service-layer': 'PHOTONIC_MEDIA', - 'connectivity-direction': 'BIDIRECTIONAL' + # 'service-type': 'POINT_TO_POINT_CONNECTIVITY', + # 'service-layer': 'PHOTONIC_MEDIA', + 'layer-protocol-name': 'PHOTONIC_MEDIA', + # 'connectivity-direction': 'BIDIRECTIONAL' + 'direction': 'BIDIRECTIONAL' } input_dict_2 = {'value-name': 'OpenROADM node id', 'value': 'SPDR-SC1-XPDR1'} @@ -296,11 +337,12 @@ class TransportPCEtesting(unittest.TestCase): # test create connectivity service from spdrA to spdrC for odu def test_17_create_connectivity_service_ODU(self): # pylint: disable=line-too-long + self.cr_serv_input_data["layer-protocol-name"] = "ODU" self.cr_serv_input_data["end-point"][0]["layer-protocol-name"] = "ODU" - self.cr_serv_input_data["end-point"][0]["service-interface-point"]["service-interface-point-uuid"] = "5efda776-f8de-3e0b-9bbd-2c702e210946" + self.cr_serv_input_data["end-point"][0]["service-interface-point"]["service-interface-point-uuid"] = self.sAeODU self.cr_serv_input_data["end-point"][1]["layer-protocol-name"] = "ODU" - self.cr_serv_input_data["end-point"][1]["service-interface-point"]["service-interface-point-uuid"] = "8116d0af-39fa-3df5-bed2-dd2cd5e8217d" - self.cr_serv_input_data["connectivity-constraint"]["service-layer"] = "ODU" + self.cr_serv_input_data["end-point"][1]["service-interface-point"]["service-interface-point-uuid"] = self.sZeODU +# self.cr_serv_input_data["connectivity-constraint"]["service-layer"] = "ODU" self.cr_serv_input_data["connectivity-constraint"]["service-level"] = self.uuid_services.pm response = test_utils.transportpce_api_rpc_request( @@ -314,9 +356,9 @@ class TransportPCEtesting(unittest.TestCase): input_dict_1 = {'administrative-state': 'LOCKED', 'lifecycle-state': 'PLANNED', 'operational-state': 'DISABLED', - 'service-type': 'POINT_TO_POINT_CONNECTIVITY', - 'service-layer': 'ODU', - 'connectivity-direction': 'BIDIRECTIONAL' + # 'service-type': 'POINT_TO_POINT_CONNECTIVITY', + 'layer-protocol-name': 'ODU', + 'direction': 'BIDIRECTIONAL' } input_dict_2 = {'value-name': 'OpenROADM node id', 'value': 'SPDR-SC1-XPDR1'} @@ -344,11 +386,12 @@ class TransportPCEtesting(unittest.TestCase): # test create connectivity service from spdrA to spdrC for dsr def test_19_create_connectivity_service_DSR(self): # pylint: disable=line-too-long + self.cr_serv_input_data["layer-protocol-name"] = "DSR" self.cr_serv_input_data["end-point"][0]["layer-protocol-name"] = "DSR" - self.cr_serv_input_data["end-point"][0]["service-interface-point"]["service-interface-point-uuid"] = "c14797a0-adcc-3875-a1fe-df8949d1a2d7" + self.cr_serv_input_data["end-point"][0]["service-interface-point"]["service-interface-point-uuid"] = self.sADSR self.cr_serv_input_data["end-point"][1]["layer-protocol-name"] = "DSR" - self.cr_serv_input_data["end-point"][1]["service-interface-point"]["service-interface-point-uuid"] = "25812ef2-625d-3bf8-af55-5e93946d1c22" - self.cr_serv_input_data["connectivity-constraint"]["service-layer"] = "DSR" + self.cr_serv_input_data["end-point"][1]["service-interface-point"]["service-interface-point-uuid"] = self.sZDSR +# self.cr_serv_input_data["connectivity-constraint"]["service-layer"] = "DSR" self.cr_serv_input_data["connectivity-constraint"]["requested-capacity"]["total-size"]["value"] = "10" self.cr_serv_input_data["connectivity-constraint"]["service-level"] = self.uuid_services.odu @@ -363,9 +406,9 @@ class TransportPCEtesting(unittest.TestCase): input_dict_1 = {'administrative-state': 'LOCKED', 'lifecycle-state': 'PLANNED', 'operational-state': 'DISABLED', - 'service-type': 'POINT_TO_POINT_CONNECTIVITY', - 'service-layer': 'DSR', - 'connectivity-direction': 'BIDIRECTIONAL' + # 'service-type': 'POINT_TO_POINT_CONNECTIVITY', + 'layer-protocol-name': 'DSR', + 'direction': 'BIDIRECTIONAL' } input_dict_2 = {'value-name': 'OpenROADM node id', 'value': 'SPDR-SC1-XPDR1'} @@ -401,17 +444,20 @@ class TransportPCEtesting(unittest.TestCase): for ele in liste_service: if ele['uuid'] == self.uuid_services.pm: self.assertEqual(ele['operational-state'], 'ENABLED') - self.assertEqual(ele['service-layer'], 'PHOTONIC_MEDIA') +# self.assertEqual(ele['service-layer'], 'PHOTONIC_MEDIA') + self.assertEqual(ele['layer-protocol-name'], 'PHOTONIC_MEDIA') nbconnection = len(ele['connection']) self.assertEqual(nbconnection, 3, 'There should be 3 connections') elif ele['uuid'] == self.uuid_services.odu: self.assertEqual(ele['operational-state'], 'ENABLED') - self.assertEqual(ele['service-layer'], 'ODU') +# self.assertEqual(ele['service-layer'], 'ODU') + self.assertEqual(ele['layer-protocol-name'], 'ODU') nbconnection = len(ele['connection']) self.assertEqual(nbconnection, 1, 'There should be 1 connections') elif ele['uuid'] == self.uuid_services.dsr: self.assertEqual(ele['operational-state'], 'ENABLED') - self.assertEqual(ele['service-layer'], 'DSR') +# self.assertEqual(ele['service-layer'], 'DSR') + self.assertEqual(ele['layer-protocol-name'], 'DSR') nbconnection = len(ele['connection']) self.assertEqual(nbconnection, 2, 'There should be 2 connections') else: @@ -419,21 +465,21 @@ class TransportPCEtesting(unittest.TestCase): time.sleep(2) def test_22_delete_connectivity_service_DSR(self): - self.del_serv_input_data["service-id-or-name"] = str(self.uuid_services.dsr) + self.del_serv_input_data["uuid"] = str(self.uuid_services.dsr) response = test_utils.transportpce_api_rpc_request( 'tapi-connectivity', 'delete-connectivity-service', self.del_serv_input_data) self.assertIn(response["status_code"], (requests.codes.ok, requests.codes.no_content)) time.sleep(self.WAITING) def test_23_delete_connectivity_service_ODU(self): - self.del_serv_input_data["service-id-or-name"] = str(self.uuid_services.odu) + self.del_serv_input_data["uuid"] = str(self.uuid_services.odu) response = test_utils.transportpce_api_rpc_request( 'tapi-connectivity', 'delete-connectivity-service', self.del_serv_input_data) self.assertIn(response["status_code"], (requests.codes.ok, requests.codes.no_content)) time.sleep(self.WAITING) def test_24_delete_connectivity_service_PhotonicMedia(self): - self.del_serv_input_data["service-id-or-name"] = str(self.uuid_services.pm) + self.del_serv_input_data["uuid"] = str(self.uuid_services.pm) response = test_utils.transportpce_api_rpc_request( 'tapi-connectivity', 'delete-connectivity-service', self.del_serv_input_data) self.assertIn(response["status_code"], (requests.codes.ok, requests.codes.no_content)) diff --git a/tests/transportpce_tests/tapi/test03_tapi_device_change_notifications.py b/tests/transportpce_tests/tapi/test03_tapi_device_change_notifications.py index 0e2626808..5d2364702 100644 --- a/tests/transportpce_tests/tapi/test03_tapi_device_change_notifications.py +++ b/tests/transportpce_tests/tapi/test03_tapi_device_change_notifications.py @@ -31,6 +31,12 @@ class UuidServices: self.odu = None self.dsr = None self.eth = None +# XPDR-A1-XPDR1+XPONDER Uuid is: +# 4378fc29-6408-39ec-8737-5008c3dc49e5 +# XPDR-C1-XPDR1+XPONDER Uuid is: +# 1770bea4-b1da-3b20-abce-7d182c0ec0df +# ROADM-A1+PHOTONIC_MEDIA Uuid is: +# 3b726367-6f2d-3e3f-9033-d99b61459075 class TransportPCEFulltesting(unittest.TestCase): @@ -75,29 +81,41 @@ class TransportPCEFulltesting(unittest.TestCase): } ], "connectivity-constraint": { - "service-layer": "ETH", + # "service-layer": "ETH", "service-type": "POINT_TO_POINT_CONNECTIVITY", "service-level": "Some service-level", "requested-capacity": { "total-size": { "value": "100", - "unit": "GB" + "unit": "tapi-common:CAPACITY_UNIT_GBPS" } } }, - "state": "Some state" + "topology-constraint": [ + { + "local-id": "localIdTopoConstraint", + "name": [ + { + "value-name": "Dumb constraint", + "value": "for debug1" + } + ] + } + ], + "state": "LOCKED", + "layer-protocol-name": "ETH" } - del_serv_input_data = {"service-id-or-name": "TBD"} + del_serv_input_data = {"uuid": "TBD"} - tapi_topo = {"topology-id-or-name": "TBD"} + tapi_topo = {"topology-id": "TBD"} node_details = { - "topology-id-or-name": "TBD", - "node-id-or-name": "TBD" + "topology-id": "TBD", + "node-id": "TBD" } - tapi_serv_details = {"service-id-or-name": "TBD"} + tapi_serv_details = {"uuid": "TBD"} processes = [] uuid_services = UuidServices() @@ -239,9 +257,11 @@ class TransportPCEFulltesting(unittest.TestCase): input_dict_1 = {'administrative-state': 'LOCKED', 'lifecycle-state': 'PLANNED', 'operational-state': 'DISABLED', - 'service-type': 'POINT_TO_POINT_CONNECTIVITY', - 'service-layer': 'ETH', - 'connectivity-direction': 'BIDIRECTIONAL' + # 'service-type': 'POINT_TO_POINT_CONNECTIVITY', + # 'service-layer': 'ETH', + 'layer-protocol-name': 'ETH', + # 'connectivity-direction': 'BIDIRECTIONAL' + 'direction': 'BIDIRECTIONAL' } input_dict_2 = {'value-name': 'OpenROADM node id', 'value': 'XPDR-C1-XPDR1'} @@ -267,7 +287,7 @@ class TransportPCEFulltesting(unittest.TestCase): time.sleep(1) def test_13_get_connectivity_service_Ethernet(self): - self.tapi_serv_details["service-id-or-name"] = str(self.uuid_services.eth) + self.tapi_serv_details["uuid"] = str(self.uuid_services.eth) response = test_utils.transportpce_api_rpc_request( 'tapi-connectivity', 'get-connectivity-service-details', self.tapi_serv_details) self.assertEqual(response['status_code'], requests.codes.ok) @@ -335,11 +355,12 @@ class TransportPCEFulltesting(unittest.TestCase): self.assertEqual(link['org-openroadm-common-network:operational-state'], 'inService') self.assertEqual(link['org-openroadm-common-network:administrative-state'], 'inService') self.assertEqual(nb_updated_link, 2, "Only two xponder-output/input links should have been modified") - time.sleep(1) + time.sleep(10) def test_17_check_update_tapi_neps(self): - self.node_details["topology-id-or-name"] = test_utils.T0_FULL_MULTILAYER_TOPO - self.node_details["node-id-or-name"] = "XPDR-C1-XPDR1+OTSi" + self.node_details["topology-id"] = test_utils.T0_FULL_MULTILAYER_TOPO_UUID +# self.node_details["node-id"] = "XPDR-C1-XPDR1+OTSi" + self.node_details["node-id"] = "1770bea4-b1da-3b20-abce-7d182c0ec0df" response = test_utils.transportpce_api_rpc_request( 'tapi-topology', 'get-node-details', self.node_details) self.assertEqual(response['status_code'], requests.codes.ok) @@ -357,33 +378,34 @@ class TransportPCEFulltesting(unittest.TestCase): "Operational State should be 'ENABLED'") self.assertEqual(nep['administrative-state'], 'UNLOCKED', "Administrative State should be 'UNLOCKED'") - self.node_details["node-id-or-name"] = "XPDR-C1-XPDR1+DSR" - response = test_utils.transportpce_api_rpc_request( - 'tapi-topology', 'get-node-details', self.node_details) - self.assertEqual(response['status_code'], requests.codes.ok) - nep_list = response['output']['node']['owned-node-edge-point'] - for nep in nep_list: - if 'XPDR1-NETWORK1' in nep['name'][0]['value']: - self.assertEqual(nep['operational-state'], 'DISABLED', - "Operational State should be 'DISABLED'") - self.assertEqual(nep['administrative-state'], 'LOCKED', - "Administrative State should be 'LOCKED'") - nb_updated_neps += 1 - else: - self.assertEqual(nep['operational-state'], 'ENABLED', - "Operational State should be 'ENABLED'") - self.assertEqual(nep['administrative-state'], 'UNLOCKED', - "Administrative State should be 'UNLOCKED'") - self.assertEqual(nb_updated_neps, 4, "Only two xponder neps should have been modified") + self.node_details["node-id"] = "XPDR-C1-XPDR1+DSR" +# response = test_utils.transportpce_api_rpc_request( +# 'tapi-topology', 'get-node-details', self.node_details) +# self.assertEqual(response['status_code'], requests.codes.ok) +# nep_list = response['output']['node']['owned-node-edge-point'] +# for nep in nep_list: +# if 'XPDR1-NETWORK1' in nep['name'][0]['value']: +# self.assertEqual(nep['operational-state'], 'DISABLED', +# "Operational State should be 'DISABLED'") +# self.assertEqual(nep['administrative-state'], 'LOCKED', +# "Administrative State should be 'LOCKED'") +# nb_updated_neps += 1 +# else: +# self.assertEqual(nep['operational-state'], 'ENABLED', +# "Operational State should be 'ENABLED'") +# self.assertEqual(nep['administrative-state'], 'UNLOCKED', +# "Administrative State should be 'UNLOCKED'") + self.assertEqual(nb_updated_neps, 3, "3 xponder neps (OTS, OTSI_MC, eODU) should have been modified") time.sleep(1) def test_18_check_update_tapi_links(self): - self.tapi_topo["topology-id-or-name"] = test_utils.T0_FULL_MULTILAYER_TOPO + self.tapi_topo["topology-id"] = test_utils.T0_FULL_MULTILAYER_TOPO_UUID response = test_utils.transportpce_api_rpc_request( 'tapi-topology', 'get-topology-details', self.tapi_topo) time.sleep(2) self.assertEqual(response['status_code'], requests.codes.ok) link_list = response['output']['topology']['link'] + print(response['output']['topology']['link']) nb_updated_link = 0 for link in link_list: if all(x in link['name'][0]['value'] for x in ['XPDR-C1-XPDR1', 'XPDR1-NETWORK1']): @@ -393,8 +415,8 @@ class TransportPCEFulltesting(unittest.TestCase): else: self.assertEqual(link['operational-state'], 'ENABLED') self.assertEqual(link['administrative-state'], 'UNLOCKED') - self.assertEqual(nb_updated_link, 2, - "Only two xponder-output/input & xponder-transi links should have been modified") + self.assertEqual(nb_updated_link, 1, + "Only one xponder-output/input bidirectional link should have been modified") time.sleep(1) def test_19_check_update_service_Ethernet(self): @@ -404,7 +426,8 @@ class TransportPCEFulltesting(unittest.TestCase): self.assertEqual(response['services'][0]['administrative-state'], 'inService') def test_20_check_update_connectivity_service_Ethernet(self): - self.tapi_serv_details["service-id-or-name"] = str(self.uuid_services.eth) + self.tapi_serv_details["uuid"] = str(self.uuid_services.eth) + print(str(self.uuid_services.eth)) response = test_utils.transportpce_api_rpc_request( 'tapi-connectivity', 'get-connectivity-service-details', self.tapi_serv_details) self.assertEqual(response['status_code'], requests.codes.ok) @@ -452,8 +475,9 @@ class TransportPCEFulltesting(unittest.TestCase): time.sleep(1) def test_24_check_update_tapi_neps_ok(self): - self.node_details["topology-id-or-name"] = test_utils.T0_FULL_MULTILAYER_TOPO - self.node_details["node-id-or-name"] = "XPDR-C1-XPDR1+OTSi" + self.node_details["topology-id"] = test_utils.T0_FULL_MULTILAYER_TOPO_UUID +# self.node_details["node-id"] = "XPDR-C1-XPDR1+OTSi" + self.node_details["node-id"] = "1770bea4-b1da-3b20-abce-7d182c0ec0df" response = test_utils.transportpce_api_rpc_request( 'tapi-topology', 'get-node-details', self.node_details) self.assertEqual(response['status_code'], requests.codes.ok) @@ -464,20 +488,20 @@ class TransportPCEFulltesting(unittest.TestCase): self.assertEqual(nep['administrative-state'], 'UNLOCKED', "Administrative State should be 'UNLOCKED'") - self.node_details["node-id-or-name"] = "XPDR-C1-XPDR1+DSR" - response = test_utils.transportpce_api_rpc_request( - 'tapi-topology', 'get-node-details', self.node_details) - self.assertEqual(response['status_code'], requests.codes.ok) - nep_list = response['output']['node']['owned-node-edge-point'] - for nep in nep_list: - self.assertEqual(nep['operational-state'], 'ENABLED', - "Operational State should be 'ENABLED'") - self.assertEqual(nep['administrative-state'], 'UNLOCKED', - "Administrative State should be 'UNLOCKED'") +# self.node_details["node-id"] = "XPDR-C1-XPDR1+DSR" +# response = test_utils.transportpce_api_rpc_request( +# 'tapi-topology', 'get-node-details', self.node_details) +# self.assertEqual(response['status_code'], requests.codes.ok) +# nep_list = response['output']['node']['owned-node-edge-point'] +# for nep in nep_list: +# self.assertEqual(nep['operational-state'], 'ENABLED', +# "Operational State should be 'ENABLED'") +# self.assertEqual(nep['administrative-state'], 'UNLOCKED', +# "Administrative State should be 'UNLOCKED'") time.sleep(1) def test_25_check_update_tapi_links_ok(self): - self.tapi_topo["topology-id-or-name"] = test_utils.T0_FULL_MULTILAYER_TOPO + self.tapi_topo["topology-id"] = test_utils.T0_FULL_MULTILAYER_TOPO_UUID response = test_utils.transportpce_api_rpc_request( 'tapi-topology', 'get-topology-details', self.tapi_topo) time.sleep(2) @@ -557,8 +581,9 @@ class TransportPCEFulltesting(unittest.TestCase): time.sleep(1) def test_31_check_update_tapi_neps(self): - self.node_details["topology-id-or-name"] = test_utils.T0_FULL_MULTILAYER_TOPO - self.node_details["node-id-or-name"] = "ROADM-A1+PHOTONIC_MEDIA" + self.node_details["topology-id"] = test_utils.T0_FULL_MULTILAYER_TOPO_UUID +# self.node_details["node-id"] = "ROADM-A1+PHOTONIC_MEDIA" + self.node_details["node-id"] = "3b726367-6f2d-3e3f-9033-d99b61459075" response = test_utils.transportpce_api_rpc_request( 'tapi-topology', 'get-node-details', self.node_details) self.assertEqual(response['status_code'], requests.codes.ok) @@ -576,11 +601,11 @@ class TransportPCEFulltesting(unittest.TestCase): "Operational State should be 'ENABLED'") self.assertEqual(nep['administrative-state'], 'UNLOCKED', "Administrative State should be 'UNLOCKED'") - self.assertEqual(nb_updated_neps, 3, "Only three roadm neps should have been modified") + self.assertEqual(nb_updated_neps, 2, "Only 2 roadm SRG-PP nep (OTS/MC)should have been modified") time.sleep(1) def test_32_check_update_tapi_links(self): - self.tapi_topo["topology-id-or-name"] = test_utils.T0_FULL_MULTILAYER_TOPO + self.tapi_topo["topology-id"] = test_utils.T0_FULL_MULTILAYER_TOPO_UUID response = test_utils.transportpce_api_rpc_request( 'tapi-topology', 'get-topology-details', self.tapi_topo) time.sleep(2) @@ -631,8 +656,9 @@ class TransportPCEFulltesting(unittest.TestCase): self.test_23_check_update_openroadm_topo_ok() def test_38_check_update_tapi_neps_ok(self): - self.node_details["topology-id-or-name"] = test_utils.T0_FULL_MULTILAYER_TOPO - self.node_details["node-id-or-name"] = "ROADM-A1+PHOTONIC_MEDIA" + self.node_details["topology-id"] = test_utils.T0_FULL_MULTILAYER_TOPO_UUID +# self.node_details["node-id"] = "ROADM-A1+PHOTONIC_MEDIA" + self.node_details["node-id"] = "3b726367-6f2d-3e3f-9033-d99b61459075" response = test_utils.transportpce_api_rpc_request( 'tapi-topology', 'get-node-details', self.node_details) self.assertEqual(response['status_code'], requests.codes.ok) @@ -718,8 +744,9 @@ class TransportPCEFulltesting(unittest.TestCase): time.sleep(1) def test_45_check_update_tapi_neps(self): - self.node_details["topology-id-or-name"] = test_utils.T0_FULL_MULTILAYER_TOPO - self.node_details["node-id-or-name"] = "ROADM-A1+PHOTONIC_MEDIA" + self.node_details["topology-id"] = test_utils.T0_FULL_MULTILAYER_TOPO_UUID +# self.node_details["node-id"] = "ROADM-A1+PHOTONIC_MEDIA" + self.node_details["node-id"] = "3b726367-6f2d-3e3f-9033-d99b61459075" response = test_utils.transportpce_api_rpc_request( 'tapi-topology', 'get-node-details', self.node_details) self.assertEqual(response['status_code'], requests.codes.ok) @@ -737,11 +764,11 @@ class TransportPCEFulltesting(unittest.TestCase): "Operational State should be 'ENABLED'") self.assertEqual(nep['administrative-state'], 'UNLOCKED', "Administrative State should be 'UNLOCKED'") - self.assertEqual(nb_updated_neps, 3, "Only three roadm neps should have been modified") + self.assertEqual(nb_updated_neps, 4, "4 roadm NEPS should have been modified (OTS/OMS/MC/OTSI_MC") time.sleep(1) def test_46_check_update_tapi_links(self): - self.tapi_topo["topology-id-or-name"] = test_utils.T0_FULL_MULTILAYER_TOPO + self.tapi_topo["topology-id"] = test_utils.T0_FULL_MULTILAYER_TOPO_UUID response = test_utils.transportpce_api_rpc_request( 'tapi-topology', 'get-topology-details', self.tapi_topo) time.sleep(2) @@ -853,8 +880,9 @@ class TransportPCEFulltesting(unittest.TestCase): time.sleep(1) def test_59_check_update_tapi_neps(self): - self.node_details["topology-id-or-name"] = test_utils.T0_FULL_MULTILAYER_TOPO - self.node_details["node-id-or-name"] = "ROADM-A1+PHOTONIC_MEDIA" + self.node_details["topology-id"] = test_utils.T0_FULL_MULTILAYER_TOPO_UUID +# self.node_details["node-id"] = uuid.UUID(bytes="ROADM-A1+PHOTONIC_MEDIA".bytes) + self.node_details["node-id"] = "3b726367-6f2d-3e3f-9033-d99b61459075" response = test_utils.transportpce_api_rpc_request( 'tapi-topology', 'get-node-details', self.node_details) self.assertEqual(response['status_code'], requests.codes.ok) @@ -872,11 +900,11 @@ class TransportPCEFulltesting(unittest.TestCase): "Operational State should be 'ENABLED'") self.assertEqual(nep['administrative-state'], 'UNLOCKED', "Administrative State should be 'UNLOCKED'") - self.assertEqual(nb_updated_neps, 3, "Only three roadm neps should have been modified") + self.assertEqual(nb_updated_neps, 1, "Only 1 roadm neps OTS should have been modified for SRG2PP") time.sleep(1) def test_60_check_update_tapi_links(self): - self.tapi_topo["topology-id-or-name"] = test_utils.T0_FULL_MULTILAYER_TOPO + self.tapi_topo["topology-id"] = test_utils.T0_FULL_MULTILAYER_TOPO_UUID response = test_utils.transportpce_api_rpc_request( 'tapi-topology', 'get-topology-details', self.tapi_topo) time.sleep(2) @@ -902,7 +930,7 @@ class TransportPCEFulltesting(unittest.TestCase): self.test_13_get_connectivity_service_Ethernet() def test_63_delete_connectivity_service_Ethernet(self): - self.del_serv_input_data["service-id-or-name"] = str(self.uuid_services.eth) + self.del_serv_input_data["uuid"] = str(self.uuid_services.eth) response = test_utils.transportpce_api_rpc_request( 'tapi-connectivity', 'delete-connectivity-service', self.del_serv_input_data) self.assertIn(response['status_code'], (requests.codes.ok, requests.codes.no_content)) -- 2.36.6