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.ToscaExtensionYamlUtil;
31 import org.openecomp.sdc.tosca.services.ToscaUtil;
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),
114 serviceTemplateFromYaml);
117 } catch (IOException ignore) {
118 log.debug("", ignore);
120 } catch (FileNotFoundException exception) {
122 } catch (IOException exception) {
129 public void testExtractNetworks() throws Exception {
130 ToscaServiceModel toscaServiceModel =
131 loadToscaServiceModel("/extractServiceComposition/networks/",
132 "/extractServiceComposition/toscaGlobalServiceTemplates/", null);
133 CompositionData compositionData =
134 compositionDataExtractor.extractServiceCompositionData(toscaServiceModel);
135 Assert.assertEquals(compositionData.getComponents().size(), 0);
136 Assert.assertEquals(compositionData.getNetworks().size(), 7);
138 for (Network network : compositionData.getNetworks()) {
139 boolean dhcp = network.isDhcp();
140 switch (network.getName()) {
141 case "contail-net-default-true-dhcp":
142 Assert.assertEquals(dhcp, true);
144 case "contail-net-dhcp-false-param":
145 Assert.assertEquals(dhcp, false);
147 case "contail-net-dhcp-false":
148 Assert.assertEquals(dhcp, false);
150 case "contail-net-dhcp-true-param":
151 Assert.assertEquals(dhcp, true);
153 case "contail-net-dhcp-true":
154 Assert.assertEquals(dhcp, true);
156 case "contail-net-dhcp-default-true-param":
157 Assert.assertEquals(dhcp, true);
159 case "neutron-net-default-dhcp":
160 Assert.assertEquals(dhcp, true);
163 throw new Exception("Unexpected Network Name " + network.getName());
170 public void testExtractOnlyComponents() throws Exception {
171 ToscaServiceModel toscaServiceModel =
172 loadToscaServiceModel("/extractServiceComposition/onlyComponents/",
173 "/extractServiceComposition/toscaGlobalServiceTemplates/", null);
174 CompositionData compositionData =
175 compositionDataExtractor.extractServiceCompositionData(toscaServiceModel);
176 Assert.assertEquals(compositionData.getComponents().size(), 3);
177 Assert.assertEquals(compositionData.getNetworks().size(), 0);
179 for (Component component : compositionData.getComponents()) {
180 switch (component.getData().getName()) {
181 case "org.openecomp.resource.vfc.nodes.heat.pcrf_psm":
182 Assert.assertNull(component.getNics());
183 Assert.assertEquals(component.getData().getDisplayName(), "pcrf_psm");
185 case "org.openecomp.resource.vfc.nodes.heat.nova.Server":
186 Assert.assertNull(component.getNics());
187 Assert.assertEquals(component.getData().getDisplayName(), "Server");
189 case "org.openecomp.resource.vfc.nodes.heat.pcm":
190 Assert.assertNull(component.getNics());
191 Assert.assertEquals(component.getData().getDisplayName(), "pcm");
194 throw new Exception("Unexpected ComponentData Name " + component.getData().getName());
200 public void testExtractComponentsWithPorts() throws Exception {
202 ToscaServiceModel toscaServiceModel =
203 loadToscaServiceModel("/extractServiceComposition/componentsWithPort/",
204 "/extractServiceComposition/toscaGlobalServiceTemplates/", null);
205 CompositionData compositionData =
206 compositionDataExtractor.extractServiceCompositionData(toscaServiceModel);
208 Assert.assertEquals(compositionData.getComponents().size(), 3);
209 Assert.assertEquals(compositionData.getNetworks().size(), 0);
211 for (Component component : compositionData.getComponents()) {
212 switch (component.getData().getName()) {
213 case "org.openecomp.resource.vfc.nodes.heat.pcrf_psm":
214 Assert.assertEquals(component.getNics().size(), 1);
215 Assert.assertEquals(component.getNics().get(0).getName(), "psm01_port_0");
216 Assert.assertNull(component.getNics().get(0).getNetworkName());
217 Assert.assertEquals(component.getData().getDisplayName(), "pcrf_psm");
219 case "org.openecomp.resource.vfc.nodes.heat.nova.Server":
220 Assert.assertEquals(component.getNics().size(), 2);
221 Assert.assertEquals(component.getNics().get(0).getName(), "template_VMInt_OAM_lb_2");
222 Assert.assertNull(component.getNics().get(0).getNetworkName());
223 Assert.assertEquals(component.getNics().get(1).getName(), "FSB1_Internal2");
224 Assert.assertNull(component.getNics().get(1).getNetworkName());
225 Assert.assertEquals(component.getData().getDisplayName(), "Server");
227 case "org.openecomp.resource.vfc.nodes.heat.pcm":
228 Assert.assertEquals(component.getNics().size(), 2);
229 Assert.assertEquals(component.getData().getDisplayName(), "pcm");
232 throw new Exception("Unexpected ComponentData Name " + component.getData().getName());
238 public void testExtractFullComposition() throws Exception {
240 ToscaServiceModel toscaServiceModel =
241 loadToscaServiceModel("/extractServiceComposition/fullComposition/",
242 "/extractServiceComposition/toscaGlobalServiceTemplates/", null);
243 CompositionData compositionData =
244 compositionDataExtractor.extractServiceCompositionData(toscaServiceModel);
245 Assert.assertEquals(compositionData.getComponents().size(), 3);
246 Assert.assertEquals(compositionData.getNetworks().size(), 4);
248 for (Component component : compositionData.getComponents()) {
249 switch (component.getData().getName()) {
250 case "org.openecomp.resource.vfc.nodes.heat.pcrf_psm":
251 Assert.assertEquals(component.getNics().size(), 1);
252 Assert.assertEquals(component.getNics().get(0).getName(), "psm01_port_0");
253 Assert.assertNull(component.getNics().get(0).getNetworkName());
254 Assert.assertEquals(component.getData().getDisplayName(), "pcrf_psm");
256 case "org.openecomp.resource.vfc.nodes.heat.nova.Server":
257 Assert.assertEquals(component.getNics().size(), 4);
258 Assert.assertEquals(component.getData().getDisplayName(), "Server");
259 for (Nic port : component.getNics()) {
260 switch (port.getName()) {
261 case "FSB1_Internal2_port":
262 Assert.assertEquals(port.getNetworkName(), "Internal2-net");
264 case "FSB1_OAM_Port":
265 Assert.assertNull(port.getNetworkName());
267 case "FSB1_Internal1_port":
268 Assert.assertEquals(port.getNetworkName(), "Internal1-net");
270 case "template_VMInt_OAM_lb_2":
271 Assert.assertEquals(port.getNetworkName(), "jsa_net1");
274 throw new Exception("Unexpected Nic " + port.getName());
278 case "org.openecomp.resource.vfc.nodes.heat.pcm":
279 Assert.assertEquals(component.getNics().size(), 2);
280 Assert.assertEquals(component.getData().getDisplayName(), "pcm");
283 throw new Exception("Unexpected ComponentData Name " + component.getData().getName());
289 public void testExtractSubstitutionComposition() throws Exception {
291 ToscaServiceModel toscaServiceModel =
292 loadToscaServiceModel("/extractServiceComposition/substitution/",
293 "/extractServiceComposition/toscaGlobalServiceTemplates/", null);
294 CompositionData compositionData =
295 compositionDataExtractor.extractServiceCompositionData(toscaServiceModel);
296 Assert.assertEquals(compositionData.getComponents().size(), 2);
297 Assert.assertEquals(compositionData.getNetworks().size(), 4);
299 for (Component component : compositionData.getComponents()) {
300 switch (component.getData().getName()) {
301 case "org.openecomp.resource.vfc.nodes.heat.cmaui_image":
302 Assert.assertEquals(component.getNics().size(), 1);
303 Assert.assertEquals(component.getNics().get(0).getName(), "cmaui_port_1");
304 Assert.assertEquals(component.getNics().get(0).getNetworkName(), "test_net1");
305 Assert.assertEquals(component.getData().getDisplayName(), "cmaui_image");
307 case "org.openecomp.resource.vfc.nodes.heat.abc_image":
308 Assert.assertEquals(component.getNics().size(), 1);
309 Assert.assertEquals(component.getNics().get(0).getName(), "abc_port_1");
310 Assert.assertEquals(component.getNics().get(0).getNetworkName(), "test_net2");
311 Assert.assertEquals(component.getData().getDisplayName(), "abc_image");
314 throw new Exception("Unexpected ComponentData Name " + component.getData().getName());
317 for (Network network : compositionData.getNetworks()) {
318 boolean dhcp = network.isDhcp();
319 switch (network.getName()) {
321 Assert.assertEquals(dhcp, true);
324 Assert.assertEquals(dhcp, true);
326 case "Internal1-net": // same network display twice since define in 2 nested files with the same key
327 Assert.assertEquals(dhcp, true);
330 throw new Exception("Unexpected Network Name " + network.getName());