2 * Copyright © 2016-2017 European Support Limited
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
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on a "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.
17 package org.openecomp.sdc.translator.services.heattotosca.impl.resourcetranslation;
19 import static org.junit.Assert.assertEquals;
20 import static org.openecomp.sdc.common.utils.SdcCommon.MANIFEST_NAME;
21 import static org.openecomp.sdc.translator.services.heattotosca.buildconsolidationdata.ConsolidationDataTestUtil.validateComputeConnectivityIn;
22 import static org.openecomp.sdc.translator.services.heattotosca.buildconsolidationdata.ConsolidationDataTestUtil.validateComputeConnectivityOut;
23 import static org.openecomp.sdc.translator.services.heattotosca.buildconsolidationdata.ConsolidationDataTestUtil.validateDependsOnInConsolidationData;
24 import static org.openecomp.sdc.translator.services.heattotosca.buildconsolidationdata.ConsolidationDataTestUtil.validateGetAttr;
25 import static org.openecomp.sdc.translator.services.heattotosca.buildconsolidationdata.ConsolidationDataTestUtil.validateGroupsInConsolidationData;
26 import static org.openecomp.sdc.translator.services.heattotosca.buildconsolidationdata.ConsolidationDataTestUtil.validateNestedConsolidationData;
27 import static org.openecomp.sdc.translator.services.heattotosca.buildconsolidationdata.ConsolidationDataTestUtil.validateNestedConsolidationDataNodeTemplateIds;
28 import static org.openecomp.sdc.translator.services.heattotosca.buildconsolidationdata.ConsolidationDataTestUtil.validatePortConnectivityIn;
29 import static org.openecomp.sdc.translator.services.heattotosca.buildconsolidationdata.ConsolidationDataTestUtil.validatePortConnectivityOut;
30 import static org.openecomp.sdc.translator.services.heattotosca.buildconsolidationdata.ConsolidationDataTestUtil.validatePortsInConsolidationData;
31 import static org.openecomp.sdc.translator.services.heattotosca.buildconsolidationdata.ConsolidationDataTestUtil.validateVolumeInConsolidationData;
33 import org.apache.commons.collections4.MapUtils;
34 import org.junit.AfterClass;
35 import org.junit.Assert;
36 import org.junit.Before;
37 import org.junit.BeforeClass;
38 import org.openecomp.core.translator.datatypes.TranslatorOutput;
39 import org.openecomp.core.utilities.file.FileUtils;
40 import org.openecomp.core.utilities.json.JsonUtil;
41 import org.openecomp.core.validation.util.MessageContainerUtil;
42 import org.openecomp.sdc.common.errors.CoreException;
43 import org.openecomp.sdc.common.errors.ErrorCategory;
44 import org.openecomp.sdc.common.errors.ErrorCode;
45 import org.openecomp.sdc.common.togglz.ToggleableFeature;
46 import org.openecomp.sdc.datatypes.error.ErrorLevel;
47 import org.openecomp.sdc.datatypes.error.ErrorMessage;
48 import org.openecomp.sdc.heat.datatypes.manifest.FileData;
49 import org.openecomp.sdc.heat.datatypes.manifest.ManifestContent;
50 import org.openecomp.sdc.heat.datatypes.manifest.ManifestFile;
51 import org.openecomp.sdc.tosca.datatypes.model.ServiceTemplate;
52 import org.openecomp.sdc.tosca.services.ToscaFileOutputService;
53 import org.openecomp.sdc.tosca.services.impl.ToscaFileOutputServiceCsarImpl;
54 import org.openecomp.sdc.translator.TestUtils;
55 import org.openecomp.sdc.translator.datatypes.heattotosca.TranslationContext;
56 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.ComputeTemplateConsolidationData;
57 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.ConsolidationData;
58 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.FileComputeConsolidationData;
59 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.FilePortConsolidationData;
60 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.PortTemplateConsolidationData;
61 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.TypeComputeConsolidationData;
62 import org.openecomp.sdc.translator.services.heattotosca.TranslationService;
63 import org.openecomp.sdc.translator.services.heattotosca.buildconsolidationdata.ConsolidationDataValidationType;
64 import org.togglz.testing.TestFeatureManager;
65 import org.togglz.testing.TestFeatureManagerProvider;
67 import java.io.BufferedInputStream;
69 import java.io.FileInputStream;
70 import java.io.FileOutputStream;
71 import java.io.IOException;
73 import java.util.Collection;
74 import java.util.HashMap;
75 import java.util.HashSet;
76 import java.util.List;
79 import java.util.zip.ZipEntry;
80 import java.util.zip.ZipInputStream;
83 public class BaseResourceTranslationTest {
85 protected String inputFilesPath;
86 protected String outputFilesPath;
87 protected TranslationContext translationContext;
89 private String zipFilename = "VSP.zip";
90 private TranslationService translationService;
91 private File translatedZipFile;
93 private Map<String, byte[]> expectedResultMap = new HashMap<>();
94 private Set<String> expectedResultFileNameSet = new HashSet<>();
96 protected static TestFeatureManager manager;
99 public static void enableToggleableFeatures(){
100 manager = new TestFeatureManager(ToggleableFeature.class);
101 if (!ToggleableFeature.FORWARDER_CAPABILITY.isActive()) {
102 manager.enable(ToggleableFeature.FORWARDER_CAPABILITY);
104 if(!ToggleableFeature.ANNOTATIONS.isActive()) {
105 manager.enable(ToggleableFeature.ANNOTATIONS);
107 if(!ToggleableFeature.VLAN_TAGGING.isActive()){
108 manager.enable(ToggleableFeature.VLAN_TAGGING);
114 public static void disableToggleableFeatures() {
115 manager.disable(ToggleableFeature.FORWARDER_CAPABILITY);
116 manager.disable(ToggleableFeature.ANNOTATIONS);
117 manager.disable(ToggleableFeature.VLAN_TAGGING);
119 TestFeatureManagerProvider.setFeatureManager(null);
123 public void setUp() throws IOException {
124 initTranslatorAndTranslate();
127 protected void initTranslatorAndTranslate() throws IOException {
128 translationService = new TranslationService();
129 translationContext = new TranslationContext();
130 translatedZipFile = translateZipFile();
133 protected void testTranslation() throws IOException {
135 URL url = BaseResourceTranslationTest.class.getResource(outputFilesPath);
137 String path = url.getPath();
138 File pathFile = new File(path);
139 File[] files = pathFile.listFiles();
140 Assert.assertNotNull("manifest files is empty", files);
141 for (File expectedFile : files) {
142 expectedResultFileNameSet.add(expectedFile.getName());
143 try (FileInputStream input = new FileInputStream(expectedFile)) {
144 expectedResultMap.put(expectedFile.getName(), FileUtils.toByteArray(input));
148 try (FileInputStream fis = new FileInputStream(translatedZipFile);
149 ZipInputStream zis = new ZipInputStream(new BufferedInputStream(fis))) {
155 while ((entry = zis.getNextEntry()) != null) {
157 name = entry.getName()
158 .substring(entry.getName().lastIndexOf(File.separator) + 1, entry.getName().length());
159 if (expectedResultFileNameSet.contains(name)) {
160 expected = new String(expectedResultMap.get(name)).trim().replace("\r", "");
161 actual = new String(FileUtils.toByteArray(zis)).trim().replace("\r", "");
162 assertEquals("difference in file: " + name, expected, actual);
164 expectedResultFileNameSet.remove(name);
167 if (expectedResultFileNameSet.isEmpty()) {
168 expectedResultFileNameSet.forEach(System.out::println);
171 assertEquals(0, expectedResultFileNameSet.size());
174 private File translateZipFile() throws IOException {
175 URL inputFilesUrl = this.getClass().getResource(inputFilesPath);
176 String path = inputFilesUrl.getPath();
177 addFilesToTranslator(translationContext, path);
178 TranslatorOutput translatorOutput = translationService.translateHeatFiles(translationContext);
179 Assert.assertNotNull(translatorOutput);
180 if (MapUtils.isNotEmpty(translatorOutput.getErrorMessages()) && MapUtils.isNotEmpty(
182 .getMessageByLevel(ErrorLevel.ERROR, translatorOutput.getErrorMessages()))) {
183 throw new CoreException((new ErrorCode.ErrorCodeBuilder()).withMessage(
184 "Error in validation " + getErrorAsString(translatorOutput.getErrorMessages()))
185 .withId("Validation Error").withCategory(ErrorCategory.APPLICATION).build());
187 File file = new File(path + "/" + zipFilename);
188 file.createNewFile();
190 try (FileOutputStream fos = new FileOutputStream(file)) {
191 ToscaFileOutputService toscaFileOutputService = new ToscaFileOutputServiceCsarImpl();
193 toscaFileOutputService.createOutputFile(translatorOutput.getToscaServiceModel(), null));
199 private String getErrorAsString(Map<String, List<ErrorMessage>> errorMessages) {
200 StringBuilder sb = new StringBuilder();
201 errorMessages.entrySet().forEach(
202 entry -> sb.append("File:").append(entry.getKey()).append(System.lineSeparator())
203 .append(getErrorList(entry.getValue())));
205 return sb.toString();
208 private String getErrorList(List<ErrorMessage> errors) {
209 StringBuilder sb = new StringBuilder();
211 error -> sb.append(error.getMessage()).append("[").append(error.getLevel()).append("]")
212 .append(System.lineSeparator()));
213 return sb.toString();
216 public void addFilesToTranslator(TranslationContext translationContext, String path)
218 File manifestFile = new File(path);
219 File[] files = manifestFile.listFiles();
222 Assert.assertNotNull("manifest files is empty", files);
224 for (File file : files) {
226 try (FileInputStream fis = new FileInputStream(file)) {
228 fileContent = FileUtils.toByteArray(fis);
230 if (file.getName().equals(MANIFEST_NAME)) {
231 addManifest(translationContext, MANIFEST_NAME, fileContent);
233 String validationFilename = "validationOutput.json";
234 if (!file.getName().equals(zipFilename) && (!file.getName().equals(validationFilename))) {
235 addFile(translationContext, file.getName(), fileContent);
242 public static void addManifest(TranslationContext translationContext,
243 String name, byte[] content) {
244 ManifestContent manifestData = JsonUtil.json2Object(new String(content), ManifestContent.class);
245 ManifestFile manifest = new ManifestFile();
246 manifest.setName(name);
247 manifest.setContent(manifestData);
248 translationContext.setManifest(manifest);
249 translationContext.addFile(name, content);
250 addFilesFromManifestToTranslationContextManifestFilesMap(translationContext, manifestData
254 public static void addFile(TranslationContext translationContext,
255 String name, byte[] content) {
256 translationContext.addFile(name, content);
259 private static void addFilesFromManifestToTranslationContextManifestFilesMap(
260 TranslationContext translationContext, List<FileData> fileDataListFromManifest) {
261 for (FileData fileFromManfiest : fileDataListFromManifest) {
262 translationContext.addManifestFile(fileFromManfiest.getFile(), fileFromManfiest.getType());
266 public void validateNodeTemplateIdInNestedConsolidationData(){
267 ConsolidationData consolidationData = translationContext.getConsolidationData();
268 Map<String, ServiceTemplate> expectedServiceTemplateModels = TestUtils.getServiceTemplates
270 Assert.assertNotNull(consolidationData);
271 validateNestedConsolidationDataNodeTemplateIds(consolidationData,expectedServiceTemplateModels);
274 public void validateComputeTemplateConsolidationData(ConsolidationDataValidationType
277 ConsolidationData consolidationData = translationContext.getConsolidationData();
278 Map<String, ServiceTemplate> expectedServiceTemplateModels = TestUtils.getServiceTemplates
280 Assert.assertNotNull(consolidationData);
281 Assert.assertNotNull(consolidationData.getComputeConsolidationData());
282 Set<String> serviceTemplateFileNames = consolidationData.getComputeConsolidationData()
283 .getAllServiceTemplateFileNames();
284 Assert.assertNotNull(serviceTemplateFileNames);
285 for(String serviceTemplateName : serviceTemplateFileNames){
286 Assert.assertTrue(expectedServiceTemplateModels.containsKey(serviceTemplateName));
287 ServiceTemplate expectedServiceTemplate = expectedServiceTemplateModels.get
288 (serviceTemplateName);
289 FileComputeConsolidationData fileComputeConsolidationData = consolidationData
290 .getComputeConsolidationData().getFileComputeConsolidationData(serviceTemplateName);
291 Assert.assertNotNull(fileComputeConsolidationData);
292 Set<String> computeTypes = fileComputeConsolidationData.getAllComputeTypes();
293 Assert.assertNotNull(computeTypes);
294 for(String computeType : computeTypes) {
295 TypeComputeConsolidationData typeComputeConsolidationData = fileComputeConsolidationData
296 .getTypeComputeConsolidationData(computeType);
297 Assert.assertNotNull(typeComputeConsolidationData);
299 Collection<String> computeNodeTemplateIds = typeComputeConsolidationData
300 .getAllComputeNodeTemplateIds();
301 Assert.assertNotNull(computeNodeTemplateIds);
302 Assert.assertNotEquals(computeNodeTemplateIds.size(), 0);
304 for(String computeNodeTemplateId : computeNodeTemplateIds) {
305 ComputeTemplateConsolidationData computeTemplateConsolidationData =
306 typeComputeConsolidationData.getComputeTemplateConsolidationData
307 (computeNodeTemplateId);
308 switch(validationType){
310 validateGroupsInConsolidationData(computeNodeTemplateId,
311 computeTemplateConsolidationData, expectedServiceTemplate);
314 validatePortsInConsolidationData(computeNodeTemplateId,
315 computeTemplateConsolidationData,
316 expectedServiceTemplate);
318 case VALIDATE_VOLUME:
319 validateVolumeInConsolidationData(computeNodeTemplateId,
320 computeTemplateConsolidationData, expectedServiceTemplate, testName);
322 case VALIDATE_CONNECTIVITY:
323 validateComputeConnectivityIn(computeTemplateConsolidationData,
324 expectedServiceTemplate);
325 validateComputeConnectivityOut(computeNodeTemplateId,computeTemplateConsolidationData,
326 expectedServiceTemplate);
328 case VALIDATE_DEPENDS_ON:
329 validateDependsOnInConsolidationData(computeNodeTemplateId,
330 computeTemplateConsolidationData,
331 expectedServiceTemplate, testName);
339 public void validateGetAttribute(String testName){
340 Map<String, ServiceTemplate> expectedServiceTemplateModels = TestUtils.getServiceTemplates
342 validateGetAttr(translationContext,expectedServiceTemplateModels,testName);
345 public void validateNestedTemplateConsolidationData(String testName){
346 validateNestedConsolidationData(translationContext, testName);
349 public void validatePortTemplateConsolidationData(ConsolidationDataValidationType
352 ConsolidationData consolidationData = translationContext.getConsolidationData();
353 Map<String, ServiceTemplate> expectedServiceTemplateModels = TestUtils.getServiceTemplates
355 Assert.assertNotNull(consolidationData);
356 Assert.assertNotNull(consolidationData.getPortConsolidationData());
357 Set<String> serviceTemplateFileNames = consolidationData.getPortConsolidationData()
358 .getAllServiceTemplateFileNames();
359 Assert.assertNotNull(serviceTemplateFileNames);
360 for(String serviceTemplateName : serviceTemplateFileNames){
361 Assert.assertTrue(expectedServiceTemplateModels.containsKey(serviceTemplateName));
362 ServiceTemplate expectedServiceTemplate = expectedServiceTemplateModels.get
363 (serviceTemplateName);
364 FilePortConsolidationData filePortConsolidationData = consolidationData
365 .getPortConsolidationData().getFilePortConsolidationData(serviceTemplateName);
366 Assert.assertNotNull(filePortConsolidationData);
368 Set<String> portNodeTemplateIds = filePortConsolidationData.getAllPortNodeTemplateIds();
369 Assert.assertNotNull(portNodeTemplateIds);
370 Assert.assertNotEquals(portNodeTemplateIds.size(), 0);
372 for(String portNodeTemplateId : portNodeTemplateIds) {
373 PortTemplateConsolidationData portTemplateConsolidationData =
374 filePortConsolidationData.getPortTemplateConsolidationData(portNodeTemplateId);
375 switch(validationType){
376 case VALIDATE_CONNECTIVITY:
377 validatePortConnectivityIn(portTemplateConsolidationData,expectedServiceTemplate);
378 validatePortConnectivityOut(portNodeTemplateId, portTemplateConsolidationData,
379 expectedServiceTemplate);