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 java.io.BufferedInputStream;
34 import java.io.ByteArrayInputStream;
36 import java.io.FileInputStream;
37 import java.io.IOException;
39 import java.util.Collection;
40 import java.util.HashMap;
41 import java.util.HashSet;
42 import java.util.List;
45 import java.util.zip.ZipInputStream;
46 import org.apache.commons.collections4.MapUtils;
47 import org.junit.Assert;
48 import org.junit.Before;
49 import org.junit.BeforeClass;
50 import org.onap.sdc.tosca.datatypes.model.ServiceTemplate;
51 import org.openecomp.core.translator.datatypes.TranslatorOutput;
52 import org.openecomp.core.utilities.file.FileUtils;
53 import org.openecomp.core.utilities.json.JsonUtil;
54 import org.openecomp.core.validation.util.MessageContainerUtil;
55 import org.openecomp.sdc.be.togglz.ToggleableFeature;
56 import org.openecomp.sdc.common.errors.CoreException;
57 import org.openecomp.sdc.common.errors.ErrorCategory;
58 import org.openecomp.sdc.common.errors.ErrorCode;
59 import org.openecomp.sdc.datatypes.error.ErrorLevel;
60 import org.openecomp.sdc.heat.datatypes.manifest.FileData;
61 import org.openecomp.sdc.heat.datatypes.manifest.ManifestContent;
62 import org.openecomp.sdc.heat.datatypes.manifest.ManifestFile;
63 import org.openecomp.sdc.tosca.services.impl.ToscaFileOutputServiceCsarImpl;
64 import org.openecomp.sdc.translator.TestUtils;
65 import org.openecomp.sdc.translator.datatypes.heattotosca.TranslationContext;
66 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.ComputeTemplateConsolidationData;
67 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.ConsolidationData;
68 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.FileComputeConsolidationData;
69 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.FilePortConsolidationData;
70 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.PortTemplateConsolidationData;
71 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.TypeComputeConsolidationData;
72 import org.openecomp.sdc.translator.services.heattotosca.TranslationService;
73 import org.openecomp.sdc.translator.services.heattotosca.buildconsolidationdata.ConsolidationDataValidationType;
74 import org.togglz.testing.TestFeatureManager;
75 import org.togglz.testing.TestFeatureManagerProvider;
78 public class BaseResourceTranslationTest {
80 protected String inputFilesPath;
81 protected String outputFilesPath;
82 TranslationContext translationContext;
84 private TranslationService translationService;
85 private byte[] translatedZipFile;
87 private Map<String, byte[]> expectedResultMap = new HashMap<>();
88 private Set<String> expectedResultFileNameSet = new HashSet<>();
90 protected static TestFeatureManager manager;
93 public static void enableToggleableFeatures() {
94 manager = new TestFeatureManager(ToggleableFeature.class);
96 TestFeatureManagerProvider.setFeatureManager(manager);
100 public void setUp() throws IOException {
101 initTranslatorAndTranslate();
105 protected void initTranslatorAndTranslate() throws IOException {
106 translationService = new TranslationService();
107 translationContext = new TranslationContext();
108 translatedZipFile = translateZipFile();
111 protected void testTranslation() throws IOException {
113 URL url = BaseResourceTranslationTest.class.getResource(outputFilesPath);
115 String path = url.getPath();
116 File pathFile = new File(path);
117 File[] files = pathFile.listFiles();
118 Assert.assertNotNull("manifest files is empty", files);
119 for (File expectedFile : files) {
120 expectedResultFileNameSet.add(expectedFile.getName());
121 try (FileInputStream input = new FileInputStream(expectedFile)) {
122 expectedResultMap.put(expectedFile.getName(), FileUtils.toByteArray(input));
126 try (ByteArrayInputStream fis = new ByteArrayInputStream(translatedZipFile);
127 BufferedInputStream bis = new BufferedInputStream(fis); ZipInputStream zis = new ZipInputStream(bis)) {
128 TestUtils.compareTranslatedOutput(expectedResultFileNameSet, expectedResultMap, zis);
130 assertEquals(0, expectedResultFileNameSet.size());
133 private byte[] translateZipFile() throws IOException {
134 URL inputFilesUrl = this.getClass().getResource(inputFilesPath);
135 String path = inputFilesUrl.getPath();
136 addFilesToTranslator(translationContext, path);
137 TranslatorOutput translatorOutput = translationService.translateHeatFiles(translationContext);
138 Assert.assertNotNull(translatorOutput);
139 if (MapUtils.isNotEmpty(translatorOutput.getErrorMessages()) && MapUtils.isNotEmpty(
140 MessageContainerUtil.getMessageByLevel(ErrorLevel.ERROR, translatorOutput.getErrorMessages()))) {
141 throw new CoreException((new ErrorCode.ErrorCodeBuilder()).withMessage(
142 "Error in validation " + TestUtils.getErrorAsString(translatorOutput.getErrorMessages()))
143 .withId("Validation Error").withCategory(ErrorCategory.APPLICATION)
147 return new ToscaFileOutputServiceCsarImpl().createOutputFile(translatorOutput.getToscaServiceModel(), null);
152 private void addFilesToTranslator(TranslationContext translationContext, String path) throws IOException {
153 File manifestFile = new File(path);
154 File[] files = manifestFile.listFiles();
157 Assert.assertNotNull("manifest files is empty", files);
159 for (File file : files) {
161 try (FileInputStream fis = new FileInputStream(file)) {
163 fileContent = FileUtils.toByteArray(fis);
165 if (file.getName().equals(MANIFEST_NAME)) {
166 addManifest(translationContext, fileContent);
168 String validationFilename = "validationOutput.json";
169 String zipFilename = "VSP.zip";
170 if (!file.getName().equals(zipFilename) && (!file.getName().equals(validationFilename))) {
171 addFile(translationContext, file.getName(), fileContent);
178 private static void addManifest(TranslationContext translationContext, byte[] content) {
179 ManifestContent manifestData = JsonUtil.json2Object(new String(content), ManifestContent.class);
180 ManifestFile manifest = new ManifestFile();
181 manifest.setName(MANIFEST_NAME);
182 manifest.setContent(manifestData);
183 translationContext.setManifest(manifest);
184 translationContext.addFile(MANIFEST_NAME, content);
185 addFilesFromManifestToTranslationContextManifestFilesMap(translationContext, manifestData.getData());
188 private static void addFile(TranslationContext translationContext, String name, byte[] content) {
189 translationContext.addFile(name, content);
192 private static void addFilesFromManifestToTranslationContextManifestFilesMap(TranslationContext translationContext,
193 List<FileData> fileDataListFromManifest) {
194 for (FileData fileFromManfiest : fileDataListFromManifest) {
195 translationContext.addManifestFile(fileFromManfiest.getFile(), fileFromManfiest.getType());
199 void validateNodeTemplateIdInNestedConsolidationData() {
200 ConsolidationData consolidationData = translationContext.getConsolidationData();
201 Map<String, ServiceTemplate> expectedServiceTemplateModels = TestUtils.getServiceTemplates(expectedResultMap);
202 Assert.assertNotNull(consolidationData);
203 validateNestedConsolidationDataNodeTemplateIds(consolidationData, expectedServiceTemplateModels);
206 protected void validateComputeTemplateConsolidationData(ConsolidationDataValidationType validationType,
208 ConsolidationData consolidationData = translationContext.getConsolidationData();
209 Map<String, ServiceTemplate> expectedServiceTemplateModels = TestUtils.getServiceTemplates(expectedResultMap);
210 Assert.assertNotNull(consolidationData);
211 Assert.assertNotNull(consolidationData.getComputeConsolidationData());
212 Set<String> serviceTemplateFileNames =
213 consolidationData.getComputeConsolidationData().getAllServiceTemplateFileNames();
214 Assert.assertNotNull(serviceTemplateFileNames);
215 for (String serviceTemplateName : serviceTemplateFileNames) {
216 Assert.assertTrue(expectedServiceTemplateModels.containsKey(serviceTemplateName));
217 ServiceTemplate expectedServiceTemplate = expectedServiceTemplateModels.get(serviceTemplateName);
218 FileComputeConsolidationData fileComputeConsolidationData = consolidationData.getComputeConsolidationData()
219 .getFileComputeConsolidationData(
220 serviceTemplateName);
221 Assert.assertNotNull(fileComputeConsolidationData);
222 Set<String> computeTypes = fileComputeConsolidationData.getAllComputeTypes();
223 Assert.assertNotNull(computeTypes);
224 for (String computeType : computeTypes) {
225 TypeComputeConsolidationData typeComputeConsolidationData =
226 fileComputeConsolidationData.getTypeComputeConsolidationData(computeType);
227 Assert.assertNotNull(typeComputeConsolidationData);
229 Collection<String> computeNodeTemplateIds = typeComputeConsolidationData.getAllComputeNodeTemplateIds();
230 Assert.assertNotNull(computeNodeTemplateIds);
231 Assert.assertNotEquals(computeNodeTemplateIds.size(), 0);
233 for (String computeNodeTemplateId : computeNodeTemplateIds) {
234 ComputeTemplateConsolidationData computeTemplateConsolidationData =
235 typeComputeConsolidationData.getComputeTemplateConsolidationData(computeNodeTemplateId);
236 switch (validationType) {
238 validateGroupsInConsolidationData(computeNodeTemplateId, computeTemplateConsolidationData,
239 expectedServiceTemplate);
242 validatePortsInConsolidationData(computeNodeTemplateId, computeTemplateConsolidationData,
243 expectedServiceTemplate);
245 case VALIDATE_VOLUME:
246 validateVolumeInConsolidationData(computeNodeTemplateId, computeTemplateConsolidationData,
247 expectedServiceTemplate, testName);
249 case VALIDATE_CONNECTIVITY:
250 validateComputeConnectivityIn(computeTemplateConsolidationData, expectedServiceTemplate);
251 validateComputeConnectivityOut(computeNodeTemplateId, computeTemplateConsolidationData,
252 expectedServiceTemplate);
254 case VALIDATE_DEPENDS_ON:
255 validateDependsOnInConsolidationData(computeNodeTemplateId,
256 computeTemplateConsolidationData, expectedServiceTemplate, testName);
264 protected void validateGetAttribute(String testName) {
265 validateGetAttr(translationContext, testName);
268 protected void validateNestedTemplateConsolidationData(String testName) {
269 validateNestedConsolidationData(translationContext, testName);
272 void validatePortTemplateConsolidationData() {
273 ConsolidationData consolidationData = translationContext.getConsolidationData();
274 Map<String, ServiceTemplate> expectedServiceTemplateModels = TestUtils.getServiceTemplates(expectedResultMap);
275 Assert.assertNotNull(consolidationData);
276 Assert.assertNotNull(consolidationData.getPortConsolidationData());
277 Set<String> serviceTemplateFileNames =
278 consolidationData.getPortConsolidationData().getAllServiceTemplateFileNames();
279 Assert.assertNotNull(serviceTemplateFileNames);
280 for (String serviceTemplateName : serviceTemplateFileNames) {
281 Assert.assertTrue(expectedServiceTemplateModels.containsKey(serviceTemplateName));
282 ServiceTemplate expectedServiceTemplate = expectedServiceTemplateModels.get(serviceTemplateName);
283 FilePortConsolidationData filePortConsolidationData =
284 consolidationData.getPortConsolidationData().getFilePortConsolidationData(serviceTemplateName);
285 Assert.assertNotNull(filePortConsolidationData);
287 Set<String> portNodeTemplateIds = filePortConsolidationData.getAllPortNodeTemplateIds();
288 Assert.assertNotNull(portNodeTemplateIds);
289 Assert.assertNotEquals(portNodeTemplateIds.size(), 0);
291 for (String portNodeTemplateId : portNodeTemplateIds) {
292 PortTemplateConsolidationData portTemplateConsolidationData =
293 filePortConsolidationData.getPortTemplateConsolidationData(portNodeTemplateId);
294 switch (ConsolidationDataValidationType.VALIDATE_CONNECTIVITY) {
295 case VALIDATE_CONNECTIVITY:
296 validatePortConnectivityIn(portTemplateConsolidationData, expectedServiceTemplate);
297 validatePortConnectivityOut(portNodeTemplateId, portTemplateConsolidationData,
298 expectedServiceTemplate);