From b05d98d452bff903411f4b1efcadc9003206f7f3 Mon Sep 17 00:00:00 2001 From: zm330 Date: Mon, 29 Jul 2019 15:19:40 +0800 Subject: repair vfcInstanceGroup order Issue-ID: SO-2164 Change-Id: I827342692dc4e4241b22c6eb8dd455b2b9385fa8 Signed-off-by: zm330 --- .../installer/heat/ToscaResourceInstaller.java | 39 ++++++----- .../installer/heat/ToscaResourceInstallerTest.java | 79 ++++++++++++++++++++++ 2 files changed, 102 insertions(+), 16 deletions(-) (limited to 'asdc-controller') 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 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 rqaList = requirements.getAll(); for (RequirementAssignment rqa : rqaList) { String name = rqa.getNodeTemplateName(); - for (NodeTemplate node : nodes) { - if (name.equals(node.getName())) { - break; - } + Optional 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 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 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 groupList = new ArrayList<>(); + + Group group1 = mock(Group.class); + NodeTemplate node1 = mock(NodeTemplate.class); + List 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 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 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 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 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) seqResult).stream().collect(Collectors.joining(",")); + assertEquals(((List) 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 1.2.3-korg