Ensure that model related parameters are set when re-using Inventoried PNF instance 97/110797/4
authorJerzySzachniewicz <jerzy.szachniewicz@nokia.com>
Fri, 31 Jul 2020 06:18:58 +0000 (08:18 +0200)
committerJerzySzachniewicz <jerzy.szachniewicz@nokia.com>
Tue, 4 Aug 2020 06:18:19 +0000 (08:18 +0200)
Issue-ID: SO-3110
Signed-off-by: JerzySzachniewicz <jerzy.szachniewicz@nokia.com>
Change-Id: I79834c0b3b756cc64d98fb10acab8e93a15c6f2b
Signed-off-by: JerzySzachniewicz <jerzy.szachniewicz@nokia.com>
bpmn/so-bpmn-tasks/src/main/java/org/onap/so/bpmn/infrastructure/aai/tasks/AAICreateTasks.java
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
pom.xml

index e3181c3..55edf0b 100644 (file)
@@ -260,7 +260,7 @@ public class AAICreateTasks {
     public void createPnf(BuildingBlockExecution execution) {
         try {
             Pnf pnf = extractPojosForBB.extractByKey(execution, ResourceKey.PNF);
-            aaiPnfResources.checkIfPnfExistsInAaiAndCanBeUsed(pnf.getPnfName());
+            aaiPnfResources.checkIfPnfExistsInAaiAndCanBeUsed(pnf);
             ServiceInstance serviceInstance =
                     extractPojosForBB.extractByKey(execution, ResourceKey.SERVICE_INSTANCE_ID);
             aaiPnfResources.createPnfAndConnectServiceInstance(pnf, serviceInstance);
index 3b22cd9..3da1719 100644 (file)
@@ -22,6 +22,7 @@ package org.onap.so.client.orchestration;
 
 import com.google.common.base.Strings;
 import java.util.Optional;
+import org.apache.commons.lang3.StringUtils;
 import org.onap.aai.domain.yang.RelatedToProperty;
 import org.onap.aai.domain.yang.Relationship;
 import org.onap.aai.domain.yang.RelationshipData;
@@ -68,11 +69,39 @@ public class AAIPnfResources {
         injectionHelper.getAaiClient().update(pnfURI, aaiObjectMapper.mapPnf(pnfCopy));
     }
 
-    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));
+    public void checkIfPnfExistsInAaiAndCanBeUsed(Pnf pnf) throws Exception {
+        Optional<org.onap.aai.domain.yang.Pnf> pnfFromAai =
+                injectionHelper.getAaiClient().get(org.onap.aai.domain.yang.Pnf.class,
+                        AAIUriFactory.createResourceUri(AAIObjectType.PNF, pnf.getPnfName()));
         if (pnfFromAai.isPresent()) {
             checkIfPnfCanBeUsed(pnfFromAai.get());
+            updatePnfInAAI(pnf, pnfFromAai.get());
+        }
+    }
+
+    private void updatePnfInAAI(Pnf pnf, org.onap.aai.domain.yang.Pnf pnfFromAai) {
+        updatePnfFields(pnf, pnfFromAai);
+        injectionHelper.getAaiClient().update(AAIUriFactory.createResourceUri(AAIObjectType.PNF, pnf.getPnfName()),
+                pnfFromAai);
+        logger.debug("updatePnfInAAI: {}", pnfFromAai);
+    }
+
+    private void updatePnfFields(Pnf pnf, org.onap.aai.domain.yang.Pnf pnfFromAai) {
+        if (pnf.getModelInfoPnf() != null
+                && StringUtils.isNotBlank(pnf.getModelInfoPnf().getModelCustomizationUuid())) {
+            pnfFromAai.setModelCustomizationId(pnf.getModelInfoPnf().getModelCustomizationUuid());
+        }
+        if (pnf.getModelInfoPnf() != null && StringUtils.isNotBlank(pnf.getModelInfoPnf().getModelInvariantUuid())) {
+            pnfFromAai.setModelInvariantId(pnf.getModelInfoPnf().getModelInvariantUuid());
+        }
+        if (pnf.getModelInfoPnf() != null && StringUtils.isNotBlank(pnf.getModelInfoPnf().getModelUuid())) {
+            pnfFromAai.setModelVersionId(pnf.getModelInfoPnf().getModelUuid());
+        }
+        if (pnf.getOrchestrationStatus() != null && StringUtils.isNotBlank(pnf.getOrchestrationStatus().toString())) {
+            pnfFromAai.setOrchestrationStatus(pnf.getOrchestrationStatus().toString());
+        }
+        if (StringUtils.isNotBlank(pnf.getRole())) {
+            pnfFromAai.setNfRole(pnf.getRole());
         }
     }
 
index 59cd53e..b8be045 100644 (file)
@@ -48,13 +48,18 @@ import org.onap.so.bpmn.servicedecomposition.bbobjects.Pnf;
 import org.onap.so.bpmn.servicedecomposition.bbobjects.ServiceInstance;
 import org.onap.aaiclient.client.aai.AAIResourcesClient;
 import org.onap.aaiclient.client.aai.entities.uri.AAIResourceUri;
+import org.onap.so.bpmn.servicedecomposition.modelinfo.ModelInfoPnf;
 import org.onap.so.client.aai.mapper.AAIObjectMapper;
 import org.onap.so.db.catalog.beans.OrchestrationStatus;
 
 @RunWith(MockitoJUnitRunner.Silent.class)
 public class AAIPnfResourcesTest extends TestDataSetup {
 
+    public static final String TEST_VERSION = "testVersion";
     private static final String PNF_NAME = "pnfTest";
+    public static final String TEST_CUSTOMIZATION_UUID = "testCustomizationUuid";
+    public static final String TEST_INVARIANT_UUID = "testInvariantUuid";
+    public static final String TEST_ROLE = "testRole";
 
     private Pnf pnf;
     private ServiceInstance serviceInstance;
@@ -110,42 +115,87 @@ public class AAIPnfResourcesTest extends TestDataSetup {
     @Test
     public void existingPnfInAaiWithInventoriedStatusCanBeUsed() throws Exception {
         // given
+        Pnf pnfTest = createPnfWithDefaultName();
         org.onap.aai.domain.yang.Pnf pnfFromAai = createPnf(OrchestrationStatus.INVENTORIED.toString());
         when(injectionHelperMock.getAaiClient().get(org.onap.aai.domain.yang.Pnf.class,
                 AAIUriFactory.createResourceUri(AAIObjectType.PNF, PNF_NAME))).thenReturn(Optional.of(pnfFromAai));
         // when
-        testedObject.checkIfPnfExistsInAaiAndCanBeUsed(PNF_NAME);
+        testedObject.checkIfPnfExistsInAaiAndCanBeUsed(pnfTest);
+        verify(aaiResourcesClientMock, times(1)).update(any(), any());
     }
 
     @Test
     public void existingPnfInAaiWithNullStatusCanBeUsed() throws Exception {
         // given
+        Pnf pnfTest = createPnfWithDefaultName();
         org.onap.aai.domain.yang.Pnf pnfFromAai = createPnf(null);
+        pnfTest.setRole("test");
         when(injectionHelperMock.getAaiClient().get(org.onap.aai.domain.yang.Pnf.class,
                 AAIUriFactory.createResourceUri(AAIObjectType.PNF, PNF_NAME))).thenReturn(Optional.of(pnfFromAai));
         // when
-        testedObject.checkIfPnfExistsInAaiAndCanBeUsed(PNF_NAME);
+        testedObject.checkIfPnfExistsInAaiAndCanBeUsed(pnfTest);
+        verify(aaiResourcesClientMock, times(1)).update(any(), eq(pnfFromAai));
+    }
+
+    @Test
+    public void existingPnfInAaiIsUpdated() throws Exception {
+        // given
+        org.onap.aai.domain.yang.Pnf pnfFromAai = createPnf(null);
+        Pnf pnfTest = getPnfWithTestValues();
+        when(injectionHelperMock.getAaiClient().get(org.onap.aai.domain.yang.Pnf.class,
+                AAIUriFactory.createResourceUri(AAIObjectType.PNF, PNF_NAME))).thenReturn(Optional.of(pnfFromAai));
+        // when
+        testedObject.checkIfPnfExistsInAaiAndCanBeUsed(pnfTest);
+        verify(aaiResourcesClientMock, times(1)).update(any(), eq(pnfFromAai));
+        verifyPnfFromAai(pnfFromAai);
+    }
+
+    private void verifyPnfFromAai(org.onap.aai.domain.yang.Pnf pnf) {
+        assertEquals(OrchestrationStatus.INVENTORIED.toString(), pnf.getOrchestrationStatus());
+        assertEquals(TEST_ROLE, pnf.getNfRole());
+        assertEquals(TEST_CUSTOMIZATION_UUID, pnf.getModelCustomizationId());
+        assertEquals(TEST_INVARIANT_UUID, pnf.getModelInvariantId());
+        assertEquals(TEST_VERSION, pnf.getModelVersionId());
+    }
+
+    private Pnf getPnfWithTestValues() {
+        Pnf pnfTest = createPnfWithDefaultName();
+        ModelInfoPnf modelInfoPnf = getModelInfoPnf();
+        pnfTest.setModelInfoPnf(modelInfoPnf);
+        pnfTest.setOrchestrationStatus(OrchestrationStatus.INVENTORIED);
+        pnfTest.setRole(TEST_ROLE);
+        return pnfTest;
+    }
+
+    private ModelInfoPnf getModelInfoPnf() {
+        ModelInfoPnf modelInfoPnf = new ModelInfoPnf();
+        modelInfoPnf.setModelCustomizationUuid(TEST_CUSTOMIZATION_UUID);
+        modelInfoPnf.setModelInvariantUuid(TEST_INVARIANT_UUID);
+        modelInfoPnf.setModelUuid(TEST_VERSION);
+        return modelInfoPnf;
     }
 
     @Test
     public void existingPnfInAaiWithEmptyStatusCanBeUsed() throws Exception {
         // given
+        Pnf pnfTest = createPnfWithDefaultName();
         org.onap.aai.domain.yang.Pnf pnfFromAai = createPnf(Strings.EMPTY);
         when(injectionHelperMock.getAaiClient().get(org.onap.aai.domain.yang.Pnf.class,
                 AAIUriFactory.createResourceUri(AAIObjectType.PNF, PNF_NAME))).thenReturn(Optional.of(pnfFromAai));
         // when
-        testedObject.checkIfPnfExistsInAaiAndCanBeUsed(PNF_NAME);
+        testedObject.checkIfPnfExistsInAaiAndCanBeUsed(pnfTest);
     }
 
     @Test
     public void existingPnfInAaiCanNotBeUsed() {
         // given
+        Pnf pnfTest = createPnfWithDefaultName();
         org.onap.aai.domain.yang.Pnf pnfFromAai = createPnf(OrchestrationStatus.ACTIVE.toString());
         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);
+            testedObject.checkIfPnfExistsInAaiAndCanBeUsed(pnfTest);
         } catch (Exception e) {
             // then
             assertThat(e.getMessage()).isEqualTo(String.format(
@@ -153,6 +203,7 @@ public class AAIPnfResourcesTest extends TestDataSetup {
                             + "if status is not set or set as Inventoried",
                     PNF_NAME));
         }
+        verify(aaiResourcesClientMock, times(0)).update(any(), any());
     }
 
     @Test
@@ -161,19 +212,21 @@ public class AAIPnfResourcesTest extends TestDataSetup {
         final String relatedTo = "service-instance";
         final String serviceInstanceId = "service-instance-id";
         final String path = "src/test/resources/__files/BuildingBlocks/aaiPnf.json";
+        Pnf pnfTest = createPnfWithDefaultName();
         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);
+            testedObject.checkIfPnfExistsInAaiAndCanBeUsed(pnfTest);
         } 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));
         }
+        verify(aaiResourcesClientMock, times(0)).update(any(), any());
     }
 
     private org.onap.aai.domain.yang.Pnf createPnf(String orchestrationStatus) {
@@ -182,4 +235,10 @@ public class AAIPnfResourcesTest extends TestDataSetup {
         pnfFromAai.setOrchestrationStatus(orchestrationStatus);
         return pnfFromAai;
     }
+
+    private Pnf createPnfWithDefaultName() {
+        Pnf pnfTest = new Pnf();
+        pnfTest.setPnfName(PNF_NAME);
+        return pnfTest;
+    }
 }
diff --git a/pom.xml b/pom.xml
index 0243def..a9466bd 100644 (file)
--- a/pom.xml
+++ b/pom.xml
       <dependency>
         <groupId>org.onap.logging-analytics</groupId>
         <artifactId>logging-slf4j</artifactId>
-        <version>1.6.7-SNAPSHOT</version>
+        <version>1.6.7</version>
       </dependency>
       <dependency>
         <groupId>org.onap.logging-analytics</groupId>
         <artifactId>logging-filter-base</artifactId>
-        <version>1.6.7-SNAPSHOT</version>
+        <version>1.6.7</version>
       </dependency>
       <dependency>
         <groupId>org.onap.logging-analytics</groupId>
         <artifactId>logging-filter-spring</artifactId>
-        <version>1.6.7-SNAPSHOT</version>
+        <version>1.6.7</version>
       </dependency>
       <dependency>
         <groupId>org.apache.httpcomponents</groupId>