From b05d98d452bff903411f4b1efcadc9003206f7f3 Mon Sep 17 00:00:00 2001
From: zm330 <zhangminyj@chinamobile.com>
Date: Mon, 29 Jul 2019 15:19:40 +0800
Subject: repair vfcInstanceGroup order

Issue-ID: SO-2164
Change-Id: I827342692dc4e4241b22c6eb8dd455b2b9385fa8
Signed-off-by: zm330 <zhangminyj@chinamobile.com>
---
 .../installer/heat/ToscaResourceInstaller.java     | 39 ++++++-----
 .../installer/heat/ToscaResourceInstallerTest.java | 79 ++++++++++++++++++++++
 2 files changed, 102 insertions(+), 16 deletions(-)

(limited to 'asdc-controller/src')

diff --git a/asdc-controller/src/main/java/org/onap/so/asdc/installer/heat/ToscaResourceInstaller.java b/asdc-controller/src/main/java/org/onap/so/asdc/installer/heat/ToscaResourceInstaller.java
index a08206b477..e4c95f6290 100644
--- a/asdc-controller/src/main/java/org/onap/so/asdc/installer/heat/ToscaResourceInstaller.java
+++ b/asdc-controller/src/main/java/org/onap/so/asdc/installer/heat/ToscaResourceInstaller.java
@@ -1087,9 +1087,9 @@ public class ToscaResourceInstaller {
         tempGroupList.addAll(groupList);
 
         for (Group group : groupList) {
+            boolean isAllExists = true;
             ArrayList<NodeTemplate> members = group.getMemberNodes();
             for (NodeTemplate memberNode : members) {
-                boolean isAllExists = true;
                 RequirementAssignments requirements = iSdcCsarHelper.getRequirementsOf(memberNode);
                 if (requirements == null || requirements.getAll() == null || requirements.getAll().isEmpty()) {
                     continue;
@@ -1097,27 +1097,28 @@ public class ToscaResourceInstaller {
                 List<RequirementAssignment> rqaList = requirements.getAll();
                 for (RequirementAssignment rqa : rqaList) {
                     String name = rqa.getNodeTemplateName();
-                    for (NodeTemplate node : nodes) {
-                        if (name.equals(node.getName())) {
-                            break;
-                        }
+                    Optional<NodeTemplate> findNode =
+                            nodes.stream().filter(node -> node.getName().equals(name)).findFirst();
+                    if (!findNode.isPresent()) {
+                        isAllExists = false;
+                        break;
                     }
-
-                    isAllExists = false;
-                    break;
                 }
-
-                if (isAllExists) {
-                    strSequence.add(group.getName());
-                    tempGroupList.remove(group);
-                    nodes.addAll(group.getMemberNodes());
+                if (!isAllExists) {
+                    break;
                 }
             }
 
-            if (!tempGroupList.isEmpty() && tempGroupList.size() < groupList.size()) {
-                getVNFCGroupSequenceList(strSequence, tempGroupList, nodes, iSdcCsarHelper);
+            if (isAllExists) {
+                strSequence.add(group.getName());
+                tempGroupList.remove(group);
+                nodes.addAll(group.getMemberNodes());
             }
         }
+
+        if (tempGroupList.size() != 0 && tempGroupList.size() < groupList.size()) {
+            getVNFCGroupSequenceList(strSequence, tempGroupList, nodes, iSdcCsarHelper);
+        }
     }
 
     public void processWatchdog(String distributionId, String servideUUID, Optional<String> distributionNotification,
@@ -1896,7 +1897,13 @@ public class ToscaResourceInstaller {
                 vnfcCustomization
                         .setDescription(testNull(metadata.getValue(SdcPropertyNames.PROPERTY_NAME_DESCRIPTION)));
                 vnfcCustomization.setResourceInput(getVnfcResourceInput(vfcTemplate, inputList));
-                vfcInstanceGroupCustom.getVnfcCustomizations().add(vnfcCustomization);
+                List<VnfcCustomization> vnfcCustomizations = vfcInstanceGroupCustom.getVnfcCustomizations();
+
+                if (vnfcCustomizations == null) {
+                    vnfcCustomizations = new ArrayList<>();
+                    vfcInstanceGroupCustom.setVnfcCustomizations(vnfcCustomizations);
+                }
+                vnfcCustomizations.add(vnfcCustomization);
             }
         }
     }
diff --git a/asdc-controller/src/test/java/org/onap/so/asdc/installer/heat/ToscaResourceInstallerTest.java b/asdc-controller/src/test/java/org/onap/so/asdc/installer/heat/ToscaResourceInstallerTest.java
index 115af3adaf..7534ea645a 100644
--- a/asdc-controller/src/test/java/org/onap/so/asdc/installer/heat/ToscaResourceInstallerTest.java
+++ b/asdc-controller/src/test/java/org/onap/so/asdc/installer/heat/ToscaResourceInstallerTest.java
@@ -32,6 +32,7 @@ import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.times;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
+import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Optional;
@@ -51,6 +52,8 @@ import org.onap.sdc.tosca.parser.impl.SdcCsarHelperImpl;
 import org.onap.sdc.tosca.parser.impl.SdcPropertyNames;
 import org.onap.sdc.toscaparser.api.Group;
 import org.onap.sdc.toscaparser.api.NodeTemplate;
+import org.onap.sdc.toscaparser.api.RequirementAssignment;
+import org.onap.sdc.toscaparser.api.RequirementAssignments;
 import org.onap.sdc.toscaparser.api.elements.Metadata;
 import org.onap.sdc.toscaparser.api.elements.StatefulEntityType;
 import org.onap.sdc.utils.DistributionStatusEnum;
@@ -76,6 +79,7 @@ import org.onap.so.db.request.data.repository.WatchdogComponentDistributionStatu
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.test.util.ReflectionTestUtils;
 import java.util.Optional;
+import java.util.stream.Collectors;
 
 public class ToscaResourceInstallerTest extends BaseTest {
     @Autowired
@@ -488,6 +492,81 @@ public class ToscaResourceInstallerTest extends BaseTest {
         verify(vnrConfigCustom, times(1)).setConfigResourceCustomization(vrfConfigCustom);
     }
 
+    @Test
+    public void testProcessVNFCGroupSequence() {
+        List<Group> groupList = new ArrayList<>();
+
+        Group group1 = mock(Group.class);
+        NodeTemplate node1 = mock(NodeTemplate.class);
+        List<NodeTemplate> nodeList1 = new ArrayList<>();
+        nodeList1.add(node1);
+        doReturn("VfcInstanceGroup..0").when(group1).getName();
+        doReturn(nodeList1).when(group1).getMemberNodes();
+        doReturn("deviceV3").when(node1).getName();
+
+        Group group2 = mock(Group.class);
+        NodeTemplate node2 = mock(NodeTemplate.class);
+        List<NodeTemplate> nodeList2 = new ArrayList<>();
+        nodeList2.add(node2);
+        doReturn("VfcInstanceGroup..1").when(group2).getName();
+        doReturn(nodeList2).when(group2).getMemberNodes();
+        RequirementAssignments requirements2 = mock(RequirementAssignments.class);
+        RequirementAssignment requirement2 = mock(RequirementAssignment.class);
+        List<RequirementAssignment> requirementCollection2 = new ArrayList<>();
+        requirementCollection2.add(requirement2);
+        doReturn(requirementCollection2).when(requirements2).getAll();
+        doReturn("deviceV3").when(requirement2).getNodeTemplateName();
+        doReturn("SiteV2").when(node2).getName();
+
+        Group group3 = mock(Group.class);
+        NodeTemplate node3 = mock(NodeTemplate.class);
+        List<NodeTemplate> nodeList3 = new ArrayList<>();
+        nodeList3.add(node3);
+        doReturn("VfcInstanceGroup..2").when(group3).getName();
+        doReturn(nodeList3).when(group3).getMemberNodes();
+        RequirementAssignments requirements3 = mock(RequirementAssignments.class);
+        RequirementAssignment requirement3 = mock(RequirementAssignment.class);
+        List<RequirementAssignment> requirementCollection3 = new ArrayList<>();
+        requirementCollection3.add(requirement3);
+        doReturn(requirementCollection3).when(requirements3).getAll();
+        doReturn("SiteV2").when(requirement3).getNodeTemplateName();
+        doReturn("siteWanV2").when(node3).getName();
+
+        groupList.add(group1);
+        groupList.add(group2);
+        groupList.add(group3);
+
+        doReturn(csarHelper).when(toscaResourceStructure).getSdcCsarHelper();
+        doReturn(null).when(csarHelper).getRequirementsOf(node1);
+        doReturn(requirements2).when(csarHelper).getRequirementsOf(node2);
+        doReturn(requirements3).when(csarHelper).getRequirementsOf(node3);
+
+        ToscaResourceInstaller installer = new ToscaResourceInstaller();
+        Method[] methods = installer.getClass().getDeclaredMethods();
+        Method testMethod = null;
+        for (Method method : methods) {
+            String name = method.getName();
+            if (name.equals("processVNFCGroupSequence")) {
+                method.setAccessible(true);
+                testMethod = method;
+            }
+        }
+
+        if (null != testMethod) {
+            try {
+                Object seqResult = testMethod.invoke(installer, toscaResourceStructure, groupList);
+                if (seqResult instanceof List) {
+                    String resultStr = ((List<String>) seqResult).stream().collect(Collectors.joining(","));
+                    assertEquals(((List<String>) seqResult).size(), 3);
+                }
+            } catch (Exception ex) {
+                ex.printStackTrace();
+            }
+        }
+
+    }
+
+
     class MockConstants {
         public final static String MODEL_NAME = "VLAN Network Receptor Configuration";
         public final static String MODEL_INVARIANT_UUID = "1608eef4-de53-4334-a8d2-ba79cab4bde0";
-- 
cgit