Sorted out unit-test libraries in onboarding
[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 java.io.File;
20 import java.io.FileInputStream;
21 import java.io.IOException;
22 import java.io.InputStream;
23 import java.net.URL;
24 import java.nio.file.NotDirectoryException;
25 import java.util.Collection;
26 import java.util.HashMap;
27 import java.util.Map;
28 import org.apache.commons.io.FileUtils;
29 import org.mockito.InjectMocks;
30 import org.mockito.MockitoAnnotations;
31 import org.onap.sdc.tosca.datatypes.model.ServiceTemplate;
32 import org.onap.sdc.tosca.services.ToscaExtensionYamlUtil;
33 import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
34 import org.openecomp.sdc.tosca.services.ToscaUtil;
35 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Component;
36 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.CompositionData;
37 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Network;
38 import org.openecomp.sdc.vendorsoftwareproduct.types.composition.Nic;
39 import org.testng.Assert;
40 import org.testng.annotations.BeforeMethod;
41 import org.testng.annotations.Test;
42
43 /**
44  * @author shiria
45  * @since July 17, 2016.
46  */
47
48 public class CompositionDataExtractorImplTest {
49
50   @InjectMocks
51   private static CompositionDataExtractorImpl compositionDataExtractor;
52
53   @BeforeMethod
54   public void setUp() throws Exception {
55     MockitoAnnotations.initMocks(this);
56   }
57
58   private static ToscaServiceModel loadToscaServiceModel(String serviceTemplatesPath,
59                                                          String globalServiceTemplatesPath,
60                                                          String entryDefinitionServiceTemplate)
61       throws IOException {
62     ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
63     Map<String, ServiceTemplate> serviceTemplates = new HashMap<>();
64     if (entryDefinitionServiceTemplate == null) {
65       entryDefinitionServiceTemplate = "MainServiceTemplate.yaml";
66     }
67
68     loadServiceTemplates(serviceTemplatesPath, toscaExtensionYamlUtil, serviceTemplates);
69     if (globalServiceTemplatesPath != null) {
70       loadServiceTemplates(globalServiceTemplatesPath, toscaExtensionYamlUtil, serviceTemplates);
71     }
72
73     return new ToscaServiceModel(null, serviceTemplates, entryDefinitionServiceTemplate);
74   }
75
76   private static void loadServiceTemplates(String serviceTemplatesPath,
77                                            ToscaExtensionYamlUtil toscaExtensionYamlUtil,
78                                            Map<String, ServiceTemplate> serviceTemplates)
79       throws IOException {
80     URL urlFile = CompositionDataExtractorImplTest.class.getResource(serviceTemplatesPath);
81     if (urlFile != null) {
82       File pathFile = new File(urlFile.getFile());
83       Collection<File> files = FileUtils.listFiles(pathFile, null, true);
84       if (files != null) {
85         addServiceTemplateFiles(serviceTemplates, files, toscaExtensionYamlUtil);
86       } else {
87         throw new NotDirectoryException(serviceTemplatesPath);
88       }
89     } else {
90       throw new NotDirectoryException(serviceTemplatesPath);
91     }
92   }
93
94   private static void addServiceTemplateFiles(Map<String, ServiceTemplate> serviceTemplates,
95                                               Collection<File> files,
96                                               ToscaExtensionYamlUtil toscaExtensionYamlUtil)
97       throws IOException {
98     for (File file : files) {
99       try (InputStream yamlFile = new FileInputStream(file)) {
100         ServiceTemplate serviceTemplateFromYaml =
101             toscaExtensionYamlUtil.yamlToObject(yamlFile, ServiceTemplate.class);
102         serviceTemplates.put(ToscaUtil.getServiceTemplateFileName(serviceTemplateFromYaml),
103             serviceTemplateFromYaml);
104       }
105     }
106   }
107
108   @Test
109   public void testExtractNetworks() throws Exception {
110     ToscaServiceModel toscaServiceModel =
111         loadToscaServiceModel("/extractServiceComposition/networks/",
112             "/extractServiceComposition/toscaGlobalServiceTemplates/", null);
113     CompositionData compositionData =
114         compositionDataExtractor.extractServiceCompositionData(toscaServiceModel);
115     Assert.assertEquals(compositionData.getComponents().size(), 0);
116     Assert.assertEquals(compositionData.getNetworks().size(), 7);
117
118     for (Network network : compositionData.getNetworks()) {
119       boolean dhcp = network.isDhcp();
120       switch (network.getName()) {
121         case "contail-net-default-true-dhcp":
122           Assert.assertEquals(dhcp, true);
123           break;
124         case "contail-net-dhcp-false-param":
125           Assert.assertEquals(dhcp, false);
126           break;
127         case "contail-net-dhcp-false":
128           Assert.assertEquals(dhcp, false);
129           break;
130         case "contail-net-dhcp-true-param":
131           Assert.assertEquals(dhcp, true);
132           break;
133         case "contail-net-dhcp-true":
134           Assert.assertEquals(dhcp, true);
135           break;
136         case "contail-net-dhcp-default-true-param":
137           Assert.assertEquals(dhcp, true);
138           break;
139         case "neutron-net-default-dhcp":
140           Assert.assertEquals(dhcp, true);
141           break;
142         default:
143           throw new Exception("Unexpected Network Name " + network.getName());
144       }
145
146     }
147   }
148
149   @Test
150   public void testExtractOnlyComponents() throws Exception {
151     ToscaServiceModel toscaServiceModel =
152         loadToscaServiceModel("/extractServiceComposition/onlyComponents/",
153             "/extractServiceComposition/toscaGlobalServiceTemplates/", null);
154     CompositionData compositionData =
155         compositionDataExtractor.extractServiceCompositionData(toscaServiceModel);
156     Assert.assertEquals(compositionData.getComponents().size(), 3);
157     Assert.assertEquals(compositionData.getNetworks().size(), 0);
158
159     for (Component component : compositionData.getComponents()) {
160       switch (component.getData().getName()) {
161         case "org.openecomp.resource.vfc.nodes.heat.pcrf_psm":
162           Assert.assertNull(component.getNics());
163           Assert.assertEquals(component.getData().getDisplayName(), "pcrf_psm");
164           break;
165         case "org.openecomp.resource.vfc.nodes.heat.nova.Server":
166           Assert.assertNull(component.getNics());
167           Assert.assertEquals(component.getData().getDisplayName(), "Server");
168           break;
169         case "org.openecomp.resource.vfc.nodes.heat.pcm":
170           Assert.assertNull(component.getNics());
171           Assert.assertEquals(component.getData().getDisplayName(), "pcm");
172           break;
173         default:
174           throw new Exception("Unexpected ComponentData Name " + component.getData().getName());
175       }
176     }
177   }
178
179   @Test
180   public void testExtractComponentsWithPorts() throws Exception {
181
182     ToscaServiceModel toscaServiceModel =
183         loadToscaServiceModel("/extractServiceComposition/componentsWithPort/",
184             "/extractServiceComposition/toscaGlobalServiceTemplates/", null);
185     CompositionData compositionData =
186         compositionDataExtractor.extractServiceCompositionData(toscaServiceModel);
187
188     Assert.assertEquals(compositionData.getComponents().size(), 3);
189     Assert.assertEquals(compositionData.getNetworks().size(), 0);
190
191     for (Component component : compositionData.getComponents()) {
192       switch (component.getData().getName()) {
193         case "org.openecomp.resource.vfc.nodes.heat.pcrf_psm":
194           Assert.assertEquals(component.getNics().size(), 1);
195           Assert.assertEquals(component.getNics().get(0).getName(), "psm01_port_0");
196           Assert.assertNull(component.getNics().get(0).getNetworkName());
197           Assert.assertEquals(component.getData().getDisplayName(), "pcrf_psm");
198           break;
199         case "org.openecomp.resource.vfc.nodes.heat.nova.Server":
200           Assert.assertEquals(component.getNics().size(), 2);
201           Assert.assertEquals(component.getNics().get(0).getName(), "template_VMInt_OAM_lb_2");
202           Assert.assertNull(component.getNics().get(0).getNetworkName());
203           Assert.assertEquals(component.getNics().get(1).getName(), "FSB1_Internal2");
204           Assert.assertNull(component.getNics().get(1).getNetworkName());
205           Assert.assertEquals(component.getData().getDisplayName(), "Server");
206           break;
207         case "org.openecomp.resource.vfc.nodes.heat.pcm":
208           Assert.assertEquals(component.getNics().size(), 2);
209           Assert.assertEquals(component.getData().getDisplayName(), "pcm");
210           break;
211         default:
212           throw new Exception("Unexpected ComponentData Name " + component.getData().getName());
213       }
214     }
215   }
216
217   @Test
218   public void testExtractFullComposition() throws Exception {
219
220     ToscaServiceModel toscaServiceModel =
221         loadToscaServiceModel("/extractServiceComposition/fullComposition/",
222             "/extractServiceComposition/toscaGlobalServiceTemplates/", null);
223     CompositionData compositionData =
224         compositionDataExtractor.extractServiceCompositionData(toscaServiceModel);
225     Assert.assertEquals(compositionData.getComponents().size(), 3);
226     Assert.assertEquals(compositionData.getNetworks().size(), 4);
227
228     for (Component component : compositionData.getComponents()) {
229       switch (component.getData().getName()) {
230         case "org.openecomp.resource.vfc.nodes.heat.pcrf_psm":
231           Assert.assertEquals(component.getNics().size(), 1);
232           Assert.assertEquals(component.getNics().get(0).getName(), "psm01_port_0");
233           Assert.assertNull(component.getNics().get(0).getNetworkName());
234           Assert.assertEquals(component.getData().getDisplayName(), "pcrf_psm");
235           break;
236         case "org.openecomp.resource.vfc.nodes.heat.nova.Server":
237           Assert.assertEquals(component.getNics().size(), 4);
238           Assert.assertEquals(component.getData().getDisplayName(), "Server");
239           for (Nic port : component.getNics()) {
240             switch (port.getName()) {
241               case "FSB1_Internal2_port":
242                 Assert.assertEquals(port.getNetworkName(), "Internal2-net");
243                 break;
244               case "FSB1_OAM_Port":
245                 Assert.assertNull(port.getNetworkName());
246                 break;
247               case "FSB1_Internal1_port":
248                 Assert.assertEquals(port.getNetworkName(), "Internal1-net");
249                 break;
250               case "template_VMInt_OAM_lb_2":
251                 Assert.assertEquals(port.getNetworkName(), "jsa_net1");
252                 break;
253               default:
254                 throw new Exception("Unexpected Nic " + port.getName());
255             }
256           }
257           break;
258         case "org.openecomp.resource.vfc.nodes.heat.pcm":
259           Assert.assertEquals(component.getNics().size(), 2);
260           Assert.assertEquals(component.getData().getDisplayName(), "pcm");
261           break;
262         default:
263           throw new Exception("Unexpected ComponentData Name " + component.getData().getName());
264       }
265     }
266   }
267
268   @Test
269   public void testExtractSubstitutionComposition() throws Exception {
270
271     ToscaServiceModel toscaServiceModel =
272         loadToscaServiceModel("/extractServiceComposition/substitution/",
273             "/extractServiceComposition/toscaGlobalServiceTemplates/", null);
274     CompositionData compositionData =
275         compositionDataExtractor.extractServiceCompositionData(toscaServiceModel);
276     Assert.assertEquals(compositionData.getComponents().size(), 2);
277     Assert.assertEquals(compositionData.getNetworks().size(), 4);
278
279     for (Component component : compositionData.getComponents()) {
280       switch (component.getData().getName()) {
281         case "org.openecomp.resource.vfc.nodes.heat.cmaui_image":
282           Assert.assertEquals(component.getNics().size(), 1);
283           Assert.assertEquals(component.getNics().get(0).getName(), "cmaui_port_1");
284           Assert.assertEquals(component.getNics().get(0).getNetworkName(), "test_net1");
285           Assert.assertEquals(component.getData().getDisplayName(), "cmaui_image");
286           break;
287         case "org.openecomp.resource.vfc.nodes.heat.abc_image":
288           Assert.assertEquals(component.getNics().size(), 1);
289           Assert.assertEquals(component.getNics().get(0).getName(), "abc_port_1");
290           Assert.assertEquals(component.getNics().get(0).getNetworkName(), "test_net2");
291           Assert.assertEquals(component.getData().getDisplayName(), "abc_image");
292           break;
293         default:
294           throw new Exception("Unexpected ComponentData Name " + component.getData().getName());
295       }
296     }
297     for (Network network : compositionData.getNetworks()) {
298       boolean dhcp = network.isDhcp();
299       switch (network.getName()) {
300         case "test_net2":
301           Assert.assertEquals(dhcp, true);
302           break;
303         case "test_net1":
304           Assert.assertEquals(dhcp, true);
305           break;
306         case "Internal1-net": // same network display twice since define in 2 nested files with the same key
307           Assert.assertEquals(dhcp, true);
308           break;
309         default:
310           throw new Exception("Unexpected Network Name " + network.getName());
311       }
312
313     }
314   }
315 }