2 * Copyright © 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.vendorsoftwareproduct.services.impl.composition;
20 import java.io.FileInputStream;
21 import java.io.IOException;
22 import java.io.InputStream;
24 import java.nio.file.NotDirectoryException;
25 import java.util.Collection;
26 import java.util.HashMap;
28 import org.apache.commons.io.FileUtils;
29 import org.mockito.InjectMocks;
30 import org.mockito.MockitoAnnotations;
31 import org.onap.sdc.tosca.datatypes.model.ServiceTemplate;
32 import org.onap.sdc.tosca.services.ToscaExtensionYamlUtil;
33 import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
34 import org.openecomp.sdc.tosca.services.ToscaUtil;
35 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Component;
36 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionData;
37 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Network;
38 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Nic;
39 import org.testng.Assert;
40 import org.testng.annotations.BeforeMethod;
41 import org.testng.annotations.Test;
45 * @since July 17, 2016.
48 public class CompositionDataExtractorImplTest {
51 private static CompositionDataExtractorImpl compositionDataExtractor;
54 public void setUp() throws Exception {
55 MockitoAnnotations.initMocks(this);
58 private static ToscaServiceModel loadToscaServiceModel(String serviceTemplatesPath,
59 String globalServiceTemplatesPath,
60 String entryDefinitionServiceTemplate)
62 ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
63 Map<String, ServiceTemplate> serviceTemplates = new HashMap<>();
64 if (entryDefinitionServiceTemplate == null) {
65 entryDefinitionServiceTemplate = "MainServiceTemplate.yaml";
68 loadServiceTemplates(serviceTemplatesPath, toscaExtensionYamlUtil, serviceTemplates);
69 if (globalServiceTemplatesPath != null) {
70 loadServiceTemplates(globalServiceTemplatesPath, toscaExtensionYamlUtil, serviceTemplates);
73 return new ToscaServiceModel(null, serviceTemplates, entryDefinitionServiceTemplate);
76 private static void loadServiceTemplates(String serviceTemplatesPath,
77 ToscaExtensionYamlUtil toscaExtensionYamlUtil,
78 Map<String, ServiceTemplate> serviceTemplates)
80 URL urlFile = CompositionDataExtractorImplTest.class.getResource(serviceTemplatesPath);
81 if (urlFile != null) {
82 File pathFile = new File(urlFile.getFile());
83 Collection<File> files = FileUtils.listFiles(pathFile, null, true);
85 addServiceTemplateFiles(serviceTemplates, files, toscaExtensionYamlUtil);
87 throw new NotDirectoryException(serviceTemplatesPath);
90 throw new NotDirectoryException(serviceTemplatesPath);
94 private static void addServiceTemplateFiles(Map<String, ServiceTemplate> serviceTemplates,
95 Collection<File> files,
96 ToscaExtensionYamlUtil toscaExtensionYamlUtil)
98 for (File file : files) {
99 try (InputStream yamlFile = new FileInputStream(file)) {
100 ServiceTemplate serviceTemplateFromYaml =
101 toscaExtensionYamlUtil.yamlToObject(yamlFile, ServiceTemplate.class);
102 serviceTemplates.put(ToscaUtil.getServiceTemplateFileName(serviceTemplateFromYaml),
103 serviceTemplateFromYaml);
109 public void testExtractNetworks() throws Exception {
110 ToscaServiceModel toscaServiceModel =
111 loadToscaServiceModel("/extractServiceComposition/networks/",
112 "/extractServiceComposition/toscaGlobalServiceTemplates/", null);
113 CompositionData compositionData =
114 compositionDataExtractor.extractServiceCompositionData(toscaServiceModel);
115 Assert.assertEquals(compositionData.getComponents().size(), 0);
116 Assert.assertEquals(compositionData.getNetworks().size(), 7);
118 for (Network network : compositionData.getNetworks()) {
119 boolean dhcp = network.isDhcp();
120 switch (network.getName()) {
121 case "contail-net-default-true-dhcp":
122 Assert.assertEquals(dhcp, true);
124 case "contail-net-dhcp-false-param":
125 Assert.assertEquals(dhcp, false);
127 case "contail-net-dhcp-false":
128 Assert.assertEquals(dhcp, false);
130 case "contail-net-dhcp-true-param":
131 Assert.assertEquals(dhcp, true);
133 case "contail-net-dhcp-true":
134 Assert.assertEquals(dhcp, true);
136 case "contail-net-dhcp-default-true-param":
137 Assert.assertEquals(dhcp, true);
139 case "neutron-net-default-dhcp":
140 Assert.assertEquals(dhcp, true);
143 throw new Exception("Unexpected Network Name " + network.getName());
150 public void testExtractOnlyComponents() throws Exception {
151 ToscaServiceModel toscaServiceModel =
152 loadToscaServiceModel("/extractServiceComposition/onlyComponents/",
153 "/extractServiceComposition/toscaGlobalServiceTemplates/", null);
154 CompositionData compositionData =
155 compositionDataExtractor.extractServiceCompositionData(toscaServiceModel);
156 Assert.assertEquals(compositionData.getComponents().size(), 3);
157 Assert.assertEquals(compositionData.getNetworks().size(), 0);
159 for (Component component : compositionData.getComponents()) {
160 switch (component.getData().getName()) {
161 case "org.openecomp.resource.vfc.nodes.heat.pcrf_psm":
162 Assert.assertNull(component.getNics());
163 Assert.assertEquals(component.getData().getDisplayName(), "pcrf_psm");
165 case "org.openecomp.resource.vfc.nodes.heat.nova.Server":
166 Assert.assertNull(component.getNics());
167 Assert.assertEquals(component.getData().getDisplayName(), "Server");
169 case "org.openecomp.resource.vfc.nodes.heat.pcm":
170 Assert.assertNull(component.getNics());
171 Assert.assertEquals(component.getData().getDisplayName(), "pcm");
174 throw new Exception("Unexpected ComponentData Name " + component.getData().getName());
180 public void testExtractComponentsWithPorts() throws Exception {
182 ToscaServiceModel toscaServiceModel =
183 loadToscaServiceModel("/extractServiceComposition/componentsWithPort/",
184 "/extractServiceComposition/toscaGlobalServiceTemplates/", null);
185 CompositionData compositionData =
186 compositionDataExtractor.extractServiceCompositionData(toscaServiceModel);
188 Assert.assertEquals(compositionData.getComponents().size(), 3);
189 Assert.assertEquals(compositionData.getNetworks().size(), 0);
191 for (Component component : compositionData.getComponents()) {
192 switch (component.getData().getName()) {
193 case "org.openecomp.resource.vfc.nodes.heat.pcrf_psm":
194 Assert.assertEquals(component.getNics().size(), 1);
195 Assert.assertEquals(component.getNics().get(0).getName(), "psm01_port_0");
196 Assert.assertNull(component.getNics().get(0).getNetworkName());
197 Assert.assertEquals(component.getData().getDisplayName(), "pcrf_psm");
199 case "org.openecomp.resource.vfc.nodes.heat.nova.Server":
200 Assert.assertEquals(component.getNics().size(), 2);
201 Assert.assertEquals(component.getNics().get(0).getName(), "template_VMInt_OAM_lb_2");
202 Assert.assertNull(component.getNics().get(0).getNetworkName());
203 Assert.assertEquals(component.getNics().get(1).getName(), "FSB1_Internal2");
204 Assert.assertNull(component.getNics().get(1).getNetworkName());
205 Assert.assertEquals(component.getData().getDisplayName(), "Server");
207 case "org.openecomp.resource.vfc.nodes.heat.pcm":
208 Assert.assertEquals(component.getNics().size(), 2);
209 Assert.assertEquals(component.getData().getDisplayName(), "pcm");
212 throw new Exception("Unexpected ComponentData Name " + component.getData().getName());
218 public void testExtractFullComposition() throws Exception {
220 ToscaServiceModel toscaServiceModel =
221 loadToscaServiceModel("/extractServiceComposition/fullComposition/",
222 "/extractServiceComposition/toscaGlobalServiceTemplates/", null);
223 CompositionData compositionData =
224 compositionDataExtractor.extractServiceCompositionData(toscaServiceModel);
225 Assert.assertEquals(compositionData.getComponents().size(), 3);
226 Assert.assertEquals(compositionData.getNetworks().size(), 4);
228 for (Component component : compositionData.getComponents()) {
229 switch (component.getData().getName()) {
230 case "org.openecomp.resource.vfc.nodes.heat.pcrf_psm":
231 Assert.assertEquals(component.getNics().size(), 1);
232 Assert.assertEquals(component.getNics().get(0).getName(), "psm01_port_0");
233 Assert.assertNull(component.getNics().get(0).getNetworkName());
234 Assert.assertEquals(component.getData().getDisplayName(), "pcrf_psm");
236 case "org.openecomp.resource.vfc.nodes.heat.nova.Server":
237 Assert.assertEquals(component.getNics().size(), 4);
238 Assert.assertEquals(component.getData().getDisplayName(), "Server");
239 for (Nic port : component.getNics()) {
240 switch (port.getName()) {
241 case "FSB1_Internal2_port":
242 Assert.assertEquals(port.getNetworkName(), "Internal2-net");
244 case "FSB1_OAM_Port":
245 Assert.assertNull(port.getNetworkName());
247 case "FSB1_Internal1_port":
248 Assert.assertEquals(port.getNetworkName(), "Internal1-net");
250 case "template_VMInt_OAM_lb_2":
251 Assert.assertEquals(port.getNetworkName(), "jsa_net1");
254 throw new Exception("Unexpected Nic " + port.getName());
258 case "org.openecomp.resource.vfc.nodes.heat.pcm":
259 Assert.assertEquals(component.getNics().size(), 2);
260 Assert.assertEquals(component.getData().getDisplayName(), "pcm");
263 throw new Exception("Unexpected ComponentData Name " + component.getData().getName());
269 public void testExtractSubstitutionComposition() throws Exception {
271 ToscaServiceModel toscaServiceModel =
272 loadToscaServiceModel("/extractServiceComposition/substitution/",
273 "/extractServiceComposition/toscaGlobalServiceTemplates/", null);
274 CompositionData compositionData =
275 compositionDataExtractor.extractServiceCompositionData(toscaServiceModel);
276 Assert.assertEquals(compositionData.getComponents().size(), 2);
277 Assert.assertEquals(compositionData.getNetworks().size(), 4);
279 for (Component component : compositionData.getComponents()) {
280 switch (component.getData().getName()) {
281 case "org.openecomp.resource.vfc.nodes.heat.cmaui_image":
282 Assert.assertEquals(component.getNics().size(), 1);
283 Assert.assertEquals(component.getNics().get(0).getName(), "cmaui_port_1");
284 Assert.assertEquals(component.getNics().get(0).getNetworkName(), "test_net1");
285 Assert.assertEquals(component.getData().getDisplayName(), "cmaui_image");
287 case "org.openecomp.resource.vfc.nodes.heat.abc_image":
288 Assert.assertEquals(component.getNics().size(), 1);
289 Assert.assertEquals(component.getNics().get(0).getName(), "abc_port_1");
290 Assert.assertEquals(component.getNics().get(0).getNetworkName(), "test_net2");
291 Assert.assertEquals(component.getData().getDisplayName(), "abc_image");
294 throw new Exception("Unexpected ComponentData Name " + component.getData().getName());
297 for (Network network : compositionData.getNetworks()) {
298 boolean dhcp = network.isDhcp();
299 switch (network.getName()) {
301 Assert.assertEquals(dhcp, true);
304 Assert.assertEquals(dhcp, true);
306 case "Internal1-net": // same network display twice since define in 2 nested files with the same key
307 Assert.assertEquals(dhcp, true);
310 throw new Exception("Unexpected Network Name " + network.getName());