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 static org.openecomp.sdc.translator.TestUtils.createInitServiceTemplate;
21 import org.openecomp.sdc.tosca.datatypes.ToscaCapabilityType;
22 import org.openecomp.sdc.tosca.datatypes.ToscaNodeType;
23 import org.openecomp.sdc.tosca.datatypes.ToscaRelationshipType;
24 import org.openecomp.sdc.tosca.datatypes.model.NodeTemplate;
25 import org.openecomp.sdc.tosca.datatypes.model.RequirementAssignment;
26 import org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate;
27 import org.openecomp.sdc.tosca.datatypes.model.TopologyTemplate;
28 import org.openecomp.sdc.tosca.services.ToscaConstants;
29 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.composition.UnifiedCompositionData;
30 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.composition.commands.UnifiedSubstitutionNodeTemplateIdGenerator;
31 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.composition.commands.impl.PortNewNodeTemplateIdGenerator;
32 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.composition.to.UnifiedCompositionTo;
33 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.ComputeTemplateConsolidationData;
34 import org.openecomp.sdc.translator.services.heattotosca.impl.resourcetranslation.BaseResourceTranslationTest;
35 import org.junit.Assert;
36 import org.junit.BeforeClass;
37 import org.junit.Test;
39 import java.util.ArrayList;
40 import java.util.HashMap;
41 import java.util.List;
43 import java.util.Optional;
45 public class PortNewNodeTemplateIdGeneratorTest {
47 private static final String SERVER_PCM = "server_pcm";
48 private static final String PCM_PORT_0 = "pcm_port_0";
49 private static final String PCM_PORT_1 = "pcm_port_1";
51 private static UnifiedSubstitutionNodeTemplateIdGenerator unifiedSubstitutionNodeTemplateIdGenerator;
54 public static void setItUp(){
55 unifiedSubstitutionNodeTemplateIdGenerator = new PortNewNodeTemplateIdGenerator();
59 public void testGenerateNewPortNodeTemplateId() {
60 UnifiedCompositionTo unifiedCompositionTo = new UnifiedCompositionTo(getTestPortServiceTemplate(), null,
61 getUnifiedCompositionDataListWithOnePort(), null, null);
63 nodeTemplateId = unifiedSubstitutionNodeTemplateIdGenerator.generate(unifiedCompositionTo, PCM_PORT_0);
64 if (nodeTemplateId.isPresent()) {
65 Assert.assertEquals(nodeTemplateId.get(), "pcm_server_pcm_port");
72 public void testGeneratePortIdNotBoundToServer() {
73 UnifiedCompositionTo unifiedCompositionTo = new UnifiedCompositionTo(getTestInitPortServiceTemplate(), null,
74 getInitUnifiedCompositionDataList(), null, null);
76 nodeTemplateId = unifiedSubstitutionNodeTemplateIdGenerator.generate(unifiedCompositionTo, PCM_PORT_0);
77 Assert.assertEquals(false, nodeTemplateId.isPresent());
81 public void testGeneratePortIdMultiplePortsSameTypeToOneServer() {
82 UnifiedCompositionTo unifiedCompositionTo =
83 new UnifiedCompositionTo(getTestPortServiceTemplateWithTwoPortsOfSameType(), null,
84 getUnifiedCompositionDataListWithTwoPortsOfSameType(), null, null);
86 nodeTemplateId = unifiedSubstitutionNodeTemplateIdGenerator.generate(unifiedCompositionTo, PCM_PORT_0);
87 if (nodeTemplateId.isPresent()) {
88 Assert.assertEquals(nodeTemplateId.get(), "pcm_server_pcm_port_0");
93 nodeTemplateId = unifiedSubstitutionNodeTemplateIdGenerator.generate(unifiedCompositionTo, PCM_PORT_1);
94 if (nodeTemplateId.isPresent()) {
95 Assert.assertEquals(nodeTemplateId.get(), "pcm_server_pcm_port_1");
102 public void testGenerateInvalidOriginalNodeTemplateId() {
103 UnifiedCompositionTo unifiedCompositionTo = new UnifiedCompositionTo(getTestPortServiceTemplate(), null,
104 getUnifiedCompositionDataListWithOnePort(), null, null);
106 nodeTemplateId = unifiedSubstitutionNodeTemplateIdGenerator.generate(unifiedCompositionTo,
107 PCM_PORT_0 + "_Invalid");
108 Assert.assertEquals(nodeTemplateId.isPresent(), false);
111 private static ServiceTemplate getTestInitPortServiceTemplate() {
112 ServiceTemplate serviceTemplate = createInitServiceTemplate();
113 TopologyTemplate topologyTemplate = serviceTemplate.getTopology_template();
114 NodeTemplate nodeTemplate = new NodeTemplate();
115 nodeTemplate.setType("org.openecomp.resource.vfc.nodes.heat.pcm_server");
116 Map<String, NodeTemplate> nodeTemplateMap = new HashMap<>();
117 nodeTemplateMap.put(SERVER_PCM, nodeTemplate);
118 NodeTemplate portNodeTemplate = new NodeTemplate();
119 portNodeTemplate.setType(ToscaNodeType.NEUTRON_PORT);
120 nodeTemplateMap.put(PCM_PORT_0, portNodeTemplate);
121 topologyTemplate.setNode_templates(nodeTemplateMap);
122 return serviceTemplate;
125 private static ServiceTemplate getTestPortServiceTemplate() {
126 ServiceTemplate serviceTemplate = getTestInitPortServiceTemplate();
127 NodeTemplate portNodeTemplate = serviceTemplate.getTopology_template().getNode_templates().get(PCM_PORT_0);
128 Map<String, RequirementAssignment> portBindingToServer = new HashMap<>();
129 RequirementAssignment binding = new RequirementAssignment();
130 binding.setRelationship(ToscaRelationshipType.NATIVE_NETWORK_BINDS_TO);
131 binding.setCapability(ToscaCapabilityType.NATIVE_NETWORK_BINDABLE);
132 binding.setNode(SERVER_PCM);
133 portBindingToServer.put(ToscaConstants.BINDING_REQUIREMENT_ID, binding);
134 List<Map<String, RequirementAssignment>> requirements = new ArrayList<>(1);
135 requirements.add(portBindingToServer);
136 portNodeTemplate.setRequirements(requirements);
137 return serviceTemplate;
140 private static ServiceTemplate getTestPortServiceTemplateWithTwoPortsOfSameType() {
141 ServiceTemplate serviceTemplate = getTestInitPortServiceTemplate();
142 Map<String, NodeTemplate> nodeTemplateMap = serviceTemplate.getTopology_template().getNode_templates();
143 NodeTemplate anotherPortNodeTemplate = new NodeTemplate();
144 anotherPortNodeTemplate.setType(ToscaNodeType.NEUTRON_PORT);
145 nodeTemplateMap.put(PCM_PORT_1, anotherPortNodeTemplate);
147 NodeTemplate portNodeTemplate = serviceTemplate.getTopology_template().getNode_templates().get(PCM_PORT_0);
148 addBindingToServer(portNodeTemplate);
149 addBindingToServer(anotherPortNodeTemplate);
150 return serviceTemplate;
153 private List<UnifiedCompositionData> getInitUnifiedCompositionDataList() {
154 List<UnifiedCompositionData> unifiedCompositionDataList = new ArrayList<>(1);
155 UnifiedCompositionData unifiedCompositionData = new UnifiedCompositionData();
156 ComputeTemplateConsolidationData computeTemplateConsolidationData = new ComputeTemplateConsolidationData();
157 computeTemplateConsolidationData.setNodeTemplateId(SERVER_PCM);
158 unifiedCompositionData.setComputeTemplateConsolidationData(computeTemplateConsolidationData);
159 unifiedCompositionDataList.add(unifiedCompositionData);
160 return unifiedCompositionDataList;
163 private List<UnifiedCompositionData> getUnifiedCompositionDataListWithOnePort() {
164 List<UnifiedCompositionData> unifiedCompositionDataList = getInitUnifiedCompositionDataList();
165 ComputeTemplateConsolidationData computeTemplateConsolidationData = unifiedCompositionDataList.get(0)
166 .getComputeTemplateConsolidationData();
167 List<String> ports = new ArrayList<>(1);
168 ports.add(PCM_PORT_0);
169 Map<String, List<String>> portMap = new HashMap<>();
170 portMap.put("pcm_port", ports);
171 computeTemplateConsolidationData.setPorts(portMap);
172 return unifiedCompositionDataList;
175 private List<UnifiedCompositionData> getUnifiedCompositionDataListWithTwoPortsOfSameType() {
176 List<UnifiedCompositionData> unifiedCompositionDataList = getUnifiedCompositionDataListWithOnePort();
177 ComputeTemplateConsolidationData computeTemplateConsolidationData = unifiedCompositionDataList.get(0)
178 .getComputeTemplateConsolidationData();
179 List<String> ports = new ArrayList<>(2);
180 ports.add(PCM_PORT_0);
181 ports.add(PCM_PORT_1);
182 Map<String, List<String>> portMap = new HashMap<>();
183 portMap.put("pcm_port", ports);
184 computeTemplateConsolidationData.setPorts(portMap);
185 return unifiedCompositionDataList;
188 private static void addBindingToServer(NodeTemplate portNodeTemplate) {
189 Map<String, RequirementAssignment> portBindingToServer = new HashMap<>();
190 RequirementAssignment binding = new RequirementAssignment();
191 binding.setRelationship(ToscaRelationshipType.NATIVE_NETWORK_BINDS_TO);
192 binding.setCapability(ToscaCapabilityType.NATIVE_NETWORK_BINDABLE);
193 binding.setNode(SERVER_PCM);
194 portBindingToServer.put(ToscaConstants.BINDING_REQUIREMENT_ID, binding);
195 List<Map<String, RequirementAssignment>> requirements = new ArrayList<>(1);
196 requirements.add(portBindingToServer);
197 portNodeTemplate.setRequirements(requirements);