c00a9b28c290224c45363fd07c8868317a92a1e6
[sdc.git] / openecomp-be / lib / openecomp-sdc-translator-lib / openecomp-sdc-translator-core / src / test / java / org / openecomp / sdc / translator / services / heattotosca / unifiedmodel / commands / PortNewNodeTemplateIdGeneratorTest.java
1 /*
2  * Copyright © 2016-2018 European Support Limited
3  *
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
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 package org.openecomp.sdc.translator.services.heattotosca.unifiedmodel.commands;
18
19 import static org.openecomp.sdc.translator.TestUtils.createInitServiceTemplate;
20
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;
38
39 import java.util.ArrayList;
40 import java.util.HashMap;
41 import java.util.List;
42 import java.util.Map;
43 import java.util.Optional;
44
45 public class PortNewNodeTemplateIdGeneratorTest {
46
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";
50
51   private static UnifiedSubstitutionNodeTemplateIdGenerator unifiedSubstitutionNodeTemplateIdGenerator;
52
53   @BeforeClass
54   public static void setItUp(){
55     unifiedSubstitutionNodeTemplateIdGenerator = new PortNewNodeTemplateIdGenerator();
56   }
57
58   @Test
59   public void testGenerateNewPortNodeTemplateId() {
60     UnifiedCompositionTo unifiedCompositionTo = new UnifiedCompositionTo(getTestPortServiceTemplate(), null,
61         getUnifiedCompositionDataListWithOnePort(), null, null);
62     Optional<String>
63         nodeTemplateId = unifiedSubstitutionNodeTemplateIdGenerator.generate(unifiedCompositionTo, PCM_PORT_0);
64     if (nodeTemplateId.isPresent()) {
65       Assert.assertEquals(nodeTemplateId.get(), "pcm_server_pcm_port");
66     } else {
67       Assert.fail();
68     }
69   }
70
71   @Test
72   public void testGeneratePortIdNotBoundToServer() {
73     UnifiedCompositionTo unifiedCompositionTo = new UnifiedCompositionTo(getTestInitPortServiceTemplate(), null,
74         getInitUnifiedCompositionDataList(), null, null);
75     Optional<String>
76         nodeTemplateId = unifiedSubstitutionNodeTemplateIdGenerator.generate(unifiedCompositionTo, PCM_PORT_0);
77     Assert.assertEquals(false, nodeTemplateId.isPresent());
78   }
79
80   @Test
81   public void testGeneratePortIdMultiplePortsSameTypeToOneServer() {
82     UnifiedCompositionTo unifiedCompositionTo =
83         new UnifiedCompositionTo(getTestPortServiceTemplateWithTwoPortsOfSameType(), null,
84             getUnifiedCompositionDataListWithTwoPortsOfSameType(), null, null);
85     Optional<String>
86         nodeTemplateId = unifiedSubstitutionNodeTemplateIdGenerator.generate(unifiedCompositionTo, PCM_PORT_0);
87     if (nodeTemplateId.isPresent()) {
88       Assert.assertEquals(nodeTemplateId.get(), "pcm_server_pcm_port_0");
89     } else {
90       Assert.fail();
91     }
92
93     nodeTemplateId = unifiedSubstitutionNodeTemplateIdGenerator.generate(unifiedCompositionTo, PCM_PORT_1);
94     if (nodeTemplateId.isPresent()) {
95       Assert.assertEquals(nodeTemplateId.get(), "pcm_server_pcm_port_1");
96     } else {
97       Assert.fail();
98     }
99 }
100
101   @Test
102   public void testGenerateInvalidOriginalNodeTemplateId() {
103     UnifiedCompositionTo unifiedCompositionTo = new UnifiedCompositionTo(getTestPortServiceTemplate(), null,
104         getUnifiedCompositionDataListWithOnePort(), null, null);
105     Optional<String>
106         nodeTemplateId = unifiedSubstitutionNodeTemplateIdGenerator.generate(unifiedCompositionTo,
107         PCM_PORT_0 + "_Invalid");
108     Assert.assertEquals(nodeTemplateId.isPresent(), false);
109   }
110
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;
123   }
124
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;
138   }
139
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);
146
147     NodeTemplate portNodeTemplate = serviceTemplate.getTopology_template().getNode_templates().get(PCM_PORT_0);
148     addBindingToServer(portNodeTemplate);
149     addBindingToServer(anotherPortNodeTemplate);
150     return serviceTemplate;
151   }
152
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;
161   }
162
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;
173   }
174
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;
186   }
187
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);
198   }
199 }