2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
21 package org.openecomp.sdc.vendorsoftwareproduct.impl.orchestration.csar.validation;
23 import static org.hamcrest.MatcherAssert.assertThat;
24 import static org.hamcrest.Matchers.containsInAnyOrder;
25 import static org.hamcrest.Matchers.hasSize;
26 import static org.junit.Assert.assertEquals;
27 import static org.junit.Assert.assertSame;
28 import static org.junit.Assert.assertTrue;
29 import static org.junit.Assert.fail;
30 import static org.openecomp.sdc.tosca.csar.CSARConstants.TOSCA_META_ENTRY_DEFINITIONS;
31 import static org.openecomp.sdc.tosca.csar.CSARConstants.TOSCA_META_ETSI_ENTRY_CERTIFICATE;
32 import static org.openecomp.sdc.tosca.csar.CSARConstants.TOSCA_META_ETSI_ENTRY_CHANGE_LOG;
33 import static org.openecomp.sdc.tosca.csar.CSARConstants.TOSCA_META_ETSI_ENTRY_LICENSES;
34 import static org.openecomp.sdc.tosca.csar.CSARConstants.TOSCA_META_ETSI_ENTRY_MANIFEST;
35 import static org.openecomp.sdc.tosca.csar.CSARConstants.TOSCA_META_ETSI_ENTRY_TESTS;
36 import static org.openecomp.sdc.tosca.csar.CSARConstants.TOSCA_META_PATH_FILE_NAME;
37 import static org.openecomp.sdc.tosca.csar.ManifestTokenType.ATTRIBUTE_VALUE_SEPARATOR;
38 import static org.openecomp.sdc.tosca.csar.ManifestTokenType.PNFD_ARCHIVE_VERSION;
39 import static org.openecomp.sdc.tosca.csar.ManifestTokenType.PNFD_NAME;
40 import static org.openecomp.sdc.tosca.csar.ManifestTokenType.PNFD_RELEASE_DATE_TIME;
41 import static org.openecomp.sdc.tosca.csar.ManifestTokenType.VNF_PACKAGE_VERSION;
42 import static org.openecomp.sdc.tosca.csar.ManifestTokenType.VNF_PRODUCT_NAME;
43 import static org.openecomp.sdc.tosca.csar.ManifestTokenType.VNF_PROVIDER_ID;
44 import static org.openecomp.sdc.tosca.csar.ManifestTokenType.VNF_RELEASE_DATE_TIME;
45 import static org.openecomp.sdc.vendorsoftwareproduct.impl.orchestration.csar.validation.NonManoArtifactType.ONAP_PM_DICTIONARY;
46 import static org.openecomp.sdc.vendorsoftwareproduct.impl.orchestration.csar.validation.NonManoArtifactType.ONAP_VES_EVENTS;
47 import static org.openecomp.sdc.vendorsoftwareproduct.impl.orchestration.csar.validation.TestConstants.EMPTY_YAML_FILE_PATH;
48 import static org.openecomp.sdc.vendorsoftwareproduct.impl.orchestration.csar.validation.TestConstants.INVALID_YAML_FILE_PATH;
49 import static org.openecomp.sdc.vendorsoftwareproduct.impl.orchestration.csar.validation.TestConstants.SAMPLE_DEFINITION_FILE_PATH;
50 import static org.openecomp.sdc.vendorsoftwareproduct.impl.orchestration.csar.validation.TestConstants.SAMPLE_DEFINITION_IMPORT_FILE_PATH;
51 import static org.openecomp.sdc.vendorsoftwareproduct.impl.orchestration.csar.validation.TestConstants.SAMPLE_SOURCE;
52 import static org.openecomp.sdc.vendorsoftwareproduct.impl.orchestration.csar.validation.TestConstants.TOSCA_CHANGELOG_FILEPATH;
53 import static org.openecomp.sdc.vendorsoftwareproduct.impl.orchestration.csar.validation.TestConstants.TOSCA_DEFINITION_FILEPATH;
54 import static org.openecomp.sdc.vendorsoftwareproduct.impl.orchestration.csar.validation.TestConstants.TOSCA_MANIFEST_FILEPATH;
56 import java.io.IOException;
57 import java.nio.charset.StandardCharsets;
58 import java.util.ArrayList;
59 import java.util.Collections;
60 import java.util.List;
62 import org.apache.commons.collections.CollectionUtils;
63 import org.junit.Before;
64 import org.junit.Test;
65 import org.openecomp.core.utilities.file.FileContentHandler;
66 import org.openecomp.sdc.common.errors.Messages;
67 import org.openecomp.sdc.common.utils.SdcCommon;
68 import org.openecomp.sdc.datatypes.error.ErrorLevel;
69 import org.openecomp.sdc.datatypes.error.ErrorMessage;
70 import org.openecomp.sdc.logging.api.Logger;
71 import org.openecomp.sdc.logging.api.LoggerFactory;
72 import org.openecomp.sdc.tosca.csar.ManifestTokenType;
74 public class SOL004MetaDirectoryValidatorTest {
76 private static final Logger LOGGER = LoggerFactory.getLogger(SOL004MetaDirectoryValidatorTest.class);
78 private SOL004MetaDirectoryValidator sol004MetaDirectoryValidator;
79 private FileContentHandler handler;
80 private String metaFile;
84 sol004MetaDirectoryValidator = new SOL004MetaDirectoryValidator();
85 handler = new FileContentHandler();
87 "TOSCA-Meta-File-Version: 1.0\n"+
88 "CSAR-Version: 1.1\n"+
89 "Created-By: Vendor\n"+
90 TOSCA_META_ENTRY_DEFINITIONS + ATTRIBUTE_VALUE_SEPARATOR.getToken() + "Definitions/MainServiceTemplate.yaml\n"+
91 TOSCA_META_ETSI_ENTRY_MANIFEST + ATTRIBUTE_VALUE_SEPARATOR.getToken() + "Definitions/MainServiceTemplate.mf\n"+
92 TOSCA_META_ETSI_ENTRY_CHANGE_LOG + ATTRIBUTE_VALUE_SEPARATOR.getToken() + "Artifacts/changeLog.text\n";
96 public void testGivenTOSCAMetaFile_whenEntryHasNoValue_thenErrorIsReturned() {
97 final String metaFileWithInvalidEntry = "TOSCA-Meta-File-Version: \n" +
98 "Entry-Definitions: Definitions/MainServiceTemplate.yaml";
100 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileWithInvalidEntry.getBytes(StandardCharsets.UTF_8));
101 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytes(SAMPLE_DEFINITION_FILE_PATH));
103 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
104 assertExpectedErrors("TOSCA Meta file with no entries", errors, 1);
108 public void testGivenTOSCAMeta_withAllSupportedEntries_thenNoErrorsReturned() {
110 final String entryTestFilePath = "Files/Tests";
111 final String entryLicenseFilePath = "Files/Licenses";
113 handler.addFolder("Files/Tests/");
114 handler.addFolder("Files/Licenses/");
116 metaFile = metaFile +
117 TOSCA_META_ETSI_ENTRY_TESTS + ATTRIBUTE_VALUE_SEPARATOR.getToken() + entryTestFilePath + "\n" +
118 TOSCA_META_ETSI_ENTRY_LICENSES + ATTRIBUTE_VALUE_SEPARATOR.getToken() + entryLicenseFilePath +"\n";
120 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
121 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytes(SAMPLE_DEFINITION_FILE_PATH));
122 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
124 handler.addFile(SAMPLE_SOURCE, "".getBytes());
125 handler.addFile(SAMPLE_DEFINITION_IMPORT_FILE_PATH, "".getBytes());
126 handler.addFile(entryTestFilePath, "".getBytes());
127 handler.addFile(entryLicenseFilePath, "".getBytes());
129 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder()
130 .withSource(TOSCA_META_PATH_FILE_NAME)
131 .withSource(TOSCA_DEFINITION_FILEPATH)
132 .withSource(TOSCA_CHANGELOG_FILEPATH)
133 .withSource(TOSCA_MANIFEST_FILEPATH).withSource(SAMPLE_SOURCE)
134 .withSource(SAMPLE_DEFINITION_IMPORT_FILE_PATH)
135 .withSource(entryTestFilePath)
136 .withSource(entryLicenseFilePath);
138 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
140 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
141 assertEquals(0, errors.size());
145 public void testGivenTOSCAMeta_withUnsupportedEntry_thenWarningIsReturned() {
146 metaFile = "Entry-Events: Definitions/events.log";
148 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
149 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
150 List<ErrorMessage> errorMessages = errors.get(SdcCommon.UPLOAD_FILE);
151 assertTrue(errors.size() == 1 && errorMessages.size() == 1);
152 assertSame(ErrorLevel.ERROR, errorMessages.get(0).getLevel());
156 * Tests if the meta file contains invalid versions in TOSCA-Meta-File-Version and CSAR-Version attributes.
159 public void testGivenTOSCAMetaFile_withInvalidTOSCAMetaFileVersionAndCSARVersion_thenErrorIsReturned() {
160 final String metaFile =
161 "TOSCA-Meta-File-Version: " + Integer.MAX_VALUE +
162 "\nCSAR-Version: " + Integer.MAX_VALUE +
163 "\nCreated-By: Bilal Iqbal\n" +
164 TOSCA_META_ENTRY_DEFINITIONS + ATTRIBUTE_VALUE_SEPARATOR.getToken() + "Definitions/MainServiceTemplate.yaml\n" +
165 TOSCA_META_ETSI_ENTRY_MANIFEST + ATTRIBUTE_VALUE_SEPARATOR.getToken() + "Definitions/MainServiceTemplate.mf\n"+
166 TOSCA_META_ETSI_ENTRY_CHANGE_LOG + ATTRIBUTE_VALUE_SEPARATOR.getToken() + "Artifacts/changeLog.text";
168 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
170 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
171 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
173 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytes(SAMPLE_DEFINITION_FILE_PATH));
174 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
176 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
177 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
179 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
180 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
182 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
183 assertExpectedErrors("Invalid TOSCA-Meta-File-Version and CSAR-Version attributes", errors, 2);
187 public void testGivenTOSCAMetaFile_withNonExistentFileReferenced_thenErrorsReturned() {
188 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
190 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
191 List<ErrorMessage> errorMessages = errors.get(SdcCommon.UPLOAD_FILE);
192 assertTrue(errors.size() == 1 && errorMessages.size() == 3);
197 public void testGivenDefinitionFile_whenValidImportStatementExist_thenNoErrorsReturned() {
198 final ManifestBuilder manifestBuilder = getPnfManifestSampleBuilder();
200 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
201 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
203 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
204 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
206 handler.addFile(SAMPLE_SOURCE, "".getBytes());
207 manifestBuilder.withSource(SAMPLE_SOURCE);
209 handler.addFile("Definitions/etsi_nfv_sol001_pnfd_2_5_1_types.yaml", getResourceBytes(SAMPLE_DEFINITION_FILE_PATH));
210 manifestBuilder.withSource("Definitions/etsi_nfv_sol001_pnfd_2_5_1_types.yaml");
212 final String definitionFileWithValidImports = "/validation.files/definition/definitionFileWithValidImports.yaml";
213 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytes(definitionFileWithValidImports));
214 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
216 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
217 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
219 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
220 assertEquals(0, errors.size());
224 public void testGivenDefinitionFile_whenMultipleDefinitionsImportStatementExist_thenNoErrorsReturned() {
225 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
227 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
228 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
230 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
231 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
233 handler.addFile(SAMPLE_SOURCE, "".getBytes());
234 manifestBuilder.withSource(SAMPLE_SOURCE);
236 final byte [] sampleDefinitionFile1 = getResourceBytes("/validation.files/definition/sampleDefinitionFile1.yaml");
237 handler.addFile(TOSCA_DEFINITION_FILEPATH, sampleDefinitionFile1);
238 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
240 final byte [] sampleDefinitionFile2 = getResourceBytes("/validation.files/definition/sampleDefinitionFile2.yaml");
241 handler.addFile("Definitions/etsi_nfv_sol001_pnfd_2_5_1_types.yaml", sampleDefinitionFile2);
242 manifestBuilder.withSource("Definitions/etsi_nfv_sol001_pnfd_2_5_1_types.yaml");
244 final byte [] sampleDefinitionFile3 = getResourceBytes("/validation.files/definition/sampleDefinitionFile1.yaml");
245 handler.addFile("Definitions/etsi_nfv_sol001_pnfd_2_5_2_types.yaml", sampleDefinitionFile3);
246 manifestBuilder.withSource("Definitions/etsi_nfv_sol001_pnfd_2_5_2_types.yaml");
248 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
249 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
251 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
252 assertEquals(0, errors.size());
256 public void testGivenDefinitionFile_whenInvalidImportStatementExist_thenErrorIsReturned() {
257 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
259 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
260 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
262 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
263 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
265 handler.addFile(SAMPLE_SOURCE, "".getBytes());
266 manifestBuilder.withSource(SAMPLE_SOURCE);
268 final String definitionFileWithInvalidImports = "/validation.files/definition/definitionFileWithInvalidImport.yaml";
269 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytes(definitionFileWithInvalidImports));
270 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
272 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
273 String manifest = manifestBuilder.build();
274 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifest.getBytes(StandardCharsets.UTF_8));
276 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
277 assertExpectedErrors("", errors, 1);
281 * Manifest referenced import file missing
284 public void testGivenDefinitionFile_whenReferencedImportDoesNotExist_thenErrorIsReturned() {
285 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
287 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
288 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
290 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
291 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
293 handler.addFile(SAMPLE_SOURCE, "".getBytes());
294 manifestBuilder.withSource(SAMPLE_SOURCE);
296 handler.addFile("Definitions/etsi_nfv_sol001_pnfd_2_5_1_types.yaml", "".getBytes());
297 manifestBuilder.withSource("Definitions/etsi_nfv_sol001_pnfd_2_5_1_types.yaml");
299 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
300 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytes("/validation.files/definition/sampleDefinitionFile2.yaml"));
302 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
303 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
305 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
306 assertExpectedErrors("Manifest referenced import file missing", errors, 1);
310 * Reference with invalid YAML format.
313 public void testGivenDefinitionFile_withInvalidYAML_thenErrorIsReturned() {
314 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
316 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
317 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
319 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
320 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
322 handler.addFile(SAMPLE_SOURCE, "".getBytes());
323 manifestBuilder.withSource(SAMPLE_SOURCE);
325 final String definitionFileWithInvalidYAML = "/validation.files/definition/invalidDefinitionFile.yaml";
326 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytes(definitionFileWithInvalidYAML));
327 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
329 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
330 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
332 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
333 assertExpectedErrors("Reference with invalid YAML format", errors, 1);
337 public void testGivenManifestFile_withValidSourceAndNonManoSources_thenNoErrorIsReturned() {
338 final ManifestBuilder manifestBuilder = getPnfManifestSampleBuilder();
340 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
341 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
343 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
344 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
346 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytes(SAMPLE_DEFINITION_FILE_PATH));
347 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
349 handler.addFile(SAMPLE_SOURCE, "".getBytes());
350 manifestBuilder.withSource(SAMPLE_SOURCE);
352 handler.addFile(SAMPLE_DEFINITION_IMPORT_FILE_PATH, getResourceBytes(SAMPLE_DEFINITION_FILE_PATH));
353 manifestBuilder.withSource(SAMPLE_DEFINITION_IMPORT_FILE_PATH);
355 final String nonManoSource = "Artifacts/Deployment/Measurements/PM_Dictionary.yaml";
356 handler.addFile(nonManoSource, getResourceBytes("/validation.files/measurements/pmEvents-valid.yaml"));
357 manifestBuilder.withNonManoArtifact(ONAP_PM_DICTIONARY.getType(), nonManoSource);
359 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
360 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
362 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
363 assertEquals(0, errors.size());
367 * Manifest with non existent source files should return error.
370 public void testGivenManifestFile_withNonExistentSourceFile_thenErrorIsReturned() {
371 final ManifestBuilder manifestBuilder = getPnfManifestSampleBuilder();
372 //non existent reference
373 manifestBuilder.withSource("Artifacts/Deployment/Events/RadioNode_pnf_v1.yaml");
375 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
376 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
378 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
379 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
381 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytes(SAMPLE_DEFINITION_FILE_PATH));
382 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
384 handler.addFile(SAMPLE_DEFINITION_IMPORT_FILE_PATH, "".getBytes());
385 manifestBuilder.withSource(SAMPLE_DEFINITION_IMPORT_FILE_PATH);
387 String nonManoSource = "Artifacts/Deployment/Measurements/PM_Dictionary.yaml";
388 handler.addFile(nonManoSource, getResourceBytes("/validation.files/measurements/pmEvents-valid.yaml"));
389 manifestBuilder.withNonManoArtifact(ONAP_PM_DICTIONARY.getType(), nonManoSource);
391 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
392 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
394 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
395 assertExpectedErrors("Manifest with non existent source files", errors, 1);
399 * Tests the validation for a TOSCA Manifest with invalid data.
402 public void testGivenManifestFile_withInvalidData_thenErrorIsReturned() {
403 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
404 handler.addFile(TOSCA_MANIFEST_FILEPATH, getResourceBytes("/validation.files/manifest/invalidManifest.mf"));
405 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
406 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytes(SAMPLE_DEFINITION_FILE_PATH));
407 handler.addFile(SAMPLE_DEFINITION_IMPORT_FILE_PATH, "".getBytes());
409 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
410 assertExpectedErrors("TOSCA manifest with invalid data", errors, 1);
414 public void testGivenManifestAndDefinitionFile_withSameNames_thenNoErrorReturned() {
415 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
417 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
418 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
420 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
421 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
423 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytes(SAMPLE_DEFINITION_FILE_PATH));
424 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
426 handler.addFile(SAMPLE_DEFINITION_IMPORT_FILE_PATH, "".getBytes());
427 manifestBuilder.withSource(SAMPLE_DEFINITION_IMPORT_FILE_PATH);
429 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
430 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
432 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
433 assertEquals(0, errors.size());
437 * Main TOSCA definitions file and Manifest file with different name should return error.
440 public void testGivenManifestAndMainDefinitionFile_withDifferentNames_thenErrorIsReturned() {
442 "TOSCA-Meta-File-Version: 1.0\n"+
443 "CSAR-Version: 1.1\n"+
444 "Created-By: Vendor\n"+
445 TOSCA_META_ENTRY_DEFINITIONS + ATTRIBUTE_VALUE_SEPARATOR.getToken() + "Definitions/MainServiceTemplate.yaml\n"+
446 TOSCA_META_ETSI_ENTRY_MANIFEST + ATTRIBUTE_VALUE_SEPARATOR.getToken() +"Definitions/MainServiceTemplate2.mf\n"+
447 TOSCA_META_ETSI_ENTRY_CHANGE_LOG + ATTRIBUTE_VALUE_SEPARATOR.getToken() +"Artifacts/changeLog.text\n";
449 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
451 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
452 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
454 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
455 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
457 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytes(SAMPLE_DEFINITION_FILE_PATH));
458 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
460 handler.addFile(SAMPLE_DEFINITION_IMPORT_FILE_PATH, "".getBytes());
461 manifestBuilder.withSource(SAMPLE_DEFINITION_IMPORT_FILE_PATH);
463 manifestBuilder.withSource("Definitions/MainServiceTemplate2.mf");
464 handler.addFile("Definitions/MainServiceTemplate2.mf", manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
466 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
467 assertExpectedErrors("Main TOSCA definitions file and Manifest file with different name should return error",
472 public void testGivenManifestFile_withDifferentExtension_thenErrorIsReturned() {
474 "TOSCA-Meta-File-Version: 1.0\n"+
475 "CSAR-Version: 1.1\n"+
476 "Created-By: Vendor\n"+
477 "Entry-Definitions: Definitions/MainServiceTemplate.yaml\n"+
478 TOSCA_META_ETSI_ENTRY_MANIFEST + ATTRIBUTE_VALUE_SEPARATOR.getToken() + "Definitions/MainServiceTemplate.txt\n"+
479 TOSCA_META_ETSI_ENTRY_CHANGE_LOG + ATTRIBUTE_VALUE_SEPARATOR.getToken() + "Artifacts/changeLog.text\n";
481 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
483 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
484 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
486 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
487 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
489 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytes(SAMPLE_DEFINITION_FILE_PATH));
490 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
492 handler.addFile(SAMPLE_DEFINITION_IMPORT_FILE_PATH, "".getBytes());
493 manifestBuilder.withSource(SAMPLE_DEFINITION_IMPORT_FILE_PATH);
495 manifestBuilder.withSource("Definitions/MainServiceTemplate.txt");
496 handler.addFile("Definitions/MainServiceTemplate.txt", manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
498 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
499 assertExpectedErrors("Manifest file with different extension than .mf should return error",
504 public void testGivenManifestFile_withValidVnfMetadata_thenNoErrorsReturned() {
505 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
507 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
508 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
509 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
510 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
511 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytes(SAMPLE_DEFINITION_FILE_PATH));
512 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
514 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
515 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
517 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
518 assertExpectedErrors("Manifest with valid vnf mandatory values should not return any errors", errors, 0);
522 public void testGivenManifestFile_withValidPnfMetadata_thenNoErrorsReturned() {
523 final ManifestBuilder manifestBuilder = getPnfManifestSampleBuilder();
525 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
526 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
528 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
529 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
531 manifestBuilder.withSignedSource(TOSCA_DEFINITION_FILEPATH
532 , "SHA-abc", "09e5a788acb180162c51679ae4c998039fa6644505db2415e35107d1ee213943");
533 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytes(SAMPLE_DEFINITION_FILE_PATH));
535 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
536 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
538 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
539 assertExpectedErrors("Manifest with valid pnf mandatory values should not return any errors", errors, 0);
543 * Manifest with mixed metadata should return error.
546 public void testGivenManifestFile_withMetadataContainingMixedPnfVnfMetadata_thenErrorIsReturned() {
547 final ManifestBuilder manifestBuilder = new ManifestBuilder()
548 .withMetaData(PNFD_NAME.getToken(), "RadioNode")
549 .withMetaData(VNF_PROVIDER_ID.getToken(), "Bilal Iqbal")
550 .withMetaData(PNFD_ARCHIVE_VERSION.getToken(), "1.0")
551 .withMetaData(VNF_RELEASE_DATE_TIME.getToken(), "2019-12-14T11:25:00+00:00");
553 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
554 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
555 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
556 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
557 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytes(SAMPLE_DEFINITION_FILE_PATH));
558 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
560 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
561 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
563 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
564 assertExpectedErrors("Manifest with mixed metadata should return error", errors, 1);
569 public void testGivenManifestFile_withMetadataMissingPnfOrVnfMandatoryEntries_thenErrorIsReturned() {
570 final ManifestBuilder manifestBuilder = new ManifestBuilder()
571 .withMetaData("invalid_product_name", "RadioNode")
572 .withMetaData("invalid_provider_id", "Bilal Iqbal")
573 .withMetaData("invalid_package_version", "1.0")
574 .withMetaData("invalid_release_date_time", "2019-12-14T11:25:00+00:00");
576 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
577 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
579 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
580 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
582 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytes(SAMPLE_DEFINITION_FILE_PATH));
583 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
585 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
586 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
588 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
589 assertExpectedErrors("Manifest with missing vnf or pnf mandatory entries should return error", errors, 1);
593 public void testGivenManifestFile_withMetadataMissingMandatoryPnfEntries_thenErrorIsReturned() {
594 final ManifestBuilder manifestBuilder = new ManifestBuilder();
596 manifestBuilder.withMetaData(PNFD_NAME.getToken(), "RadioNode");
597 manifestBuilder.withMetaData(PNFD_RELEASE_DATE_TIME.getToken(), "2019-12-14T11:25:00+00:00");
599 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
600 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
602 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
603 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
605 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytes(SAMPLE_DEFINITION_FILE_PATH));
606 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
608 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
609 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
611 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
612 assertExpectedErrors("Manifest with metadata missing pnf mandatory entries should return error", errors, 1);
617 public void testGivenManifestFile_withMetadataMissingMandatoryVnfEntries_thenErrorIsReturned() {
618 final ManifestBuilder manifestBuilder = new ManifestBuilder();
620 manifestBuilder.withMetaData(VNF_PRODUCT_NAME.getToken(), "RadioNode");
622 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
623 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
625 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
626 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
628 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytes(SAMPLE_DEFINITION_FILE_PATH));
629 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
631 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
632 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
634 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
635 assertExpectedErrors("Manifest with metadata missing vnf mandatory entries should return error", errors, 1);
640 * Manifest with more than 4 metadata entries should return error.
643 public void testGivenManifestFile_withMetadataEntriesExceedingTheLimit_thenErrorIsReturned() {
644 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder()
645 .withMetaData(PNFD_NAME.getToken(), "RadioNode")
646 .withMetaData(ManifestTokenType.PNFD_PROVIDER.getToken(), "Bilal Iqbal")
647 .withMetaData(PNFD_ARCHIVE_VERSION.getToken(), "1.0")
648 .withMetaData(PNFD_RELEASE_DATE_TIME.getToken(), "2019-03-11T11:25:00+00:00");
650 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
651 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
653 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
654 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
656 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytes(SAMPLE_DEFINITION_FILE_PATH));
657 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
659 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
660 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
662 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
663 assertExpectedErrors("Manifest with more than 4 metadata entries should return error", errors, 1);
667 public void testGivenManifestFile_withPnfMetadataAndVfEntries_thenErrorIsReturned() {
668 final ManifestBuilder manifestBuilder = getPnfManifestSampleBuilder();
670 metaFile = metaFile +
671 TOSCA_META_ETSI_ENTRY_TESTS + ATTRIBUTE_VALUE_SEPARATOR.getToken() + "Files/Tests\n" +
672 TOSCA_META_ETSI_ENTRY_LICENSES + ATTRIBUTE_VALUE_SEPARATOR.getToken() + "Files/Licenses\n" +
673 TOSCA_META_ETSI_ENTRY_CERTIFICATE + ATTRIBUTE_VALUE_SEPARATOR.getToken() + "Files/Certificates";
675 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
676 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
678 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
679 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
681 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytes(SAMPLE_DEFINITION_FILE_PATH));
682 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
684 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
685 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
686 handler.addFolder("Files/Certificates/");
687 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
688 assertExpectedErrors("Tosca.meta should not have entries applicable only to VF", errors, 2);
693 * Tests an imported descriptor with a missing imported file.
696 public void testGivenDefinitionFileWithImportedDescriptor_whenImportedDescriptorImportsMissingFile_thenMissingImportErrorOccur() {
697 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
699 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
700 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
702 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
703 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
705 handler.addFile(SAMPLE_SOURCE, "".getBytes());
706 manifestBuilder.withSource(SAMPLE_SOURCE);
708 final String definitionImportOne = "Definitions/importOne.yaml";
709 handler.addFile(definitionImportOne, getResourceBytes("/validation.files/definition/sampleDefinitionFile2.yaml"));
710 manifestBuilder.withSource(definitionImportOne);
712 final String definitionFileWithValidImports = "/validation.files/definition/definitionFileWithOneImport.yaml";
713 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytes(definitionFileWithValidImports));
714 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
716 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
717 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
719 final Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator.validateContent(handler);
721 final List<ErrorMessage> expectedErrorList = new ArrayList<>();
722 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
723 , Messages.MISSING_IMPORT_FILE.formatMessage("Definitions/etsi_nfv_sol001_pnfd_2_5_2_types.yaml"))
726 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), expectedErrorList);
730 * Tests an imported descriptor with invalid import statement.
733 public void testGivenDefinitionFileWithImportedDescriptor_whenInvalidImportStatementExistInImportedDescriptor_thenInvalidImportErrorOccur() {
734 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
736 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
737 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
739 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
740 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
742 handler.addFile(SAMPLE_SOURCE, "".getBytes());
743 manifestBuilder.withSource(SAMPLE_SOURCE);
745 final String definitionImportOne = "Definitions/importOne.yaml";
746 handler.addFile(definitionImportOne, getResourceBytes("/validation.files/definition/definitionFileWithInvalidImport.yaml"));
747 manifestBuilder.withSource(definitionImportOne);
749 final String definitionFileWithValidImports = "/validation.files/definition/definitionFileWithOneImport.yaml";
750 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytes(definitionFileWithValidImports));
751 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
753 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
754 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
756 final Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator.validateContent(handler);
758 final List<ErrorMessage> expectedErrorList = new ArrayList<>();
759 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
760 , Messages.INVALID_IMPORT_STATEMENT.formatMessage(definitionImportOne, "null"))
763 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), expectedErrorList);
767 public void givenManifestWithNonManoPmAndVesArtifacts_whenNonManoArtifactsAreValid_thenNoErrorsOccur() {
768 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
770 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
771 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
773 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytes(SAMPLE_DEFINITION_FILE_PATH));
774 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
776 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
777 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
779 final String nonManoPmEventsSource = "Artifacts/Deployment/Measurements/PM_Dictionary.yaml";
780 handler.addFile(nonManoPmEventsSource, getResourceBytes("/validation.files/measurements/pmEvents-valid.yaml"));
781 manifestBuilder.withNonManoArtifact(ONAP_PM_DICTIONARY.getType(), nonManoPmEventsSource);
783 final String nonManoVesEventsSource = "Artifacts/Deployment/Events/ves_events.yaml";
784 handler.addFile(nonManoVesEventsSource, getResourceBytes("/validation.files/events/vesEvents-valid.yaml"));
785 manifestBuilder.withNonManoArtifact(ONAP_VES_EVENTS.getType(), nonManoVesEventsSource);
787 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
788 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
790 final Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator
791 .validateContent(handler);
793 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), Collections.emptyList());
797 public void givenManifestWithNonManoPmOrVesArtifacts_whenNonManoArtifactsYamlAreInvalid_thenInvalidYamlErrorOccur() {
798 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
800 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
801 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
803 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytes(SAMPLE_DEFINITION_FILE_PATH));
804 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
806 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
807 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
809 final String nonManoPmEventsSource = "Artifacts/Deployment/Measurements/PM_Dictionary.yaml";
810 handler.addFile(nonManoPmEventsSource, getResourceBytes(INVALID_YAML_FILE_PATH));
811 manifestBuilder.withNonManoArtifact(ONAP_PM_DICTIONARY.getType(), nonManoPmEventsSource);
813 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
814 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
816 final List<ErrorMessage> expectedErrorList = new ArrayList<>();
817 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
818 , Messages.INVALID_YAML_FORMAT_1.formatMessage(nonManoPmEventsSource, "while scanning a simple key\n"
819 + " in 'reader', line 2, column 1:\n"
822 + "could not find expected ':'\n"
823 + " in 'reader', line 2, column 7:\n"
828 final Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator
829 .validateContent(handler);
831 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), expectedErrorList);
835 public void givenManifestWithNonManoPmOrVesArtifacts_whenNonManoArtifactsYamlAreEmpty_thenEmptyYamlErrorOccur() {
836 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
838 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
839 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
841 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytes(SAMPLE_DEFINITION_FILE_PATH));
842 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
844 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
845 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
847 final String nonManoPmEventsSource = "Artifacts/Deployment/Measurements/PM_Dictionary.yaml";
848 handler.addFile(nonManoPmEventsSource, getResourceBytes(EMPTY_YAML_FILE_PATH));
849 manifestBuilder.withNonManoArtifact(ONAP_PM_DICTIONARY.getType(), nonManoPmEventsSource);
851 final String nonManoVesEventsSource = "Artifacts/Deployment/Events/ves_events.yaml";
852 handler.addFile(nonManoVesEventsSource, getResourceBytes(EMPTY_YAML_FILE_PATH));
853 manifestBuilder.withNonManoArtifact(ONAP_VES_EVENTS.getType(), nonManoVesEventsSource);
855 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
856 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
858 final List<ErrorMessage> expectedErrorList = new ArrayList<>();
859 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
860 , Messages.EMPTY_YAML_FILE_1.formatMessage(nonManoPmEventsSource))
862 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
863 , Messages.EMPTY_YAML_FILE_1.formatMessage(nonManoVesEventsSource))
866 final Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator
867 .validateContent(handler);
869 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), expectedErrorList);
873 public void givenManifestWithNonManoPmOrVesArtifacts_whenNonManoArtifactsHaveNotYamlExtension_thenInvalidYamlExtensionErrorOccur() {
874 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
876 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
877 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
879 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytes(SAMPLE_DEFINITION_FILE_PATH));
880 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
882 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
883 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
885 final String nonManoPmEventsSource = "Artifacts/Deployment/Measurements/PM_Dictionary.y1";
886 handler.addFile(nonManoPmEventsSource, "".getBytes());
887 manifestBuilder.withNonManoArtifact(ONAP_PM_DICTIONARY.getType(), nonManoPmEventsSource);
889 final String nonManoVesEventsSource = "Artifacts/Deployment/Events/ves_events.y2";
890 handler.addFile(nonManoVesEventsSource, "".getBytes());
891 manifestBuilder.withNonManoArtifact(ONAP_VES_EVENTS.getType(), nonManoVesEventsSource);
893 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
894 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
896 final List<ErrorMessage> expectedErrorList = new ArrayList<>();
897 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
898 , Messages.INVALID_YAML_EXTENSION.formatMessage(nonManoPmEventsSource))
900 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
901 , Messages.INVALID_YAML_EXTENSION.formatMessage(nonManoVesEventsSource))
904 final Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator
905 .validateContent(handler);
907 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), expectedErrorList);
910 private void assertExpectedErrors(final String testCase, final Map<String, List<ErrorMessage>> errors, final int expectedErrors){
911 final List<ErrorMessage> errorMessages = errors.get(SdcCommon.UPLOAD_FILE);
912 printErrorMessages(errorMessages);
913 if (expectedErrors > 0) {
914 assertEquals(testCase, expectedErrors, errorMessages.size());
916 assertEquals(testCase, expectedErrors, errors.size());
920 private void printErrorMessages(final List<ErrorMessage> errorMessages) {
921 if (CollectionUtils.isNotEmpty(errorMessages)) {
922 errorMessages.forEach(errorMessage ->
923 System.out.println(String.format("%s: %s", errorMessage.getLevel(), errorMessage.getMessage()))
928 private byte[] getResourceBytes(final String resourcePath) {
930 return ValidatorUtil.getFileResource(resourcePath);
931 } catch (final IOException e) {
932 final String errorMsg = String.format("Could not load resource '%s'", resourcePath);
933 LOGGER.error(errorMsg, e);
940 private ManifestBuilder getPnfManifestSampleBuilder() {
941 return new ManifestBuilder()
942 .withMetaData(PNFD_NAME.getToken(), "myPnf")
943 .withMetaData(ManifestTokenType.PNFD_PROVIDER.getToken(), "ACME")
944 .withMetaData(PNFD_ARCHIVE_VERSION.getToken(), "1.0")
945 .withMetaData(PNFD_RELEASE_DATE_TIME.getToken(), "2019-03-11T11:25:00+00:00");
948 private ManifestBuilder getVnfManifestSampleBuilder() {
949 return new ManifestBuilder()
950 .withMetaData(VNF_PRODUCT_NAME.getToken(), "RadioNode")
951 .withMetaData(VNF_PROVIDER_ID.getToken(), "ACME")
952 .withMetaData(VNF_PACKAGE_VERSION.getToken(), "1.0")
953 .withMetaData(VNF_RELEASE_DATE_TIME.getToken(), "2019-03-11T11:25:00+00:00");
956 private void assertExpectedErrors(List<ErrorMessage> actualErrorList, final List<ErrorMessage> expectedErrorList) {
957 if (actualErrorList == null) {
958 actualErrorList = new ArrayList<>();
961 printErrorMessages(actualErrorList);
963 assertThat("The actual error list should have the same size as the expected error list"
964 , actualErrorList, hasSize(expectedErrorList.size())
967 assertThat("The actual error and expected error lists should be the same"
968 , actualErrorList, containsInAnyOrder(expectedErrorList.toArray(new ErrorMessage[0]))