push addional code
[sdc.git] / openecomp-be / lib / openecomp-sdc-enrichment-lib / openecomp-sdc-enrichment-core / src / test / java / org / openecomp / sdc / enrichment / impl / EnrichmentManagerImplTest.java
1 package org.openecomp.sdc.enrichment.impl;
2
3 import org.openecomp.sdc.enrichment.impl.tosca.ComponentInfo;
4 import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
5 import org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate;
6 import org.openecomp.sdc.tosca.services.ToscaFileOutputService;
7 import org.openecomp.sdc.tosca.services.impl.ToscaFileOutputServiceCsarImpl;
8 import org.openecomp.sdc.tosca.services.yamlutil.ToscaExtensionYamlUtil;
9 import org.openecomp.sdc.versioning.dao.types.Version;
10 import org.openecomp.core.enrichment.api.EnrichmentManager;
11 import org.openecomp.core.enrichment.factory.EnrichmentManagerFactory;
12
13 import org.openecomp.core.enrichment.types.CeilometerInfo;
14 import org.openecomp.core.enrichment.types.ComponentCeilometerInfo;
15 import org.openecomp.core.utilities.file.FileUtils;
16 import org.testng.Assert;
17 import org.testng.annotations.Test;
18
19 import java.io.*;
20 import java.net.URL;
21 import java.nio.file.NotDirectoryException;
22 import java.util.*;
23 import java.util.zip.ZipEntry;
24 import java.util.zip.ZipInputStream;
25
26 import static org.junit.Assert.assertEquals;
27
28
29 public class EnrichmentManagerImplTest {
30
31
32   private static ToscaServiceModel loadToscaServiceModel(String serviceTemplatesPath,
33                                                          String globalServiceTemplatesPath,
34                                                          String entryDefinitionServiceTemplate)
35       throws IOException {
36     ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
37     Map<String, ServiceTemplate> serviceTemplates = new HashMap<>();
38     if (entryDefinitionServiceTemplate == null) {
39       entryDefinitionServiceTemplate = "MainServiceTemplate.yaml";
40     }
41
42     loadServiceTemplates(serviceTemplatesPath, toscaExtensionYamlUtil, serviceTemplates);
43     if (globalServiceTemplatesPath != null) {
44       loadServiceTemplates(globalServiceTemplatesPath, toscaExtensionYamlUtil, serviceTemplates);
45     }
46
47     return new ToscaServiceModel(null, serviceTemplates, entryDefinitionServiceTemplate);
48   }
49
50   private static void loadServiceTemplates(String serviceTemplatesPath,
51                                            ToscaExtensionYamlUtil toscaExtensionYamlUtil,
52                                            Map<String, ServiceTemplate> serviceTemplates)
53       throws IOException {
54     URL urlFile = EnrichmentManagerImplTest.class.getResource(serviceTemplatesPath);
55     if (urlFile != null) {
56       File pathFile = new File(urlFile.getFile());
57       File[] files = pathFile.listFiles();
58       if (files != null) {
59         addServiceTemplateFiles(serviceTemplates, files, toscaExtensionYamlUtil);
60       } else {
61         throw new NotDirectoryException(serviceTemplatesPath);
62       }
63     } else {
64       throw new NotDirectoryException(serviceTemplatesPath);
65     }
66   }
67
68   private static void addServiceTemplateFiles(Map<String, ServiceTemplate> serviceTemplates,
69                                               File[] files,
70                                               ToscaExtensionYamlUtil toscaExtensionYamlUtil)
71       throws IOException {
72     for (File file : files) {
73       if (!file.getName().equals("CSR.zip") && !file.isDirectory()) {
74         try (InputStream yamlFile = new FileInputStream(file)) {
75           ServiceTemplate serviceTemplateFromYaml =
76               toscaExtensionYamlUtil.yamlToObject(yamlFile, ServiceTemplate.class);
77           serviceTemplates.put(file.getName(), serviceTemplateFromYaml);
78           try {
79             yamlFile.close();
80           } catch (IOException ignore) {
81           }
82         } catch (FileNotFoundException e) {
83           throw e;
84         } catch (IOException e) {
85           throw e;
86         }
87       }
88     }
89   }
90
91 //  @Test
92   public void testEnrichmentManagerImpl() throws Exception {
93     Assert.assertTrue(
94         EnrichmentManagerFactory.getInstance().createInterface() instanceof EnrichmentManagerImpl);
95   }
96
97 //  @Test
98   public void testEnrichModel() throws Exception {
99     ToscaServiceModel toscaServiceModel =
100         loadToscaServiceModel("/extractServiceComposition/onlyComponents/",
101             "/extractServiceComposition/toscaGlobalServiceTemplates/", "OnlyComponentsST.yaml");
102     EnrichmentManager enrichmentManager = EnrichmentManagerFactory.getInstance().createInterface();
103     enrichmentManager.initInput("vsp_enrich", new Version(0, 1));
104     enrichmentManager.addModel(toscaServiceModel);
105
106     String[] componentNames = new String[]{"org.openecomp.resource.vfc.nodes.heat.pcrf_psm",
107         "org.openecomp.resource.vfc.nodes.heat.pcm"};
108     ComponentInfo componentInfo = new ComponentInfo();
109
110     CeilometerInfo ceilometerInfo;
111     ComponentCeilometerInfo componentCeilometerInfo = new ComponentCeilometerInfo();
112     componentCeilometerInfo.setCeilometerInfoList(new ArrayList<>());
113     componentInfo.setCeilometerInfo(componentCeilometerInfo);
114
115     for (String componentName : componentNames) {
116       ceilometerInfo =
117           getCeilometerInfo("instance", "Gauge", "instance", "compute", "Existence of instance");
118       componentInfo.getCeilometerInfo().getCeilometerInfoList().add(ceilometerInfo);
119       ceilometerInfo = getCeilometerInfo("memory", "Gauge", "MB", "compute",
120           "Volume of RAM allocated to the instance");
121       componentInfo.getCeilometerInfo().getCeilometerInfoList().add(ceilometerInfo);
122       ceilometerInfo = getCeilometerInfo("cpu", "Cumulative", "ns", "compute", "CPU time used");
123       componentInfo.getCeilometerInfo().getCeilometerInfoList().add(ceilometerInfo);
124       enrichmentManager.addEntityInput(componentName, componentInfo);
125     }
126
127     enrichmentManager.enrich();
128
129     File csrFile = getToscaModelAsFile(toscaServiceModel);
130     compareActualAndExpected(csrFile);
131
132   }
133
134 //  @Test
135   public void testAllEnrichModel() throws Exception {
136     ToscaServiceModel toscaServiceModel = loadToscaServiceModel("/extractServiceComposition/all/",
137         "/extractServiceComposition/toscaGlobalServiceTemplates/", "OnlyComponentsST.yaml");
138     EnrichmentManager enrichmentManager = EnrichmentManagerFactory.getInstance().createInterface();
139     enrichmentManager.initInput("vsp_enrich", new Version(0, 1));
140     enrichmentManager.addModel(toscaServiceModel);
141
142     String[] componentNames = new String[]{"org.openecomp.resource.vfc.nodes.heat.pcrf_psm",
143         "org.openecomp.resource.vfc.nodes.heat.pcm"};
144     ComponentInfo componentInfo = new ComponentInfo();
145
146     CeilometerInfo ceilometerInfo;
147     ComponentCeilometerInfo componentCeilometerInfo = new ComponentCeilometerInfo();
148     componentCeilometerInfo.setCeilometerInfoList(new ArrayList<>());
149     componentInfo.setCeilometerInfo(componentCeilometerInfo);
150
151     for (String componentName : componentNames) {
152       ceilometerInfo =
153           getCeilometerInfo("instance", "Gauge", "instance", "compute", "Existence of instance");
154       componentInfo.getCeilometerInfo().getCeilometerInfoList().add(ceilometerInfo);
155       ceilometerInfo = getCeilometerInfo("memory", "Gauge", "MB", "compute",
156           "Volume of RAM allocated to the instance");
157       componentInfo.getCeilometerInfo().getCeilometerInfoList().add(ceilometerInfo);
158       ceilometerInfo = getCeilometerInfo("cpu", "Cumulative", "ns", "compute", "CPU time used");
159       componentInfo.getCeilometerInfo().getCeilometerInfoList().add(ceilometerInfo);
160       enrichmentManager.addEntityInput(componentName, componentInfo);
161     }
162
163     enrichmentManager.enrich();
164
165     File csrFile = getToscaModelAsFile(toscaServiceModel);
166     compareActualAndExpected(csrFile);
167
168   }
169
170   private CeilometerInfo getCeilometerInfo(String name, String type, String unit, String category,
171                                            String description) {
172     CeilometerInfo ceilometerInfo = new CeilometerInfo();
173     ceilometerInfo.setName(name);
174     ceilometerInfo.setType(type);
175     ceilometerInfo.setUnit(unit);
176     ceilometerInfo.setCategory(category);
177     ceilometerInfo.setDescription(description);
178     return ceilometerInfo;
179   }
180
181   private File getToscaModelAsFile(ToscaServiceModel toscaServiceModel) throws IOException {
182
183     URL inputFilesUrl =
184         EnrichmentManagerImplTest.class.getResource("/extractServiceComposition/onlyComponents");
185     String path = inputFilesUrl.getPath();
186
187
188     File file = new File(path + "/" + "CSR.zip");
189     file.createNewFile();
190
191     try (FileOutputStream fos = new FileOutputStream(file))
192
193     {
194       ToscaFileOutputService toscaFileOutputService = new ToscaFileOutputServiceCsarImpl();
195       fos.write(toscaFileOutputService.createOutputFile(toscaServiceModel, null));
196     }
197
198     return file;
199   }
200
201   protected void compareActualAndExpected(File actualFile) throws IOException {
202
203     URL url = EnrichmentManagerImplTest.class
204         .getResource("/extractServiceComposition/onlyComponents/expectedOutput");
205     Set<String> expectedResultFileNameSet = new HashSet<>();
206     Map<String, byte[]> expectedResultMap = new HashMap<>();
207     String path = url.getPath();
208     File pathFile = new File(path);
209     File[] files = pathFile.listFiles();
210     org.junit.Assert.assertNotNull("manifest files is empty", files);
211     for (File expectedFile : files) {
212       expectedResultFileNameSet.add(expectedFile.getName());
213       try (FileInputStream input = new FileInputStream(expectedFile)) {
214         expectedResultMap.put(expectedFile.getName(), FileUtils.toByteArray(input));
215       }
216     }
217
218     try (FileInputStream fis = new FileInputStream(actualFile);
219          ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis))) {
220       ZipEntry entry;
221       String name;
222       String expected;
223       String actual;
224
225       while ((entry = zis.getNextEntry()) != null) {
226
227         name = entry.getName()
228             .substring(entry.getName().lastIndexOf(File.separator) + 1, entry.getName().length());
229         if (expectedResultFileNameSet.contains(name)) {
230           expected = new String(expectedResultMap.get(name)).trim().replace("\r", "");
231           actual = new String(FileUtils.toByteArray(zis)).trim().replace("\r", "");
232           assertEquals("difference in file: " + name, expected, actual);
233
234           expectedResultFileNameSet.remove(name);
235         }
236       }
237       if (expectedResultFileNameSet.isEmpty()) {
238         expectedResultFileNameSet.forEach(System.out::println);
239       }
240     }
241     assertEquals(0, expectedResultFileNameSet.size());
242   }
243
244
245 }