From fc645e5bbdaba22c52b08121f754dbb6ee0ed1e6 Mon Sep 17 00:00:00 2001 From: Bogumil Zebek Date: Thu, 7 Mar 2019 13:22:15 +0100 Subject: Create pnf scar archive module Change-Id: Iad552af5d4e9f446de9abecdded317ee2065edc4 Issue-ID: VNFSDK-377 Signed-off-by: Zebek Bogumil --- csarvalidation/pom.xml | 95 +++++---- .../main/java/org/onap/cvc/csar/CSARArchive.java | 8 +- .../java/org/onap/cvc/csar/PnfCSARArchive.java | 48 +++++ .../java/org/onap/cvc/csar/PnfManifestParser.java | 220 +++++++++++++++++++++ .../java/org/onap/cvc/csar/PnfCSARArchiveTest.java | 75 +++++++ .../org/onap/cvc/csar/PnfManifestParserTest.java | 76 +++++++ .../org/onap/cvc/csar/PnfMetadataParserTest.java | 155 +++++++++++++++ .../cvc/csar/PnfNonManoArtifactsParserTest.java | 78 ++++++++ .../src/test/resources/pnf/MainServiceTemplate.mf | 14 ++ .../src/test/resources/pnf/dummyPnfv2.csar | Bin 0 -> 3866 bytes 10 files changed, 722 insertions(+), 47 deletions(-) create mode 100644 csarvalidation/src/main/java/org/onap/cvc/csar/PnfCSARArchive.java create mode 100644 csarvalidation/src/main/java/org/onap/cvc/csar/PnfManifestParser.java create mode 100644 csarvalidation/src/test/java/org/onap/cvc/csar/PnfCSARArchiveTest.java create mode 100644 csarvalidation/src/test/java/org/onap/cvc/csar/PnfManifestParserTest.java create mode 100644 csarvalidation/src/test/java/org/onap/cvc/csar/PnfMetadataParserTest.java create mode 100644 csarvalidation/src/test/java/org/onap/cvc/csar/PnfNonManoArtifactsParserTest.java create mode 100644 csarvalidation/src/test/resources/pnf/MainServiceTemplate.mf create mode 100644 csarvalidation/src/test/resources/pnf/dummyPnfv2.csar diff --git a/csarvalidation/pom.xml b/csarvalidation/pom.xml index 0f25ba6..e42f818 100644 --- a/csarvalidation/pom.xml +++ b/csarvalidation/pom.xml @@ -7,7 +7,8 @@ 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. --> - + @@ -126,13 +127,21 @@ cli-main 2.0.6 test - + + + + org.assertj + assertj-core + 3.11.1 + test + + @@ -178,50 +187,50 @@ - org.apache.maven.plugins - maven-dependency-plugin - + org.apache.maven.plugins + maven-dependency-plugin + - copy-artifact - package - - copy - - - - - ${project.groupId} - ${project.artifactId} - ${project.version} - ${project.packaging} - - - ./target/lib - + copy-artifact + package + + copy + + + + + ${project.groupId} + ${project.artifactId} + ${project.version} + ${project.packaging} + + + ./target/lib + - - - - org.apache.maven.plugins - maven-dependency-plugin - 3.0.0 - - + + + + org.apache.maven.plugins + maven-dependency-plugin + 3.0.0 + + copy-dependencies package - copy-dependencies + copy-dependencies - ./target/lib - false - false - true - junit,jmockit + ./target/lib + false + false + true + junit,jmockit - - - + + + maven-war-plugin diff --git a/csarvalidation/src/main/java/org/onap/cvc/csar/CSARArchive.java b/csarvalidation/src/main/java/org/onap/cvc/csar/CSARArchive.java index cfea2b4..fdc8713 100644 --- a/csarvalidation/src/main/java/org/onap/cvc/csar/CSARArchive.java +++ b/csarvalidation/src/main/java/org/onap/cvc/csar/CSARArchive.java @@ -783,7 +783,7 @@ public class CSARArchive { private Manifest.Metadata metadata = new Metadata(); - private Map> nonMano = new HashMap<>(); + private Map>> nonMano = new HashMap<>(); public Manifest.Metadata getMetadata() { return metadata; @@ -793,11 +793,11 @@ public class CSARArchive { this.metadata = metadata; } - public Map> getNonMano() { + public Map>> getNonMano() { return nonMano; } - public void setNonMano(Map> nonMano) { + public void setNonMano(Map>> nonMano) { this.nonMano = nonMano; } } @@ -923,7 +923,7 @@ public class CSARArchive { } } - private void parseManifest() throws IOException { + void parseManifest() throws IOException { //manifest is optional, so check for it if (this.manifestMfFile == null) { return; diff --git a/csarvalidation/src/main/java/org/onap/cvc/csar/PnfCSARArchive.java b/csarvalidation/src/main/java/org/onap/cvc/csar/PnfCSARArchive.java new file mode 100644 index 0000000..bb0a723 --- /dev/null +++ b/csarvalidation/src/main/java/org/onap/cvc/csar/PnfCSARArchive.java @@ -0,0 +1,48 @@ +/** + * Copyright 2019 Nokia + * + * 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. + */ +package org.onap.cvc.csar; + +import org.apache.commons.lang3.tuple.Pair; + +import java.io.IOException; +import java.util.List; +import java.util.Map; + +public class PnfCSARArchive extends CSARArchive { + + @Override + void parseManifest() throws IOException { + + //manifest is optional, so check for it + if (this.getManifestMfFile() == null) { + return; + } + + PnfManifestParser pnfManifestParser = PnfManifestParser.getInstance( + this.getManifestMfFile().getAbsolutePath() + ); + + Pair> metadataData = pnfManifestParser.fetchMetadata(); + Pair>>, List> nonManoArtifactsData = pnfManifestParser.fetchNonManoArtifacts(); + + Manifest manifest = this.getManifest(); + manifest.setMetadata(metadataData.getKey()); + manifest.setNonMano(nonManoArtifactsData.getKey()); + this.getErrors().addAll(metadataData.getValue()); + this.getErrors().addAll(nonManoArtifactsData.getValue()); + } + +} diff --git a/csarvalidation/src/main/java/org/onap/cvc/csar/PnfManifestParser.java b/csarvalidation/src/main/java/org/onap/cvc/csar/PnfManifestParser.java new file mode 100644 index 0000000..a92ebd4 --- /dev/null +++ b/csarvalidation/src/main/java/org/onap/cvc/csar/PnfManifestParser.java @@ -0,0 +1,220 @@ +/** + * Copyright 2019 Nokia + *

+ * 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. + */ +package org.onap.cvc.csar; + +import com.google.common.collect.Lists; +import org.apache.commons.lang3.tuple.Pair; + +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class PnfManifestParser { + + + public static final String METADATA_SECTION = "metadata"; + public static final String NON_MANO_ARTIFACT_SETS_SECTION = "non_mano_artifact_sets"; + + private final List lines; + private final String fileName; + + PnfManifestParser(List lines, String fileName) { + this.lines = lines; + this.fileName = fileName; + } + + public static PnfManifestParser getInstance(String fileName) throws IOException { + try (Stream stream = Files.lines(Paths.get(fileName))) { + List lines = stream + .map(String::trim) + .collect(Collectors.toList()); + + return new PnfManifestParser(lines, fileName); + } + } + + public Pair> fetchMetadata() { + CSARArchive.Manifest.Metadata metadata = new CSARArchive.Manifest.Metadata(); + List errors = new ArrayList<>(); + + boolean isMetadataSectionAvailable = false; + int lineNumber = 0; + for (String line : lines) { + lineNumber++; + if (line.trim().isEmpty()){ + continue; + } else if (line.startsWith(METADATA_SECTION)) { + isMetadataSectionAvailable = true; + continue; + }else if (isMetadataSectionAvailable) { + Pair data = parseLine(line); + + if (isNewSection(data)) { + if(!isSectionSupported(data.getKey())) { + errors.add(new PnfCSARErrorWarning(data.getKey(), this.fileName, lineNumber)); + } + break; + } + + handleMetadataLine(metadata, errors, lineNumber, data); + } + } + + if (!isMetadataSectionAvailable) { + errors.add(new PnfCSARErrorEntryMissing(METADATA_SECTION, this.fileName, -1)); + } + + return Pair.of(metadata, errors); + + } + + public Pair>>, List> fetchNonManoArtifacts() { + Map>> nonManoArtifacts = new HashMap<>(); + List errors = new ArrayList<>(); + + boolean isNonManoArtifactsSectionAvailable = false; + String attributeName = null; + + for (String line : lines) { + + if (line.trim().isEmpty()) { + continue; + } else if (line.startsWith(NON_MANO_ARTIFACT_SETS_SECTION)) { + isNonManoArtifactsSectionAvailable = true; + continue; + } else if (isNonManoArtifactsSectionAvailable) { + Pair data = parseLine(line); + + if (isNewSection(data)) { + attributeName = data.getKey(); + continue; + } + + handleNonManoArtifactLine(nonManoArtifacts, attributeName, data); + } + } + + if (!isNonManoArtifactsSectionAvailable) { + errors.add(new PnfCSARErrorEntryMissing(NON_MANO_ARTIFACT_SETS_SECTION, this.fileName, -1)); + } + + return Pair.of(nonManoArtifacts, errors); + } + + private void handleMetadataLine( + CSARArchive.Manifest.Metadata metadata, + List errors, + int lineNumber, + Pair data) { + + String paramName = data.getKey(); + String value = data.getValue(); + + switch (paramName) { + case "pnf_product_name": + metadata.setProductName(value); + break; + case "pnf_provider_id": + metadata.setProviderId(value); + break; + case "pnf_package_version": + metadata.setPackageVersion(value); + break; + case "pnf_release_date_time": + metadata.setReleaseDateTime(value); + break; + default: + errors.add(new PnfCSARErrorInvalidEntry( + paramName, + this.fileName, + lineNumber)); + break; + } + } + + private void handleNonManoArtifactLine( + Map>> nonManoArtifacts, + String attributeName, + Pair data) { + + String key = data.getKey(); + String value = data.getValue(); + + Map> attributeWithValues = nonManoArtifacts.getOrDefault(attributeName, new HashMap<>()); + List values = attributeWithValues.getOrDefault(key, new ArrayList<>()); + values.add(value); + attributeWithValues.put(key, values); + nonManoArtifacts.put(attributeName, attributeWithValues); + } + + private boolean isSectionSupported(String key) { + return Lists.newArrayList(METADATA_SECTION, NON_MANO_ARTIFACT_SETS_SECTION).contains(key); + } + + + private boolean isNewSection(Pair data) { + String value = data.getValue().trim(); + return value.isEmpty() || value.startsWith("#"); + } + + + private Pair parseLine(String line) { + String[] elements = line.split(": "); + if (elements.length == 2) + return Pair.of(elements[0], elements[1]); + + if (line.endsWith(":")) + return Pair.of(line.substring(0, line.length() - 1), ""); + else + return Pair.of(line, ""); + + + } + + private static class PnfCSARError extends CSARArchive.CSARError { + public PnfCSARError(String errorCode, String message, int lineNumber, String file) { + super(errorCode); + this.message = message; + this.file = file; + this.lineNumber = lineNumber; + } + } + + public static class PnfCSARErrorInvalidEntry extends PnfCSARError { + public PnfCSARErrorInvalidEntry(String entry, String file, int lineNumber) { + super("0x2000", "Invalid. Entry [" + entry + "]", lineNumber, file); + } + } + + private static class PnfCSARErrorWarning extends PnfCSARError { + public PnfCSARErrorWarning(String entry, String file, int lineNumber) { + super("0x2001", "Warning. Entry [" + entry + "]", lineNumber, file); + } + } + + private static class PnfCSARErrorEntryMissing extends PnfCSARError { + public PnfCSARErrorEntryMissing(String entry, String file, int lineNumber) { + super("0x2002", "Missing. Entry [" + entry + "]", lineNumber, file); + } + } + +} diff --git a/csarvalidation/src/test/java/org/onap/cvc/csar/PnfCSARArchiveTest.java b/csarvalidation/src/test/java/org/onap/cvc/csar/PnfCSARArchiveTest.java new file mode 100644 index 0000000..4a211a5 --- /dev/null +++ b/csarvalidation/src/test/java/org/onap/cvc/csar/PnfCSARArchiveTest.java @@ -0,0 +1,75 @@ +/** + * Copyright 2019 Nokia + * + * 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. + */ +package org.onap.cvc.csar; + + +import com.google.common.collect.Lists; +import org.junit.Test; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.util.List; +import java.util.Map; + +import static org.assertj.core.api.Assertions.assertThat; + +public class PnfCSARArchiveTest { + + @Test + public void shouldUseDataStoredInManifestMfFileToConfigurePnfCSARArchive() throws IOException, URISyntaxException { + // given + String fileName = PnfCSARArchiveTest.class.getClassLoader().getResource("pnf/dummyPnfv2.csar") + .toURI().getPath(); + PnfCSARArchive pnfCSARArchive = new PnfCSARArchive(); + pnfCSARArchive.init(fileName); + + // when + try { + pnfCSARArchive.parse(); + }finally { + pnfCSARArchive.cleanup(); + } + + // then + verifyThatMetadataWasSet(pnfCSARArchive); + verifyThatNonManoArtifactsWereSet(pnfCSARArchive); + } + + private void verifyThatNonManoArtifactsWereSet(PnfCSARArchive pnfCSARArchive) { + Map>> nonManoArtifacts = pnfCSARArchive.getManifest().getNonMano(); + assertThat(nonManoArtifacts.get("prv.onap.ves_event").get("Source")) + .isEqualTo(Lists.newArrayList("Artifacts/Deployment/Events/RadioNode_Pnf_v1.yml") + ); + assertThat(nonManoArtifacts.get("prv.onap.pm_dictionary").get("Source")) + .isEqualTo(Lists.newArrayList("Artifacts/Deployment/Measurements/PM_Dictionary.yml") + ); + assertThat(nonManoArtifacts.get("prv.onap.yang_modules").get("Source")) + .isEqualTo(Lists.newArrayList( + "Artifacts/Deployment/Yang_module/yang-module1.yang", + "Artifacts/Deployment/Yang_module/yang-module2.yang" + ) + ); + } + + private void verifyThatMetadataWasSet(PnfCSARArchive pnfCSARArchive) { + CSARArchive.Manifest.Metadata metadata = pnfCSARArchive.getManifest().getMetadata(); + assertThat(metadata.getProductName()).isEqualTo("RadioNode"); + assertThat(metadata.getProviderId()).isEqualTo("Ericsson"); + assertThat(metadata.getPackageVersion()).isEqualTo("1.0"); + assertThat(metadata.getReleaseDateTime()).isEqualTo("2019-01-14T11:25:00+00:00"); + } + +} \ No newline at end of file diff --git a/csarvalidation/src/test/java/org/onap/cvc/csar/PnfManifestParserTest.java b/csarvalidation/src/test/java/org/onap/cvc/csar/PnfManifestParserTest.java new file mode 100644 index 0000000..a925674 --- /dev/null +++ b/csarvalidation/src/test/java/org/onap/cvc/csar/PnfManifestParserTest.java @@ -0,0 +1,76 @@ +/** + * Copyright 2019 Nokia + *

+ * 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. + */ +package org.onap.cvc.csar; + +import com.google.common.collect.Lists; +import org.apache.commons.lang3.tuple.Pair; +import org.junit.Before; +import org.junit.Test; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.util.List; +import java.util.Map; + +import static org.assertj.core.api.Assertions.assertThat; + + +public class PnfManifestParserTest { + + private PnfManifestParser pnfManifestParser; + + @Before + public void setUp() throws URISyntaxException, IOException { + String fileName = PnfManifestParserTest.class.getClassLoader().getResource("pnf/MainServiceTemplate.mf") + .toURI().getPath(); + pnfManifestParser = PnfManifestParser.getInstance(fileName); + } + + @Test + public void shouldFetchMetadataFromFile() { + Pair> metadataListPair = pnfManifestParser.fetchMetadata(); + CSARArchive.Manifest.Metadata metadata = metadataListPair.getKey(); + List errors= metadataListPair.getValue(); + + assertThat(metadata.getProductName()).isEqualTo("RadioNode"); + assertThat(metadata.getProviderId()).isEqualTo("Ericsson"); + assertThat(metadata.getPackageVersion()).isEqualTo("1.0"); + assertThat(metadata.getReleaseDateTime()).isEqualTo("2019-01-14T11:25:00+00:00"); + assertThat(errors.size()).isEqualTo(0); + } + + + @Test + public void shouldFetchNonManoArtifactsFromFile() { + Pair>>, List> mapListPair = pnfManifestParser.fetchNonManoArtifacts(); + Map>> nonManoArtifacts = mapListPair.getKey(); + List errors= mapListPair.getValue(); + + assertThat(nonManoArtifacts.get("prv.onap.ves_event").get("Source")) + .isEqualTo(Lists.newArrayList("Artifacts/Deployment/Events/RadioNode_Pnf_v1.yml") + ); + assertThat(nonManoArtifacts.get("prv.onap.pm_dictionary").get("Source")) + .isEqualTo(Lists.newArrayList("Artifacts/Deployment/Measurements/PM_Dictionary.yml") + ); + assertThat(nonManoArtifacts.get("prv.onap.yang_modules").get("Source")) + .isEqualTo(Lists.newArrayList( + "Artifacts/Deployment/Yang_module/yang-module1.yang", + "Artifacts/Deployment/Yang_module/yang-module2.yang" + ) + ); + assertThat(errors.size()).isEqualTo(0); + } +} \ No newline at end of file diff --git a/csarvalidation/src/test/java/org/onap/cvc/csar/PnfMetadataParserTest.java b/csarvalidation/src/test/java/org/onap/cvc/csar/PnfMetadataParserTest.java new file mode 100644 index 0000000..500fdd6 --- /dev/null +++ b/csarvalidation/src/test/java/org/onap/cvc/csar/PnfMetadataParserTest.java @@ -0,0 +1,155 @@ +/** + * Copyright 2019 Nokia + * + * 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. + */ +package org.onap.cvc.csar; + +import com.google.common.collect.Lists; +import org.apache.commons.lang3.tuple.Pair; +import org.junit.Test; + +import java.util.List; +import java.util.stream.Collectors; + +import static org.assertj.core.api.Assertions.assertThat; + +public class PnfMetadataParserTest { + + @Test + public void shouldReportAnErrorWhenMetadataSectionIsNotAvailable() { + // given + List lines = Lists.newArrayList( + "someSection:", + "param_name: some value", + "nextSection:", + "param_name: some value" + ); + + + // when + PnfManifestParser pnfManifestParser = new PnfManifestParser(lines, "fileName"); + Pair> data = pnfManifestParser.fetchMetadata(); + + //then + List errors = data.getRight(); + assertThat(errors.size()).isEqualTo(1); + assertThat(errors.stream().map(CSARArchive.CSARError::getMessage).collect(Collectors.toList())).contains( + "Missing. Entry [metadata]" + ); + } + + @Test + public void shouldReportInvalidEntriesInMetadataSection() { + + // given + List lines = Lists.newArrayList( + "metadata:", + "pnf_product_name: RadioNode", + "pnf_provider_id: Ericsson", + "pnf_package_version: 1.0", + "pnf_release_date_time: 2019-01-14T11:25:00+00:00", + "extra_param_1: some value", + "extra_param_2: some value" + ); + + // when + PnfManifestParser pnfManifestParser = new PnfManifestParser(lines, "fileName"); + Pair> data = pnfManifestParser.fetchMetadata(); + + //then + List errors = data.getRight(); + assertThat(errors.size()).isEqualTo(2); + assertThat(errors.stream().map(CSARArchive.CSARError::getMessage).collect(Collectors.toList())).contains( + "Invalid. Entry [extra_param_1]", + "Invalid. Entry [extra_param_2]" + ); + } + + + @Test + public void shouldParseMetadataToKnownSectionAndDoNotReportAnyError() { + + // given + List lines = Lists.newArrayList( + "metadata:", + "pnf_product_name: RadioNode", + "pnf_provider_id: Ericsson", + "pnf_package_version: 1.0", + "pnf_release_date_time: 2019-01-14T11:25:00+00:00", + "non_mano_artifact_sets:", + "param_name: some value" + ); + + // when + PnfManifestParser pnfManifestParser = new PnfManifestParser(lines, "fileName"); + Pair> data = pnfManifestParser.fetchMetadata(); + + //then + List errors = data.getRight(); + assertThat(errors.size()).isEqualTo(0); + + } + + + + @Test + public void shouldReportAWarningWhenUnrecognizedSectionWasFoundDuringMetadataSectionParsing() { + // given + List lines = Lists.newArrayList( + "metadata:", + "pnf_product_name: RadioNode", + "pnf_provider_id: Ericsson", + "pnf_package_version: 1.0", + "pnf_release_date_time: 2019-01-14T11:25:00+00:00", + "unknown_section:", + "param_name: some value" + ); + + // when + PnfManifestParser pnfManifestParser = new PnfManifestParser(lines, "fileName"); + Pair> data = pnfManifestParser.fetchMetadata(); + + //then + List errors = data.getRight(); + assertThat(errors.size()).isEqualTo(1); + assertThat(errors.stream().map(CSARArchive.CSARError::getMessage).collect(Collectors.toList())).contains( + "Warning. Entry [unknown_section]" + ); + } + + + @Test + public void shouldReportAWarningWhenTokenWithOutColonWasFoundDuringMetadataProcessing() { + // given + List lines = Lists.newArrayList( + "metadata:", + "pnf_product_name RadioNode", + "pnf_provider_id: Ericsson", + "pnf_package_version: 1.0", + "pnf_release_date_time: 2019-01-14T11:25:00+00:00" + ); + + // when + PnfManifestParser pnfManifestParser = new PnfManifestParser(lines, "fileName"); + Pair> data = pnfManifestParser.fetchMetadata(); + + //then + List errors = data.getRight(); + assertThat(errors.size()).isEqualTo(1); + assertThat(errors.stream().map(CSARArchive.CSARError::getMessage).collect(Collectors.toList())).contains( + "Warning. Entry [pnf_product_name RadioNode]" + ); + } + +} diff --git a/csarvalidation/src/test/java/org/onap/cvc/csar/PnfNonManoArtifactsParserTest.java b/csarvalidation/src/test/java/org/onap/cvc/csar/PnfNonManoArtifactsParserTest.java new file mode 100644 index 0000000..95526bb --- /dev/null +++ b/csarvalidation/src/test/java/org/onap/cvc/csar/PnfNonManoArtifactsParserTest.java @@ -0,0 +1,78 @@ +/** + * Copyright 2019 Nokia + * + * 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. + */ +package org.onap.cvc.csar; + +import com.google.common.collect.Lists; +import org.apache.commons.lang3.tuple.Pair; +import org.junit.Test; + +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +import static org.assertj.core.api.Assertions.assertThat; + +public class PnfNonManoArtifactsParserTest { + + @Test + public void shouldReportAnErrorWhenNonManoArtifactSectionIsNotAvailable() { + // given + List lines = Lists.newArrayList( + "someSection:", + "param_name: some value", + "nextSection:", + "param_name: some value" + ); + + + // when + PnfManifestParser pnfManifestParser = new PnfManifestParser(lines, "fileName"); + Pair>>, List> data = pnfManifestParser.fetchNonManoArtifacts(); + + //then + List errors = data.getRight(); + assertThat(errors.size()).isEqualTo(1); + assertThat(errors.stream().map(CSARArchive.CSARError::getMessage).collect(Collectors.toList())).contains( + "Missing. Entry [non_mano_artifact_sets]" + ); + } + + @Test + public void shouldParseNonManoArtifactsInProperFormatAndDoNotReportAnyError() { + + // given + List lines = Lists.newArrayList( + "non_mano_artifact_sets:", + "prv.onap.ves_event: # if private else onap_ves_event if public", + "Source: Artifacts/Deployment/Events/RadioNode_Pnf_v1.yml", + "extra_param_1: some value", + "extra_param_2: some value", + "prv.onap.pm_dictionary: # if private else onap_pm_dictionary if public", + "Source: Artifacts/Deployment/Measurements/PM_Dictionary.yml", + "param name: # if private else onap_yang_modules if public", + "key: value" + ); + + // when + PnfManifestParser pnfManifestParser = new PnfManifestParser(lines, "fileName"); + Pair>>, List> data = pnfManifestParser.fetchNonManoArtifacts(); + + //then + List errors = data.getRight(); + assertThat(errors.size()).isEqualTo(0); + + } +} diff --git a/csarvalidation/src/test/resources/pnf/MainServiceTemplate.mf b/csarvalidation/src/test/resources/pnf/MainServiceTemplate.mf new file mode 100644 index 0000000..c5a498c --- /dev/null +++ b/csarvalidation/src/test/resources/pnf/MainServiceTemplate.mf @@ -0,0 +1,14 @@ +metadata: + pnf_product_name: RadioNode + pnf_provider_id: Ericsson + pnf_package_version: 1.0 + pnf_release_date_time: 2019-01-14T11:25:00+00:00 + +non_mano_artifact_sets: + prv.onap.ves_event: # if private else onap_ves_event if public + Source: Artifacts/Deployment/Events/RadioNode_Pnf_v1.yml + prv.onap.pm_dictionary: # if private else onap_pm_dictionary if public + Source: Artifacts/Deployment/Measurements/PM_Dictionary.yml + prv.onap.yang_modules: # if private else onap_yang_modules if public + Source: Artifacts/Deployment/Yang_module/yang-module1.yang + Source: Artifacts/Deployment/Yang_module/yang-module2.yang \ No newline at end of file diff --git a/csarvalidation/src/test/resources/pnf/dummyPnfv2.csar b/csarvalidation/src/test/resources/pnf/dummyPnfv2.csar new file mode 100644 index 0000000..2c626ed Binary files /dev/null and b/csarvalidation/src/test/resources/pnf/dummyPnfv2.csar differ -- cgit 1.2.3-korg