diff options
Diffstat (limited to 'openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/test/java/org/openecomp/core/impl/ToscaDefinitionImportHandlerTest.java')
-rw-r--r-- | openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/test/java/org/openecomp/core/impl/ToscaDefinitionImportHandlerTest.java | 291 |
1 files changed, 291 insertions, 0 deletions
diff --git a/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/test/java/org/openecomp/core/impl/ToscaDefinitionImportHandlerTest.java b/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/test/java/org/openecomp/core/impl/ToscaDefinitionImportHandlerTest.java new file mode 100644 index 0000000000..30cba677f2 --- /dev/null +++ b/openecomp-be/lib/openecomp-tosca-converter-lib/openecomp-tosca-converter-core/src/test/java/org/openecomp/core/impl/ToscaDefinitionImportHandlerTest.java @@ -0,0 +1,291 @@ +/* + * ============LICENSE_START======================================================= + * Copyright (C) 2019 Nordix Foundation + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * SPDX-License-Identifier: Apache-2.0 + * ============LICENSE_END========================================================= + */ + +package org.openecomp.core.impl; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.containsInAnyOrder; +import static org.hamcrest.Matchers.hasSize; +import static org.openecomp.core.util.TestResourcesUtil.getResourceBytesOrFail; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; +import org.junit.Before; +import org.junit.Test; +import org.openecomp.sdc.common.errors.Messages; +import org.openecomp.sdc.datatypes.error.ErrorLevel; +import org.openecomp.sdc.datatypes.error.ErrorMessage; + +public class ToscaDefinitionImportHandlerTest { + + private static final String RESOURCES_FILE_PATH = "/toscaDefinitionImportHandler/"; + private Map<String, byte[]> descriptorFileMap; + + @Before + public void setUp() { + descriptorFileMap = new HashMap<>(); + } + + /** + * Tests correct descriptor files. + */ + @Test + public void testGivenDescriptorFiles_whenMainDescriptorImportsAreHandled_allDescriptorsAreProcessedWithoutError() { + final List<String> filesToHandleList = Arrays.asList("Definitions/Main.yaml", "Definitions/descriptorBasicImport.yaml", + "Definitions/descriptorWithRelativePaths.yaml", "Artifacts/descriptorWithAbsolutePaths.yaml", + "Artifacts/descriptorCyclicReference.yaml"); + + filesToHandleList.forEach(file -> descriptorFileMap.put(file, getResourceBytesOrFail(RESOURCES_FILE_PATH + file))); + + final ToscaDefinitionImportHandler toscaDefinitionImportHandler = new ToscaDefinitionImportHandler( + descriptorFileMap, + "Definitions/Main.yaml"); + final Set<String> actualHandledFiles = toscaDefinitionImportHandler.getHandledDefinitionFilesList(); + + assertThat("The handled files should be the same", actualHandledFiles, hasSize(filesToHandleList.size())); + assertThat("The handled files should be the same" + , actualHandledFiles, containsInAnyOrder(filesToHandleList.toArray(new String[0])) + ); + + final List<ErrorMessage> validationErrorList = toscaDefinitionImportHandler.getErrors(); + assertThat("No errors should be detected", validationErrorList, hasSize(0)); + } + + /** + * Tests an empty package. + */ + @Test + public void testGivenEmptyPackage_whenMainDescriptorIsHandled_aMissingFileErrorIsReported() { + final List<String> filesToHandleList = Collections.emptyList(); + + final ToscaDefinitionImportHandler toscaDefinitionImportHandler = new ToscaDefinitionImportHandler( + descriptorFileMap, + "Definitions/Main.yaml"); + final Set<String> actualHandledFiles = toscaDefinitionImportHandler.getHandledDefinitionFilesList(); + + assertThat("The handled files should be the same", actualHandledFiles, hasSize(filesToHandleList.size())); + assertThat("The handled files should be the same" + , actualHandledFiles, containsInAnyOrder(filesToHandleList.toArray(new String[0])) + ); + + final List<ErrorMessage> expectedErrorList = new ArrayList<>(); + expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR, + Messages.MISSING_IMPORT_FILE.formatMessage("Definitions/Main.yaml"))); + + final List<ErrorMessage> validationErrorList = toscaDefinitionImportHandler.getErrors(); + assertThat("The errors should be the same", validationErrorList, hasSize(expectedErrorList.size())); + assertThat("The errors should be the same" + , validationErrorList, containsInAnyOrder(expectedErrorList.toArray(new ErrorMessage[0])) + ); + } + + /** + * Tests a file imported in a descriptor but missing in the package. + */ + @Test + public void testGivenOneMissingDescriptorFile_whenMainDescriptorImportsAreHandled_aMissingFileErrorIsReported() { + final List<String> filesToHandleList = Arrays.asList("Definitions/Main.yaml", + "Definitions/descriptorBasicImport.yaml", "Definitions/descriptorWithRelativePaths.yaml", + "Artifacts/descriptorWithAbsolutePaths.yaml"); + filesToHandleList.forEach(file -> descriptorFileMap.put(file, getResourceBytesOrFail(RESOURCES_FILE_PATH + file))); + + final List<ErrorMessage> expectedErrorList = new ArrayList<>(); + expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR, + String.format(Messages.MISSING_IMPORT_FILE.getErrorMessage(), "Artifacts/descriptorCyclicReference.yaml"))); + + final ToscaDefinitionImportHandler toscaDefinitionImportHandler = new ToscaDefinitionImportHandler( + descriptorFileMap, + "Definitions/Main.yaml"); + final Set<String> actualHandledFiles = toscaDefinitionImportHandler.getHandledDefinitionFilesList(); + + assertThat("The handled files should be the same", actualHandledFiles, hasSize(filesToHandleList.size())); + assertThat("The handled files should be the same" + , actualHandledFiles, containsInAnyOrder(filesToHandleList.toArray(new String[0])) + ); + + final List<ErrorMessage> validationErrorList = toscaDefinitionImportHandler.getErrors(); + assertThat("The errors should be the same", validationErrorList, hasSize(expectedErrorList.size())); + assertThat("The errors should be the same" + , validationErrorList, containsInAnyOrder(expectedErrorList.toArray(new ErrorMessage[0])) + ); + } + + /** + * Tests a descriptor with invalid import statements. + */ + @Test + public void testGivenDescriptorWithInvalidImportStatement_whenMainDescriptorImportsAreHandled_aInvalidImportStatementErrorIsReported() { + final String mainDefinitionFile = "Definitions/MainWithInvalidImportedFile.yaml"; + + final List<String> filesToHandleList = Arrays.asList(mainDefinitionFile, + "Definitions/descriptorInvalidImportStatement.yaml"); + filesToHandleList.forEach(file -> descriptorFileMap.put(file, getResourceBytesOrFail(RESOURCES_FILE_PATH + file))); + + final List<ErrorMessage> expectedErrorList = new ArrayList<>(); + expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR, + Messages.INVALID_IMPORT_STATEMENT.formatMessage("Definitions/descriptorInvalidImportStatement.yaml", "null"))); + + final ToscaDefinitionImportHandler toscaDefinitionImportHandler = new ToscaDefinitionImportHandler( + descriptorFileMap, + mainDefinitionFile); + final Set<String> actualHandledFiles = toscaDefinitionImportHandler.getHandledDefinitionFilesList(); + + assertThat("The handled files should be the same", actualHandledFiles, hasSize(filesToHandleList.size())); + assertThat("The handled files should be the same" + , actualHandledFiles, containsInAnyOrder(filesToHandleList.toArray(new String[0])) + ); + + final List<ErrorMessage> validationErrorList = toscaDefinitionImportHandler.getErrors(); + assertThat("The errors should be the same", validationErrorList, hasSize(expectedErrorList.size())); + assertThat("The errors should be the same" + , validationErrorList, containsInAnyOrder(expectedErrorList.toArray(new ErrorMessage[0])) + ); + } + + /** + * Tests an invalid main descriptor file path. + */ + @Test + public void testGivenInvalidMainDescriptorFilePath_whenDescriptorIsHandled_aMissingImportErrorIsReported() { + final String mainDefinitionFilePath = "Definitions/Main1.yaml"; + final String invalidMainDefinitionFilePath = "../Definitions/InvalidMainDefinitionFile.yaml"; + + final List<String> filesToHandleList = Arrays.asList(mainDefinitionFilePath); + filesToHandleList.forEach(file -> descriptorFileMap.put(file, getResourceBytesOrFail(RESOURCES_FILE_PATH + file))); + + final List<ErrorMessage> expectedErrorList = new ArrayList<>(); + expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR, Messages.MISSING_IMPORT_FILE.formatMessage(invalidMainDefinitionFilePath))); + + final ToscaDefinitionImportHandler toscaDefinitionImportHandler = new ToscaDefinitionImportHandler( + descriptorFileMap, + invalidMainDefinitionFilePath); + final Set<String> actualHandledFiles = toscaDefinitionImportHandler.getHandledDefinitionFilesList(); + + assertThat("No files should be handled", actualHandledFiles, hasSize(0)); + + final List<ErrorMessage> validationErrorList = toscaDefinitionImportHandler.getErrors(); + + assertThat("The errors should be the same", validationErrorList, hasSize(expectedErrorList.size())); + assertThat("The errors should be the same" + , validationErrorList, containsInAnyOrder(expectedErrorList.toArray(new ErrorMessage[0])) + ); + } + + /** + * Tests a descriptor with invalid yaml. + */ + @Test + public void testGivenInvalidYamlDescriptorFile_whenDescriptorIsHandled_aInvalidYamlFormatErrorIsReported() { + final String mainDefinitionFile = "Definitions/descriptorInvalid.yaml"; + + final List<String> filesToHandleList = Arrays.asList(mainDefinitionFile); + filesToHandleList.forEach(file -> descriptorFileMap.put(file, getResourceBytesOrFail(RESOURCES_FILE_PATH + file))); + + final List<ErrorMessage> expectedErrorList = new ArrayList<>(); + expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR, String.format(Messages.INVALID_YAML_FORMAT.getErrorMessage() + , "while scanning a simple key\n" + + " in 'string', line 5, column 3:\n" + + " template_author= onap\n" + + " ^\n" + + "could not find expected ':'\n" + + " in 'string', line 6, column 1:\n" + + " description: vCPE_vgw\n" + + " ^\n"))); + + final ToscaDefinitionImportHandler toscaDefinitionImportHandler = new ToscaDefinitionImportHandler( + descriptorFileMap, + mainDefinitionFile); + final Set<String> actualHandledFiles = toscaDefinitionImportHandler.getHandledDefinitionFilesList(); + + assertThat("No files should be handled", actualHandledFiles, hasSize(0)); + + final List<ErrorMessage> validationErrorList = toscaDefinitionImportHandler.getErrors(); + + assertThat("The errors should be the same", validationErrorList, hasSize(expectedErrorList.size())); + assertThat("The errors should be the same" + , validationErrorList, containsInAnyOrder(expectedErrorList.toArray(new ErrorMessage[0])) + ); + } + + /** + * Tests all forms of import statements. + */ + @Test + public void testGivenDescriptorFiles_whenMainDescriptorWithDifferentImportStatementsIsHandled_noErrorsAreReported() { + final String mainDefinitionFile = "Definitions/descriptorFileWithValidImportStatements.yaml"; + + final List<String> filesToHandleList = Arrays.asList(mainDefinitionFile, "Artifacts/descriptorCyclicReference.yaml"); + filesToHandleList.forEach(file -> descriptorFileMap.put(file, getResourceBytesOrFail(RESOURCES_FILE_PATH + file))); + + final ToscaDefinitionImportHandler toscaDefinitionImportHandler = + new ToscaDefinitionImportHandler(descriptorFileMap, mainDefinitionFile); + final Set<String> actualHandledFiles = toscaDefinitionImportHandler.getHandledDefinitionFilesList(); + + assertThat("The handled files should be the same", actualHandledFiles, hasSize(filesToHandleList.size())); + assertThat("The handled files should be the same" + , actualHandledFiles, containsInAnyOrder(filesToHandleList.toArray(new String[0])) + ); + + final List<ErrorMessage> validationErrorList = toscaDefinitionImportHandler.getErrors(); + assertThat("No errors should be detected", validationErrorList, hasSize(0)); + } + + /** + * Tests a descriptor with nonexistent import paths. + */ + @Test + public void testGivenDescriptorFileWithNonexistentRelativeImport_whenIncorrectMainDescriptorIsHandled_aMissingFileErrorIsReported() { + final String mainDefinitionFile = "Definitions/MainWithNonexistentReferences.yaml"; + + final List<String> filesToHandleList = Arrays.asList(mainDefinitionFile, "Definitions/descriptorNonexistentImport.yaml", + "Artifacts/descriptorCyclicReference.yaml"); + filesToHandleList.forEach(file -> descriptorFileMap.put(file, getResourceBytesOrFail(RESOURCES_FILE_PATH + file))); + + final List<ErrorMessage> expectedErrorList = new ArrayList<>(); + expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR, + String.format(Messages.MISSING_IMPORT_FILE.getErrorMessage(), "Definitions/descriptorCyclicReference.yaml"))); + expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR, + String.format(Messages.MISSING_IMPORT_FILE.getErrorMessage(), "Definitions/descriptorCyclicReference.yaml"))); + expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR, + String.format(Messages.MISSING_IMPORT_FILE.getErrorMessage(), "Definitions/descriptorCyclicReference.yaml"))); + + final ToscaDefinitionImportHandler toscaDefinitionImportHandler = new ToscaDefinitionImportHandler( + descriptorFileMap, + mainDefinitionFile); + final Set<String> actualHandledFiles = toscaDefinitionImportHandler.getHandledDefinitionFilesList(); + + assertThat("The handled files should be the same", actualHandledFiles, hasSize(filesToHandleList.size())); + assertThat("The handled files should be the same" + , actualHandledFiles, containsInAnyOrder(filesToHandleList.toArray(new String[0])) + ); + + final List<ErrorMessage> validationErrorList = toscaDefinitionImportHandler.getErrors(); + + assertThat("The errors should be the same", validationErrorList, hasSize(expectedErrorList.size())); + assertThat("The errors should be the same" + , validationErrorList, containsInAnyOrder(expectedErrorList.toArray(new ErrorMessage[0])) + ); + } + +}
\ No newline at end of file |