summaryrefslogtreecommitdiffstats
path: root/csarvalidation/src/main/java
diff options
context:
space:
mode:
authorGao Weitao <victor.gao@huawei.com>2019-03-25 13:46:06 +0000
committerGerrit Code Review <gerrit@onap.org>2019-03-25 13:46:06 +0000
commitd34c02725d33d4b9cfa3ac70742b47be65b31066 (patch)
treece03c44c382357155aac9c1c0e6f96ccddc5d47a /csarvalidation/src/main/java
parent873fbb49dcd3092d2591a4eca13470713ca443ea (diff)
parent5873269dcf426377a037e28a0b16bd18af582a7e (diff)
Merge "PNF TC R293901"
Diffstat (limited to 'csarvalidation/src/main/java')
-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
6 files changed, 181 insertions, 51 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";
+ }
+
+
+}