Merge "Bug 637 NSD-level IP Profiles not working in mgmt-network fix single for loop... feature7106
authortierno <alfonso.tiernosepulveda@telefonica.com>
Thu, 4 Apr 2019 14:07:55 +0000 (16:07 +0200)
committerGerrit Code Review <root@osm.etsi.org>
Thu, 4 Apr 2019 14:07:55 +0000 (16:07 +0200)
osm_nbi/descriptor_topics.py
osm_nbi/tests/test.py

index eef2ca4..a1c3c15 100644 (file)
@@ -527,7 +527,17 @@ class VnfdTopic(DescriptorTopic):
                 if not self._validate_package_folders(storage_params, 'charms'):
                     raise EngineException("Charm defined in vnf[id={}] but not present in "
                                           "package".format(indata["id"]))
+        vld_names = []  # For detection of duplicated VLD names
         for ivld in get_iterable(indata.get("internal-vld")):
+            # BEGIN Detection of duplicated VLD names
+            ivld_name = ivld["name"]
+            if ivld_name in vld_names:
+                raise EngineException("Duplicated VLD name '{}' in vnfd[id={}]:internal-vld[id={}]"
+                                      .format(ivld["name"], indata["id"], ivld["id"]),
+                                      http_code=HTTPStatus.UNPROCESSABLE_ENTITY)
+            else:
+                vld_names.append(ivld_name)
+            # END Detection of duplicated VLD names
             for icp in get_iterable(ivld.get("internal-connection-point")):
                 icp_mark = False
                 for vdu in get_iterable(indata.get("vdu")):
index 6bb04d9..5d6a487 100755 (executable)
@@ -1813,7 +1813,20 @@ class TestDescriptors:
 
         queries = ["mgmt-interface.cp=mgmt", "vdu.0.interface.0.external-connection-point-ref=mgmt",
                    "vdu.0.interface.1.internal-connection-point-ref=internal",
-                   "internal-vld.0.internal-connection-point.0.id-ref=internal"]
+                   "internal-vld.0.internal-connection-point.0.id-ref=internal",
+                   # Detection of duplicated VLD names in VNF Descriptors
+                   # URL: internal-vld=[
+                   #        {id: internal1, name: internal, type:ELAN,
+                   #            internal-connection-point: [{id-ref: mgmtVM-internal}, {id-ref: dataVM-internal}]},
+                   #        {id: internal2, name: internal, type:ELAN,
+                   #            internal-connection-point: [{id-ref: mgmtVM-internal}, {id-ref: dataVM-internal}]}
+                   #        ]
+                   "internal-vld=%5B%7Bid%3A%20internal1%2C%20name%3A%20internal%2C%20type%3A%20ELAN%2C%20"
+                   "internal-connection-point%3A%20%5B%7Bid-ref%3A%20mgmtVM-internal%7D%2C%20%7Bid-ref%3A%20"
+                   "dataVM-internal%7D%5D%7D%2C%20%7Bid%3A%20internal2%2C%20name%3A%20internal%2C%20type%3A%20"
+                   "ELAN%2C%20internal-connection-point%3A%20%5B%7Bid-ref%3A%20mgmtVM-internal%7D%2C%20%7B"
+                   "id-ref%3A%20dataVM-internal%7D%5D%7D%5D"
+                   ]
         for query in queries:
             engine.test("Upload invalid VNFD ", "PUT",
                         "/vnfpkgm/v1/vnf_packages/{}/package_content?{}".format(self.vnfd_id, query),