[sdc] docker file fix for cassandra
[sdc.git] / openecomp-be / backend / openecomp-sdc-vendor-software-product-manager / src / test / java / org / openecomp / sdc / vendorsoftwareproduct / services / CompositionDataExtractorTest.java
1 package org.openecomp.sdc.vendorsoftwareproduct.services;
2
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;
6
7 import org.testng.Assert;
8 import org.testng.annotations.Test;
9
10 import java.io.*;
11 import java.net.URL;
12 import java.nio.file.NotDirectoryException;
13 import java.util.HashMap;
14 import java.util.Map;
15
16 public class CompositionDataExtractorTest {
17
18
19   private static ToscaServiceModel loadToscaServiceModel(String serviceTemplatesPath,
20                                                          String globalServiceTemplatesPath,
21                                                          String entryDefinitionServiceTemplate)
22       throws IOException {
23     ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
24     Map<String, ServiceTemplate> serviceTemplates = new HashMap<>();
25     if (entryDefinitionServiceTemplate == null) {
26       entryDefinitionServiceTemplate = "MainServiceTemplate.yaml";
27     }
28
29     loadServiceTemplates(serviceTemplatesPath, toscaExtensionYamlUtil, serviceTemplates);
30     if (globalServiceTemplatesPath != null) {
31       loadServiceTemplates(globalServiceTemplatesPath, toscaExtensionYamlUtil, serviceTemplates);
32     }
33
34     return new ToscaServiceModel(null, serviceTemplates, entryDefinitionServiceTemplate);
35   }
36
37   private static void loadServiceTemplates(String serviceTemplatesPath,
38                                            ToscaExtensionYamlUtil toscaExtensionYamlUtil,
39                                            Map<String, ServiceTemplate> serviceTemplates)
40       throws IOException {
41     URL urlFile = CompositionDataExtractorTest.class.getResource(serviceTemplatesPath);
42     if (urlFile != null) {
43       File pathFile = new File(urlFile.getFile());
44       File[] files = pathFile.listFiles();
45       if (files != null) {
46         addServiceTemplateFiles(serviceTemplates, files, toscaExtensionYamlUtil);
47       } else {
48         throw new NotDirectoryException(serviceTemplatesPath);
49       }
50     } else {
51       throw new NotDirectoryException(serviceTemplatesPath);
52     }
53   }
54
55   private static void addServiceTemplateFiles(Map<String, ServiceTemplate> serviceTemplates,
56                                               File[] files,
57                                               ToscaExtensionYamlUtil toscaExtensionYamlUtil)
58       throws IOException {
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);
64         try {
65           yamlFile.close();
66         } catch (IOException ignore) {
67         }
68       } catch (FileNotFoundException e) {
69         throw e;
70       } catch (IOException e) {
71         throw e;
72       }
73     }
74   }
75
76   @Test
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);
85
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);
91           break;
92         case "contail-net-dhcp-false-param":
93           Assert.assertEquals(dhcp, false);
94           break;
95         case "contail-net-dhcp-false":
96           Assert.assertEquals(dhcp, false);
97           break;
98         case "contail-net-dhcp-true-param":
99           Assert.assertEquals(dhcp, true);
100           break;
101         case "contail-net-dhcp-true":
102           Assert.assertEquals(dhcp, true);
103           break;
104         case "contail-net-dhcp-default-true-param":
105           Assert.assertEquals(dhcp, true);
106           break;
107         case "neutron-net-default-dhcp":
108           Assert.assertEquals(dhcp, true);
109           break;
110         default:
111           throw new Exception("Unexpected Network Name " + network.getName());
112       }
113
114     }
115   }
116
117   @Test
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);
126
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");
132           break;
133         case "org.openecomp.resource.vfc.nodes.heat.nova.Server":
134           Assert.assertNull(component.getNics());
135           Assert.assertEquals(component.getData().getDisplayName(), "Server");
136           break;
137         case "org.openecomp.resource.vfc.nodes.heat.pcm":
138           Assert.assertNull(component.getNics());
139           Assert.assertEquals(component.getData().getDisplayName(), "pcm");
140           break;
141         default:
142           throw new Exception("Unexpected ComponentData Name " + component.getData().getName());
143       }
144     }
145   }
146
147   @Test
148   public void testExtractComponentsWithPorts() throws Exception {
149
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);
155
156     Assert.assertEquals(compositionData.getComponents().size(), 3);
157     Assert.assertEquals(compositionData.getNetworks().size(), 0);
158
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");
166           break;
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");
172           break;
173         case "org.openecomp.resource.vfc.nodes.heat.pcm":
174           Assert.assertEquals(component.getNics().size(), 2);
175           Assert.assertEquals(component.getData().getDisplayName(), "pcm");
176           break;
177         default:
178           throw new Exception("Unexpected ComponentData Name " + component.getData().getName());
179       }
180     }
181   }
182
183   @Test
184   public void testExtractFullComposition() throws Exception {
185
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);
193
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");
201           break;
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");
209                 break;
210               case "FSB1_OAM_Port":
211                 Assert.assertNull(port.getNetworkName());
212                 break;
213               case "FSB1_Internal1_port":
214                 Assert.assertEquals(port.getNetworkName(), "Internal1-net");
215                 break;
216               default:
217                 throw new Exception("Unexpected Nic " + port.getName());
218             }
219           }
220           break;
221         case "org.openecomp.resource.vfc.nodes.heat.pcm":
222           Assert.assertEquals(component.getNics().size(), 2);
223           Assert.assertEquals(component.getData().getDisplayName(), "pcm");
224           break;
225         default:
226           throw new Exception("Unexpected ComponentData Name " + component.getData().getName());
227       }
228     }
229   }
230
231   @Test
232   public void testExtractSubstitutionComposition() throws Exception {
233
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);
241
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");
249           break;
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");
255           break;
256         default:
257           throw new Exception("Unexpected ComponentData Name " + component.getData().getName());
258       }
259     }
260     for (org.openecomp.sdc.vendorsoftwareproduct.types.composition.Network network : compositionData.getNetworks()) {
261       boolean dhcp = network.isDhcp();
262       switch (network.getName()) {
263         case "test_net2":
264           Assert.assertEquals(dhcp, true);
265           break;
266         case "test_net1":
267           Assert.assertEquals(dhcp, true);
268           break;
269         case "Internal1-net": // same network display twice since define in 2 nested files with the same key
270           Assert.assertEquals(dhcp, true);
271           break;
272         default:
273           throw new Exception("Unexpected Network Name " + network.getName());
274       }
275
276     }
277   }
278
279
280 }