da44ec422f707ac7f3ae41df9400f31f4c54a1a6
[sdc.git] /
1 package org.openecomp.sdc.healing.healers.util;
2
3 import org.junit.Assert;
4 import org.openecomp.core.utilities.json.JsonUtil;
5 import org.openecomp.sdc.logging.api.Logger;
6 import org.openecomp.sdc.logging.api.LoggerFactory;
7 import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel;
8 import org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate;
9 import org.openecomp.sdc.tosca.services.ToscaExtensionYamlUtil;
10 import org.openecomp.sdc.tosca.services.ToscaUtil;
11
12 import java.io.File;
13 import java.io.FileInputStream;
14 import java.io.FileNotFoundException;
15 import java.io.IOException;
16 import java.io.InputStream;
17 import java.net.URL;
18 import java.nio.file.NotDirectoryException;
19 import java.util.Collection;
20 import java.util.HashMap;
21 import java.util.Map;
22
23 public class TestUtil {
24   private final static Logger log = (Logger) LoggerFactory.getLogger
25       (TestUtil.class.getName());
26
27   public static ToscaServiceModel loadToscaServiceModel(String serviceTemplatesPath,
28                                                         String globalServiceTemplatesPath,
29                                                         String entryDefinitionServiceTemplate)
30       throws IOException {
31     ToscaExtensionYamlUtil toscaExtensionYamlUtil = new ToscaExtensionYamlUtil();
32     Map<String, ServiceTemplate> serviceTemplates = new HashMap<>();
33     if (entryDefinitionServiceTemplate == null) {
34       entryDefinitionServiceTemplate = "MainServiceTemplate.yaml";
35     }
36
37     loadServiceTemplates(serviceTemplatesPath, toscaExtensionYamlUtil, serviceTemplates);
38     if (globalServiceTemplatesPath != null) {
39       loadServiceTemplates(globalServiceTemplatesPath, toscaExtensionYamlUtil, serviceTemplates);
40     }
41
42     return new ToscaServiceModel(null, serviceTemplates, entryDefinitionServiceTemplate);
43   }
44
45   private static void loadServiceTemplates(String serviceTemplatesPath,
46                                            ToscaExtensionYamlUtil toscaExtensionYamlUtil,
47                                            Map<String, ServiceTemplate> serviceTemplates)
48       throws IOException {
49     URL urlFile = TestUtil.class.getResource(serviceTemplatesPath);
50     if (urlFile != null) {
51       File pathFile = new File(urlFile.getFile());
52       Collection<File> files = org.apache.commons.io.FileUtils.listFiles(pathFile, null, true);
53       if (files != null) {
54         addServiceTemplateFiles(serviceTemplates, files, toscaExtensionYamlUtil);
55       } else {
56         throw new NotDirectoryException(serviceTemplatesPath);
57       }
58     } else {
59       throw new NotDirectoryException(serviceTemplatesPath);
60     }
61   }
62
63   private static void addServiceTemplateFiles(Map<String, ServiceTemplate> serviceTemplates,
64                                               Collection<File> files,
65                                               ToscaExtensionYamlUtil toscaExtensionYamlUtil)
66       throws IOException {
67     for (File file : files) {
68       try (InputStream yamlFile = new FileInputStream(file)) {
69         ServiceTemplate serviceTemplateFromYaml =
70             toscaExtensionYamlUtil.yamlToObject(yamlFile, ServiceTemplate.class);
71         serviceTemplates.put(ToscaUtil.getServiceTemplateFileName(serviceTemplateFromYaml), serviceTemplateFromYaml);
72         try {
73           yamlFile.close();
74         } catch (IOException ignore) {
75           log.debug("",ignore);
76         }
77       } catch (FileNotFoundException exception) {
78         throw exception;
79       } catch (IOException exception) {
80         throw exception;
81       }
82     }
83   }
84
85   public static void compareToscaServiceModels(String expectedServiceModelPath,
86                                                 ToscaServiceModel actualServiceModel)
87       throws IOException {
88     ToscaServiceModel expectedServiceModel =
89         loadToscaServiceModel(expectedServiceModelPath, null, null);
90
91     Map<String, ServiceTemplate> expectedServiceTemplates =
92         new HashMap<>(expectedServiceModel.getServiceTemplates());
93     Map<String, ServiceTemplate> actualServiceTemplates =
94         new HashMap<>(actualServiceModel.getServiceTemplates());
95
96     for (Map.Entry<String, ServiceTemplate> expectedServiceTemplateEntry : expectedServiceTemplates.entrySet()) {
97       String serviceTemplateName = expectedServiceTemplateEntry.getKey();
98       ServiceTemplate actualServiceTemplate =
99           actualServiceTemplates.get(serviceTemplateName);
100
101       Assert.assertNotNull("Missing service template in service model : " + serviceTemplateName, actualServiceTemplate);
102       org.junit.Assert.assertEquals("Difference in file " + serviceTemplateName,
103           JsonUtil.object2Json(expectedServiceTemplateEntry.getValue()),
104           JsonUtil.object2Json(actualServiceTemplate));
105     }
106   }
107 }