diff options
author | kooper <sergey.sachkov@est.tech> | 2019-03-05 13:31:45 +0000 |
---|---|---|
committer | Oren Kleks <orenkle@amdocs.com> | 2019-03-07 11:35:50 +0000 |
commit | 90c460aa3c23c9a12885894b4664f7c742c8d29f (patch) | |
tree | ed5f4515307f1ed398e9ed7640e4a6d2e305db8b /openecomp-be/lib/openecomp-tosca-lib/src | |
parent | 732404b1c26892989885cf9e1f7d2c3506b035b9 (diff) |
Parse Tosca.meta file
Change-Id: I50521fb62999322c99b39024097ab5729f3c1580
Issue-ID: SDC-2151
Signed-off-by: kooper <sergey.sachkov@est.tech>
Diffstat (limited to 'openecomp-be/lib/openecomp-tosca-lib/src')
8 files changed, 238 insertions, 0 deletions
diff --git a/openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/csar/OnboardingToscaMetadata.java b/openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/csar/OnboardingToscaMetadata.java new file mode 100644 index 0000000000..b4d7f84ca4 --- /dev/null +++ b/openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/csar/OnboardingToscaMetadata.java @@ -0,0 +1,102 @@ +/*- + * ============LICENSE_START======================================================= + * SDC + * ================================================================================ + * Copyright (C) 2018 AT&T Intellectual Property. All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.sdc.tosca.csar; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import org.openecomp.sdc.common.errors.Messages; +import org.openecomp.sdc.datatypes.error.ErrorLevel; +import org.openecomp.sdc.datatypes.error.ErrorMessage; +import java.io.InputStream; +import java.io.IOException; +import org.apache.commons.io.IOUtils; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.openecomp.core.validation.errors.ErrorMessagesFormatBuilder.getErrorWithParameters; +import static org.openecomp.sdc.tosca.csar.CSARConstants.SEPERATOR_MF_ATTRIBUTE; +import static org.openecomp.sdc.tosca.csar.CSARConstants.TOSCA_META_ENTRY_DEFINITIONS; + +public class OnboardingToscaMetadata implements ToscaMetadata{ + + private Map<String, String> metaEntries; + private List<ErrorMessage> errors; + + private OnboardingToscaMetadata(){ + metaEntries = new HashMap<>(); + errors = new ArrayList<>(); + } + + /** + * Method parses input stream of meta file, only block_0 is parsed, the rest of metadata ignored + * @param st meta file input stream + * @return OnboardingToscaMetadata instance + * @throws IOException + */ + public static ToscaMetadata parseToscaMetadataFile(InputStream st) throws IOException { + OnboardingToscaMetadata meta = new OnboardingToscaMetadata(); + List<String> metadataLines = IOUtils.readLines(st, "utf-8"); + for (String line : metadataLines) { + line = line.trim(); + if (line.isEmpty()) { + return meta; + } + String[] entry = line.split(SEPERATOR_MF_ATTRIBUTE); + //No empty keys allowed, no empty values allowed + if (entry.length < 2 || entry[0].isEmpty()) { + meta.errors.add(new ErrorMessage(ErrorLevel.ERROR, getErrorWithParameters( + Messages.METADATA_INVALID_ENTRY_DEFINITIONS.getErrorMessage(), line))); + //want to get all error lines in meta file block_0, no breaking loop + } else { + meta.metaEntries.put(entry[0].trim(), entry[1].trim()); + } + } + + if (!meta.metaEntries.containsKey(TOSCA_META_ENTRY_DEFINITIONS)) { + meta.errors.add(new ErrorMessage(ErrorLevel.ERROR, getErrorWithParameters( + Messages.METADATA_NO_ENTRY_DEFINITIONS.getErrorMessage()))); + } + return meta; + } + + @Override public boolean isValid(){ + return errors.isEmpty(); + } + + @Override + public List<ErrorMessage> getErrors() { + return ImmutableList.copyOf(errors); + } + + + @Override + public Map<String, String> getMetaEntries() { + if (!isValid()){ + return Collections.emptyMap(); + } + return ImmutableMap.copyOf(metaEntries); + } +} + diff --git a/openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/csar/ToscaMetadata.java b/openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/csar/ToscaMetadata.java new file mode 100644 index 0000000000..a26e5195a5 --- /dev/null +++ b/openecomp-be/lib/openecomp-tosca-lib/src/main/java/org/openecomp/sdc/tosca/csar/ToscaMetadata.java @@ -0,0 +1,46 @@ +/*- + * ============LICENSE_START======================================================= + * SDC + * ================================================================================ + * Copyright (C) 2019, Nordix Foundation. All rights reserved. + * ================================================================================ + * 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. + * ============LICENSE_END========================================================= + */ + +package org.openecomp.sdc.tosca.csar; + +import org.openecomp.sdc.datatypes.error.ErrorMessage; + +import java.util.List; +import java.util.Map; + +public interface ToscaMetadata { + /** + * checks if metadata file is valid + * @return + */ + boolean isValid(); + + /** + * List of errors occured during manifest parsing + * @return + */ + List<ErrorMessage> getErrors(); + + /** + * Metadata entries of block_0 + * @return + */ + Map<String, String> getMetaEntries(); +} diff --git a/openecomp-be/lib/openecomp-tosca-lib/src/test/java/org/openecomp/sdc/tosca/csar/MetadataParsingTest.java b/openecomp-be/lib/openecomp-tosca-lib/src/test/java/org/openecomp/sdc/tosca/csar/MetadataParsingTest.java new file mode 100644 index 0000000000..5e32820bc3 --- /dev/null +++ b/openecomp-be/lib/openecomp-tosca-lib/src/test/java/org/openecomp/sdc/tosca/csar/MetadataParsingTest.java @@ -0,0 +1,69 @@ +package org.openecomp.sdc.tosca.csar; + + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.openecomp.sdc.tosca.csar.CSARConstants.TOSCA_META_ENTRY_CHANGE_LOG; +import static org.openecomp.sdc.tosca.csar.CSARConstants.TOSCA_META_ENTRY_DEFINITIONS; +import static org.openecomp.sdc.tosca.csar.CSARConstants.TOSCA_META_ENTRY_MANIFEST; + +import java.io.IOException; +import java.io.InputStream; + +import org.junit.Test; + + + +public class MetadataParsingTest { + + @Test + public void testNoEntryDefinitions() throws IOException { + try (InputStream is = getClass() + .getResourceAsStream("/vspmanager.csar/metadata/Invalidtosca.meta")) { + ToscaMetadata onboardingToscaMetadata = OnboardingToscaMetadata.parseToscaMetadataFile(is); + assertFalse(onboardingToscaMetadata.isValid()); + assertNull(onboardingToscaMetadata.getMetaEntries().get(TOSCA_META_ENTRY_DEFINITIONS)); + } + } + + @Test + public void testValidMetadataFile() throws IOException { + try (InputStream is = getClass() + .getResourceAsStream("/vspmanager.csar/metadata/Validtosca.meta")) { + ToscaMetadata onboardingToscaMetadata = OnboardingToscaMetadata.parseToscaMetadataFile(is); + assertEquals(onboardingToscaMetadata.getMetaEntries().get(TOSCA_META_ENTRY_DEFINITIONS), "Definitions/MainServiceTemplate.yaml"); + } + + } + + @Test + public void testInvalidMetadataFileEmptyKey() throws IOException { + try (InputStream is = getClass() + .getResourceAsStream("/vspmanager.csar/metadata/InvalidtoscaEmptyKey.meta")) { + ToscaMetadata onboardingToscaMetadata = OnboardingToscaMetadata.parseToscaMetadataFile(is); + assertFalse(onboardingToscaMetadata.isValid()); + } + } + + @Test + public void testInvalidMetadataFileEmptyValue() throws IOException { + try (InputStream is = getClass() + .getResourceAsStream("/vspmanager.csar/metadata/InvalidtoscaEmptyValue.meta")) { + ToscaMetadata onboardingToscaMetadata = OnboardingToscaMetadata.parseToscaMetadataFile(is); + assertFalse(onboardingToscaMetadata.isValid()); + } + } + + @Test + public void testValidETSIMetadataFile() throws IOException { + try (InputStream is = getClass() + .getResourceAsStream("/vspmanager.csar/metadata/ValidETSItosca.meta")) { + ToscaMetadata onboardingToscaMetadata = OnboardingToscaMetadata.parseToscaMetadataFile(is); + assertEquals(onboardingToscaMetadata.getMetaEntries().get(TOSCA_META_ENTRY_DEFINITIONS), "Definitions/MainServiceTemplate.yaml"); + assertEquals(onboardingToscaMetadata.getMetaEntries().get(TOSCA_META_ENTRY_MANIFEST), "MainServiceTemplate.mf"); + assertEquals(onboardingToscaMetadata.getMetaEntries().get(TOSCA_META_ENTRY_CHANGE_LOG), "change.log"); + } + + } +} diff --git a/openecomp-be/lib/openecomp-tosca-lib/src/test/resources/vspmanager.csar/metadata/Invalidtosca.meta b/openecomp-be/lib/openecomp-tosca-lib/src/test/resources/vspmanager.csar/metadata/Invalidtosca.meta new file mode 100644 index 0000000000..e9f08025dc --- /dev/null +++ b/openecomp-be/lib/openecomp-tosca-lib/src/test/resources/vspmanager.csar/metadata/Invalidtosca.meta @@ -0,0 +1,3 @@ +TOSCA-Meta-File-Version: 1.0 +CSAR-Version: 1.1 +Created-By: Feng yuanxing diff --git a/openecomp-be/lib/openecomp-tosca-lib/src/test/resources/vspmanager.csar/metadata/InvalidtoscaEmptyKey.meta b/openecomp-be/lib/openecomp-tosca-lib/src/test/resources/vspmanager.csar/metadata/InvalidtoscaEmptyKey.meta new file mode 100644 index 0000000000..2d3a0614e1 --- /dev/null +++ b/openecomp-be/lib/openecomp-tosca-lib/src/test/resources/vspmanager.csar/metadata/InvalidtoscaEmptyKey.meta @@ -0,0 +1,4 @@ +TOSCA-Meta-File-Version: 1.0 +CSAR-Version: 1.1 +Created-By: Sergey Sachkov + : empty
\ No newline at end of file diff --git a/openecomp-be/lib/openecomp-tosca-lib/src/test/resources/vspmanager.csar/metadata/InvalidtoscaEmptyValue.meta b/openecomp-be/lib/openecomp-tosca-lib/src/test/resources/vspmanager.csar/metadata/InvalidtoscaEmptyValue.meta new file mode 100644 index 0000000000..1f1cb9f78d --- /dev/null +++ b/openecomp-be/lib/openecomp-tosca-lib/src/test/resources/vspmanager.csar/metadata/InvalidtoscaEmptyValue.meta @@ -0,0 +1,4 @@ +TOSCA-Meta-File-Version: 1.0 +CSAR-Version: 1.1 +Created-By: Sergey Sachkov +Key : diff --git a/openecomp-be/lib/openecomp-tosca-lib/src/test/resources/vspmanager.csar/metadata/ValidETSItosca.meta b/openecomp-be/lib/openecomp-tosca-lib/src/test/resources/vspmanager.csar/metadata/ValidETSItosca.meta new file mode 100644 index 0000000000..0d74a150b1 --- /dev/null +++ b/openecomp-be/lib/openecomp-tosca-lib/src/test/resources/vspmanager.csar/metadata/ValidETSItosca.meta @@ -0,0 +1,6 @@ +TOSCA-Meta-File-Version: 1.0 +CSAR-Version: 1.1 +Created-By: Sergey Sachkov +Entry-Definitions: Definitions/MainServiceTemplate.yaml +Entry-Manifest: MainServiceTemplate.mf +Entry-Change-Log: change.log diff --git a/openecomp-be/lib/openecomp-tosca-lib/src/test/resources/vspmanager.csar/metadata/Validtosca.meta b/openecomp-be/lib/openecomp-tosca-lib/src/test/resources/vspmanager.csar/metadata/Validtosca.meta new file mode 100644 index 0000000000..4019dd88e0 --- /dev/null +++ b/openecomp-be/lib/openecomp-tosca-lib/src/test/resources/vspmanager.csar/metadata/Validtosca.meta @@ -0,0 +1,4 @@ +TOSCA-Meta-File-Version: 1.0 +CSAR-Version: 1.1 +Created-By: Feng yuanxing +Entry-Definitions: Definitions/MainServiceTemplate.yaml
\ No newline at end of file |