re base code
[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 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;
35
36 import java.util.*;
37
38 import static org.openecomp.sdc.translator.TestUtils.createInitServiceTemplate;
39
40 public class PortNewNodeTemplateIdGeneratorTest {
41
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";
45
46   private static UnifiedSubstitutionNodeTemplateIdGenerator unifiedSubstitutionNodeTemplateIdGenerator;
47
48   @BeforeClass
49   public static void setItUp(){
50     unifiedSubstitutionNodeTemplateIdGenerator = new PortNewNodeTemplateIdGenerator();
51   }
52
53   @Test
54   public void testGenerateNewPortNodeTemplateId() {
55     UnifiedCompositionTo unifiedCompositionTo = new UnifiedCompositionTo(getTestPortServiceTemplate(), null,
56         getUnifiedCompositionDataListWithOnePort(), null, null);
57     Optional<String>
58         nodeTemplateId = unifiedSubstitutionNodeTemplateIdGenerator.generate(unifiedCompositionTo, PCM_PORT_0);
59     if (nodeTemplateId.isPresent()) {
60       Assert.assertEquals(nodeTemplateId.get(), "pcm_server_pcm_port");
61     } else {
62       Assert.fail();
63     }
64   }
65
66   @Test
67   public void testGeneratePortIdNotBoundToServer() {
68     UnifiedCompositionTo unifiedCompositionTo = new UnifiedCompositionTo(getTestInitPortServiceTemplate(), null,
69         getInitUnifiedCompositionDataList(), null, null);
70     Optional<String>
71         nodeTemplateId = unifiedSubstitutionNodeTemplateIdGenerator.generate(unifiedCompositionTo, PCM_PORT_0);
72     Assert.assertEquals(false, nodeTemplateId.isPresent());
73   }
74
75   @Test
76   public void testGeneratePortIdMultiplePortsSameTypeToOneServer() {
77     UnifiedCompositionTo unifiedCompositionTo =
78         new UnifiedCompositionTo(getTestPortServiceTemplateWithTwoPortsOfSameType(), null,
79             getUnifiedCompositionDataListWithTwoPortsOfSameType(), null, null);
80     Optional<String>
81         nodeTemplateId = unifiedSubstitutionNodeTemplateIdGenerator.generate(unifiedCompositionTo, PCM_PORT_0);
82     if (nodeTemplateId.isPresent()) {
83       Assert.assertEquals(nodeTemplateId.get(), "pcm_server_pcm_port_0");
84     } else {
85       Assert.fail();
86     }
87
88     nodeTemplateId = unifiedSubstitutionNodeTemplateIdGenerator.generate(unifiedCompositionTo, PCM_PORT_1);
89     if (nodeTemplateId.isPresent()) {
90       Assert.assertEquals(nodeTemplateId.get(), "pcm_server_pcm_port_1");
91     } else {
92       Assert.fail();
93     }
94 }
95
96   @Test
97   public void testGenerateInvalidOriginalNodeTemplateId() {
98     UnifiedCompositionTo unifiedCompositionTo = new UnifiedCompositionTo(getTestPortServiceTemplate(), null,
99         getUnifiedCompositionDataListWithOnePort(), null, null);
100     Optional<String>
101         nodeTemplateId = unifiedSubstitutionNodeTemplateIdGenerator.generate(unifiedCompositionTo,
102         PCM_PORT_0 + "_Invalid");
103     Assert.assertEquals(nodeTemplateId.isPresent(), false);
104   }
105
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;
118   }
119
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;
133   }
134
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);
141
142     NodeTemplate portNodeTemplate = serviceTemplate.getTopology_template().getNode_templates().get(PCM_PORT_0);
143     addBindingToServer(portNodeTemplate);
144     addBindingToServer(anotherPortNodeTemplate);
145     return serviceTemplate;
146   }
147
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;
156   }
157
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;
168   }
169
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;
181   }
182
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);
193   }
194 }