1 package org.openecomp.core.converter.impl;
3 import org.apache.commons.collections.CollectionUtils;
5 import org.openecomp.core.converter.ToscaConverter;
6 import org.openecomp.core.impl.ToscaConverterImpl;
7 import org.openecomp.core.utilities.file.FileContentHandler;
8 import org.openecomp.core.utilities.file.FileUtils;
9 import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
10 import org.openecomp.sdc.tosca.datatypes.model.NodeTemplate;
11 import org.openecomp.sdc.tosca.datatypes.model.RequirementAssignment;
12 import org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate;
13 import org.openecomp.sdc.tosca.services.ToscaExtensionYamlUtil;
14 import org.openecomp.sdc.tosca.services.YamlUtil;
17 import java.io.FileInputStream;
18 import java.io.FileNotFoundException;
19 import java.io.IOException;
20 import java.io.InputStream;
22 import java.nio.file.NotDirectoryException;
23 import java.util.ArrayList;
24 import java.util.HashMap;
25 import java.util.List;
26 import java.util.ListIterator;
28 import java.util.Objects;
30 import static org.junit.Assert.assertEquals;
31 import static org.openecomp.core.converter.datatypes.Constants.globalStName;
32 import static org.openecomp.core.converter.datatypes.Constants.mainStName;
34 public class ToscaConverterImplTest {
36 private static ToscaConverter toscaConverter = new ToscaConverterImpl();
37 private static String inputFilesPath;
38 private static String outputFilesPath;
39 private static Map<String, ServiceTemplate> expectedOutserviceTemplates;
43 public void testConvertMainSt() throws IOException {
44 inputFilesPath = "/mock/toscaConverter/convertMainSt/in";
45 outputFilesPath = "/mock/toscaConverter/convertMainSt/out";
47 FileContentHandler fileContentHandler =
48 createFileContentHandlerFromInput(inputFilesPath);
50 expectedOutserviceTemplates = new HashMap<>();
51 loadServiceTemplates(outputFilesPath, new ToscaExtensionYamlUtil(),
52 expectedOutserviceTemplates);
54 ToscaServiceModel toscaServiceModel = toscaConverter.convert(fileContentHandler);
55 ServiceTemplate mainSt = toscaServiceModel.getServiceTemplates().get(mainStName);
57 checkSTResults(expectedOutserviceTemplates, null, mainSt);
62 private FileContentHandler createFileContentHandlerFromInput(String inputFilesPath)
64 URL inputFilesUrl = this.getClass().getResource(inputFilesPath);
65 String path = inputFilesUrl.getPath();
66 File directory = new File(path);
67 File[] listFiles = directory.listFiles();
69 FileContentHandler fileContentHandler = new FileContentHandler();
70 insertFilesIntoFileContentHandler(listFiles, fileContentHandler);
71 return fileContentHandler;
74 private void insertFilesIntoFileContentHandler(File[] listFiles,
75 FileContentHandler fileContentHandler)
78 if(CollectionUtils.isEmpty(fileContentHandler.getFileList())) {
79 fileContentHandler.setFiles(new HashMap<>());
82 for (File file : listFiles) {
83 if(!file.isDirectory()) {
84 try (FileInputStream fis = new FileInputStream(file)) {
85 fileContent = FileUtils.toByteArray(fis);
86 fileContentHandler.addFile(file.getPath(), fileContent);
89 File[] currFileList = file.listFiles();
90 insertFilesIntoFileContentHandler(currFileList, fileContentHandler);
96 private void checkSTResults(
97 Map<String, ServiceTemplate> expectedOutserviceTemplates,
98 ServiceTemplate gloablSubstitutionServiceTemplate, ServiceTemplate mainServiceTemplate) {
99 YamlUtil yamlUtil = new YamlUtil();
100 if (Objects.nonNull(gloablSubstitutionServiceTemplate)) {
101 assertEquals("difference global substitution service template: ",
102 yamlUtil.objectToYaml(expectedOutserviceTemplates.get(globalStName)),
103 yamlUtil.objectToYaml(gloablSubstitutionServiceTemplate));
105 if (Objects.nonNull(mainServiceTemplate)) {
106 assertEquals("difference main service template: ",
107 yamlUtil.objectToYaml(expectedOutserviceTemplates.get(mainStName)),
108 yamlUtil.objectToYaml(mainServiceTemplate));
112 public static void loadServiceTemplates(String serviceTemplatesPath,
113 ToscaExtensionYamlUtil toscaExtensionYamlUtil,
114 Map<String, ServiceTemplate> serviceTemplates)
116 URL urlFile = ToscaConverterImplTest.class.getResource(serviceTemplatesPath);
117 if (urlFile != null) {
118 File pathFile = new File(urlFile.getFile());
119 File[] files = pathFile.listFiles();
121 addServiceTemplateFiles(serviceTemplates, files, toscaExtensionYamlUtil);
123 throw new NotDirectoryException(serviceTemplatesPath);
126 throw new NotDirectoryException(serviceTemplatesPath);
130 private static void addServiceTemplateFiles(Map<String, ServiceTemplate> serviceTemplates,
132 ToscaExtensionYamlUtil toscaExtensionYamlUtil)
134 for (File file : files) {
135 try (InputStream yamlFile = new FileInputStream(file)) {
136 ServiceTemplate serviceTemplateFromYaml =
137 toscaExtensionYamlUtil.yamlToObject(yamlFile, ServiceTemplate.class);
138 createConcreteRequirementObjectsInServiceTemplate(serviceTemplateFromYaml, toscaExtensionYamlUtil);
139 serviceTemplates.put(file.getName(), serviceTemplateFromYaml);
142 } catch (IOException ignore) {
144 } catch (FileNotFoundException e) {
146 } catch (IOException e) {
152 private static void createConcreteRequirementObjectsInServiceTemplate(ServiceTemplate
153 serviceTemplateFromYaml,
154 ToscaExtensionYamlUtil
155 toscaExtensionYamlUtil) {
157 if (serviceTemplateFromYaml == null
158 || serviceTemplateFromYaml.getTopology_template() == null
159 || serviceTemplateFromYaml.getTopology_template().getNode_templates() == null) {
163 //Creating concrete objects
164 Map<String, NodeTemplate> nodeTemplates =
165 serviceTemplateFromYaml.getTopology_template().getNode_templates();
166 for (Map.Entry<String, NodeTemplate> entry : nodeTemplates.entrySet()) {
167 NodeTemplate nodeTemplate = entry.getValue();
168 List<Map<String, RequirementAssignment>> requirements = nodeTemplate.getRequirements();
169 List<Map<String, RequirementAssignment>> concreteRequirementList = new ArrayList<>();
170 if (requirements != null) {
171 ListIterator<Map<String, RequirementAssignment>> reqListIterator = requirements
173 while (reqListIterator.hasNext()){
174 Map<String, RequirementAssignment> requirement = reqListIterator.next();
175 Map<String, RequirementAssignment> concreteRequirement = new HashMap<>();
176 for (Map.Entry<String, RequirementAssignment> reqEntry : requirement.entrySet()) {
177 RequirementAssignment requirementAssignment = (toscaExtensionYamlUtil
178 .yamlToObject(toscaExtensionYamlUtil.objectToYaml(reqEntry.getValue()),
179 RequirementAssignment.class));
180 concreteRequirement.put(reqEntry.getKey(), requirementAssignment);
181 concreteRequirementList.add(concreteRequirement);
182 reqListIterator.remove();
185 requirements.clear();
186 requirements.addAll(concreteRequirementList);
187 nodeTemplate.setRequirements(requirements);
189 System.out.println();
190 //toscaExtensionYamlUtil.yamlToObject(nodeTemplate, NodeTemplate.class);