re base code
[sdc.git] / openecomp-be / backend / openecomp-sdc-vendor-software-product-manager / src / test / java / org / openecomp / sdc / vendorsoftwareproduct / services / impl / composition / CompositionDataExtractorImplTest.java
1 /*
2  * Copyright © 2018 European Support Limited
3  *
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
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15 */
16
17 package org.openecomp.sdc.vendorsoftwareproduct.services.impl.composition;
18
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;
33
34 import java.io.File;
35 import java.io.FileInputStream;
36 import java.io.IOException;
37 import java.io.InputStream;
38 import java.net.URL;
39 import java.nio.file.NotDirectoryException;
40 import java.util.Collection;
41 import java.util.HashMap;
42 import java.util.Map;
43
44 /**
45  * @author shiria
46  * @since July 17, 2016.
47  */
48
49 public class CompositionDataExtractorImplTest {
50
51   @InjectMocks
52   private static CompositionDataExtractorImpl compositionDataExtractor;
53
54   @BeforeMethod
55   public void setUp() throws Exception {
56     MockitoAnnotations.initMocks(this);
57   }
58
59   private static ToscaServiceModel loadToscaServiceModel(String serviceTemplatesPath,
60                                                          String globalServiceTemplatesPath,
61                                                          String entryDefinitionServiceTemplate)
62       throws IOException {
63     ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
64     Map<String, ServiceTemplate> serviceTemplates = new HashMap<>();
65     if (entryDefinitionServiceTemplate == null) {
66       entryDefinitionServiceTemplate = "MainServiceTemplate.yaml";
67     }
68
69     loadServiceTemplates(serviceTemplatesPath, toscaExtensionYamlUtil, serviceTemplates);
70     if (globalServiceTemplatesPath != null) {
71       loadServiceTemplates(globalServiceTemplatesPath, toscaExtensionYamlUtil, serviceTemplates);
72     }
73
74     return new ToscaServiceModel(null, serviceTemplates, entryDefinitionServiceTemplate);
75   }
76
77   private static void loadServiceTemplates(String serviceTemplatesPath,
78                                            ToscaExtensionYamlUtil toscaExtensionYamlUtil,
79                                            Map<String, ServiceTemplate> serviceTemplates)
80       throws IOException {
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);
85       if (files != null) {
86         addServiceTemplateFiles(serviceTemplates, files, toscaExtensionYamlUtil);
87       } else {
88         throw new NotDirectoryException(serviceTemplatesPath);
89       }
90     } else {
91       throw new NotDirectoryException(serviceTemplatesPath);
92     }
93   }
94
95   private static void addServiceTemplateFiles(Map<String, ServiceTemplate> serviceTemplates,
96                                               Collection<File> files,
97                                               ToscaExtensionYamlUtil toscaExtensionYamlUtil)
98       throws IOException {
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);
105       }
106     }
107   }
108
109   @Test
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);
118
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);
124           break;
125         case "contail-net-dhcp-false-param":
126           Assert.assertEquals(dhcp, false);
127           break;
128         case "contail-net-dhcp-false":
129           Assert.assertEquals(dhcp, false);
130           break;
131         case "contail-net-dhcp-true-param":
132           Assert.assertEquals(dhcp, true);
133           break;
134         case "contail-net-dhcp-true":
135           Assert.assertEquals(dhcp, true);
136           break;
137         case "contail-net-dhcp-default-true-param":
138           Assert.assertEquals(dhcp, true);
139           break;
140         case "neutron-net-default-dhcp":
141           Assert.assertEquals(dhcp, true);
142           break;
143         default:
144           throw new Exception("Unexpected Network Name " + network.getName());
145       }
146
147     }
148   }
149
150   @Test
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);
159
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");
165           break;
166         case "org.openecomp.resource.vfc.nodes.heat.nova.Server":
167           Assert.assertNull(component.getNics());
168           Assert.assertEquals(component.getData().getDisplayName(), "Server");
169           break;
170         case "org.openecomp.resource.vfc.nodes.heat.pcm":
171           Assert.assertNull(component.getNics());
172           Assert.assertEquals(component.getData().getDisplayName(), "pcm");
173           break;
174         default:
175           throw new Exception("Unexpected ComponentData Name " + component.getData().getName());
176       }
177     }
178   }
179
180   @Test
181   public void testExtractComponentsWithPorts() throws Exception {
182
183     ToscaServiceModel toscaServiceModel =
184         loadToscaServiceModel("/extractServiceComposition/componentsWithPort/",
185             "/extractServiceComposition/toscaGlobalServiceTemplates/", null);
186     CompositionData compositionData =
187         compositionDataExtractor.extractServiceCompositionData(toscaServiceModel);
188
189     Assert.assertEquals(compositionData.getComponents().size(), 3);
190     Assert.assertEquals(compositionData.getNetworks().size(), 0);
191
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");
199           break;
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");
207           break;
208         case "org.openecomp.resource.vfc.nodes.heat.pcm":
209           Assert.assertEquals(component.getNics().size(), 2);
210           Assert.assertEquals(component.getData().getDisplayName(), "pcm");
211           break;
212         default:
213           throw new Exception("Unexpected ComponentData Name " + component.getData().getName());
214       }
215     }
216   }
217
218   @Test
219   public void testExtractFullComposition() throws Exception {
220
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);
228
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");
236           break;
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");
244                 break;
245               case "FSB1_OAM_Port":
246                 Assert.assertNull(port.getNetworkName());
247                 break;
248               case "FSB1_Internal1_port":
249                 Assert.assertEquals(port.getNetworkName(), "Internal1-net");
250                 break;
251               case "template_VMInt_OAM_lb_2":
252                 Assert.assertEquals(port.getNetworkName(), "jsa_net1");
253                 break;
254               default:
255                 throw new Exception("Unexpected Nic " + port.getName());
256             }
257           }
258           break;
259         case "org.openecomp.resource.vfc.nodes.heat.pcm":
260           Assert.assertEquals(component.getNics().size(), 2);
261           Assert.assertEquals(component.getData().getDisplayName(), "pcm");
262           break;
263         default:
264           throw new Exception("Unexpected ComponentData Name " + component.getData().getName());
265       }
266     }
267   }
268
269   @Test
270   public void testExtractSubstitutionComposition() throws Exception {
271
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);
279
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");
287           break;
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");
293           break;
294         default:
295           throw new Exception("Unexpected ComponentData Name " + component.getData().getName());
296       }
297     }
298     for (Network network : compositionData.getNetworks()) {
299       boolean dhcp = network.isDhcp();
300       switch (network.getName()) {
301         case "test_net2":
302           Assert.assertEquals(dhcp, true);
303           break;
304         case "test_net1":
305           Assert.assertEquals(dhcp, true);
306           break;
307         case "Internal1-net": // same network display twice since define in 2 nested files with the same key
308           Assert.assertEquals(dhcp, true);
309           break;
310         default:
311           throw new Exception("Unexpected Network Name " + network.getName());
312       }
313
314     }
315   }
316 }