summaryrefslogtreecommitdiffstats
path: root/csarvalidation/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'csarvalidation/src/main')
-rw-r--r--csarvalidation/src/main/java/org/onap/cvc/csar/CSARArchive.java53
-rw-r--r--csarvalidation/src/main/java/org/onap/cvc/csar/PnfCSARError.java47
-rw-r--r--csarvalidation/src/main/java/org/onap/cvc/csar/PnfManifestParser.java31
-rw-r--r--csarvalidation/src/main/java/org/onap/cvc/csar/cc/VTPValidateCSARBase.java10
-rw-r--r--csarvalidation/src/main/java/org/onap/cvc/csar/cc/VTPValidatePnfCSARBase.java33
-rw-r--r--csarvalidation/src/main/java/org/onap/cvc/csar/cc/sol004/VTPValidateCSARR293901.java58
-rw-r--r--csarvalidation/src/main/resources/META-INF/services/org.onap.cli.fw.cmd.OnapCommand1
-rw-r--r--csarvalidation/src/main/resources/open-cli-schema/sol004/vtp-validate-csar-r293901.yaml59
-rw-r--r--csarvalidation/src/main/resources/vnfreqs.properties2
9 files changed, 242 insertions, 52 deletions
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 294522f..9d80605 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)";
@@ -872,33 +870,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);
}
}
}
@@ -986,6 +988,10 @@ public class CSARArchive {
}
private void parseDefinitionMetadata() throws IOException {
+ if(Objects.isNull(this.definitionYamlFile)){
+ return;
+ }
+
try(FileInputStream ipStream = new FileInputStream(this.definitionYamlFile)) {
Map<String, ?> yaml = (Map<String, ?>) new Yaml().load(ipStream);
@@ -1297,7 +1303,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
@@ -1321,4 +1327,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
+ * <p>
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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
+ * <p>
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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<CSARArchive.CSARError> 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
+ * <p>
+ * 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
+ * <p>
+ * http://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * 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