Move serviceType affectation to common 10/96910/6
authorGilles Thouenon <gilles.thouenon@orange.com>
Thu, 17 Jun 2021 13:31:12 +0000 (15:31 +0200)
committerGilles Thouenon <gilles.thouenon@orange.com>
Fri, 30 Jul 2021 15:15:40 +0000 (17:15 +0200)
ServiceType is needed by both PCE and Renderer. It makes sence to get it
easily from common module instead of duplicating the treatment to obtain
it from the service-create rpc inputs.
Add also specific getOtnServiceType method for otn-services.

JIRA: TRNSPRTPCE-488
Signed-off-by: Gilles Thouenon <gilles.thouenon@orange.com>
Change-Id: Ie51255620623fb3e3030b25d1f6343455e427adb

common/src/main/java/org/opendaylight/transportpce/common/service/ServiceTypes.java [new file with mode: 0644]
pce/src/main/java/org/opendaylight/transportpce/pce/networkanalyzer/PceCalculation.java
tests/transportpce_tests/7.1/test_pce_400G.py

diff --git a/common/src/main/java/org/opendaylight/transportpce/common/service/ServiceTypes.java b/common/src/main/java/org/opendaylight/transportpce/common/service/ServiceTypes.java
new file mode 100644 (file)
index 0000000..3a10d11
--- /dev/null
@@ -0,0 +1,126 @@
+/*
+ * Copyright © 2021 Orange, Inc. and others.  All rights reserved.
+ *
+ * This program and the accompanying materials are made available under the
+ * terms of the Eclipse Public License v1.0 which accompanies this distribution,
+ * and is available at http://www.eclipse.org/legal/epl-v10.html
+ */
+
+package org.opendaylight.transportpce.common.service;
+
+import org.opendaylight.transportpce.common.StringConstants;
+import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.portmapping.rev210426.mapping.Mapping;
+import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.PortQual;
+import org.opendaylight.yangtools.yang.common.Uint32;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public final class ServiceTypes {
+    private static final Logger LOG = LoggerFactory.getLogger(ServiceTypes.class);
+
+    private ServiceTypes() {
+    }
+
+    public static String getServiceType(String serviceFormat, Uint32 serviceRate, Mapping mapping) {
+        String serviceType = null;
+        if ("Ethernet".equals(serviceFormat)) {
+            switch (serviceRate.intValue()) {
+                case 1:
+                    serviceType = StringConstants.SERVICE_TYPE_1GE;
+                    break;
+                case 10:
+                    serviceType = StringConstants.SERVICE_TYPE_10GE;
+                    break;
+                case 100:
+                    serviceType = StringConstants.SERVICE_TYPE_100GE_T;
+                    if (mapping != null && PortQual.SwitchClient.getName().equals(mapping.getPortQual())) {
+                        serviceType = StringConstants.SERVICE_TYPE_100GE_M;
+                    }
+                    break;
+                case 400:
+                    serviceType = StringConstants.SERVICE_TYPE_400GE;
+                    break;
+                default:
+                    LOG.warn("Invalid service-rate {}", serviceRate);
+                    break;
+            }
+        }
+        if ("OC".equals(serviceFormat) && Uint32.valueOf(100).equals(serviceRate)) {
+            serviceType = StringConstants.SERVICE_TYPE_100GE_T;
+        }
+        if ("OTU".equals(serviceFormat)) {
+            switch (serviceRate.intValue()) {
+                case 100:
+                    serviceType = StringConstants.SERVICE_TYPE_OTU4;
+                    break;
+                case 400:
+                    serviceType = StringConstants.SERVICE_TYPE_OTUC4;
+                    break;
+                default:
+                    LOG.warn("Invalid service-rate {}", serviceRate);
+                    break;
+            }
+        }
+        if ("ODU".equals(serviceFormat)) {
+            switch (serviceRate.intValue()) {
+                case 100:
+                    serviceType = StringConstants.SERVICE_TYPE_ODU4;
+                    break;
+                case 400:
+                    serviceType = StringConstants.SERVICE_TYPE_ODUC4;
+                    break;
+                default:
+                    LOG.warn("Invalid service-rate {}", serviceRate);
+                    break;
+            }
+        }
+        return serviceType;
+    }
+
+    public static String getOtnServiceType(String serviceFormat, Uint32 serviceRate) {
+        String serviceType = null;
+        if ("Ethernet".equals(serviceFormat)) {
+            switch (serviceRate.intValue()) {
+                case 1:
+                    serviceType = StringConstants.SERVICE_TYPE_1GE;
+                    break;
+                case 10:
+                    serviceType = StringConstants.SERVICE_TYPE_10GE;
+                    break;
+                case 100:
+                    serviceType = StringConstants.SERVICE_TYPE_100GE_M;
+                    break;
+                default:
+                    LOG.warn("Invalid service-rate {}", serviceRate);
+                    break;
+            }
+        }
+        if ("OTU".equals(serviceFormat)) {
+            switch (serviceRate.intValue()) {
+                case 100:
+                    serviceType = StringConstants.SERVICE_TYPE_OTU4;
+                    break;
+                case 400:
+                    serviceType = StringConstants.SERVICE_TYPE_OTUC4;
+                    break;
+                default:
+                    LOG.warn("Invalid service-rate {}", serviceRate);
+                    break;
+            }
+        }
+        if ("ODU".equals(serviceFormat)) {
+            switch (serviceRate.intValue()) {
+                case 100:
+                    serviceType = StringConstants.SERVICE_TYPE_ODU4;
+                    break;
+                case 400:
+                    serviceType = StringConstants.SERVICE_TYPE_ODUC4;
+                    break;
+                default:
+                    LOG.warn("Invalid service-rate {}", serviceRate);
+                    break;
+            }
+        }
+        return serviceType;
+    }
+}
index 3dc3e41f362c728968c829507e201cc09cda7507..d48c0e2d86744e82ae5dc7adc2932ca9054c954a 100644 (file)
@@ -27,6 +27,7 @@ import org.opendaylight.transportpce.common.mapping.MappingUtils;
 import org.opendaylight.transportpce.common.mapping.MappingUtilsImpl;
 import org.opendaylight.transportpce.common.mapping.PortMapping;
 import org.opendaylight.transportpce.common.network.NetworkTransactionService;
+import org.opendaylight.transportpce.common.service.ServiceTypes;
 import org.opendaylight.transportpce.pce.PceComplianceCheck;
 import org.opendaylight.transportpce.pce.constraints.PceConstraints;
 import org.opendaylight.yang.gen.v1.http.org.opendaylight.transportpce.pce.rev210701.PathComputationRequestInput;
@@ -36,7 +37,6 @@ import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.network.rev200529.Node1;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.common.state.types.rev191129.State;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.NodeTypes;
-import org.opendaylight.yang.gen.v1.http.org.openroadm.device.types.rev191129.PortQual;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.OpenroadmLinkType;
 import org.opendaylight.yang.gen.v1.http.org.openroadm.network.types.rev200529.OpenroadmNodeType;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.rev180226.NetworkId;
@@ -49,6 +49,7 @@ 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.Network1;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.network.topology.rev180226.networks.network.Link;
 import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.Uint32;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -64,7 +65,7 @@ public class PceCalculation {
     private String serviceFormatA = "";
     private String serviceFormatZ = "";
     private String serviceType = "";
-    private Long serviceRate = 0L;
+    private Uint32 serviceRate = Uint32.valueOf(0);
 
     private PceConstraints pceHardConstraints;
 
@@ -136,11 +137,20 @@ public class PceCalculation {
         }
         serviceFormatA = input.getServiceAEnd().getServiceFormat().getName();
         serviceFormatZ = input.getServiceZEnd().getServiceFormat().getName();
-        serviceRate = input.getServiceAEnd().getServiceRate().toJava();
+        serviceRate = input.getServiceAEnd().getServiceRate();
+        if (NodeTypes.Xpdr.equals(portMapping.getNode(input.getServiceAEnd().getNodeId()).getNodeInfo().getNodeType())
+            && input.getServiceAEnd().getTxDirection() != null
+            && input.getServiceAEnd().getTxDirection().getPort() != null
+            && input.getServiceAEnd().getTxDirection().getPort().getPortName() != null) {
+            Mapping mapping = portMapping.getMapping(input.getServiceAEnd().getNodeId(),
+                input.getServiceAEnd().getTxDirection().getPort().getPortName());
+            serviceType = ServiceTypes.getServiceType(serviceFormatA, serviceRate, mapping);
+        } else {
+            serviceType = ServiceTypes.getServiceType(serviceFormatA, serviceRate, null);
+        }
 
         LOG.info("parseInput: A and Z :[{}] and [{}]", anodeId, znodeId);
 
-        setServiceType();
         getAZnodeId();
 
         returnStructure.setRate(input.getServiceAEnd().getServiceRate().toJava());
@@ -162,71 +172,6 @@ public class PceCalculation {
         }
     }
 
-    private void setServiceType() {
-        if ("Ethernet".equals(serviceFormatA)) {
-            switch (serviceRate.intValue()) {
-                case 1:
-                    serviceType = StringConstants.SERVICE_TYPE_1GE;
-                    break;
-                case 10:
-                    serviceType = StringConstants.SERVICE_TYPE_10GE;
-                    break;
-                case 100:
-                    serviceType = StringConstants.SERVICE_TYPE_100GE_T;
-                    if (NodeTypes.Xpdr.equals(portMapping.getNode(input.getServiceAEnd().getNodeId())
-                        .getNodeInfo().getNodeType())) {
-                        if (input.getServiceAEnd().getTxDirection() != null
-                            && input.getServiceAEnd().getTxDirection().getPort() != null
-                            && input.getServiceAEnd().getTxDirection().getPort().getPortName() != null) {
-                            String lcp = input.getServiceAEnd().getTxDirection().getPort().getPortName();
-                            if (portMapping.getMapping(input.getServiceAEnd().getNodeId(), lcp) != null) {
-                                Mapping mapping = portMapping.getMapping(input.getServiceAEnd().getNodeId(), lcp);
-                                if (PortQual.SwitchClient.getName().equals(mapping.getPortQual())) {
-                                    serviceType = StringConstants.SERVICE_TYPE_100GE_M;
-                                }
-                            }
-                        }
-                    }
-                    break;
-                case 400:
-                    serviceType = StringConstants.SERVICE_TYPE_400GE;
-                    break;
-                default:
-                    LOG.warn("Invalid service-rate {}", serviceRate);
-                    break;
-            }
-        }
-        if ("OC".equals(serviceFormatA) && Long.valueOf(100L).equals(serviceRate)) {
-            serviceType = StringConstants.SERVICE_TYPE_100GE_T;
-        }
-        if ("OTU".equals(serviceFormatA)) {
-            switch (serviceRate.intValue()) {
-                case 100:
-                    serviceType = StringConstants.SERVICE_TYPE_OTU4;
-                    break;
-                case 400:
-                    serviceType = StringConstants.SERVICE_TYPE_OTUC4;
-                    break;
-                default:
-                    LOG.warn("Invalid service-rate {}", serviceRate);
-                    break;
-            }
-        }
-        if ("ODU".equals(serviceFormatA)) {
-            switch (serviceRate.intValue()) {
-                case 100:
-                    serviceType = StringConstants.SERVICE_TYPE_ODU4;
-                    break;
-                case 400:
-                    serviceType = StringConstants.SERVICE_TYPE_ODUC4;
-                    break;
-                default:
-                    LOG.warn("Invalid service-rate {}", serviceRate);
-                    break;
-            }
-        }
-    }
-
     private boolean readMdSal() {
         InstanceIdentifier<Network> nwInstanceIdentifier = null;
         switch (serviceType) {
index a8a563e49ef3285f52f38587c9e0514b97556e06..2979105ec965c476168b094187db0158139a3a8c 100644 (file)
@@ -182,11 +182,11 @@ class TransportPCE400Gtesting(unittest.TestCase):
     def test_07_path_computation_ODUC4_xpdr_bi(self):
         response = test_utils.path_computation_request("request-1", "service-ODUC4",
                                                        {"service-rate": "400", "clli": "NodeA", "service-format": "ODU",
-                                                           "node-id": "XPDR-A2-XPDR2",
+                                                           "node-id": "XPDR-A2",
                                                            "tx-direction": {"port": {"port-device-name": "XPDR-A2-XPDR2"}}
                                                        },
                                                        {"service-rate": "400", "clli": "NodeC", "service-format": "ODU",
-                                                           "node-id": "XPDR-C2-XPDR2",
+                                                           "node-id": "XPDR-C2",
                                                            "tx-direction": {"port": {"port-device-name": "XPDR-C2-XPDR2"}}
                                                        })
         self.assertEqual(response.status_code, requests.codes.ok)