2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.openecomp.sdc.vendorsoftwareproduct.services.impl.composition;
23 import org.apache.commons.io.FileUtils;
24 import org.mockito.InjectMocks;
25 import org.mockito.MockitoAnnotations;
26 import org.openecomp.sdc.logging.api.Logger;
27 import org.openecomp.sdc.logging.api.LoggerFactory;
28 import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
29 import org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate;
30 import org.openecomp.sdc.tosca.services.ToscaUtil;
31 import org.openecomp.sdc.tosca.services.ToscaExtensionYamlUtil;
32 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Component;
33 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionData;
34 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Network;
35 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Nic;
36 import org.testng.Assert;
37 import org.testng.annotations.BeforeMethod;
38 import org.testng.annotations.Test;
41 import java.io.FileInputStream;
42 import java.io.FileNotFoundException;
43 import java.io.IOException;
44 import java.io.InputStream;
46 import java.nio.file.NotDirectoryException;
47 import java.util.Collection;
48 import java.util.HashMap;
53 * @since July 17, 2016.
56 public class CompositionDataExtractorImplTest {
58 private static final Logger log = (Logger) LoggerFactory.getLogger
59 (CompositionDataExtractorImplTest.class.getName());
62 private static CompositionDataExtractorImpl compositionDataExtractor;
65 public void setUp() throws Exception {
66 MockitoAnnotations.initMocks(this);
69 private static ToscaServiceModel loadToscaServiceModel(String serviceTemplatesPath,
70 String globalServiceTemplatesPath,
71 String entryDefinitionServiceTemplate)
73 ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
74 Map<String, ServiceTemplate> serviceTemplates = new HashMap<>();
75 if (entryDefinitionServiceTemplate == null) {
76 entryDefinitionServiceTemplate = "MainServiceTemplate.yaml";
79 loadServiceTemplates(serviceTemplatesPath, toscaExtensionYamlUtil, serviceTemplates);
80 if (globalServiceTemplatesPath != null) {
81 loadServiceTemplates(globalServiceTemplatesPath, toscaExtensionYamlUtil, serviceTemplates);
84 return new ToscaServiceModel(null, serviceTemplates, entryDefinitionServiceTemplate);
87 private static void loadServiceTemplates(String serviceTemplatesPath,
88 ToscaExtensionYamlUtil toscaExtensionYamlUtil,
89 Map<String, ServiceTemplate> serviceTemplates)
91 URL urlFile = CompositionDataExtractorImplTest.class.getResource(serviceTemplatesPath);
92 if (urlFile != null) {
93 File pathFile = new File(urlFile.getFile());
94 Collection<File> files = FileUtils.listFiles(pathFile, null, true);
96 addServiceTemplateFiles(serviceTemplates, files, toscaExtensionYamlUtil);
98 throw new NotDirectoryException(serviceTemplatesPath);
101 throw new NotDirectoryException(serviceTemplatesPath);
105 private static void addServiceTemplateFiles(Map<String, ServiceTemplate> serviceTemplates,
106 Collection<File> files,
107 ToscaExtensionYamlUtil toscaExtensionYamlUtil)
109 for (File file : files) {
110 try (InputStream yamlFile = new FileInputStream(file)) {
111 ServiceTemplate serviceTemplateFromYaml =
112 toscaExtensionYamlUtil.yamlToObject(yamlFile, ServiceTemplate.class);
113 serviceTemplates.put(ToscaUtil.getServiceTemplateFileName(serviceTemplateFromYaml), serviceTemplateFromYaml);
116 } catch (IOException ignore) {
117 log.debug("",ignore);
119 } catch (FileNotFoundException exception) {
121 } catch (IOException exception) {
128 public void testExtractNetworks() throws Exception {
129 ToscaServiceModel toscaServiceModel =
130 loadToscaServiceModel("/extractServiceComposition/networks/",
131 "/extractServiceComposition/toscaGlobalServiceTemplates/", null);
132 CompositionData compositionData =
133 compositionDataExtractor.extractServiceCompositionData(toscaServiceModel);
134 Assert.assertEquals(compositionData.getComponents().size(), 0);
135 Assert.assertEquals(compositionData.getNetworks().size(), 7);
137 for (Network network : compositionData.getNetworks()) {
138 boolean dhcp = network.isDhcp();
139 switch (network.getName()) {
140 case "contail-net-default-true-dhcp":
141 Assert.assertEquals(dhcp, true);
143 case "contail-net-dhcp-false-param":
144 Assert.assertEquals(dhcp, false);
146 case "contail-net-dhcp-false":
147 Assert.assertEquals(dhcp, false);
149 case "contail-net-dhcp-true-param":
150 Assert.assertEquals(dhcp, true);
152 case "contail-net-dhcp-true":
153 Assert.assertEquals(dhcp, true);
155 case "contail-net-dhcp-default-true-param":
156 Assert.assertEquals(dhcp, true);
158 case "neutron-net-default-dhcp":
159 Assert.assertEquals(dhcp, true);
162 throw new Exception("Unexpected Network Name " + network.getName());
169 public void testExtractOnlyComponents() throws Exception {
170 ToscaServiceModel toscaServiceModel =
171 loadToscaServiceModel("/extractServiceComposition/onlyComponents/",
172 "/extractServiceComposition/toscaGlobalServiceTemplates/", null);
173 CompositionData compositionData =
174 compositionDataExtractor.extractServiceCompositionData(toscaServiceModel);
175 Assert.assertEquals(compositionData.getComponents().size(), 3);
176 Assert.assertEquals(compositionData.getNetworks().size(), 0);
178 for (Component component : compositionData.getComponents()) {
179 switch (component.getData().getName()) {
180 case "org.openecomp.resource.vfc.nodes.heat.pcrf_psm":
181 Assert.assertNull(component.getNics());
182 Assert.assertEquals(component.getData().getDisplayName(), "pcrf_psm");
184 case "org.openecomp.resource.vfc.nodes.heat.nova.Server":
185 Assert.assertNull(component.getNics());
186 Assert.assertEquals(component.getData().getDisplayName(), "Server");
188 case "org.openecomp.resource.vfc.nodes.heat.pcm":
189 Assert.assertNull(component.getNics());
190 Assert.assertEquals(component.getData().getDisplayName(), "pcm");
193 throw new Exception("Unexpected ComponentData Name " + component.getData().getName());
199 public void testExtractComponentsWithPorts() throws Exception {
201 ToscaServiceModel toscaServiceModel =
202 loadToscaServiceModel("/extractServiceComposition/componentsWithPort/",
203 "/extractServiceComposition/toscaGlobalServiceTemplates/", null);
204 CompositionData compositionData =
205 compositionDataExtractor.extractServiceCompositionData(toscaServiceModel);
207 Assert.assertEquals(compositionData.getComponents().size(), 3);
208 Assert.assertEquals(compositionData.getNetworks().size(), 0);
210 for (Component component : compositionData.getComponents()) {
211 switch (component.getData().getName()) {
212 case "org.openecomp.resource.vfc.nodes.heat.pcrf_psm":
213 Assert.assertEquals(component.getNics().size(), 1);
214 Assert.assertEquals(component.getNics().get(0).getName(), "psm01_port_0");
215 Assert.assertNull(component.getNics().get(0).getNetworkName());
216 Assert.assertEquals(component.getData().getDisplayName(), "pcrf_psm");
218 case "org.openecomp.resource.vfc.nodes.heat.nova.Server":
219 Assert.assertEquals(component.getNics().size(), 2);
220 Assert.assertEquals(component.getNics().get(0).getName(), "template_VMInt_OAM_lb_2");
221 Assert.assertNull(component.getNics().get(0).getNetworkName());
222 Assert.assertEquals(component.getNics().get(1).getName(), "FSB1_Internal2");
223 Assert.assertNull(component.getNics().get(1).getNetworkName());
224 Assert.assertEquals(component.getData().getDisplayName(), "Server");
226 case "org.openecomp.resource.vfc.nodes.heat.pcm":
227 Assert.assertEquals(component.getNics().size(), 2);
228 Assert.assertEquals(component.getData().getDisplayName(), "pcm");
231 throw new Exception("Unexpected ComponentData Name " + component.getData().getName());
237 public void testExtractFullComposition() throws Exception {
239 ToscaServiceModel toscaServiceModel =
240 loadToscaServiceModel("/extractServiceComposition/fullComposition/",
241 "/extractServiceComposition/toscaGlobalServiceTemplates/", null);
242 CompositionData compositionData =
243 compositionDataExtractor.extractServiceCompositionData(toscaServiceModel);
244 Assert.assertEquals(compositionData.getComponents().size(), 3);
245 Assert.assertEquals(compositionData.getNetworks().size(), 4);
247 for (Component component : compositionData.getComponents()) {
248 switch (component.getData().getName()) {
249 case "org.openecomp.resource.vfc.nodes.heat.pcrf_psm":
250 Assert.assertEquals(component.getNics().size(), 1);
251 Assert.assertEquals(component.getNics().get(0).getName(), "psm01_port_0");
252 Assert.assertNull(component.getNics().get(0).getNetworkName());
253 Assert.assertEquals(component.getData().getDisplayName(), "pcrf_psm");
255 case "org.openecomp.resource.vfc.nodes.heat.nova.Server":
256 Assert.assertEquals(component.getNics().size(), 4);
257 Assert.assertEquals(component.getData().getDisplayName(), "Server");
258 for (Nic port : component.getNics()) {
259 switch (port.getName()) {
260 case "FSB1_Internal2_port":
261 Assert.assertEquals(port.getNetworkName(), "Internal2-net");
263 case "FSB1_OAM_Port":
264 Assert.assertNull(port.getNetworkName());
266 case "FSB1_Internal1_port":
267 Assert.assertEquals(port.getNetworkName(), "Internal1-net");
269 case "template_VMInt_OAM_lb_2":
270 Assert.assertEquals(port.getNetworkName(), "jsa_net1");
273 throw new Exception("Unexpected Nic " + port.getName());
277 case "org.openecomp.resource.vfc.nodes.heat.pcm":
278 Assert.assertEquals(component.getNics().size(), 2);
279 Assert.assertEquals(component.getData().getDisplayName(), "pcm");
282 throw new Exception("Unexpected ComponentData Name " + component.getData().getName());
288 public void testExtractSubstitutionComposition() throws Exception {
290 ToscaServiceModel toscaServiceModel =
291 loadToscaServiceModel("/extractServiceComposition/substitution/",
292 "/extractServiceComposition/toscaGlobalServiceTemplates/", null);
293 CompositionData compositionData =
294 compositionDataExtractor.extractServiceCompositionData(toscaServiceModel);
295 Assert.assertEquals(compositionData.getComponents().size(), 2);
296 Assert.assertEquals(compositionData.getNetworks().size(), 4);
298 for (Component component : compositionData.getComponents()) {
299 switch (component.getData().getName()) {
300 case "org.openecomp.resource.vfc.nodes.heat.cmaui_image":
301 Assert.assertEquals(component.getNics().size(), 1);
302 Assert.assertEquals(component.getNics().get(0).getName(), "cmaui_port_1");
303 Assert.assertEquals(component.getNics().get(0).getNetworkName(), "test_net1");
304 Assert.assertEquals(component.getData().getDisplayName(), "cmaui_image");
306 case "org.openecomp.resource.vfc.nodes.heat.abc_image":
307 Assert.assertEquals(component.getNics().size(), 1);
308 Assert.assertEquals(component.getNics().get(0).getName(), "abc_port_1");
309 Assert.assertEquals(component.getNics().get(0).getNetworkName(), "test_net2");
310 Assert.assertEquals(component.getData().getDisplayName(), "abc_image");
313 throw new Exception("Unexpected ComponentData Name " + component.getData().getName());
316 for (Network network : compositionData.getNetworks()) {
317 boolean dhcp = network.isDhcp();
318 switch (network.getName()) {
320 Assert.assertEquals(dhcp, true);
323 Assert.assertEquals(dhcp, true);
325 case "Internal1-net": // same network display twice since define in 2 nested files with the same key
326 Assert.assertEquals(dhcp, true);
329 throw new Exception("Unexpected Network Name " + network.getName());