2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Modifications copyright (c) 2020 Nokia
8 * ================================================================================
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
20 * ============LICENSE_END=========================================================
23 package org.openecomp.sdc.vendorsoftwareproduct.impl.orchestration.csar.validation;
25 import static org.hamcrest.MatcherAssert.assertThat;
26 import static org.hamcrest.Matchers.anEmptyMap;
27 import static org.hamcrest.Matchers.containsInAnyOrder;
28 import static org.hamcrest.Matchers.hasSize;
29 import static org.hamcrest.Matchers.is;
30 import static org.junit.Assert.assertEquals;
31 import static org.mockito.ArgumentMatchers.any;
32 import static org.mockito.Mockito.mock;
33 import static org.mockito.Mockito.when;
34 import static org.openecomp.sdc.be.config.NonManoArtifactType.ONAP_PM_DICTIONARY;
35 import static org.openecomp.sdc.be.config.NonManoArtifactType.ONAP_SW_INFORMATION;
36 import static org.openecomp.sdc.be.config.NonManoArtifactType.ONAP_VES_EVENTS;
37 import static org.openecomp.sdc.be.test.util.TestResourcesHandler.getResourceBytesOrFail;
38 import static org.openecomp.sdc.tosca.csar.ManifestTokenType.ATTRIBUTE_VALUE_SEPARATOR;
39 import static org.openecomp.sdc.tosca.csar.ManifestTokenType.PNFD_ARCHIVE_VERSION;
40 import static org.openecomp.sdc.tosca.csar.ManifestTokenType.PNFD_NAME;
41 import static org.openecomp.sdc.tosca.csar.ManifestTokenType.PNFD_RELEASE_DATE_TIME;
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.tosca.csar.ToscaMetaEntry.CREATED_BY_ENTRY;
46 import static org.openecomp.sdc.tosca.csar.ToscaMetaEntry.CSAR_VERSION_ENTRY;
47 import static org.openecomp.sdc.tosca.csar.ToscaMetaEntry.ENTRY_DEFINITIONS;
48 import static org.openecomp.sdc.tosca.csar.ToscaMetaEntry.ETSI_ENTRY_CERTIFICATE;
49 import static org.openecomp.sdc.tosca.csar.ToscaMetaEntry.ETSI_ENTRY_CHANGE_LOG;
50 import static org.openecomp.sdc.tosca.csar.ToscaMetaEntry.ETSI_ENTRY_LICENSES;
51 import static org.openecomp.sdc.tosca.csar.ToscaMetaEntry.ETSI_ENTRY_MANIFEST;
52 import static org.openecomp.sdc.tosca.csar.ToscaMetaEntry.ETSI_ENTRY_TESTS;
53 import static org.openecomp.sdc.tosca.csar.ToscaMetaEntry.TOSCA_META_FILE_VERSION_ENTRY;
54 import static org.openecomp.sdc.tosca.csar.ToscaMetadataFileInfo.TOSCA_META_PATH_FILE_NAME;
55 import static org.openecomp.sdc.vendorsoftwareproduct.impl.orchestration.csar.validation.TestConstants.EMPTY_YAML_FILE_PATH;
56 import static org.openecomp.sdc.vendorsoftwareproduct.impl.orchestration.csar.validation.TestConstants.INVALID_YAML_FILE_PATH;
57 import static org.openecomp.sdc.vendorsoftwareproduct.impl.orchestration.csar.validation.TestConstants.SAMPLE_DEFINITION_FILE_PATH;
58 import static org.openecomp.sdc.vendorsoftwareproduct.impl.orchestration.csar.validation.TestConstants.SAMPLE_DEFINITION_IMPORT_FILE_PATH;
59 import static org.openecomp.sdc.vendorsoftwareproduct.impl.orchestration.csar.validation.TestConstants.SAMPLE_SOURCE;
60 import static org.openecomp.sdc.vendorsoftwareproduct.impl.orchestration.csar.validation.TestConstants.TOSCA_CHANGELOG_FILEPATH;
61 import static org.openecomp.sdc.vendorsoftwareproduct.impl.orchestration.csar.validation.TestConstants.TOSCA_DEFINITION_FILEPATH;
62 import static org.openecomp.sdc.vendorsoftwareproduct.impl.orchestration.csar.validation.TestConstants.TOSCA_MANIFEST_FILEPATH;
64 import java.nio.charset.StandardCharsets;
65 import java.util.ArrayList;
66 import java.util.Collections;
67 import java.util.List;
69 import java.util.stream.Collectors;
70 import java.util.stream.Stream;
72 import org.apache.commons.collections.CollectionUtils;
73 import org.junit.Before;
74 import org.junit.Test;
75 import org.openecomp.sdc.common.errors.Messages;
76 import org.openecomp.sdc.common.utils.SdcCommon;
77 import org.openecomp.sdc.datatypes.error.ErrorLevel;
78 import org.openecomp.sdc.datatypes.error.ErrorMessage;
79 import org.openecomp.sdc.tosca.csar.ManifestTokenType;
80 import org.openecomp.sdc.vendorsoftwareproduct.impl.onboarding.OnboardingPackageContentHandler;
81 import org.openecomp.sdc.vendorsoftwareproduct.security.SecurityManager;
82 import org.openecomp.sdc.vendorsoftwareproduct.security.SecurityManagerException;
84 public class SOL004MetaDirectoryValidatorTest {
86 private static int MANIFEST_DEFINITION_ERROR_COUNT = 1;
88 protected SOL004MetaDirectoryValidator sol004MetaDirectoryValidator;
89 protected OnboardingPackageContentHandler handler;
90 protected StringBuilder metaFileBuilder;
94 sol004MetaDirectoryValidator = getSOL004MetaDirectoryValidator();
95 handler = new OnboardingPackageContentHandler();
96 metaFileBuilder = getMetaFileBuilder();
99 protected SOL004MetaDirectoryValidator getSOL004MetaDirectoryValidator() {
100 return new SOL004MetaDirectoryValidator();
103 protected SOL004MetaDirectoryValidator getSol004WithSecurity(SecurityManager securityManagerMock) {
104 return new SOL004MetaDirectoryValidator(securityManagerMock);
107 protected StringBuilder getMetaFileBuilder() {
108 return new StringBuilder()
109 .append(TOSCA_META_FILE_VERSION_ENTRY.getName())
110 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" 1.0").append("\n")
111 .append(CSAR_VERSION_ENTRY.getName())
112 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" 1.1").append("\n")
113 .append(CREATED_BY_ENTRY.getName())
114 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" Vendor").append("\n")
115 .append(ENTRY_DEFINITIONS.getName())
116 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" ").append(TOSCA_DEFINITION_FILEPATH).append("\n")
117 .append(ETSI_ENTRY_MANIFEST.getName())
118 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" ").append(TOSCA_MANIFEST_FILEPATH).append("\n")
119 .append(ETSI_ENTRY_CHANGE_LOG.getName())
120 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" ").append(TOSCA_CHANGELOG_FILEPATH).append("\n");
123 protected ManifestBuilder getPnfManifestSampleBuilder() {
124 return new ManifestBuilder()
125 .withMetaData(PNFD_NAME.getToken(), "myPnf")
126 .withMetaData(ManifestTokenType.PNFD_PROVIDER.getToken(), "ACME")
127 .withMetaData(PNFD_ARCHIVE_VERSION.getToken(), "1.0")
128 .withMetaData(PNFD_RELEASE_DATE_TIME.getToken(), "2019-03-11T11:25:00+00:00");
131 protected ManifestBuilder getVnfManifestSampleBuilder() {
132 return new ManifestBuilder()
133 .withMetaData(ManifestTokenType.VNF_PRODUCT_NAME.getToken(), "RadioNode")
134 .withMetaData(ManifestTokenType.VNF_PROVIDER_ID.getToken(), "ACME")
135 .withMetaData(ManifestTokenType.VNF_PACKAGE_VERSION.getToken(), "1.0")
136 .withMetaData(ManifestTokenType.VNF_RELEASE_DATE_TIME.getToken(), "2019-03-11T11:25:00+00:00");
140 * ETSI Version 2.7.1 below contains one Definition File reference
141 * ETSI Version 2.7.1 onwards contains two possible Definition File reference
143 protected int getManifestDefintionErrorCount() {
144 return MANIFEST_DEFINITION_ERROR_COUNT;
148 public void testGivenTOSCAMetaFile_whenEntryHasNoValue_thenErrorIsReturned() {
149 final String metaFileWithInvalidEntry = "TOSCA-Meta-File-Version: \n" +
150 "Entry-Definitions: " + TOSCA_DEFINITION_FILEPATH;
152 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileWithInvalidEntry.getBytes(StandardCharsets.UTF_8));
153 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
155 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
156 assertExpectedErrors("TOSCA Meta file with no entries", errors, 1);
160 public void testGivenTOSCAMeta_withAllSupportedEntries_thenNoErrorsReturned() {
162 final String entryTestFilePath = "Files/Tests";
163 final String entryLicenseFilePath = "Files/Licenses";
165 handler.addFolder("Files/Tests/");
166 handler.addFolder("Files/Licenses/");
168 .append(ETSI_ENTRY_TESTS.getName())
169 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(entryTestFilePath).append("\n")
170 .append(ETSI_ENTRY_LICENSES.getName())
171 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(entryLicenseFilePath).append("\n");
173 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
174 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
175 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
177 handler.addFile(SAMPLE_SOURCE, "".getBytes());
178 handler.addFile(SAMPLE_DEFINITION_IMPORT_FILE_PATH, "".getBytes());
179 handler.addFile(entryTestFilePath, "".getBytes());
180 handler.addFile(entryLicenseFilePath, "".getBytes());
182 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder()
183 .withSource(TOSCA_META_PATH_FILE_NAME)
184 .withSource(TOSCA_DEFINITION_FILEPATH)
185 .withSource(TOSCA_CHANGELOG_FILEPATH)
186 .withSource(TOSCA_MANIFEST_FILEPATH).withSource(SAMPLE_SOURCE)
187 .withSource(SAMPLE_DEFINITION_IMPORT_FILE_PATH)
188 .withSource(entryTestFilePath)
189 .withSource(entryLicenseFilePath);
191 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
193 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
195 assertEquals(0, errors.size());
199 public void testGivenTOSCAMeta_withUnsupportedEntry_thenNoErrorIsReturned() {
201 .append("a-unknown-entry")
202 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" ")
203 .append("Definitions/events.log");
205 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
206 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
207 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
208 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder()
209 .withSource(TOSCA_META_PATH_FILE_NAME)
210 .withSource(TOSCA_DEFINITION_FILEPATH)
211 .withSource(TOSCA_CHANGELOG_FILEPATH)
212 .withSource(TOSCA_MANIFEST_FILEPATH);
214 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
215 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
216 assertThat("Validation should produce no errors", errors, is(anEmptyMap()));
220 * Tests if the meta file contains invalid versions in TOSCA-Meta-File-Version and CSAR-Version attributes.
223 public void testGivenTOSCAMetaFile_withInvalidTOSCAMetaFileVersionAndCSARVersion_thenErrorIsReturned() {
224 final StringBuilder metaFileBuilder = new StringBuilder()
225 .append(TOSCA_META_FILE_VERSION_ENTRY.getName())
226 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(Integer.MAX_VALUE).append("\n")
227 .append(CSAR_VERSION_ENTRY.getName())
228 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(Integer.MAX_VALUE).append("\n")
229 .append(CREATED_BY_ENTRY.getName())
230 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" Vendor").append("\n")
231 .append(ENTRY_DEFINITIONS.getName())
232 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" ").append(TOSCA_DEFINITION_FILEPATH).append("\n")
233 .append(ETSI_ENTRY_MANIFEST.getName())
234 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" ").append(TOSCA_MANIFEST_FILEPATH).append("\n")
235 .append(ETSI_ENTRY_CHANGE_LOG.getName())
236 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" ").append(TOSCA_CHANGELOG_FILEPATH);
237 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
239 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
240 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
242 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
243 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
245 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
246 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
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 assertExpectedErrors("Invalid TOSCA-Meta-File-Version and CSAR-Version attributes", errors, 2);
256 public void testGivenTOSCAMetaFile_withNonExistentFileReferenced_thenErrorsReturned() {
257 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
259 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
260 assertThat("Total of errors should be as expected", errors.size(), is(1));
261 final List<ErrorMessage> errorMessages = errors.get(SdcCommon.UPLOAD_FILE);
262 assertThat("Total of errors messages should be as expected", errorMessages.size(), is((2 + getManifestDefintionErrorCount())));
267 public void testGivenDefinitionFile_whenValidImportStatementExist_thenNoErrorsReturned() {
268 final ManifestBuilder manifestBuilder = getPnfManifestSampleBuilder();
270 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
271 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
273 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
274 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
276 handler.addFile(SAMPLE_SOURCE, "".getBytes());
277 manifestBuilder.withSource(SAMPLE_SOURCE);
279 handler.addFile("Definitions/etsi_nfv_sol001_pnfd_2_5_1_types.yaml",
280 getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
281 manifestBuilder.withSource("Definitions/etsi_nfv_sol001_pnfd_2_5_1_types.yaml");
283 final String definitionFileWithValidImports = "validation.files/definition/definitionFileWithValidImports.yaml";
284 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(definitionFileWithValidImports));
285 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
287 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
288 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
290 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
291 assertEquals(0, errors.size());
295 public void testGivenDefinitionFile_whenMultipleDefinitionsImportStatementExist_thenNoErrorsReturned() {
296 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
298 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
299 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
301 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
302 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
304 handler.addFile(SAMPLE_SOURCE, "".getBytes());
305 manifestBuilder.withSource(SAMPLE_SOURCE);
307 final byte[] sampleDefinitionFile1 =
308 getResourceBytesOrFail("validation.files/definition/sampleDefinitionFile1.yaml");
309 handler.addFile(TOSCA_DEFINITION_FILEPATH, sampleDefinitionFile1);
310 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
312 final byte[] sampleDefinitionFile2 =
313 getResourceBytesOrFail("validation.files/definition/sampleDefinitionFile2.yaml");
314 handler.addFile("Definitions/etsi_nfv_sol001_pnfd_2_5_1_types.yaml", sampleDefinitionFile2);
315 manifestBuilder.withSource("Definitions/etsi_nfv_sol001_pnfd_2_5_1_types.yaml");
317 final byte[] sampleDefinitionFile3 =
318 getResourceBytesOrFail("validation.files/definition/sampleDefinitionFile1.yaml");
319 handler.addFile("Definitions/etsi_nfv_sol001_pnfd_2_5_2_types.yaml", sampleDefinitionFile3);
320 manifestBuilder.withSource("Definitions/etsi_nfv_sol001_pnfd_2_5_2_types.yaml");
322 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
323 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
325 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
326 assertEquals(0, errors.size());
330 public void testGivenDefinitionFile_whenInvalidImportStatementExist_thenErrorIsReturned() {
331 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
333 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
334 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
336 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
337 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
339 handler.addFile(SAMPLE_SOURCE, "".getBytes());
340 manifestBuilder.withSource(SAMPLE_SOURCE);
342 final String definitionFileWithInvalidImports =
343 "validation.files/definition/definitionFileWithInvalidImport.yaml";
344 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(definitionFileWithInvalidImports));
345 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
347 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
348 String manifest = manifestBuilder.build();
349 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifest.getBytes(StandardCharsets.UTF_8));
351 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
352 assertExpectedErrors("", errors, getManifestDefintionErrorCount());
356 * Manifest referenced import file missing
359 public void testGivenDefinitionFile_whenReferencedImportDoesNotExist_thenErrorIsReturned() {
360 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
362 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
363 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
365 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
366 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
368 handler.addFile(SAMPLE_SOURCE, "".getBytes());
369 manifestBuilder.withSource(SAMPLE_SOURCE);
371 handler.addFile("Definitions/etsi_nfv_sol001_pnfd_2_5_1_types.yaml", "".getBytes());
372 manifestBuilder.withSource("Definitions/etsi_nfv_sol001_pnfd_2_5_1_types.yaml");
374 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
375 handler.addFile(TOSCA_DEFINITION_FILEPATH,
376 getResourceBytesOrFail("validation.files/definition/sampleDefinitionFile2.yaml"));
378 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
379 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
381 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
382 assertExpectedErrors("Manifest referenced import file missing", errors, getManifestDefintionErrorCount());
386 public void testGivenDefinitionFile_whenFileInPackageNotInManifest_thenErrorIsReturned() {
387 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
389 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
390 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
392 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
393 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
395 handler.addFile(SAMPLE_SOURCE, "".getBytes());
397 final byte[] sampleDefinitionFile =
398 getResourceBytesOrFail("validation.files/definition/sampleDefinitionFile2.yaml");
399 handler.addFile("Definitions/etsi_nfv_sol001_pnfd_2_5_2_types.yaml", sampleDefinitionFile);
400 manifestBuilder.withSource("Definitions/etsi_nfv_sol001_pnfd_2_5_2_types.yaml");
402 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
403 handler.addFile(TOSCA_DEFINITION_FILEPATH,
404 getResourceBytesOrFail("validation.files/definition/sampleDefinitionFile2.yaml"));
406 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
408 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
409 assertExpectedErrors("Artifact is not being referenced in manifest file", errors, 1);
413 public void testGivenDefinitionFile_whenManifestNotreferencedInManifest_thenNoErrorIsReturned() {
414 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
416 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
417 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
419 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
420 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
422 handler.addFile(SAMPLE_SOURCE, "".getBytes());
423 manifestBuilder.withSource(SAMPLE_SOURCE);
425 final byte[] sampleDefinitionFile =
426 getResourceBytesOrFail("validation.files/definition/sampleDefinitionFile2.yaml");
427 handler.addFile("Definitions/etsi_nfv_sol001_pnfd_2_5_2_types.yaml", sampleDefinitionFile);
428 manifestBuilder.withSource("Definitions/etsi_nfv_sol001_pnfd_2_5_2_types.yaml");
430 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
431 handler.addFile(TOSCA_DEFINITION_FILEPATH,
432 getResourceBytesOrFail("validation.files/definition/sampleDefinitionFile2.yaml"));
434 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
436 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
437 assertEquals(0, errors.size());
441 * Reference with invalid YAML format.
444 public void testGivenDefinitionFile_withInvalidYAML_thenErrorIsReturned() {
445 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
447 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
448 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
450 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
451 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
453 handler.addFile(SAMPLE_SOURCE, "".getBytes());
454 manifestBuilder.withSource(SAMPLE_SOURCE);
456 final String definitionFileWithInvalidYAML = "validation.files/definition/invalidDefinitionFile.yaml";
457 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(definitionFileWithInvalidYAML));
458 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
460 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
461 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
463 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
464 assertExpectedErrors("Reference with invalid YAML format", errors, getManifestDefintionErrorCount());
468 public void testGivenManifestFile_withValidSourceAndNonManoSources_thenNoErrorIsReturned() {
469 final ManifestBuilder manifestBuilder = getPnfManifestSampleBuilder();
471 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
472 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
474 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
475 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
477 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
478 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
480 handler.addFile(SAMPLE_SOURCE, "".getBytes());
481 manifestBuilder.withSource(SAMPLE_SOURCE);
483 handler.addFile(SAMPLE_DEFINITION_IMPORT_FILE_PATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
484 manifestBuilder.withSource(SAMPLE_DEFINITION_IMPORT_FILE_PATH);
486 final String nonManoSource = "Artifacts/Deployment/Measurements/PM_Dictionary.yaml";
487 handler.addFile(nonManoSource, getResourceBytesOrFail("validation.files/measurements/pmEvents-valid.yaml"));
488 manifestBuilder.withNonManoArtifact(ONAP_PM_DICTIONARY.getType(), nonManoSource);
490 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
491 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
493 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
494 assertEquals(0, errors.size());
498 * Manifest with non existent source files should return error.
501 public void testGivenManifestFile_withNonExistentSourceFile_thenErrorIsReturned() {
502 final ManifestBuilder manifestBuilder = getPnfManifestSampleBuilder();
503 //non existent reference
504 manifestBuilder.withSource("Artifacts/Deployment/Events/RadioNode_pnf_v1.yaml");
506 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
507 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
509 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
510 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
512 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
513 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
515 handler.addFile(SAMPLE_DEFINITION_IMPORT_FILE_PATH, "".getBytes());
516 manifestBuilder.withSource(SAMPLE_DEFINITION_IMPORT_FILE_PATH);
518 String nonManoSource = "Artifacts/Deployment/Measurements/PM_Dictionary.yaml";
519 handler.addFile(nonManoSource, getResourceBytesOrFail("validation.files/measurements/pmEvents-valid.yaml"));
520 manifestBuilder.withNonManoArtifact(ONAP_PM_DICTIONARY.getType(), nonManoSource);
522 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
523 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
525 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
526 assertExpectedErrors("Manifest with non existent source files", errors, 1);
530 * Tests the validation for a TOSCA Manifest with invalid data.
533 public void testGivenManifestFile_withInvalidData_thenErrorIsReturned() {
534 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
535 handler.addFile(TOSCA_MANIFEST_FILEPATH, getResourceBytesOrFail("validation.files/manifest/invalidManifest.mf"));
536 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
537 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
538 handler.addFile(SAMPLE_DEFINITION_IMPORT_FILE_PATH, "".getBytes());
540 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
541 assertExpectedErrors("TOSCA manifest with invalid data", errors, 1);
545 public void testGivenManifestAndDefinitionFile_withSameNames_thenNoErrorReturned() {
546 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
548 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
549 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
551 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
552 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
554 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
555 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
557 handler.addFile(SAMPLE_DEFINITION_IMPORT_FILE_PATH, "".getBytes());
558 manifestBuilder.withSource(SAMPLE_DEFINITION_IMPORT_FILE_PATH);
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 assertEquals(0, errors.size());
568 * Main TOSCA definitions file and Manifest file with different name should return error.
571 public void testGivenManifestAndMainDefinitionFile_withDifferentNames_thenErrorIsReturned() {
572 metaFileBuilder = new StringBuilder()
573 .append(TOSCA_META_FILE_VERSION_ENTRY.getName())
574 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" 1.0").append("\n")
575 .append(CSAR_VERSION_ENTRY.getName())
576 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" 1.1").append("\n")
577 .append(CREATED_BY_ENTRY.getName())
578 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" Vendor").append("\n")
579 .append(ENTRY_DEFINITIONS.getName())
580 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" ").append(TOSCA_DEFINITION_FILEPATH).append("\n")
581 .append(ETSI_ENTRY_MANIFEST.getName())
582 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" Definitions/MainServiceTemplate2.mf\n")
583 .append(ETSI_ENTRY_CHANGE_LOG.getName())
584 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" ").append(TOSCA_CHANGELOG_FILEPATH).append("\n");
586 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
588 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
589 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
591 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
592 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
594 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
595 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
597 handler.addFile(SAMPLE_DEFINITION_IMPORT_FILE_PATH, "".getBytes());
598 manifestBuilder.withSource(SAMPLE_DEFINITION_IMPORT_FILE_PATH);
600 manifestBuilder.withSource("Definitions/MainServiceTemplate2.mf");
601 handler.addFile("Definitions/MainServiceTemplate2.mf", manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
603 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
604 assertExpectedErrors("Main TOSCA definitions file and Manifest file with different name should return error",
609 public void testGivenManifestFile_withDifferentExtension_thenErrorIsReturned() {
610 metaFileBuilder = new StringBuilder()
611 .append(TOSCA_META_FILE_VERSION_ENTRY.getName())
612 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" 1.0").append("\n")
613 .append(CSAR_VERSION_ENTRY.getName())
614 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" 1.1").append("\n")
615 .append(CREATED_BY_ENTRY.getName())
616 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" Vendor").append("\n")
617 .append(ENTRY_DEFINITIONS.getName())
618 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" ").append(TOSCA_DEFINITION_FILEPATH).append("\n")
619 .append(ETSI_ENTRY_MANIFEST.getName())
620 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" Definitions/MainServiceTemplate.txt\n")
621 .append(ETSI_ENTRY_CHANGE_LOG.getName())
622 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" ").append(TOSCA_CHANGELOG_FILEPATH).append("\n");
624 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
626 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
627 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
629 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
630 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
632 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
633 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
635 handler.addFile(SAMPLE_DEFINITION_IMPORT_FILE_PATH, "".getBytes());
636 manifestBuilder.withSource(SAMPLE_DEFINITION_IMPORT_FILE_PATH);
638 manifestBuilder.withSource("Definitions/MainServiceTemplate.txt");
639 handler.addFile("Definitions/MainServiceTemplate.txt", manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
641 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
642 assertExpectedErrors("Manifest file with different extension than .mf should return error",
647 public void testGivenManifestFile_withValidVnfMetadata_thenNoErrorsReturned() {
648 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
650 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
651 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
652 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
653 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
654 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
655 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
657 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
658 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
660 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
661 assertExpectedErrors("Manifest with valid vnf mandatory values should not return any errors", errors, 0);
665 public void testGivenManifestFile_withValidPnfMetadata_thenNoErrorsReturned() {
666 final ManifestBuilder manifestBuilder = getPnfManifestSampleBuilder();
668 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
669 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
671 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
672 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
674 manifestBuilder.withSignedSource(TOSCA_DEFINITION_FILEPATH
675 , "SHA-abc", "09e5a788acb180162c51679ae4c998039fa6644505db2415e35107d1ee213943");
676 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
678 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
679 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
681 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
682 assertExpectedErrors("Manifest with valid pnf mandatory values should not return any errors", errors, 0);
686 * Manifest with mixed metadata should return error.
689 public void testGivenManifestFile_withMetadataContainingMixedPnfVnfMetadata_thenErrorIsReturned() {
690 final ManifestBuilder manifestBuilder = new ManifestBuilder()
691 .withMetaData(PNFD_NAME.getToken(), "RadioNode")
692 .withMetaData(VNF_PROVIDER_ID.getToken(), "Bilal Iqbal")
693 .withMetaData(PNFD_ARCHIVE_VERSION.getToken(), "1.0")
694 .withMetaData(VNF_RELEASE_DATE_TIME.getToken(), "2019-12-14T11:25:00+00:00");
696 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
697 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
698 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
699 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
700 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
701 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
703 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
704 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
706 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
707 assertExpectedErrors("Manifest with mixed metadata should return error", errors, 1);
712 public void testGivenManifestFile_withMetadataMissingPnfOrVnfMandatoryEntries_thenErrorIsReturned() {
713 final ManifestBuilder manifestBuilder = new ManifestBuilder()
714 .withMetaData("invalid_product_name", "RadioNode")
715 .withMetaData("invalid_provider_id", "Bilal Iqbal")
716 .withMetaData("invalid_package_version", "1.0")
717 .withMetaData("invalid_release_date_time", "2019-12-14T11:25:00+00:00");
719 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
720 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
722 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
723 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
725 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
726 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
728 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
729 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
731 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
732 assertExpectedErrors("Manifest with missing vnf or pnf mandatory entries should return error", errors, 1);
736 public void testGivenManifestFile_withMetadataMissingMandatoryPnfEntries_thenErrorIsReturned() {
737 final ManifestBuilder manifestBuilder = new ManifestBuilder();
739 manifestBuilder.withMetaData(PNFD_NAME.getToken(), "RadioNode");
740 manifestBuilder.withMetaData(PNFD_RELEASE_DATE_TIME.getToken(), "2019-12-14T11:25:00+00:00");
742 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
743 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
745 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
746 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
748 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
749 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
751 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
752 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
754 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
755 assertExpectedErrors("Manifest with metadata missing pnf mandatory entries should return error", errors, 1);
760 public void testGivenManifestFile_withMetadataMissingMandatoryVnfEntries_thenErrorIsReturned() {
761 final ManifestBuilder manifestBuilder = new ManifestBuilder();
763 manifestBuilder.withMetaData(VNF_PRODUCT_NAME.getToken(), "RadioNode");
765 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
766 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
768 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
769 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
771 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
772 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
774 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
775 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
777 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
778 assertExpectedErrors("Manifest with metadata missing vnf mandatory entries should return error", errors, 1);
783 * Manifest with more than 4 metadata entries should return error.
786 public void testGivenManifestFile_withMetadataEntriesExceedingTheLimit_thenErrorIsReturned() {
787 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder()
788 .withMetaData(PNFD_NAME.getToken(), "RadioNode")
789 .withMetaData(ManifestTokenType.PNFD_PROVIDER.getToken(), "Bilal Iqbal")
790 .withMetaData(PNFD_ARCHIVE_VERSION.getToken(), "1.0")
791 .withMetaData(PNFD_RELEASE_DATE_TIME.getToken(), "2019-03-11T11:25:00+00:00");
793 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
794 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
796 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
797 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
799 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
800 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
802 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
803 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
805 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
806 assertExpectedErrors("Manifest with more than 4 metadata entries should return error", errors, 1);
810 public void testGivenManifestFile_withPnfMetadataAndVfEntries_thenErrorIsReturned() {
811 final ManifestBuilder manifestBuilder = getPnfManifestSampleBuilder();
813 .append(ETSI_ENTRY_TESTS.getName())
814 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" Files/Tests").append("\n")
815 .append(ETSI_ENTRY_LICENSES.getName())
816 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" Files/Licenses");
818 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
819 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
821 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
822 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
824 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
825 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
827 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
828 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
829 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
830 assertExpectedErrors("Tosca.meta should not have entries applicable only to VF", errors, 2);
835 * Tests an imported descriptor with a missing imported file.
838 public void testGivenDefinitionFileWithImportedDescriptor_whenImportedDescriptorImportsMissingFile_thenMissingImportErrorOccur() {
839 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
841 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
842 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
844 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
845 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
847 handler.addFile(SAMPLE_SOURCE, "".getBytes());
848 manifestBuilder.withSource(SAMPLE_SOURCE);
850 final String definitionImportOne = "Definitions/importOne.yaml";
851 handler.addFile(definitionImportOne,
852 getResourceBytesOrFail("validation.files/definition/sampleDefinitionFile2.yaml"));
853 manifestBuilder.withSource(definitionImportOne);
855 final String definitionFileWithValidImports = "validation.files/definition/definitionFileWithOneImport.yaml";
856 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(definitionFileWithValidImports));
857 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
859 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
860 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
862 final Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator.validateContent(handler);
864 final List<ErrorMessage> expectedErrorList = new ArrayList<>();
865 for (int i =0;i < getManifestDefintionErrorCount();i++)
866 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
867 , Messages.MISSING_IMPORT_FILE.formatMessage("Definitions/etsi_nfv_sol001_pnfd_2_5_2_types.yaml"))
870 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), expectedErrorList);
874 * Tests an imported descriptor with invalid import statement.
877 public void testGivenDefinitionFileWithImportedDescriptor_whenInvalidImportStatementExistInImportedDescriptor_thenInvalidImportErrorOccur() {
878 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
880 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
881 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
883 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
884 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
886 handler.addFile(SAMPLE_SOURCE, "".getBytes());
887 manifestBuilder.withSource(SAMPLE_SOURCE);
889 final String definitionImportOne = "Definitions/importOne.yaml";
890 handler.addFile(definitionImportOne,
891 getResourceBytesOrFail("validation.files/definition/definitionFileWithInvalidImport.yaml"));
892 manifestBuilder.withSource(definitionImportOne);
894 final String definitionFileWithValidImports = "validation.files/definition/definitionFileWithOneImport.yaml";
895 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(definitionFileWithValidImports));
896 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
898 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
899 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
901 final Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator.validateContent(handler);
903 final List<ErrorMessage> expectedErrorList = new ArrayList<>();
904 for (int i =0;i < getManifestDefintionErrorCount();i++)
905 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
906 , Messages.INVALID_IMPORT_STATEMENT.formatMessage(definitionImportOne, "null"))
909 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), expectedErrorList);
913 public void givenManifestWithNonManoPmAndVesArtifacts_whenNonManoArtifactsAreValid_thenNoErrorsOccur() {
914 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
916 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
917 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
919 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
920 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
922 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
923 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
925 final String nonManoPmEventsSource = "Artifacts/Deployment/Measurements/PM_Dictionary.yaml";
926 handler.addFile(nonManoPmEventsSource,
927 getResourceBytesOrFail("validation.files/measurements/pmEvents-valid.yaml"));
928 manifestBuilder.withNonManoArtifact(ONAP_PM_DICTIONARY.getType(), nonManoPmEventsSource);
930 final String nonManoVesEventsSource = "Artifacts/Deployment/Events/ves_events.yaml";
931 handler.addFile(nonManoVesEventsSource,
932 getResourceBytesOrFail("validation.files/events/vesEvents-valid.yaml"));
933 manifestBuilder.withNonManoArtifact(ONAP_VES_EVENTS.getType(), nonManoVesEventsSource);
935 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
936 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
938 final Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator
939 .validateContent(handler);
941 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), Collections.emptyList());
945 public void givenManifestWithNonManoPmOrVesArtifacts_whenNonManoArtifactsYamlAreInvalid_thenInvalidYamlErrorOccur() {
946 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
948 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
949 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
951 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
952 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
954 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
955 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
957 final String nonManoPmEventsSource = "Artifacts/Deployment/Measurements/PM_Dictionary.yaml";
958 handler.addFile(nonManoPmEventsSource, getResourceBytesOrFail(INVALID_YAML_FILE_PATH));
959 manifestBuilder.withNonManoArtifact(ONAP_PM_DICTIONARY.getType(), nonManoPmEventsSource);
961 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
962 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
964 final List<ErrorMessage> expectedErrorList = new ArrayList<>();
965 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
966 , Messages.INVALID_YAML_FORMAT_1.formatMessage(nonManoPmEventsSource, "while scanning a simple key\n"
967 + " in 'reader', line 2, column 1:\n"
970 + "could not find expected ':'\n"
971 + " in 'reader', line 2, column 7:\n"
975 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR, "while scanning a simple key\n" +
976 " in 'reader', line 2, column 1:\n" +
979 "could not find expected ':'\n" +
980 " in 'reader', line 2, column 7:\n" +
985 final Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator
986 .validateContent(handler);
987 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), expectedErrorList);
991 public void givenManifestWithNonManoPmOrVesArtifacts_whenNonManoArtifactsYamlAreEmpty_thenEmptyYamlErrorOccur() {
992 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
994 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
995 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
997 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
998 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
1000 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
1001 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
1003 final String nonManoPmEventsSource = "Artifacts/Deployment/Measurements/PM_Dictionary.yaml";
1004 handler.addFile(nonManoPmEventsSource, getResourceBytesOrFail(EMPTY_YAML_FILE_PATH));
1005 manifestBuilder.withNonManoArtifact(ONAP_PM_DICTIONARY.getType(), nonManoPmEventsSource);
1007 final String nonManoVesEventsSource = "Artifacts/Deployment/Events/ves_events.yaml";
1008 handler.addFile(nonManoVesEventsSource, getResourceBytesOrFail(EMPTY_YAML_FILE_PATH));
1009 manifestBuilder.withNonManoArtifact(ONAP_VES_EVENTS.getType(), nonManoVesEventsSource);
1011 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
1012 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
1014 final List<ErrorMessage> expectedErrorList = new ArrayList<>();
1015 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
1016 , Messages.EMPTY_YAML_FILE_1.formatMessage(nonManoPmEventsSource))
1018 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
1019 , Messages.EMPTY_YAML_FILE_1.formatMessage(nonManoVesEventsSource))
1021 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
1022 , "PM_Dictionary YAML file is empty")
1025 final Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator
1026 .validateContent(handler);
1028 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), expectedErrorList);
1032 public void givenManifestWithNonManoPmOrVesArtifacts_whenNonManoArtifactsHaveNotYamlExtension_thenInvalidYamlExtensionErrorOccur() {
1033 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
1035 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
1036 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
1038 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
1039 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
1041 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
1042 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
1044 final String nonManoPmEventsSource = "Artifacts/Deployment/Measurements/PM_Dictionary.y1";
1045 handler.addFile(nonManoPmEventsSource, "".getBytes());
1046 manifestBuilder.withNonManoArtifact(ONAP_PM_DICTIONARY.getType(), nonManoPmEventsSource);
1048 final String nonManoVesEventsSource = "Artifacts/Deployment/Events/ves_events.y2";
1049 handler.addFile(nonManoVesEventsSource, "".getBytes());
1050 manifestBuilder.withNonManoArtifact(ONAP_VES_EVENTS.getType(), nonManoVesEventsSource);
1052 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
1053 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
1055 final List<ErrorMessage> expectedErrorList = new ArrayList<>();
1056 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
1057 , Messages.INVALID_YAML_EXTENSION.formatMessage(nonManoPmEventsSource))
1059 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
1060 , Messages.INVALID_YAML_EXTENSION.formatMessage(nonManoVesEventsSource))
1062 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
1063 , "PM_Dictionary YAML file is empty")
1067 final Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator
1068 .validateContent(handler);
1070 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), expectedErrorList);
1074 public void givenPackageWithValidSoftwareInformationNonMano_whenThePackageIsValidated_thenNoErrorsAreReturned() {
1075 //given a package with software information non-mano artifact
1076 final ManifestBuilder manifestBuilder = getPnfManifestSampleBuilder();
1077 final String nonManoSoftwareInformationPath = "Artifacts/software-information/pnf-sw-information-valid.yaml";
1078 handler.addFile(nonManoSoftwareInformationPath,
1079 getResourceBytesOrFail("validation.files/non-mano/pnf-sw-information-valid.yaml"));
1080 manifestBuilder.withNonManoArtifact(ONAP_SW_INFORMATION.getType(), nonManoSoftwareInformationPath);
1081 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString()
1082 .getBytes(StandardCharsets.UTF_8));
1083 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
1084 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
1085 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
1086 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
1087 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
1089 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
1090 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
1091 //when package is validated
1092 final Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator.validateContent(handler);
1094 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), Collections.emptyList());
1098 public void givenPackageWithUnparsableSwInformationNonMano_whenThePackageIsValidated_thenInvalidErrorIsReturned() {
1099 //given a package with unparsable software information non-mano artifact
1100 final ManifestBuilder manifestBuilder = getPnfManifestSampleBuilder();
1101 final String nonManoSoftwareInformationPath = "Artifacts/software-information/pnf-sw-information-valid.yaml";
1102 handler.addFile(nonManoSoftwareInformationPath,
1103 getResourceBytesOrFail("validation.files/invalid.yaml"));
1104 manifestBuilder.withNonManoArtifact(ONAP_SW_INFORMATION.getType(), nonManoSoftwareInformationPath);
1105 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString()
1106 .getBytes(StandardCharsets.UTF_8));
1107 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
1108 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
1109 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
1110 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
1111 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
1113 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
1114 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
1115 //when package is validated
1116 final Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator.validateContent(handler);
1117 //then invalid error returned
1118 final List<ErrorMessage> expectedErrorList = new ArrayList<>();
1119 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
1120 , Messages.INVALID_SW_INFORMATION_NON_MANO_ERROR.formatMessage(nonManoSoftwareInformationPath))
1122 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), expectedErrorList);
1126 public void givenPackageWithIncorrectSwInformationNonMano_whenThePackageIsValidated_thenInvalidErrorIsReturned() {
1127 //given a package with incorrect software information non-mano artifact
1128 final ManifestBuilder manifestBuilder = getPnfManifestSampleBuilder();
1129 final String nonManoSoftwareInformationPath = "Artifacts/software-information/pnf-sw-information-invalid.yaml";
1130 handler.addFile(nonManoSoftwareInformationPath,
1131 getResourceBytesOrFail("validation.files/non-mano/pnf-sw-information-invalid.yaml"));
1132 manifestBuilder.withNonManoArtifact(ONAP_SW_INFORMATION.getType(), nonManoSoftwareInformationPath);
1133 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString()
1134 .getBytes(StandardCharsets.UTF_8));
1135 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
1136 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
1137 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
1138 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
1139 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
1141 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
1142 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
1143 //when package is validated
1144 final Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator.validateContent(handler);
1145 //then incorrect error returned
1146 final List<ErrorMessage> expectedErrorList = new ArrayList<>();
1147 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
1148 , Messages.INCORRECT_SW_INFORMATION_NON_MANO_ERROR.formatMessage(nonManoSoftwareInformationPath))
1150 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), expectedErrorList);
1154 public void givenPackageWithTwoSoftwareInformationNonMano_whenThePackageIsValidated_thenUniqueErrorIsReturned() {
1155 //given a package with two software information non-mano artifacts
1156 final ManifestBuilder manifestBuilder = getPnfManifestSampleBuilder();
1157 final String nonManoSoftwareInformation1Path = "Artifacts/software-information/pnf-sw-information-valid1.yaml";
1158 handler.addFile(nonManoSoftwareInformation1Path,
1159 getResourceBytesOrFail("validation.files/non-mano/pnf-sw-information-valid.yaml"));
1160 manifestBuilder.withNonManoArtifact(ONAP_SW_INFORMATION.getType(), nonManoSoftwareInformation1Path);
1161 final String nonManoSoftwareInformation2Path = "Artifacts/software-information/pnf-sw-information-valid2.yaml";
1162 handler.addFile(nonManoSoftwareInformation2Path,
1163 getResourceBytesOrFail("validation.files/non-mano/pnf-sw-information-valid.yaml"));
1164 manifestBuilder.withNonManoArtifact(ONAP_SW_INFORMATION.getType(), nonManoSoftwareInformation2Path);
1165 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString()
1166 .getBytes(StandardCharsets.UTF_8));
1167 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
1168 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
1169 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
1170 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
1171 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
1173 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
1174 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
1175 //when package is validated
1176 final Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator.validateContent(handler);
1177 //then unique error returned
1178 final List<ErrorMessage> expectedErrorList = new ArrayList<>();
1179 final String errorFiles = Stream.of(nonManoSoftwareInformation1Path, nonManoSoftwareInformation2Path)
1180 .map(s -> String.format("'%s'", s))
1181 .collect(Collectors.joining(", "));
1182 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
1183 , Messages.UNIQUE_SW_INFORMATION_NON_MANO_ERROR.formatMessage(errorFiles))
1185 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), expectedErrorList);
1189 public void signedPackage() throws SecurityManagerException {
1191 final ManifestBuilder manifestBuilder = getPnfManifestSampleBuilder();
1192 final String fakeArtifactPath = "Artifacts/aArtifact.yaml";
1193 final String fakeArtifactCmsPath = "Artifacts/aArtifact.cms";
1194 final String fakeCertificatePath = "certificate.cert";
1195 handler.addFile(fakeArtifactPath, new byte[0]);
1196 manifestBuilder.withSource(fakeArtifactPath);
1197 handler.addFile(fakeArtifactCmsPath, new byte[0]);
1198 manifestBuilder.withSource(fakeArtifactCmsPath);
1199 handler.addFile(fakeCertificatePath, new byte[0]);
1200 manifestBuilder.withSource(fakeCertificatePath);
1201 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
1202 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
1203 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
1204 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
1206 metaFileBuilder.append(ETSI_ENTRY_CERTIFICATE.getName())
1207 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" ").append(fakeCertificatePath).append("\n");
1208 handler.addFile(TOSCA_META_PATH_FILE_NAME,
1209 metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
1210 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
1212 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
1213 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
1215 final SecurityManager securityManagerMock = mock(SecurityManager.class);
1216 when(securityManagerMock.verifySignedData(any(), any(), any())).thenReturn(true);
1217 sol004MetaDirectoryValidator = getSol004WithSecurity(securityManagerMock);
1220 Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator.validateContent(handler);
1222 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), Collections.emptyList());
1225 sol004MetaDirectoryValidator = getSol004WithSecurity(securityManagerMock);
1226 when(securityManagerMock.verifySignedData(any(), any(), any())).thenReturn(false);
1229 actualErrorMap = sol004MetaDirectoryValidator.validateContent(handler);
1232 List<ErrorMessage> expectedErrorList = new ArrayList<>();
1233 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
1234 , Messages.ARTIFACT_INVALID_SIGNATURE.formatMessage(fakeArtifactCmsPath, fakeArtifactPath))
1236 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), expectedErrorList);
1239 sol004MetaDirectoryValidator = getSol004WithSecurity(securityManagerMock);
1240 when(securityManagerMock.verifySignedData(any(), any(), any()))
1241 .thenThrow(new SecurityManagerException("SecurityManagerException"));
1243 actualErrorMap = sol004MetaDirectoryValidator.validateContent(handler);
1246 expectedErrorList = new ArrayList<>();
1247 expectedErrorList.add(
1248 new ErrorMessage(ErrorLevel.ERROR,
1249 Messages.ARTIFACT_SIGNATURE_VALIDATION_ERROR.formatMessage(fakeArtifactCmsPath,
1250 fakeArtifactPath, fakeCertificatePath, "SecurityManagerException")
1253 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), expectedErrorList);
1256 protected void assertExpectedErrors(List<ErrorMessage> actualErrorList, final List<ErrorMessage> expectedErrorList) {
1257 if (actualErrorList == null) {
1258 actualErrorList = new ArrayList<>();
1261 printErrorMessages(actualErrorList);
1263 assertThat("The actual error list should have the same size as the expected error list " + actualErrorList.toString()
1264 , actualErrorList, hasSize(expectedErrorList.size())
1267 assertThat("The actual error and expected error lists should be the same"
1268 , actualErrorList, containsInAnyOrder(expectedErrorList.toArray(new ErrorMessage[0]))
1272 protected void assertExpectedErrors(final String testCase, final Map<String, List<ErrorMessage>> errors, final int expectedErrors){
1273 final List<ErrorMessage> errorMessages = errors.get(SdcCommon.UPLOAD_FILE);
1274 printErrorMessages(errorMessages);
1275 if (expectedErrors > 0) {
1276 assertEquals(testCase, expectedErrors, errorMessages.size());
1278 assertEquals(testCase, expectedErrors, errors.size());
1282 private void printErrorMessages(final List<ErrorMessage> errorMessages) {
1283 if (CollectionUtils.isNotEmpty(errorMessages)) {
1284 errorMessages.forEach(errorMessage ->
1285 System.out.println(String.format("%s: %s", errorMessage.getLevel(), errorMessage.getMessage()))