1 package org.openecomp.sdc.enrichment.impl;
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;
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;
21 import java.nio.file.NotDirectoryException;
23 import java.util.zip.ZipEntry;
24 import java.util.zip.ZipInputStream;
26 import static org.junit.Assert.assertEquals;
29 public class EnrichmentManagerImplTest {
32 private static ToscaServiceModel loadToscaServiceModel(String serviceTemplatesPath,
33 String globalServiceTemplatesPath,
34 String entryDefinitionServiceTemplate)
36 ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
37 Map<String, ServiceTemplate> serviceTemplates = new HashMap<>();
38 if (entryDefinitionServiceTemplate == null) {
39 entryDefinitionServiceTemplate = "MainServiceTemplate.yaml";
42 loadServiceTemplates(serviceTemplatesPath, toscaExtensionYamlUtil, serviceTemplates);
43 if (globalServiceTemplatesPath != null) {
44 loadServiceTemplates(globalServiceTemplatesPath, toscaExtensionYamlUtil, serviceTemplates);
47 return new ToscaServiceModel(null, serviceTemplates, entryDefinitionServiceTemplate);
50 private static void loadServiceTemplates(String serviceTemplatesPath,
51 ToscaExtensionYamlUtil toscaExtensionYamlUtil,
52 Map<String, ServiceTemplate> serviceTemplates)
54 URL urlFile = EnrichmentManagerImplTest.class.getResource(serviceTemplatesPath);
55 if (urlFile != null) {
56 File pathFile = new File(urlFile.getFile());
57 File[] files = pathFile.listFiles();
59 addServiceTemplateFiles(serviceTemplates, files, toscaExtensionYamlUtil);
61 throw new NotDirectoryException(serviceTemplatesPath);
64 throw new NotDirectoryException(serviceTemplatesPath);
68 private static void addServiceTemplateFiles(Map<String, ServiceTemplate> serviceTemplates,
70 ToscaExtensionYamlUtil toscaExtensionYamlUtil)
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);
80 } catch (IOException ignore) {
82 } catch (FileNotFoundException e) {
84 } catch (IOException e) {
92 public void testEnrichmentManagerImpl() throws Exception {
94 EnrichmentManagerFactory.getInstance().createInterface() instanceof EnrichmentManagerImpl);
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);
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();
110 CeilometerInfo ceilometerInfo;
111 ComponentCeilometerInfo componentCeilometerInfo = new ComponentCeilometerInfo();
112 componentCeilometerInfo.setCeilometerInfoList(new ArrayList<>());
113 componentInfo.setCeilometerInfo(componentCeilometerInfo);
115 for (String componentName : componentNames) {
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);
127 enrichmentManager.enrich();
129 File csrFile = getToscaModelAsFile(toscaServiceModel);
130 compareActualAndExpected(csrFile);
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);
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();
146 CeilometerInfo ceilometerInfo;
147 ComponentCeilometerInfo componentCeilometerInfo = new ComponentCeilometerInfo();
148 componentCeilometerInfo.setCeilometerInfoList(new ArrayList<>());
149 componentInfo.setCeilometerInfo(componentCeilometerInfo);
151 for (String componentName : componentNames) {
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);
163 enrichmentManager.enrich();
165 File csrFile = getToscaModelAsFile(toscaServiceModel);
166 compareActualAndExpected(csrFile);
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;
181 private File getToscaModelAsFile(ToscaServiceModel toscaServiceModel) throws IOException {
184 EnrichmentManagerImplTest.class.getResource("/extractServiceComposition/onlyComponents");
185 String path = inputFilesUrl.getPath();
188 File file = new File(path + "/" + "CSR.zip");
189 file.createNewFile();
191 try (FileOutputStream fos = new FileOutputStream(file))
194 ToscaFileOutputService toscaFileOutputService = new ToscaFileOutputServiceCsarImpl();
195 fos.write(toscaFileOutputService.createOutputFile(toscaServiceModel, null));
201 protected void compareActualAndExpected(File actualFile) throws IOException {
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));
218 try (FileInputStream fis = new FileInputStream(actualFile);
219 ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis))) {
225 while ((entry = zis.getNextEntry()) != null) {
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);
234 expectedResultFileNameSet.remove(name);
237 if (expectedResultFileNameSet.isEmpty()) {
238 expectedResultFileNameSet.forEach(System.out::println);
241 assertEquals(0, expectedResultFileNameSet.size());