Fix internal errors

Change-Id: Ifdc6995fdadfc4e0ef575e9688b4e331afedce73
Issue-ID: VNFSDK-404
Signed-off-by: Zebek Bogumil <bogumil.zebek@nokia.com>
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 448469d..0924de7 100644
--- a/csarvalidation/src/main/java/org/onap/cvc/csar/CSARArchive.java
+++ b/csarvalidation/src/main/java/org/onap/cvc/csar/CSARArchive.java
@@ -901,18 +901,19 @@
     }
 
     private void setMode() {
-        if (new File(this.tempDir.toFile().getAbsolutePath() + File.separator + TOSCA_Metadata + File.separator + TOSCA_Metadata__TOSCA_Meta).exists()){
+        if (isToscaMetaFileExist()){
             this.toscaMeta.setMode(Mode.WITH_TOSCA_META_DIR);
         } else {
             this.toscaMeta.setMode(Mode.WITHOUT_TOSCA_META_DIR);
         }
     }
 
+    private boolean isToscaMetaFileExist() {
+        return new File(this.tempDir.toFile().getAbsolutePath() + File.separator +
+                TOSCA_Metadata + File.separator + TOSCA_Metadata__TOSCA_Meta).exists();
+    }
+
     void parseManifest() throws IOException {
-        //manifest is optional, so check for it
-        if (this.manifestMfFile == null) {
-            return;
-        }
 
         int lineNo =0;
         List<String>lines = FileUtils.readLines(this.manifestMfFile);
@@ -967,10 +968,6 @@
     }
 
     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);
 
@@ -1295,10 +1292,18 @@
         this.parseMeta();
 
         //process manifest
-        this.parseManifest();
+        if(isFileExists(this.manifestMfFile)) {
+            this.parseManifest();
+        }
 
         //process definition
-        this.parseDefinitionMetadata();
+        if(isFileExists(this.definitionYamlFile)){
+            this.parseDefinitionMetadata();
+        }
+    }
+
+    private boolean isFileExists(File file) {
+        return !Objects.isNull(file) && file.exists();
     }
 
     public void cleanup() throws IOException {
diff --git a/csarvalidation/src/main/java/org/onap/cvc/csar/PnfCSARArchive.java b/csarvalidation/src/main/java/org/onap/cvc/csar/PnfCSARArchive.java
index b51faf8..5ac67cd 100644
--- a/csarvalidation/src/main/java/org/onap/cvc/csar/PnfCSARArchive.java
+++ b/csarvalidation/src/main/java/org/onap/cvc/csar/PnfCSARArchive.java
@@ -31,12 +31,6 @@
 
     @Override
     void parseManifest() throws IOException {
-
-        //manifest is optional, so check for it
-        if (this.getManifestMfFile() == null) {
-            return;
-        }
-
         PnfManifestParser pnfManifestParser = PnfManifestParser.getInstance(
                 this.getManifestMfFile()
         );
diff --git a/csarvalidation/src/main/java/org/onap/cvc/csar/cc/sol004/VTPValidateCSARR10087.java b/csarvalidation/src/main/java/org/onap/cvc/csar/cc/sol004/VTPValidateCSARR10087.java
index 0e80add..396564e 100644
--- a/csarvalidation/src/main/java/org/onap/cvc/csar/cc/sol004/VTPValidateCSARR10087.java
+++ b/csarvalidation/src/main/java/org/onap/cvc/csar/cc/sol004/VTPValidateCSARR10087.java
@@ -18,11 +18,6 @@
 
 import org.onap.cli.fw.schema.OnapCommandSchema;
 import org.onap.cvc.csar.CSARArchive;
-import org.onap.cvc.csar.CSARArchive.CSARError;
-import org.onap.cvc.csar.CSARArchive.CSARErrorEntryMissingToscaDefinitionMetadataTemplateName;
-import org.onap.cvc.csar.CSARArchive.CSARErrorEntryMissingToscaDefinitionNotFound;
-import org.onap.cvc.csar.CSARArchive.CSARErrorEntryMissingToscaMetaDefinition;
-import org.onap.cvc.csar.CSARArchive.CSARErrorInvalidEntryValueManifestNotFound;
 import org.onap.cvc.csar.cc.VTPValidateCSARBase;
 
 @OnapCommandSchema(schema = "vtp-validate-csar-r10087.yaml")
@@ -30,15 +25,7 @@
 
     @Override
     protected void validateCSAR(CSARArchive csar) throws Exception {
-
-        for (CSARError e : csar.getErrors()) {
-            if (e instanceof CSARErrorEntryMissingToscaMetaDefinition ||
-                    e instanceof CSARErrorEntryMissingToscaDefinitionNotFound ||
-                    e instanceof CSARErrorEntryMissingToscaDefinitionMetadataTemplateName ||
-                    e instanceof CSARErrorInvalidEntryValueManifestNotFound) {
-                this.errors.add(e);
-            }
-        }
+        // During CSAR parsing file structure was checked and errors were generated if needed.
     }
 
     @Override
diff --git a/csarvalidation/src/main/resources/open-cli-schema/sol004/vtp-validate-csar-r10087.yaml b/csarvalidation/src/main/resources/open-cli-schema/sol004/vtp-validate-csar-r10087.yaml
index 3428842..299fcf9 100644
--- a/csarvalidation/src/main/resources/open-cli-schema/sol004/vtp-validate-csar-r10087.yaml
+++ b/csarvalidation/src/main/resources/open-cli-schema/sol004/vtp-validate-csar-r10087.yaml
@@ -34,6 +34,13 @@
       short_option: b
       type: binary
       is_optional: false
+    - name: pnf
+      description: CSAR file contains PNF
+      long_option: pnf
+      short_option: p
+      type: bool
+      is_optional: true
+      default_value: false
 
 results:
     direction: landscape
diff --git a/csarvalidation/src/main/resources/vnfreqs.properties b/csarvalidation/src/main/resources/vnfreqs.properties
index 935729a..cbb681d 100644
--- a/csarvalidation/src/main/resources/vnfreqs.properties
+++ b/csarvalidation/src/main/resources/vnfreqs.properties
@@ -1,5 +1,5 @@
 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,r787965
-pnfreqs.enabled=r87234,r35854,r15837,r17852,r293901,r146092,r57019,r787965
+pnfreqs.enabled=r10087,r87234,r35854,r15837,r17852,r293901,r146092,r57019,r787965
 # ignored all chef and ansible related tests
 vnferrors.ignored=0x1005,0x1006,r07879-0x1000,r13390-0x1000,r27310-0x1000,r40293-0x1000,r77786-0x1000,r04298-0x1000,r07879-0x1000,r10087-0x1000,r13390-0x1000,r23823-0x1000,r26881-0x1000,r40820-0x1000,r35851-0x1000,r32155-0x1000,r54356-0x1000,r67895-0x1000,r95321-0x1000,r46527-0x1000,r02454-0x1000
 pnferrors.ignored=
\ No newline at end of file
diff --git a/csarvalidation/src/test/java/org/onap/cvc/csar/cc/sol004/VTPValidateCSARR10087IntegrationTest.java b/csarvalidation/src/test/java/org/onap/cvc/csar/cc/sol004/VTPValidateCSARR10087IntegrationTest.java
new file mode 100644
index 0000000..136baf0
--- /dev/null
+++ b/csarvalidation/src/test/java/org/onap/cvc/csar/cc/sol004/VTPValidateCSARR10087IntegrationTest.java
@@ -0,0 +1,134 @@
+/*
+ * 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.junit.Before;
+import org.junit.Test;
+import org.onap.cli.fw.output.OnapCommandResult;
+import org.onap.cvc.csar.CSARArchive;
+
+import java.util.List;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.onap.cvc.csar.cc.sol004.IntegrationTestUtils.configureTestCase;
+import static org.onap.cvc.csar.cc.sol004.IntegrationTestUtils.convertToMessagesList;
+
+
+public class VTPValidateCSARR10087IntegrationTest {
+
+    private VTPValidateCSARR10087 testCase;
+
+    @Before
+    public void setUp() {
+        testCase = new VTPValidateCSARR10087();
+    }
+
+    @Test
+    public void shouldReturnProperRequestNumber() {
+        assertThat(testCase.getVnfReqsNo()).isEqualTo("R10087");
+    }
+
+    @Test
+    public void shouldReportThatDefinitionYAMLIsNotAvailable() throws Exception {
+        // given
+        configureTestCase(testCase, "pnf/r10087/noToscaMetaFile.csar");
+
+        // when
+        testCase.execute();
+
+        // then
+        List<CSARArchive.CSARError> errors = testCase.getErrors();
+        assertThat(errors.size()).isEqualTo(4);
+        assertThat(convertToMessagesList(errors)).contains(
+                "Missing. Entry [Definition YAML]",
+                "Ignored. Entry [MainServiceTemplate.mf]",
+                "Ignored. Entry [Artifacts]",
+                "Ignored. Entry [Definitions]"
+        );
+    }
+
+    @Test
+    public void shouldReportThatDefinitionYAMLDoesNotExist() throws Exception {
+        // given
+        configureTestCase(testCase, "pnf/r10087/invalidEntryDefinitionsInToscaMeta.csar");
+
+        // when
+        testCase.execute();
+
+        // then
+        List<CSARArchive.CSARError> errors = testCase.getErrors();
+        assertThat(errors.size()).isEqualTo(1);
+        assertThat(convertToMessagesList(errors)).contains(
+                "Invalid value. Entry [Entry-Definitions]. Definitions/WRONG_FILE_NAME.yaml does not exist"
+        );
+    }
+
+
+    @Test
+    public void shouldReportThatManifestFileDoesNotExist() throws Exception {
+        // given
+        configureTestCase(testCase, "pnf/r10087/invalidManifestFile.csar");
+
+        // when
+        testCase.execute();
+
+        // then
+        List<CSARArchive.CSARError> errors = testCase.getErrors();
+        assertThat(errors.size()).isEqualTo(1);
+        assertThat(convertToMessagesList(errors)).contains(
+                "Invalid value. Entry [ETSI-Entry-Manifest]. INVALID_MANIFEST_FILE_NAME.mf does not exist"
+        );
+    }
+
+
+    @Test
+    public void shouldReportThatChangeHistoryLogFileDoesNotExist() throws Exception {
+        // given
+        configureTestCase(testCase, "pnf/r10087/invalidChangeHistoryLog.csar");
+
+        // when
+        testCase.execute();
+
+        // then
+        List<CSARArchive.CSARError> errors = testCase.getErrors();
+        assertThat(errors.size()).isEqualTo(1);
+        assertThat(convertToMessagesList(errors)).contains(
+                "Invalid value. Entry [ETSI-Entry-Change-Log]. Artifacts/INVALID_FILE_NAME.txt does not exist"
+        );
+    }
+
+    @Test
+    public void shouldReportThatTestDirectoryDoesNotExist() throws Exception {
+        // given
+        configureTestCase(testCase, "pnf/r10087/invalidTestDirectory.csar");
+
+        // when
+        testCase.execute();
+
+        // then
+        List<CSARArchive.CSARError> errors = testCase.getErrors();
+        assertThat(errors.size()).isEqualTo(1);
+        assertThat(convertToMessagesList(errors)).contains(
+                "Invalid value. Entry [Entry-Tests]. Artifacts/InvalidTestsDirectory folder does not exist"
+        );
+    }
+
+
+
+
+}
\ No newline at end of file
diff --git a/csarvalidation/src/test/resources/pnf/r10087/invalidChangeHistoryLog.csar b/csarvalidation/src/test/resources/pnf/r10087/invalidChangeHistoryLog.csar
new file mode 100644
index 0000000..56b145f
--- /dev/null
+++ b/csarvalidation/src/test/resources/pnf/r10087/invalidChangeHistoryLog.csar
Binary files differ
diff --git a/csarvalidation/src/test/resources/pnf/r10087/invalidEntryDefinitionsInToscaMeta.csar b/csarvalidation/src/test/resources/pnf/r10087/invalidEntryDefinitionsInToscaMeta.csar
new file mode 100644
index 0000000..d07dcbf
--- /dev/null
+++ b/csarvalidation/src/test/resources/pnf/r10087/invalidEntryDefinitionsInToscaMeta.csar
Binary files differ
diff --git a/csarvalidation/src/test/resources/pnf/r10087/invalidManifestFile.csar b/csarvalidation/src/test/resources/pnf/r10087/invalidManifestFile.csar
new file mode 100644
index 0000000..83a37cb
--- /dev/null
+++ b/csarvalidation/src/test/resources/pnf/r10087/invalidManifestFile.csar
Binary files differ
diff --git a/csarvalidation/src/test/resources/pnf/r10087/invalidTestDirectory.csar b/csarvalidation/src/test/resources/pnf/r10087/invalidTestDirectory.csar
new file mode 100644
index 0000000..b31d8cf
--- /dev/null
+++ b/csarvalidation/src/test/resources/pnf/r10087/invalidTestDirectory.csar
Binary files differ
diff --git a/csarvalidation/src/test/resources/pnf/r10087/noToscaMetaFile.csar b/csarvalidation/src/test/resources/pnf/r10087/noToscaMetaFile.csar
new file mode 100644
index 0000000..331da92
--- /dev/null
+++ b/csarvalidation/src/test/resources/pnf/r10087/noToscaMetaFile.csar
Binary files differ