1 package org.openecomp.sdc.vendorsoftwareproduct.services;
3 import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
4 import org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate;
5 import org.openecomp.sdc.tosca.services.yamlutil.ToscaExtensionYamlUtil;
7 import org.testng.Assert;
8 import org.testng.annotations.Test;
12 import java.nio.file.NotDirectoryException;
13 import java.util.HashMap;
16 public class CompositionDataExtractorTest {
19 private static ToscaServiceModel loadToscaServiceModel(String serviceTemplatesPath,
20 String globalServiceTemplatesPath,
21 String entryDefinitionServiceTemplate)
23 ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
24 Map<String, ServiceTemplate> serviceTemplates = new HashMap<>();
25 if (entryDefinitionServiceTemplate == null) {
26 entryDefinitionServiceTemplate = "MainServiceTemplate.yaml";
29 loadServiceTemplates(serviceTemplatesPath, toscaExtensionYamlUtil, serviceTemplates);
30 if (globalServiceTemplatesPath != null) {
31 loadServiceTemplates(globalServiceTemplatesPath, toscaExtensionYamlUtil, serviceTemplates);
34 return new ToscaServiceModel(null, serviceTemplates, entryDefinitionServiceTemplate);
37 private static void loadServiceTemplates(String serviceTemplatesPath,
38 ToscaExtensionYamlUtil toscaExtensionYamlUtil,
39 Map<String, ServiceTemplate> serviceTemplates)
41 URL urlFile = CompositionDataExtractorTest.class.getResource(serviceTemplatesPath);
42 if (urlFile != null) {
43 File pathFile = new File(urlFile.getFile());
44 File[] files = pathFile.listFiles();
46 addServiceTemplateFiles(serviceTemplates, files, toscaExtensionYamlUtil);
48 throw new NotDirectoryException(serviceTemplatesPath);
51 throw new NotDirectoryException(serviceTemplatesPath);
55 private static void addServiceTemplateFiles(Map<String, ServiceTemplate> serviceTemplates,
57 ToscaExtensionYamlUtil toscaExtensionYamlUtil)
59 for (File file : files) {
60 try (InputStream yamlFile = new FileInputStream(file)) {
61 ServiceTemplate serviceTemplateFromYaml =
62 toscaExtensionYamlUtil.yamlToObject(yamlFile, ServiceTemplate.class);
63 serviceTemplates.put(file.getName(), serviceTemplateFromYaml);
66 } catch (IOException ignore) {
68 } catch (FileNotFoundException e) {
70 } catch (IOException e) {
77 public void testExtractNetworks() throws Exception {
78 ToscaServiceModel toscaServiceModel =
79 loadToscaServiceModel("/extractServiceComposition/networks/",
80 "/extractServiceComposition/toscaGlobalServiceTemplates/", null);
81 org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionData compositionData =
82 CompositionDataExtractor.extractServiceCompositionData(toscaServiceModel);
83 Assert.assertEquals(compositionData.getComponents().size(), 0);
84 Assert.assertEquals(compositionData.getNetworks().size(), 7);
86 for (org.openecomp.sdc.vendorsoftwareproduct.types.composition.Network network : compositionData.getNetworks()) {
87 boolean dhcp = network.isDhcp();
88 switch (network.getName()) {
89 case "contail-net-default-true-dhcp":
90 Assert.assertEquals(dhcp, true);
92 case "contail-net-dhcp-false-param":
93 Assert.assertEquals(dhcp, false);
95 case "contail-net-dhcp-false":
96 Assert.assertEquals(dhcp, false);
98 case "contail-net-dhcp-true-param":
99 Assert.assertEquals(dhcp, true);
101 case "contail-net-dhcp-true":
102 Assert.assertEquals(dhcp, true);
104 case "contail-net-dhcp-default-true-param":
105 Assert.assertEquals(dhcp, true);
107 case "neutron-net-default-dhcp":
108 Assert.assertEquals(dhcp, true);
111 throw new Exception("Unexpected Network Name " + network.getName());
118 public void testExtractOnlyComponents() throws Exception {
119 ToscaServiceModel toscaServiceModel =
120 loadToscaServiceModel("/extractServiceComposition/onlyComponents/",
121 "/extractServiceComposition/toscaGlobalServiceTemplates/", "OnlyComponentsST.yaml");
122 org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionData compositionData =
123 CompositionDataExtractor.extractServiceCompositionData(toscaServiceModel);
124 Assert.assertEquals(compositionData.getComponents().size(), 3);
125 Assert.assertEquals(compositionData.getNetworks().size(), 0);
127 for (org.openecomp.sdc.vendorsoftwareproduct.types.composition.Component component : compositionData.getComponents()) {
128 switch (component.getData().getName()) {
129 case "org.openecomp.resource.vfc.nodes.heat.pcrf_psm":
130 Assert.assertNull(component.getNics());
131 Assert.assertEquals(component.getData().getDisplayName(), "pcrf_psm");
133 case "org.openecomp.resource.vfc.nodes.heat.nova.Server":
134 Assert.assertNull(component.getNics());
135 Assert.assertEquals(component.getData().getDisplayName(), "Server");
137 case "org.openecomp.resource.vfc.nodes.heat.pcm":
138 Assert.assertNull(component.getNics());
139 Assert.assertEquals(component.getData().getDisplayName(), "pcm");
142 throw new Exception("Unexpected ComponentData Name " + component.getData().getName());
148 public void testExtractComponentsWithPorts() throws Exception {
150 ToscaServiceModel toscaServiceModel =
151 loadToscaServiceModel("/extractServiceComposition/componentsWithPort/",
152 "/extractServiceComposition/toscaGlobalServiceTemplates/", "ComponentsWithPortST.yaml");
153 org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionData compositionData =
154 CompositionDataExtractor.extractServiceCompositionData(toscaServiceModel);
156 Assert.assertEquals(compositionData.getComponents().size(), 3);
157 Assert.assertEquals(compositionData.getNetworks().size(), 0);
159 for (org.openecomp.sdc.vendorsoftwareproduct.types.composition.Component component : compositionData.getComponents()) {
160 switch (component.getData().getName()) {
161 case "org.openecomp.resource.vfc.nodes.heat.pcrf_psm":
162 Assert.assertEquals(component.getNics().size(), 1);
163 Assert.assertEquals(component.getNics().get(0).getName(), "psm01_port_0");
164 Assert.assertNull(component.getNics().get(0).getNetworkName());
165 Assert.assertEquals(component.getData().getDisplayName(), "pcrf_psm");
167 case "org.openecomp.resource.vfc.nodes.heat.nova.Server":
168 Assert.assertEquals(component.getNics().size(), 1);
169 Assert.assertEquals(component.getNics().get(0).getName(), "FSB1_Internal2");
170 Assert.assertNull(component.getNics().get(0).getNetworkName());
171 Assert.assertEquals(component.getData().getDisplayName(), "Server");
173 case "org.openecomp.resource.vfc.nodes.heat.pcm":
174 Assert.assertEquals(component.getNics().size(), 2);
175 Assert.assertEquals(component.getData().getDisplayName(), "pcm");
178 throw new Exception("Unexpected ComponentData Name " + component.getData().getName());
184 public void testExtractFullComposition() throws Exception {
186 ToscaServiceModel toscaServiceModel =
187 loadToscaServiceModel("/extractServiceComposition/fullComposition/",
188 "/extractServiceComposition/toscaGlobalServiceTemplates/", null);
189 org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionData compositionData =
190 CompositionDataExtractor.extractServiceCompositionData(toscaServiceModel);
191 Assert.assertEquals(compositionData.getComponents().size(), 3);
192 Assert.assertEquals(compositionData.getNetworks().size(), 3);
194 for (org.openecomp.sdc.vendorsoftwareproduct.types.composition.Component component : compositionData.getComponents()) {
195 switch (component.getData().getName()) {
196 case "org.openecomp.resource.vfc.nodes.heat.pcrf_psm":
197 Assert.assertEquals(component.getNics().size(), 1);
198 Assert.assertEquals(component.getNics().get(0).getName(), "psm01_port_0");
199 Assert.assertNull(component.getNics().get(0).getNetworkName());
200 Assert.assertEquals(component.getData().getDisplayName(), "pcrf_psm");
202 case "org.openecomp.resource.vfc.nodes.heat.nova.Server":
203 Assert.assertEquals(component.getNics().size(), 3);
204 Assert.assertEquals(component.getData().getDisplayName(), "Server");
205 for (org.openecomp.sdc.vendorsoftwareproduct.types.composition.Nic port : component.getNics()) {
206 switch (port.getName()) {
207 case "FSB1_Internal2_port":
208 Assert.assertEquals(port.getNetworkName(), "Internal2-net");
210 case "FSB1_OAM_Port":
211 Assert.assertNull(port.getNetworkName());
213 case "FSB1_Internal1_port":
214 Assert.assertEquals(port.getNetworkName(), "Internal1-net");
217 throw new Exception("Unexpected Nic " + port.getName());
221 case "org.openecomp.resource.vfc.nodes.heat.pcm":
222 Assert.assertEquals(component.getNics().size(), 2);
223 Assert.assertEquals(component.getData().getDisplayName(), "pcm");
226 throw new Exception("Unexpected ComponentData Name " + component.getData().getName());
232 public void testExtractSubstitutionComposition() throws Exception {
234 ToscaServiceModel toscaServiceModel =
235 loadToscaServiceModel("/extractServiceComposition/substitution/",
236 "/extractServiceComposition/toscaGlobalServiceTemplates/", null);
237 org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionData compositionData =
238 CompositionDataExtractor.extractServiceCompositionData(toscaServiceModel);
239 Assert.assertEquals(compositionData.getComponents().size(), 2);
240 Assert.assertEquals(compositionData.getNetworks().size(), 4);
242 for (org.openecomp.sdc.vendorsoftwareproduct.types.composition.Component component : compositionData.getComponents()) {
243 switch (component.getData().getName()) {
244 case "org.openecomp.resource.vfc.nodes.heat.cmaui_image":
245 Assert.assertEquals(component.getNics().size(), 1);
246 Assert.assertEquals(component.getNics().get(0).getName(), "cmaui_port_1");
247 Assert.assertEquals(component.getNics().get(0).getNetworkName(), "test_net1");
248 Assert.assertEquals(component.getData().getDisplayName(), "cmaui_image");
250 case "org.openecomp.resource.vfc.nodes.heat.abc_image":
251 Assert.assertEquals(component.getNics().size(), 1);
252 Assert.assertEquals(component.getNics().get(0).getName(), "abc_port_1");
253 Assert.assertEquals(component.getNics().get(0).getNetworkName(), "test_net2");
254 Assert.assertEquals(component.getData().getDisplayName(), "abc_image");
257 throw new Exception("Unexpected ComponentData Name " + component.getData().getName());
260 for (org.openecomp.sdc.vendorsoftwareproduct.types.composition.Network network : compositionData.getNetworks()) {
261 boolean dhcp = network.isDhcp();
262 switch (network.getName()) {
264 Assert.assertEquals(dhcp, true);
267 Assert.assertEquals(dhcp, true);
269 case "Internal1-net": // same network display twice since define in 2 nested files with the same key
270 Assert.assertEquals(dhcp, true);
273 throw new Exception("Unexpected Network Name " + network.getName());