From 22360c78d550a25b9bdaea12cdb208371b69a488 Mon Sep 17 00:00:00 2001 From: "andre.schmid" Date: Fri, 12 Jul 2019 12:33:10 +0000 Subject: Allow relative path for SOL004 descriptors import Allow the use of relative path on SOL004 descriptors imports. Resolves imports with "/", "../" or "./" entries during validation and package processing. Validate if the reference is inside the package. Fix problem where imported descriptor files, described as a non string scalar yaml entry, were not being checked by the validator. Change-Id: Ie5a32736b6090b4adf178e8714f7460bcd068def Issue-ID: SDC-2422 Signed-off-by: andre.schmid --- .../core/impl/ToscaSolConverterVnfTest.java | 78 +++++++++++++++++----- 1 file changed, 60 insertions(+), 18 deletions(-) (limited to 'openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/test/java/org/openecomp/core/impl/ToscaSolConverterVnfTest.java') diff --git a/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/test/java/org/openecomp/core/impl/ToscaSolConverterVnfTest.java b/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/test/java/org/openecomp/core/impl/ToscaSolConverterVnfTest.java index 532573bcf4..f130f262a7 100644 --- a/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/test/java/org/openecomp/core/impl/ToscaSolConverterVnfTest.java +++ b/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/test/java/org/openecomp/core/impl/ToscaSolConverterVnfTest.java @@ -22,6 +22,8 @@ package org.openecomp.core.impl; +import static org.junit.Assert.fail; + import org.apache.commons.io.IOUtils; import org.junit.Assert; import org.junit.Before; @@ -29,6 +31,8 @@ import org.junit.Test; import org.onap.sdc.tosca.datatypes.model.ServiceTemplate; import org.openecomp.core.utilities.file.FileContentHandler; import org.openecomp.sdc.common.errors.CoreException; +import org.openecomp.sdc.logging.api.Logger; +import org.openecomp.sdc.logging.api.LoggerFactory; import org.openecomp.sdc.tosca.datatypes.ToscaServiceModel; import java.io.IOException; import java.io.InputStream; @@ -37,6 +41,7 @@ import java.util.Map; public class ToscaSolConverterVnfTest { + private static final Logger LOGGER = LoggerFactory.getLogger(ToscaSolConverterVnfTest.class); private AbstractToscaSolConverter toscaSolConverter; private FileContentHandler fileContentHandler; @@ -47,10 +52,8 @@ public class ToscaSolConverterVnfTest { fileContentHandler = new FileContentHandler(); } - @Test - public void testGivenSOL004WithMetadataDirectoryPackage_whenToscaSolConverterIsCalled_validToscaServiceModelIsReturned() - throws IOException{ + public void testGivenSOL004WithMetadataDirectoryPackage_whenToscaSolConverterIsCalled_validToscaServiceModelIsReturned() { fileContentHandler.addFile("TOSCA-Metadata/TOSCA.meta", ("TOSCA-Meta-File-Version: 1.0\n " + "CSAR-Version: 1.1\n" + @@ -60,29 +63,52 @@ public class ToscaSolConverterVnfTest { "Entry-Change-Log: Artifacts/ChangeLog.txt") .getBytes(StandardCharsets.UTF_8)); - fileContentHandler.addFile("Definitions/Main.yaml", getFileResource("/toscaSOlConverter/Main.yaml")); - fileContentHandler.addFile("Main.mf", "".getBytes()); + final String mainServiceTemplate = "Main.yaml"; + final String mainManifest = "Main.mf"; + + fileContentHandler.addFile("Definitions/" + mainServiceTemplate, getFileResource("/toscaSOlConverter/Main.yaml")); + fileContentHandler.addFile(mainManifest, "".getBytes()); fileContentHandler.addFile("Definitions/sample_import1.yaml", getFileResource("/toscaSOlConverter/sample_import1.yaml")); fileContentHandler.addFile("Definitions/sample_import2.yaml", getFileResource("/toscaSOlConverter/sample_import2.yaml")); fileContentHandler.addFile("Artifacts/sample_import3.yaml", getFileResource("/toscaSOlConverter/sample_import3.yaml")); fileContentHandler.addFile("Artifacts/sample_import4.yaml", getFileResource("/toscaSOlConverter/sample_import4.yaml")); - ToscaServiceModel toscaServiceModel = toscaSolConverter.convert(fileContentHandler); - FileContentHandler contentHandler = toscaServiceModel.getArtifactFiles(); - Map serviceTemplateMap = toscaServiceModel.getServiceTemplates(); - String entryDefinitionTemplateName = toscaServiceModel.getEntryDefinitionServiceTemplate(); - Assert.assertTrue("Artifacts should contain external files", contentHandler.containsFile("Main.mf")); - Assert.assertTrue("Main service template should exist", serviceTemplateMap.containsKey("Main.yaml")); + fileContentHandler.addFile("sample_import5.yaml", getFileResource("/toscaSOlConverter/sample_import3.yaml")); + + final ToscaServiceModel toscaServiceModel = convertToscaSol(); + final FileContentHandler contentHandler = toscaServiceModel.getArtifactFiles(); + final Map serviceTemplateMap = toscaServiceModel.getServiceTemplates(); + final String entryDefinitionTemplateName = toscaServiceModel.getEntryDefinitionServiceTemplate(); + Assert.assertTrue("Artifacts should contain external files", contentHandler.containsFile(mainManifest)); + Assert.assertTrue("Main service template should exist", serviceTemplateMap.containsKey(mainServiceTemplate)); Assert.assertEquals("Entry Definition name should be same as passed in TOSCA.meta", - "Main.yaml", entryDefinitionTemplateName); + mainServiceTemplate, entryDefinitionTemplateName); + } + + @Test(expected = RuntimeException.class) + public void testGivenSOL004InvalidDirectoryPackage_whenToscaSolConverterIsCalled_exceptionIsExpected() { + fileContentHandler.addFile("TOSCA-Metadata/TOSCA.meta", + ("TOSCA-Meta-File-Version: 1.0\n " + + "CSAR-Version: 1.1\n" + + "Created-by: Ericsson\n" + + "Entry-Definitions: Definitions/Main.yaml\n" + + "Entry-Manifest: Main.mf\n" + + "Entry-Change-Log: Artifacts/ChangeLog.txt") + .getBytes(StandardCharsets.UTF_8)); + + fileContentHandler.addFile("Definitions/Main.yaml", getFileResource("/toscaSOlConverter/Main.yaml")); + fileContentHandler.addFile("Main.mf", "".getBytes()); + fileContentHandler.addFile("Definitions/sample_import1.yaml", getFileResource("/toscaSOlConverter/sample_import3.yaml")); + + convertToscaSol(); } @Test(expected = IOException.class) - public void testGivenMetaFileDoesNotExist_thenAnExceptionIsThrown() throws IOException{ + public void testGivenMetaFileDoesNotExist_thenAnExceptionIsThrown() throws IOException { toscaSolConverter.convert(fileContentHandler); } @Test(expected = CoreException.class) - public void testGivenInvalidServiceTemplate_thenAnExceptionIsThrown() throws IOException{ + public void testGivenInvalidServiceTemplate_thenAnExceptionIsThrown() { fileContentHandler.addFile("TOSCA-Metadata/TOSCA.meta", ("TOSCA-Meta-File-Version: 1.0\n " + @@ -94,12 +120,28 @@ public class ToscaSolConverterVnfTest { .getBytes(StandardCharsets.UTF_8)); fileContentHandler.addFile("Definitions/Main.yaml", getFileResource("/toscaSOlConverter/invalidMainService.yaml")); - toscaSolConverter.convert(fileContentHandler); + convertToscaSol(); } - private byte[] getFileResource(String filePath) throws IOException { - InputStream inputStream = ClassLoader.class.getClass().getResourceAsStream(filePath); - return IOUtils.toByteArray(inputStream); + private ToscaServiceModel convertToscaSol() { + try { + return toscaSolConverter.convert(fileContentHandler); + } catch (final IOException e) { + final String errorMsg = "Could convert file content handler"; + LOGGER.error(errorMsg, e); + fail(errorMsg); + } + return null; + } + + private byte[] getFileResource(final String filePath) { + try (final InputStream inputStream = ClassLoader.class.getResourceAsStream(filePath)) { + return IOUtils.toByteArray(inputStream); + } catch (final IOException ex) { + fail(String.format("Could not load file: %s", filePath)); + } + + return null; } } \ No newline at end of file -- cgit 1.2.3-korg