Check if existing Pnf is related to service instance 54/107954/4
authormharazin <mateusz.harazin@nokia.com>
Wed, 20 May 2020 10:55:36 +0000 (12:55 +0200)
committerLukasz Muszkieta <lukasz.muszkieta@nokia.com>
Thu, 21 May 2020 08:14:11 +0000 (08:14 +0000)
Issue-ID: SO-2937
Signed-off-by: Mateusz Harazin <mateusz.harazin@nokia.com>
Change-Id: I3e1e8b7534c1ffa36b0383b52ca9ea547f5bac7e

bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/AAIPnfResources.java
bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAIPnfResourcesTest.java
bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/aaiPnf.json [new file with mode: 0644]

index b8562ba..7184bba 100644 (file)
@@ -22,6 +22,9 @@ package org.onap.so.client.orchestration;
 
 import com.google.common.base.Strings;
 import java.util.Optional;
+import org.onap.aai.domain.yang.RelatedToProperty;
+import org.onap.aai.domain.yang.Relationship;
+import org.onap.aai.domain.yang.RelationshipData;
 import org.onap.so.bpmn.common.InjectionHelper;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.Pnf;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
@@ -68,8 +71,15 @@ public class AAIPnfResources {
     public void checkIfPnfExistsInAaiAndCanBeUsed(String pnfName) throws Exception {
         Optional<org.onap.aai.domain.yang.Pnf> pnfFromAai = injectionHelper.getAaiClient()
                 .get(org.onap.aai.domain.yang.Pnf.class, AAIUriFactory.createResourceUri(AAIObjectType.PNF, pnfName));
-        if (pnfFromAai.isPresent() && isOrchestrationStatusSet(pnfFromAai.get())) {
-            checkOrchestrationStatusOfExistingPnf(pnfFromAai.get());
+        if (pnfFromAai.isPresent()) {
+            checkIfPnfCanBeUsed(pnfFromAai.get());
+        }
+    }
+
+    private void checkIfPnfCanBeUsed(org.onap.aai.domain.yang.Pnf pnfFromAai) throws Exception {
+        isRelatedToService(pnfFromAai);
+        if (isOrchestrationStatusSet(pnfFromAai)) {
+            checkOrchestrationStatusOfExistingPnf(pnfFromAai);
         }
     }
 
@@ -92,7 +102,39 @@ public class AAIPnfResources {
                     pnfFromAai.getPnfName(), pnfFromAai.getOrchestrationStatus());
             logger.error(errorMessage);
             throw new Exception(errorMessage);
+        }
+    }
 
+    private void isRelatedToService(org.onap.aai.domain.yang.Pnf pnfFromAai) throws Exception {
+        if (pnfFromAai.getRelationshipList() != null) {
+            for (Relationship relationship : pnfFromAai.getRelationshipList().getRelationship()) {
+                if (relationship.getRelatedTo().equals("service-instance")) {
+                    String errorMessage = prepareRelationErrorMessage(pnfFromAai, relationship);
+                    logger.error(errorMessage);
+                    throw new Exception(errorMessage);
+                }
+            }
+        }
+    }
+
+    private String prepareRelationErrorMessage(org.onap.aai.domain.yang.Pnf pnfFromAai, Relationship relationship) {
+        String serviceInstanceName = "";
+        String serviceInstanceId = "";
+
+        for (RelationshipData relationshipData : relationship.getRelationshipData()) {
+            if (relationshipData.getRelationshipKey().equals("service-instance.service-instance-id")) {
+                serviceInstanceId = relationshipData.getRelationshipValue();
+                break;
+            }
+        }
+        for (RelatedToProperty relatedToProperty : relationship.getRelatedToProperty()) {
+            if (relatedToProperty.getPropertyKey().equals("service-instance.service-instance-name")) {
+                serviceInstanceName = relatedToProperty.getPropertyValue();
+                break;
+            }
         }
+        return String.format(
+                "Pnf with name %s exist with orchestration status %s and is related to %s service with certain service-instance-id: %s",
+                pnfFromAai.getPnfName(), pnfFromAai.getOrchestrationStatus(), serviceInstanceName, serviceInstanceId);
     }
 }
index 15c4b48..5e9b4c7 100644 (file)
@@ -29,7 +29,10 @@ import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
+import java.io.File;
+import java.io.IOException;
 import java.util.Optional;
+import com.fasterxml.jackson.databind.ObjectMapper;
 import joptsimple.internal.Strings;
 import org.junit.Before;
 import org.junit.Test;
@@ -151,6 +154,27 @@ public class AAIPnfResourcesTest extends TestDataSetup {
         }
     }
 
+    @Test
+    public void existingPnfInAaiIsRelatedToService() throws IOException {
+        // given
+        final String relatedTo = "service-instance";
+        final String serviceInstanceId = "service-instance-id";
+        final String path = "src/test/resources/__files/BuildingBlocks/aaiPnf.json";
+        org.onap.aai.domain.yang.Pnf pnfFromAai =
+                new ObjectMapper().readValue(new File(path), org.onap.aai.domain.yang.Pnf.class);
+        when(injectionHelperMock.getAaiClient().get(org.onap.aai.domain.yang.Pnf.class,
+                AAIUriFactory.createResourceUri(AAIObjectType.PNF, PNF_NAME))).thenReturn(Optional.of(pnfFromAai));
+        // when
+        try {
+            testedObject.checkIfPnfExistsInAaiAndCanBeUsed(PNF_NAME);
+        } catch (Exception e) {
+            // then
+            assertThat(e.getMessage()).isEqualTo(String.format(
+                    "Pnf with name %s exist with orchestration status %s and is related to %s service with certain service-instance-id: %s",
+                    PNF_NAME, OrchestrationStatus.ACTIVE, relatedTo, serviceInstanceId));
+        }
+    }
+
     private org.onap.aai.domain.yang.Pnf createPnf(String orchestrationStatus) {
         org.onap.aai.domain.yang.Pnf pnfFromAai = new org.onap.aai.domain.yang.Pnf();
         pnfFromAai.setPnfName(PNF_NAME);
diff --git a/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/aaiPnf.json b/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/aaiPnf.json
new file mode 100644 (file)
index 0000000..c4600d9
--- /dev/null
@@ -0,0 +1,31 @@
+{
+  "pnfName": "pnfTest",
+  "pnfId": "pnfId",
+  "orchestrationStatus": "Active",
+  "resourceVersion": "resourceVersion",
+  "relationshipList": {
+    "relationship": [
+      {
+        "relatedTo": "service-instance",
+        "relationshipLabel": "org.onap.relationships.inventory.ComposedOf",
+        "relatedLink": "relatedLink",
+        "relationshipData": [
+          {
+            "relationshipKey": "relationshipKey",
+            "relationshipValue": "relationshipValue"
+          },
+          {
+            "relationshipKey": "service-instance.service-instance-id",
+            "relationshipValue": "service-instance-id"
+          }
+        ],
+        "relatedToProperty": [
+          {
+            "propertyKey": "service-instance.service-instance-name",
+            "propertyValue": "service-instance"
+          }
+        ]
+      }
+    ]
+  }
+}