2 * Copyright © 2016-2018 European Support Limited
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 package org.openecomp.sdc.translator.services.heattotosca.unifiedmodel.commands;
19 import org.junit.Assert;
20 import org.junit.BeforeClass;
21 import org.junit.Test;
22 import org.onap.sdc.tosca.datatypes.model.NodeTemplate;
23 import org.onap.sdc.tosca.datatypes.model.RequirementAssignment;
24 import org.onap.sdc.tosca.datatypes.model.ServiceTemplate;
25 import org.onap.sdc.tosca.datatypes.model.TopologyTemplate;
26 import org.openecomp.sdc.tosca.datatypes.ToscaCapabilityType;
27 import org.openecomp.sdc.tosca.datatypes.ToscaNodeType;
28 import org.openecomp.sdc.tosca.datatypes.ToscaRelationshipType;
29 import org.openecomp.sdc.tosca.services.ToscaConstants;
30 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.composition.UnifiedCompositionData;
31 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.composition.commands.UnifiedSubstitutionNodeTemplateIdGenerator;
32 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.composition.commands.impl.PortNewNodeTemplateIdGenerator;
33 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.composition.to.UnifiedCompositionTo;
34 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.ComputeTemplateConsolidationData;
38 import static org.openecomp.sdc.translator.TestUtils.createInitServiceTemplate;
40 public class PortNewNodeTemplateIdGeneratorTest {
42 private static final String SERVER_PCM = "server_pcm";
43 private static final String PCM_PORT_0 = "pcm_port_0";
44 private static final String PCM_PORT_1 = "pcm_port_1";
46 private static UnifiedSubstitutionNodeTemplateIdGenerator unifiedSubstitutionNodeTemplateIdGenerator;
49 public static void setItUp(){
50 unifiedSubstitutionNodeTemplateIdGenerator = new PortNewNodeTemplateIdGenerator();
54 public void testGenerateNewPortNodeTemplateId() {
55 UnifiedCompositionTo unifiedCompositionTo = new UnifiedCompositionTo(getTestPortServiceTemplate(), null,
56 getUnifiedCompositionDataListWithOnePort(), null, null);
58 nodeTemplateId = unifiedSubstitutionNodeTemplateIdGenerator.generate(unifiedCompositionTo, PCM_PORT_0);
59 if (nodeTemplateId.isPresent()) {
60 Assert.assertEquals(nodeTemplateId.get(), "pcm_server_pcm_port");
67 public void testGeneratePortIdNotBoundToServer() {
68 UnifiedCompositionTo unifiedCompositionTo = new UnifiedCompositionTo(getTestInitPortServiceTemplate(), null,
69 getInitUnifiedCompositionDataList(), null, null);
71 nodeTemplateId = unifiedSubstitutionNodeTemplateIdGenerator.generate(unifiedCompositionTo, PCM_PORT_0);
72 Assert.assertEquals(false, nodeTemplateId.isPresent());
76 public void testGeneratePortIdMultiplePortsSameTypeToOneServer() {
77 UnifiedCompositionTo unifiedCompositionTo =
78 new UnifiedCompositionTo(getTestPortServiceTemplateWithTwoPortsOfSameType(), null,
79 getUnifiedCompositionDataListWithTwoPortsOfSameType(), null, null);
81 nodeTemplateId = unifiedSubstitutionNodeTemplateIdGenerator.generate(unifiedCompositionTo, PCM_PORT_0);
82 if (nodeTemplateId.isPresent()) {
83 Assert.assertEquals(nodeTemplateId.get(), "pcm_server_pcm_port_0");
88 nodeTemplateId = unifiedSubstitutionNodeTemplateIdGenerator.generate(unifiedCompositionTo, PCM_PORT_1);
89 if (nodeTemplateId.isPresent()) {
90 Assert.assertEquals(nodeTemplateId.get(), "pcm_server_pcm_port_1");
97 public void testGenerateInvalidOriginalNodeTemplateId() {
98 UnifiedCompositionTo unifiedCompositionTo = new UnifiedCompositionTo(getTestPortServiceTemplate(), null,
99 getUnifiedCompositionDataListWithOnePort(), null, null);
101 nodeTemplateId = unifiedSubstitutionNodeTemplateIdGenerator.generate(unifiedCompositionTo,
102 PCM_PORT_0 + "_Invalid");
103 Assert.assertEquals(nodeTemplateId.isPresent(), false);
106 private static ServiceTemplate getTestInitPortServiceTemplate() {
107 ServiceTemplate serviceTemplate = createInitServiceTemplate();
108 TopologyTemplate topologyTemplate = serviceTemplate.getTopology_template();
109 NodeTemplate nodeTemplate = new NodeTemplate();
110 nodeTemplate.setType("org.openecomp.resource.vfc.nodes.heat.pcm_server");
111 Map<String, NodeTemplate> nodeTemplateMap = new HashMap<>();
112 nodeTemplateMap.put(SERVER_PCM, nodeTemplate);
113 NodeTemplate portNodeTemplate = new NodeTemplate();
114 portNodeTemplate.setType(ToscaNodeType.NEUTRON_PORT);
115 nodeTemplateMap.put(PCM_PORT_0, portNodeTemplate);
116 topologyTemplate.setNode_templates(nodeTemplateMap);
117 return serviceTemplate;
120 private static ServiceTemplate getTestPortServiceTemplate() {
121 ServiceTemplate serviceTemplate = getTestInitPortServiceTemplate();
122 NodeTemplate portNodeTemplate = serviceTemplate.getTopology_template().getNode_templates().get(PCM_PORT_0);
123 Map<String, RequirementAssignment> portBindingToServer = new HashMap<>();
124 RequirementAssignment binding = new RequirementAssignment();
125 binding.setRelationship(ToscaRelationshipType.NATIVE_NETWORK_BINDS_TO);
126 binding.setCapability(ToscaCapabilityType.NATIVE_NETWORK_BINDABLE);
127 binding.setNode(SERVER_PCM);
128 portBindingToServer.put(ToscaConstants.BINDING_REQUIREMENT_ID, binding);
129 List<Map<String, RequirementAssignment>> requirements = new ArrayList<>(1);
130 requirements.add(portBindingToServer);
131 portNodeTemplate.setRequirements(requirements);
132 return serviceTemplate;
135 private static ServiceTemplate getTestPortServiceTemplateWithTwoPortsOfSameType() {
136 ServiceTemplate serviceTemplate = getTestInitPortServiceTemplate();
137 Map<String, NodeTemplate> nodeTemplateMap = serviceTemplate.getTopology_template().getNode_templates();
138 NodeTemplate anotherPortNodeTemplate = new NodeTemplate();
139 anotherPortNodeTemplate.setType(ToscaNodeType.NEUTRON_PORT);
140 nodeTemplateMap.put(PCM_PORT_1, anotherPortNodeTemplate);
142 NodeTemplate portNodeTemplate = serviceTemplate.getTopology_template().getNode_templates().get(PCM_PORT_0);
143 addBindingToServer(portNodeTemplate);
144 addBindingToServer(anotherPortNodeTemplate);
145 return serviceTemplate;
148 private List<UnifiedCompositionData> getInitUnifiedCompositionDataList() {
149 List<UnifiedCompositionData> unifiedCompositionDataList = new ArrayList<>(1);
150 UnifiedCompositionData unifiedCompositionData = new UnifiedCompositionData();
151 ComputeTemplateConsolidationData computeTemplateConsolidationData = new ComputeTemplateConsolidationData();
152 computeTemplateConsolidationData.setNodeTemplateId(SERVER_PCM);
153 unifiedCompositionData.setComputeTemplateConsolidationData(computeTemplateConsolidationData);
154 unifiedCompositionDataList.add(unifiedCompositionData);
155 return unifiedCompositionDataList;
158 private List<UnifiedCompositionData> getUnifiedCompositionDataListWithOnePort() {
159 List<UnifiedCompositionData> unifiedCompositionDataList = getInitUnifiedCompositionDataList();
160 ComputeTemplateConsolidationData computeTemplateConsolidationData = unifiedCompositionDataList.get(0)
161 .getComputeTemplateConsolidationData();
162 List<String> ports = new ArrayList<>(1);
163 ports.add(PCM_PORT_0);
164 Map<String, List<String>> portMap = new HashMap<>();
165 portMap.put("pcm_port", ports);
166 computeTemplateConsolidationData.setPorts(portMap);
167 return unifiedCompositionDataList;
170 private List<UnifiedCompositionData> getUnifiedCompositionDataListWithTwoPortsOfSameType() {
171 List<UnifiedCompositionData> unifiedCompositionDataList = getUnifiedCompositionDataListWithOnePort();
172 ComputeTemplateConsolidationData computeTemplateConsolidationData = unifiedCompositionDataList.get(0)
173 .getComputeTemplateConsolidationData();
174 List<String> ports = new ArrayList<>(2);
175 ports.add(PCM_PORT_0);
176 ports.add(PCM_PORT_1);
177 Map<String, List<String>> portMap = new HashMap<>();
178 portMap.put("pcm_port", ports);
179 computeTemplateConsolidationData.setPorts(portMap);
180 return unifiedCompositionDataList;
183 private static void addBindingToServer(NodeTemplate portNodeTemplate) {
184 Map<String, RequirementAssignment> portBindingToServer = new HashMap<>();
185 RequirementAssignment binding = new RequirementAssignment();
186 binding.setRelationship(ToscaRelationshipType.NATIVE_NETWORK_BINDS_TO);
187 binding.setCapability(ToscaCapabilityType.NATIVE_NETWORK_BINDABLE);
188 binding.setNode(SERVER_PCM);
189 portBindingToServer.put(ToscaConstants.BINDING_REQUIREMENT_ID, binding);
190 List<Map<String, RequirementAssignment>> requirements = new ArrayList<>(1);
191 requirements.add(portBindingToServer);
192 portNodeTemplate.setRequirements(requirements);