From 5873269dcf426377a037e28a0b16bd18af582a7e Mon Sep 17 00:00:00 2001 From: Bogumil Zebek Date: Tue, 19 Mar 2019 09:59:02 +0100 Subject: PNF TC R293901 Change-Id: I6acfa94ce0fac2b3c46688601c3ec553af4c8b66 Issue-ID: VNFSDK-386 Signed-off-by: Zebek Bogumil --- .../main/java/org/onap/cvc/csar/CSARArchive.java | 53 +++++--- .../main/java/org/onap/cvc/csar/PnfCSARError.java | 47 +++++++ .../java/org/onap/cvc/csar/PnfManifestParser.java | 31 +---- .../org/onap/cvc/csar/cc/VTPValidateCSARBase.java | 10 +- .../onap/cvc/csar/cc/VTPValidatePnfCSARBase.java | 33 +++++ .../cvc/csar/cc/sol004/VTPValidateCSARR293901.java | 58 +++++++++ .../services/org.onap.cli.fw.cmd.OnapCommand | 1 + .../sol004/vtp-validate-csar-r293901.yaml | 59 +++++++++ .../src/main/resources/vnfreqs.properties | 2 +- .../java/org/onap/cvc/csar/PnfCSARArchiveTest.java | 15 +-- .../VTPValidateCSARR293901IntegrationTest.java | 142 +++++++++++++++++++++ .../pnf/allMandatoryEntriesDefinedInTOSCAMeta.csar | Bin 0 -> 4117 bytes .../pnf/noMandatoryEntriesInTOSCAMeta.csar | Bin 0 -> 3943 bytes .../resources/pnf/noTOSCAMetaInTOSCADirectory.csar | Bin 0 -> 164 bytes 14 files changed, 390 insertions(+), 61 deletions(-) create mode 100644 csarvalidation/src/main/java/org/onap/cvc/csar/PnfCSARError.java create mode 100644 csarvalidation/src/main/java/org/onap/cvc/csar/cc/VTPValidatePnfCSARBase.java create mode 100644 csarvalidation/src/main/java/org/onap/cvc/csar/cc/sol004/VTPValidateCSARR293901.java create mode 100644 csarvalidation/src/main/resources/open-cli-schema/sol004/vtp-validate-csar-r293901.yaml create mode 100644 csarvalidation/src/test/java/org/onap/cvc/csar/cc/sol004/VTPValidateCSARR293901IntegrationTest.java create mode 100644 csarvalidation/src/test/resources/pnf/allMandatoryEntriesDefinedInTOSCAMeta.csar create mode 100644 csarvalidation/src/test/resources/pnf/noMandatoryEntriesInTOSCAMeta.csar create mode 100644 csarvalidation/src/test/resources/pnf/noTOSCAMetaInTOSCADirectory.csar (limited to 'csarvalidation/src') 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 24cef0e..c7792ae 100644 --- a/csarvalidation/src/main/java/org/onap/cvc/csar/CSARArchive.java +++ b/csarvalidation/src/main/java/org/onap/cvc/csar/CSARArchive.java @@ -29,12 +29,11 @@ import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import org.apache.commons.io.FileUtils; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.yaml.snakeyaml.Yaml; import com.fasterxml.jackson.core.JsonProcessingException; @@ -46,8 +45,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; * @author Kanagaraj Manickam kanagaraj.manickam@huawei.com * */ -public class CSARArchive { - private static final Logger LOG = LoggerFactory.getLogger(CSARArchive.class); +public class CSARArchive implements AutoCloseable { public static final String SOL0004_2_4_1 = "V2.4.1 (2018-02)"; @@ -870,33 +868,37 @@ public class CSARArchive { return errors; } - private void unzip(String csarPath) throws IOException { + private void unzip(String csarPath, Path destination) throws IOException { File csarFile = new File(csarPath); if (!csarFile.exists()) { throw new RuntimeException(csarPath + " does not exist"); } - try (ZipInputStream csar = new ZipInputStream(new BufferedInputStream(new FileInputStream(csarFile)))){ + try (ZipInputStream zipInputStream = new ZipInputStream(new BufferedInputStream(new FileInputStream(csarFile)))){ + ZipEntry entry; - byte[] buffer = new byte[2048]; - while ((entry = csar.getNextEntry()) != null) { + while ((entry = zipInputStream.getNextEntry()) != null) { - File filePath = new File(this.tempDir + File.separator + entry.getName()); + File filePath = new File(destination + File.separator + entry.getName()); - if (!filePath.getParentFile().isDirectory()) { - filePath.getParentFile().delete(); + if(entry.isDirectory()){ + filePath.mkdirs(); + } else { + extract(zipInputStream, filePath); } - filePath.getParentFile().mkdirs(); + } + } + } - try (FileOutputStream fos = new FileOutputStream(filePath); - BufferedOutputStream bos = new BufferedOutputStream(fos, buffer.length)) { + private void extract(ZipInputStream csar, File filePath) throws IOException { + byte[] buffer = new byte[2048]; + try (FileOutputStream fos = new FileOutputStream(filePath); + BufferedOutputStream bos = new BufferedOutputStream(fos, buffer.length)) { - int len; - while ((len = csar.read(buffer)) > 0) { - bos.write(buffer, 0, len); - } - } + int len; + while ((len = csar.read(buffer)) > 0) { + bos.write(buffer, 0, len); } } } @@ -984,6 +986,10 @@ public class CSARArchive { } private void parseDefinitionMetadata() throws IOException { + if(Objects.isNull(this.definitionYamlFile)){ + return; + } + try(FileInputStream ipStream = new FileInputStream(this.definitionYamlFile)) { Map yaml = (Map) new Yaml().load(ipStream); @@ -1295,7 +1301,7 @@ public class CSARArchive { this.tempDir = Paths.get(TEMP_DIR + File.separator + System.currentTimeMillis()); this.tempDir.toFile().mkdirs(); - this.unzip(csarPath); + this.unzip(csarPath, this.tempDir); } public void parse() throws IOException { //Find out the mode of CSAR @@ -1319,4 +1325,11 @@ public class CSARArchive { public File getFileFromCsar(String path) { return new File(this.tempDir.toFile().getAbsolutePath() + File.separator + path); } + + @Override + public void close() throws Exception { + if(this.tempDir != null){ + cleanup(); + } + } } diff --git a/csarvalidation/src/main/java/org/onap/cvc/csar/PnfCSARError.java b/csarvalidation/src/main/java/org/onap/cvc/csar/PnfCSARError.java new file mode 100644 index 0000000..56e524f --- /dev/null +++ b/csarvalidation/src/main/java/org/onap/cvc/csar/PnfCSARError.java @@ -0,0 +1,47 @@ +/* + * 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; + +public 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); + } + } + + public static class PnfCSARErrorWarning extends PnfCSARError { + public PnfCSARErrorWarning(String entry, String file, int lineNumber) { + super("0x2001", "Warning. Entry [" + entry + "]", lineNumber, file); + } + } + + public 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/main/java/org/onap/cvc/csar/PnfManifestParser.java b/csarvalidation/src/main/java/org/onap/cvc/csar/PnfManifestParser.java index 5694049..ea52841 100644 --- a/csarvalidation/src/main/java/org/onap/cvc/csar/PnfManifestParser.java +++ b/csarvalidation/src/main/java/org/onap/cvc/csar/PnfManifestParser.java @@ -17,6 +17,9 @@ package org.onap.cvc.csar; import com.google.common.collect.Lists; import org.apache.commons.lang3.tuple.Pair; +import org.onap.cvc.csar.PnfCSARError.PnfCSARErrorEntryMissing; +import org.onap.cvc.csar.PnfCSARError.PnfCSARErrorInvalidEntry; +import org.onap.cvc.csar.PnfCSARError.PnfCSARErrorWarning; import java.io.IOException; import java.nio.file.Files; @@ -192,32 +195,4 @@ class PnfManifestParser { } - - private static class PnfCSARError extends CSARArchive.CSARError { - PnfCSARError(String errorCode, String message, int lineNumber, String file) { - super(errorCode); - this.message = message; - this.file = file; - this.lineNumber = lineNumber; - } - } - - private static class PnfCSARErrorInvalidEntry extends PnfCSARError { - PnfCSARErrorInvalidEntry(String entry, String file, int lineNumber) { - super("0x2000", "Invalid. Entry [" + entry + "]", lineNumber, file); - } - } - - private static class PnfCSARErrorWarning extends PnfCSARError { - PnfCSARErrorWarning(String entry, String file, int lineNumber) { - super("0x2001", "Warning. Entry [" + entry + "]", lineNumber, file); - } - } - - private static class PnfCSARErrorEntryMissing extends PnfCSARError { - PnfCSARErrorEntryMissing(String entry, String file, int lineNumber) { - super("0x2002", "Missing. Entry [" + entry + "]", lineNumber, file); - } - } - } diff --git a/csarvalidation/src/main/java/org/onap/cvc/csar/cc/VTPValidateCSARBase.java b/csarvalidation/src/main/java/org/onap/cvc/csar/cc/VTPValidateCSARBase.java index d07884d..d879ff3 100644 --- a/csarvalidation/src/main/java/org/onap/cvc/csar/cc/VTPValidateCSARBase.java +++ b/csarvalidation/src/main/java/org/onap/cvc/csar/cc/VTPValidateCSARBase.java @@ -42,14 +42,14 @@ public abstract class VTPValidateCSARBase extends OnapCommand { String path = (String) getParametersMap().get("csar").getValue(); //execute - try { - CSARArchive csar = new CSARArchive(); + try (CSARArchive csar = this.createArchiveInstance()){ csar.init(path); csar.parse(); + errors.addAll(csar.getErrors()); + this.validateCSAR(csar); - csar.cleanup(); } catch (Exception e) { LOG.error(this.getVnfReqsNo() + ": Failed to validate CSAR" , e); throw new OnapCommandExecutionFailed(e.getMessage()); @@ -65,4 +65,8 @@ public abstract class VTPValidateCSARBase extends OnapCommand { this.getResult().setOutput(this.errors); } + + protected CSARArchive createArchiveInstance(){ + return new CSARArchive(); + } } diff --git a/csarvalidation/src/main/java/org/onap/cvc/csar/cc/VTPValidatePnfCSARBase.java b/csarvalidation/src/main/java/org/onap/cvc/csar/cc/VTPValidatePnfCSARBase.java new file mode 100644 index 0000000..2effffd --- /dev/null +++ b/csarvalidation/src/main/java/org/onap/cvc/csar/cc/VTPValidatePnfCSARBase.java @@ -0,0 +1,33 @@ +/* + * 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.cc; + +import org.onap.cvc.csar.CSARArchive; +import org.onap.cvc.csar.PnfCSARArchive; + +import java.util.List; + +public abstract class VTPValidatePnfCSARBase extends VTPValidateCSARBase { + protected CSARArchive createArchiveInstance(){ + return new PnfCSARArchive(); + } + + public List getErrors(){ + return this.errors; + } +} diff --git a/csarvalidation/src/main/java/org/onap/cvc/csar/cc/sol004/VTPValidateCSARR293901.java b/csarvalidation/src/main/java/org/onap/cvc/csar/cc/sol004/VTPValidateCSARR293901.java new file mode 100644 index 0000000..09edc34 --- /dev/null +++ b/csarvalidation/src/main/java/org/onap/cvc/csar/cc/sol004/VTPValidateCSARR293901.java @@ -0,0 +1,58 @@ +/* + * 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.cc.sol004; + + +import org.onap.cli.fw.schema.OnapCommandSchema; +import org.onap.cvc.csar.CSARArchive; +import org.onap.cvc.csar.PnfCSARError.PnfCSARErrorEntryMissing; +import org.onap.cvc.csar.cc.VTPValidatePnfCSARBase; + +import java.util.Objects; + +@OnapCommandSchema(schema = "vtp-validate-csar-r293901.yaml") +public class VTPValidateCSARR293901 extends VTPValidatePnfCSARBase { + + private static final int UNKNOWN_LINE_NUMBER = -1; + + @Override + protected void validateCSAR(CSARArchive csar) { + final CSARArchive.TOSCAMeta toscaMeta = csar.getToscaMeta(); + if (Objects.isNull(toscaMeta.getEntryManifestMf())) { + this.errors.add(new PnfCSARErrorEntryMissing( + "ETSI-Entry-Manifest", + CSARArchive.TOSCA_Metadata__TOSCA_Meta, + UNKNOWN_LINE_NUMBER) + ); + } + if (Objects.isNull(toscaMeta.getEntryChangeLog())) { + this.errors.add(new PnfCSARErrorEntryMissing( + "ETSI-Entry-Change-Log", + CSARArchive.TOSCA_Metadata__TOSCA_Meta, + UNKNOWN_LINE_NUMBER) + ); + } + } + + @Override + protected String getVnfReqsNo() { + return "R293901"; + } + + +} diff --git a/csarvalidation/src/main/resources/META-INF/services/org.onap.cli.fw.cmd.OnapCommand b/csarvalidation/src/main/resources/META-INF/services/org.onap.cli.fw.cmd.OnapCommand index d868756..800784c 100644 --- a/csarvalidation/src/main/resources/META-INF/services/org.onap.cli.fw.cmd.OnapCommand +++ b/csarvalidation/src/main/resources/META-INF/services/org.onap.cli.fw.cmd.OnapCommand @@ -43,3 +43,4 @@ org.onap.cvc.csar.cc.sol004.VTPValidateCSARR66070 org.onap.cvc.csar.cc.sol004.VTPValidateCSARR77707 org.onap.cvc.csar.cc.sol004.VTPValidateCSARR77786 org.onap.cvc.csar.cc.sol004.VTPValidateCSARR87234 +org.onap.cvc.csar.cc.sol004.VTPValidateCSARR293901 diff --git a/csarvalidation/src/main/resources/open-cli-schema/sol004/vtp-validate-csar-r293901.yaml b/csarvalidation/src/main/resources/open-cli-schema/sol004/vtp-validate-csar-r293901.yaml new file mode 100644 index 0000000..34f75e5 --- /dev/null +++ b/csarvalidation/src/main/resources/open-cli-schema/sol004/vtp-validate-csar-r293901.yaml @@ -0,0 +1,59 @@ +# 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. + +open_cli_schema_version: 1.0 + +name: csar-validate-r293901 + +description: | + For a VNF/PNF package CSAR MUST contains a TOSCA-Metadata directory with the TOSCA.meta metadata file. + The TOSCA.meta metadata file MUST includes block_0 with the Entry-Definitions keyword pointing to a TOSCA definitions + YAML file. + Additional keyname extension must be included as following: + -ETSI-Entry-Manifest + -ETSI-Entry-Change-Log + +info: + product: onap-vtp + version: 1.0 + service: validation + author: ONAP VTP Team onap-discuss@lists.onap.org + +parameters: + - name: csar + description: CSAR file path + long_option: csar + short_option: b + type: binary + is_optional: false + +results: + direction: landscape + attributes: + - name: code + description: Error code + scope: short + type: string + - name: message + description: Error message + scope: short + type: string + - name: file + description: File in which error occured + scope: short + type: string + - name: line-no + description: Line no at which error occured + scope: short + type: string diff --git a/csarvalidation/src/main/resources/vnfreqs.properties b/csarvalidation/src/main/resources/vnfreqs.properties index dde122f..f290fb8 100644 --- a/csarvalidation/src/main/resources/vnfreqs.properties +++ b/csarvalidation/src/main/resources/vnfreqs.properties @@ -1,3 +1,3 @@ -vnfreqs.enabled=r02454,r04298,r07879,r09467,r13390,r23823,r26881,r27310,r35851,r40293,r43958,r66070,r77707,r77786,r87234,r10087,r21322,r26885,r40820,r35854,r65486,r17852,r46527,r15837,r54356,r67895,r95321,r32155,r01123,r51347 +vnfreqs.enabled=r02454,r04298,r07879,r09467,r13390,r23823,r26881,r27310,r35851,r40293,r43958,r66070,r77707,r77786,r87234,r10087,r21322,r26885,r40820,r35854,r65486,r17852,r46527,r15837,r54356,r67895,r95321,r32155,r01123,r51347,r293901 # ignored all chef and ansible related tests errors.ignored=0x1005,0x1006,r07879-0x1000,r13390-0x1000,r27310-0x1000,r40293-0x1000,r77786-0x1000 \ No newline at end of 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 index d7370e4..b29470c 100644 --- a/csarvalidation/src/test/java/org/onap/cvc/csar/PnfCSARArchiveTest.java +++ b/csarvalidation/src/test/java/org/onap/cvc/csar/PnfCSARArchiveTest.java @@ -29,23 +29,20 @@ import static org.assertj.core.api.Assertions.assertThat; public class PnfCSARArchiveTest { @Test - public void shouldUseDataStoredInManifestMfFileToConfigurePnfCSARArchive() throws IOException, URISyntaxException { + public void shouldUseDataStoredInManifestMfFileToConfigurePnfCSARArchive() throws Exception { // given String fileName = PnfCSARArchiveTest.class.getClassLoader().getResource("pnf/dummyPnfv2.csar") .toURI().getPath(); - PnfCSARArchive pnfCSARArchive = new PnfCSARArchive(); - pnfCSARArchive.init(fileName); // when - try { + try( PnfCSARArchive pnfCSARArchive = new PnfCSARArchive()) { + pnfCSARArchive.init(fileName); pnfCSARArchive.parse(); - }finally { - pnfCSARArchive.cleanup(); + // then + verifyThatMetadataWasSet(pnfCSARArchive); + verifyThatNonManoArtifactsWereSet(pnfCSARArchive); } - // then - verifyThatMetadataWasSet(pnfCSARArchive); - verifyThatNonManoArtifactsWereSet(pnfCSARArchive); } private void verifyThatNonManoArtifactsWereSet(PnfCSARArchive pnfCSARArchive) { diff --git a/csarvalidation/src/test/java/org/onap/cvc/csar/cc/sol004/VTPValidateCSARR293901IntegrationTest.java b/csarvalidation/src/test/java/org/onap/cvc/csar/cc/sol004/VTPValidateCSARR293901IntegrationTest.java new file mode 100644 index 0000000..eca3c1a --- /dev/null +++ b/csarvalidation/src/test/java/org/onap/cvc/csar/cc/sol004/VTPValidateCSARR293901IntegrationTest.java @@ -0,0 +1,142 @@ +/* + * 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.cc.sol004; + +import com.google.common.collect.Lists; +import org.junit.Before; +import org.junit.Test; +import org.onap.cli.fw.error.OnapCommandException; +import org.onap.cli.fw.error.OnapCommandInvalidParameterValue; +import org.onap.cli.fw.input.OnapCommandParameter; +import org.onap.cli.fw.output.OnapCommandResult; +import org.onap.cli.fw.output.OnapCommandResultAttribute; +import org.onap.cvc.csar.CSARArchive; + +import java.net.URISyntaxException; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + +import static org.assertj.core.api.Assertions.assertThat; + + +public class VTPValidateCSARR293901IntegrationTest { + + private VTPValidateCSARR293901 testCase; + + @Before + public void setUp(){ + testCase = new VTPValidateCSARR293901(); + } + + @Test + public void shouldReturnProperRequestNumber() { + assertThat(testCase.getVnfReqsNo()).isEqualTo("R293901"); + } + + @Test + public void shouldReportThatMandatoryEntriesAreNotAvailable() throws Exception { + // given + configureTestCase(testCase, "pnf/noMandatoryEntriesInTOSCAMeta.csar"); + + // when + testCase.execute(); + + // then + List errors = testCase.getErrors(); + assertThat(errors.size()).isEqualTo(3); + assertThat(convertToMessagesList(errors)).contains( + "Missing. Entry [Entry-Definitions]", + "Missing. Entry [ETSI-Entry-Manifest]", + "Missing. Entry [ETSI-Entry-Change-Log]" + ); + } + + @Test + public void shouldDoNotReportAnyErrorWhenAllMandatoryEntriesWereDefined() throws Exception { + // given + configureTestCase(testCase, "pnf/allMandatoryEntriesDefinedInTOSCAMeta.csar"); + + // when + testCase.execute(); + + // then + List errors = testCase.getErrors(); + assertThat(errors.size()).isEqualTo(0); + } + + @Test + public void shouldReportAnyErrorWhneThereIsNoTOSCAMetaFileInTOSCADirectory() throws Exception { + // given + configureTestCase(testCase, "pnf/noTOSCAMetaInTOSCADirectory.csar"); + + // when + testCase.execute(); + + // then + List errors = testCase.getErrors(); + assertThat(errors.size()).isEqualTo(4); + assertThat(convertToMessagesList(testCase.getErrors())).contains( + "Missing. Entry [Definition YAML]", + "Ignored. Entry [TOSCA-Metadata]", + "Missing. Entry [ETSI-Entry-Manifest]", + "Missing. Entry [ETSI-Entry-Change-Log]" + ); + } + + private String resolvePathToFile(String s) throws URISyntaxException { + return VTPValidateCSARR293901IntegrationTest.class.getClassLoader().getResource(s) + .toURI().getPath(); + } + + private void configureTestCase(VTPValidateCSARR293901 testCase, String fileName) throws OnapCommandException, URISyntaxException { + configureCommandAttributes(testCase); + + testCase.initializeSchema("vtp-validate-csar-r293901.yaml"); + + configurePathToCsar(testCase, fileName); + } + + private void configureCommandAttributes(VTPValidateCSARR293901 testCase) { + OnapCommandResult onapCommandResult = new OnapCommandResult(); + OnapCommandResultAttribute onapCommandResultAttributeCode = new OnapCommandResultAttribute(); + onapCommandResultAttributeCode.setName("code"); + OnapCommandResultAttribute onapCommandResultAttributeMessage = new OnapCommandResultAttribute(); + onapCommandResultAttributeMessage.setName("message"); + OnapCommandResultAttribute onapCommandResultAttributeFile = new OnapCommandResultAttribute(); + onapCommandResultAttributeFile.setName("file"); + OnapCommandResultAttribute onapCommandResultAttributeLineNo = new OnapCommandResultAttribute(); + onapCommandResultAttributeLineNo.setName("line-no"); + List records = Lists.newArrayList(onapCommandResultAttributeCode, onapCommandResultAttributeMessage, onapCommandResultAttributeFile, onapCommandResultAttributeLineNo); + onapCommandResult.setRecords(records); + testCase.setResult(onapCommandResult); + } + + private void configurePathToCsar(VTPValidateCSARR293901 testCase, String fileName) throws URISyntaxException, OnapCommandInvalidParameterValue { + String pathToFile = resolvePathToFile(fileName); + Set parameters = testCase.getParameters(); + OnapCommandParameter csar = parameters.stream().filter(op -> op.getName().equals("csar")).findFirst().get(); + csar.setValue(pathToFile); + } + + private List convertToMessagesList(List errors) { + return errors.stream().map(CSARArchive.CSARError::getMessage).collect(Collectors.toList()); + } + + +} \ No newline at end of file diff --git a/csarvalidation/src/test/resources/pnf/allMandatoryEntriesDefinedInTOSCAMeta.csar b/csarvalidation/src/test/resources/pnf/allMandatoryEntriesDefinedInTOSCAMeta.csar new file mode 100644 index 0000000..f22366a Binary files /dev/null and b/csarvalidation/src/test/resources/pnf/allMandatoryEntriesDefinedInTOSCAMeta.csar differ diff --git a/csarvalidation/src/test/resources/pnf/noMandatoryEntriesInTOSCAMeta.csar b/csarvalidation/src/test/resources/pnf/noMandatoryEntriesInTOSCAMeta.csar new file mode 100644 index 0000000..9ef56cf Binary files /dev/null and b/csarvalidation/src/test/resources/pnf/noMandatoryEntriesInTOSCAMeta.csar differ diff --git a/csarvalidation/src/test/resources/pnf/noTOSCAMetaInTOSCADirectory.csar b/csarvalidation/src/test/resources/pnf/noTOSCAMetaInTOSCADirectory.csar new file mode 100644 index 0000000..7ab26c3 Binary files /dev/null and b/csarvalidation/src/test/resources/pnf/noTOSCAMetaInTOSCADirectory.csar differ -- cgit 1.2.3-korg