aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/AAIPnfResources.java46
-rw-r--r--bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAIPnfResourcesTest.java24
-rw-r--r--bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/aaiPnf.json31
3 files changed, 99 insertions, 2 deletions
diff --git a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/AAIPnfResources.java b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/AAIPnfResources.java
index b8562ba6b5..7184bba377 100644
--- a/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/AAIPnfResources.java
+++ b/bpmn/so-bpmn-tasks/src/main/java/org/onap/so/client/orchestration/AAIPnfResources.java
@@ -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);
}
}
diff --git a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAIPnfResourcesTest.java b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAIPnfResourcesTest.java
index 15c4b48d66..5e9b4c7592 100644
--- a/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAIPnfResourcesTest.java
+++ b/bpmn/so-bpmn-tasks/src/test/java/org/onap/so/client/orchestration/AAIPnfResourcesTest.java
@@ -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
index 0000000000..c4600d94a0
--- /dev/null
+++ b/bpmn/so-bpmn-tasks/src/test/resources/__files/BuildingBlocks/aaiPnf.json
@@ -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"
+ }
+ ]
+ }
+ ]
+ }
+}