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;
19 import org.apache.commons.io.FileUtils;
20 import org.mockito.InjectMocks;
21 import org.mockito.MockitoAnnotations;
22 import org.onap.sdc.tosca.datatypes.model.ServiceTemplate;
23 import org.onap.sdc.tosca.services.ToscaExtensionYamlUtil;
24 import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
25 import org.openecomp.sdc.tosca.services.ToscaUtil;
26 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Component;
27 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionData;
28 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Network;
29 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Nic;
30 import org.testng.Assert;
31 import org.testng.annotations.BeforeMethod;
32 import org.testng.annotations.Test;
35 import java.io.FileInputStream;
36 import java.io.IOException;
37 import java.io.InputStream;
39 import java.nio.file.NotDirectoryException;
40 import java.util.Collection;
41 import java.util.HashMap;
46 * @since July 17, 2016.
49 public class CompositionDataExtractorImplTest {
52 private static CompositionDataExtractorImpl compositionDataExtractor;
55 public void setUp() throws Exception {
56 MockitoAnnotations.initMocks(this);
59 private static ToscaServiceModel loadToscaServiceModel(String serviceTemplatesPath,
60 String globalServiceTemplatesPath,
61 String entryDefinitionServiceTemplate)
63 ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
64 Map<String, ServiceTemplate> serviceTemplates = new HashMap<>();
65 if (entryDefinitionServiceTemplate == null) {
66 entryDefinitionServiceTemplate = "MainServiceTemplate.yaml";
69 loadServiceTemplates(serviceTemplatesPath, toscaExtensionYamlUtil, serviceTemplates);
70 if (globalServiceTemplatesPath != null) {
71 loadServiceTemplates(globalServiceTemplatesPath, toscaExtensionYamlUtil, serviceTemplates);
74 return new ToscaServiceModel(null, serviceTemplates, entryDefinitionServiceTemplate);
77 private static void loadServiceTemplates(String serviceTemplatesPath,
78 ToscaExtensionYamlUtil toscaExtensionYamlUtil,
79 Map<String, ServiceTemplate> serviceTemplates)
81 URL urlFile = CompositionDataExtractorImplTest.class.getResource(serviceTemplatesPath);
82 if (urlFile != null) {
83 File pathFile = new File(urlFile.getFile());
84 Collection<File> files = FileUtils.listFiles(pathFile, null, true);
86 addServiceTemplateFiles(serviceTemplates, files, toscaExtensionYamlUtil);
88 throw new NotDirectoryException(serviceTemplatesPath);
91 throw new NotDirectoryException(serviceTemplatesPath);
95 private static void addServiceTemplateFiles(Map<String, ServiceTemplate> serviceTemplates,
96 Collection<File> files,
97 ToscaExtensionYamlUtil toscaExtensionYamlUtil)
99 for (File file : files) {
100 try (InputStream yamlFile = new FileInputStream(file)) {
101 ServiceTemplate serviceTemplateFromYaml =
102 toscaExtensionYamlUtil.yamlToObject(yamlFile, ServiceTemplate.class);
103 serviceTemplates.put(ToscaUtil.getServiceTemplateFileName(serviceTemplateFromYaml),
104 serviceTemplateFromYaml);
110 public void testExtractNetworks() throws Exception {
111 ToscaServiceModel toscaServiceModel =
112 loadToscaServiceModel("/extractServiceComposition/networks/",
113 "/extractServiceComposition/toscaGlobalServiceTemplates/", null);
114 CompositionData compositionData =
115 compositionDataExtractor.extractServiceCompositionData(toscaServiceModel);
116 Assert.assertEquals(compositionData.getComponents().size(), 0);
117 Assert.assertEquals(compositionData.getNetworks().size(), 7);
119 for (Network network : compositionData.getNetworks()) {
120 boolean dhcp = network.isDhcp();
121 switch (network.getName()) {
122 case "contail-net-default-true-dhcp":
123 Assert.assertEquals(dhcp, true);
125 case "contail-net-dhcp-false-param":
126 Assert.assertEquals(dhcp, false);
128 case "contail-net-dhcp-false":
129 Assert.assertEquals(dhcp, false);
131 case "contail-net-dhcp-true-param":
132 Assert.assertEquals(dhcp, true);
134 case "contail-net-dhcp-true":
135 Assert.assertEquals(dhcp, true);
137 case "contail-net-dhcp-default-true-param":
138 Assert.assertEquals(dhcp, true);
140 case "neutron-net-default-dhcp":
141 Assert.assertEquals(dhcp, true);
144 throw new Exception("Unexpected Network Name " + network.getName());
151 public void testExtractOnlyComponents() throws Exception {
152 ToscaServiceModel toscaServiceModel =
153 loadToscaServiceModel("/extractServiceComposition/onlyComponents/",
154 "/extractServiceComposition/toscaGlobalServiceTemplates/", null);
155 CompositionData compositionData =
156 compositionDataExtractor.extractServiceCompositionData(toscaServiceModel);
157 Assert.assertEquals(compositionData.getComponents().size(), 3);
158 Assert.assertEquals(compositionData.getNetworks().size(), 0);
160 for (Component component : compositionData.getComponents()) {
161 switch (component.getData().getName()) {
162 case "org.openecomp.resource.vfc.nodes.heat.pcrf_psm":
163 Assert.assertNull(component.getNics());
164 Assert.assertEquals(component.getData().getDisplayName(), "pcrf_psm");
166 case "org.openecomp.resource.vfc.nodes.heat.nova.Server":
167 Assert.assertNull(component.getNics());
168 Assert.assertEquals(component.getData().getDisplayName(), "Server");
170 case "org.openecomp.resource.vfc.nodes.heat.pcm":
171 Assert.assertNull(component.getNics());
172 Assert.assertEquals(component.getData().getDisplayName(), "pcm");
175 throw new Exception("Unexpected ComponentData Name " + component.getData().getName());
181 public void testExtractComponentsWithPorts() throws Exception {
183 ToscaServiceModel toscaServiceModel =
184 loadToscaServiceModel("/extractServiceComposition/componentsWithPort/",
185 "/extractServiceComposition/toscaGlobalServiceTemplates/", null);
186 CompositionData compositionData =
187 compositionDataExtractor.extractServiceCompositionData(toscaServiceModel);
189 Assert.assertEquals(compositionData.getComponents().size(), 3);
190 Assert.assertEquals(compositionData.getNetworks().size(), 0);
192 for (Component component : compositionData.getComponents()) {
193 switch (component.getData().getName()) {
194 case "org.openecomp.resource.vfc.nodes.heat.pcrf_psm":
195 Assert.assertEquals(component.getNics().size(), 1);
196 Assert.assertEquals(component.getNics().get(0).getName(), "psm01_port_0");
197 Assert.assertNull(component.getNics().get(0).getNetworkName());
198 Assert.assertEquals(component.getData().getDisplayName(), "pcrf_psm");
200 case "org.openecomp.resource.vfc.nodes.heat.nova.Server":
201 Assert.assertEquals(component.getNics().size(), 2);
202 Assert.assertEquals(component.getNics().get(0).getName(), "template_VMInt_OAM_lb_2");
203 Assert.assertNull(component.getNics().get(0).getNetworkName());
204 Assert.assertEquals(component.getNics().get(1).getName(), "FSB1_Internal2");
205 Assert.assertNull(component.getNics().get(1).getNetworkName());
206 Assert.assertEquals(component.getData().getDisplayName(), "Server");
208 case "org.openecomp.resource.vfc.nodes.heat.pcm":
209 Assert.assertEquals(component.getNics().size(), 2);
210 Assert.assertEquals(component.getData().getDisplayName(), "pcm");
213 throw new Exception("Unexpected ComponentData Name " + component.getData().getName());
219 public void testExtractFullComposition() throws Exception {
221 ToscaServiceModel toscaServiceModel =
222 loadToscaServiceModel("/extractServiceComposition/fullComposition/",
223 "/extractServiceComposition/toscaGlobalServiceTemplates/", null);
224 CompositionData compositionData =
225 compositionDataExtractor.extractServiceCompositionData(toscaServiceModel);
226 Assert.assertEquals(compositionData.getComponents().size(), 3);
227 Assert.assertEquals(compositionData.getNetworks().size(), 4);
229 for (Component component : compositionData.getComponents()) {
230 switch (component.getData().getName()) {
231 case "org.openecomp.resource.vfc.nodes.heat.pcrf_psm":
232 Assert.assertEquals(component.getNics().size(), 1);
233 Assert.assertEquals(component.getNics().get(0).getName(), "psm01_port_0");
234 Assert.assertNull(component.getNics().get(0).getNetworkName());
235 Assert.assertEquals(component.getData().getDisplayName(), "pcrf_psm");
237 case "org.openecomp.resource.vfc.nodes.heat.nova.Server":
238 Assert.assertEquals(component.getNics().size(), 4);
239 Assert.assertEquals(component.getData().getDisplayName(), "Server");
240 for (Nic port : component.getNics()) {
241 switch (port.getName()) {
242 case "FSB1_Internal2_port":
243 Assert.assertEquals(port.getNetworkName(), "Internal2-net");
245 case "FSB1_OAM_Port":
246 Assert.assertNull(port.getNetworkName());
248 case "FSB1_Internal1_port":
249 Assert.assertEquals(port.getNetworkName(), "Internal1-net");
251 case "template_VMInt_OAM_lb_2":
252 Assert.assertEquals(port.getNetworkName(), "jsa_net1");
255 throw new Exception("Unexpected Nic " + port.getName());
259 case "org.openecomp.resource.vfc.nodes.heat.pcm":
260 Assert.assertEquals(component.getNics().size(), 2);
261 Assert.assertEquals(component.getData().getDisplayName(), "pcm");
264 throw new Exception("Unexpected ComponentData Name " + component.getData().getName());
270 public void testExtractSubstitutionComposition() throws Exception {
272 ToscaServiceModel toscaServiceModel =
273 loadToscaServiceModel("/extractServiceComposition/substitution/",
274 "/extractServiceComposition/toscaGlobalServiceTemplates/", null);
275 CompositionData compositionData =
276 compositionDataExtractor.extractServiceCompositionData(toscaServiceModel);
277 Assert.assertEquals(compositionData.getComponents().size(), 2);
278 Assert.assertEquals(compositionData.getNetworks().size(), 4);
280 for (Component component : compositionData.getComponents()) {
281 switch (component.getData().getName()) {
282 case "org.openecomp.resource.vfc.nodes.heat.cmaui_image":
283 Assert.assertEquals(component.getNics().size(), 1);
284 Assert.assertEquals(component.getNics().get(0).getName(), "cmaui_port_1");
285 Assert.assertEquals(component.getNics().get(0).getNetworkName(), "test_net1");
286 Assert.assertEquals(component.getData().getDisplayName(), "cmaui_image");
288 case "org.openecomp.resource.vfc.nodes.heat.abc_image":
289 Assert.assertEquals(component.getNics().size(), 1);
290 Assert.assertEquals(component.getNics().get(0).getName(), "abc_port_1");
291 Assert.assertEquals(component.getNics().get(0).getNetworkName(), "test_net2");
292 Assert.assertEquals(component.getData().getDisplayName(), "abc_image");
295 throw new Exception("Unexpected ComponentData Name " + component.getData().getName());
298 for (Network network : compositionData.getNetworks()) {
299 boolean dhcp = network.isDhcp();
300 switch (network.getName()) {
302 Assert.assertEquals(dhcp, true);
305 Assert.assertEquals(dhcp, true);
307 case "Internal1-net": // same network display twice since define in 2 nested files with the same key
308 Assert.assertEquals(dhcp, true);
311 throw new Exception("Unexpected Network Name " + network.getName());