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.hasSize;
28 import static org.hamcrest.Matchers.is;
29 import static org.junit.Assert.assertEquals;
30 import static org.junit.Assert.assertTrue;
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.io.IOException;
65 import java.nio.charset.StandardCharsets;
67 import java.util.function.Predicate;
68 import java.util.stream.Collectors;
69 import java.util.stream.Stream;
70 import org.apache.commons.collections.CollectionUtils;
71 import org.junit.jupiter.api.BeforeEach;
72 import org.junit.jupiter.api.Test;
73 import org.openecomp.sdc.common.errors.Messages;
74 import org.openecomp.sdc.common.utils.SdcCommon;
75 import org.openecomp.sdc.datatypes.error.ErrorLevel;
76 import org.openecomp.sdc.datatypes.error.ErrorMessage;
77 import org.openecomp.sdc.tosca.csar.ManifestTokenType;
78 import org.openecomp.sdc.vendorsoftwareproduct.impl.onboarding.OnboardingPackageContentHandler;
79 import org.openecomp.sdc.vendorsoftwareproduct.security.SecurityManager;
80 import org.openecomp.sdc.vendorsoftwareproduct.security.SecurityManagerException;
82 public class SOL004MetaDirectoryValidatorTest {
84 private static int MANIFEST_DEFINITION_ERROR_COUNT = 1;
86 protected SOL004MetaDirectoryValidator sol004MetaDirectoryValidator;
87 protected OnboardingPackageContentHandler handler;
88 protected StringBuilder metaFileBuilder;
92 sol004MetaDirectoryValidator = getSOL004MetaDirectoryValidator();
93 handler = new OnboardingPackageContentHandler();
94 metaFileBuilder = getMetaFileBuilder();
97 protected SOL004MetaDirectoryValidator getSOL004MetaDirectoryValidator() {
98 return new SOL004MetaDirectoryValidator();
101 protected SOL004MetaDirectoryValidator getSol004WithSecurity(SecurityManager securityManagerMock) {
102 return new SOL004MetaDirectoryValidator(securityManagerMock);
105 protected StringBuilder getMetaFileBuilder() {
106 return new StringBuilder()
107 .append(TOSCA_META_FILE_VERSION_ENTRY.getName())
108 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" 1.0").append("\n")
109 .append(CSAR_VERSION_ENTRY.getName())
110 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" 1.1").append("\n")
111 .append(CREATED_BY_ENTRY.getName())
112 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" Vendor").append("\n")
113 .append(ENTRY_DEFINITIONS.getName())
114 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" ").append(TOSCA_DEFINITION_FILEPATH).append("\n")
115 .append(ETSI_ENTRY_MANIFEST.getName())
116 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" ").append(TOSCA_MANIFEST_FILEPATH).append("\n")
117 .append(ETSI_ENTRY_CHANGE_LOG.getName())
118 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" ").append(TOSCA_CHANGELOG_FILEPATH).append("\n");
121 protected ManifestBuilder getPnfManifestSampleBuilder() {
122 return new ManifestBuilder()
123 .withMetaData(PNFD_NAME.getToken(), "myPnf")
124 .withMetaData(ManifestTokenType.PNFD_PROVIDER.getToken(), "ACME")
125 .withMetaData(PNFD_ARCHIVE_VERSION.getToken(), "1.0")
126 .withMetaData(PNFD_RELEASE_DATE_TIME.getToken(), "2019-03-11T11:25:00+00:00");
129 protected ManifestBuilder getVnfManifestSampleBuilder() {
130 return new ManifestBuilder()
131 .withMetaData(ManifestTokenType.VNF_PRODUCT_NAME.getToken(), "RadioNode")
132 .withMetaData(ManifestTokenType.VNF_PROVIDER_ID.getToken(), "ACME")
133 .withMetaData(ManifestTokenType.VNF_PACKAGE_VERSION.getToken(), "1.0")
134 .withMetaData(ManifestTokenType.VNF_RELEASE_DATE_TIME.getToken(), "2019-03-11T11:25:00+00:00");
138 * ETSI Version 2.7.1 below contains one Definition File reference
139 * ETSI Version 2.7.1 onwards contains two possible Definition File reference
141 protected int getManifestDefinitionErrorCount() {
142 return MANIFEST_DEFINITION_ERROR_COUNT;
146 public void testGivenTOSCAMetaFile_whenEntryHasNoValue_thenErrorIsReturned() {
147 final String metaFileWithInvalidEntry = "TOSCA-Meta-File-Version: \n" +
148 "Entry-Definitions: " + TOSCA_DEFINITION_FILEPATH;
150 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileWithInvalidEntry.getBytes(StandardCharsets.UTF_8));
151 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
153 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
154 assertExpectedErrors("TOSCA Meta file with no entries", errors, 1);
158 public void testGivenTOSCAMeta_withAllSupportedEntries_thenNoErrorsReturned() {
160 final String entryTestFilePath = "Files/Tests";
161 final String entryLicenseFilePath = "Files/Licenses";
163 handler.addFolder("Files/Tests/");
164 handler.addFolder("Files/Licenses/");
166 .append(ETSI_ENTRY_TESTS.getName())
167 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(entryTestFilePath).append("\n")
168 .append(ETSI_ENTRY_LICENSES.getName())
169 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(entryLicenseFilePath).append("\n");
171 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
172 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
173 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
175 handler.addFile(SAMPLE_SOURCE, "".getBytes());
176 handler.addFile(SAMPLE_DEFINITION_IMPORT_FILE_PATH, "".getBytes());
177 handler.addFile(entryTestFilePath, "".getBytes());
178 handler.addFile(entryLicenseFilePath, "".getBytes());
180 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder()
181 .withSource(TOSCA_META_PATH_FILE_NAME)
182 .withSource(TOSCA_DEFINITION_FILEPATH)
183 .withSource(TOSCA_CHANGELOG_FILEPATH)
184 .withSource(TOSCA_MANIFEST_FILEPATH).withSource(SAMPLE_SOURCE)
185 .withSource(SAMPLE_DEFINITION_IMPORT_FILE_PATH)
186 .withSource(entryTestFilePath)
187 .withSource(entryLicenseFilePath);
189 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
191 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
193 assertEquals(0, errors.size());
197 public void testGivenTOSCAMeta_withUnsupportedEntry_thenNoErrorIsReturned() {
199 .append("a-unknown-entry")
200 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" ")
201 .append("Definitions/events.log");
203 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
204 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
205 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
206 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder()
207 .withSource(TOSCA_META_PATH_FILE_NAME)
208 .withSource(TOSCA_DEFINITION_FILEPATH)
209 .withSource(TOSCA_CHANGELOG_FILEPATH)
210 .withSource(TOSCA_MANIFEST_FILEPATH);
212 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
213 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
214 assertThat("Validation should produce no errors", errors, is(anEmptyMap()));
218 * Tests if the meta file contains invalid versions in TOSCA-Meta-File-Version and CSAR-Version attributes.
221 public void testGivenTOSCAMetaFile_withInvalidTOSCAMetaFileVersionAndCSARVersion_thenErrorIsReturned() {
222 final StringBuilder metaFileBuilder = new StringBuilder()
223 .append(TOSCA_META_FILE_VERSION_ENTRY.getName())
224 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(Integer.MAX_VALUE).append("\n")
225 .append(CSAR_VERSION_ENTRY.getName())
226 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(Integer.MAX_VALUE).append("\n")
227 .append(CREATED_BY_ENTRY.getName())
228 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" Vendor").append("\n")
229 .append(ENTRY_DEFINITIONS.getName())
230 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" ").append(TOSCA_DEFINITION_FILEPATH).append("\n")
231 .append(ETSI_ENTRY_MANIFEST.getName())
232 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" ").append(TOSCA_MANIFEST_FILEPATH).append("\n")
233 .append(ETSI_ENTRY_CHANGE_LOG.getName())
234 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" ").append(TOSCA_CHANGELOG_FILEPATH);
235 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
237 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
238 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
240 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
241 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
243 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
244 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
246 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
247 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
249 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
250 assertExpectedErrors("Invalid TOSCA-Meta-File-Version and CSAR-Version attributes", errors, 2);
254 public void testGivenTOSCAMetaFile_withNonExistentFileReferenced_thenErrorsReturned() {
255 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
257 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
258 assertThat("Total of errors should be as expected", errors.size(), is(1));
259 final List<ErrorMessage> errorMessages = errors.get(SdcCommon.UPLOAD_FILE);
260 assertThat("Total of errors messages should be as expected", errorMessages.size(), is((2 + getManifestDefinitionErrorCount())));
265 public void testGivenDefinitionFile_whenValidImportStatementExist_thenNoErrorsReturned() {
266 final ManifestBuilder manifestBuilder = getPnfManifestSampleBuilder();
268 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
269 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
271 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
272 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
274 handler.addFile(SAMPLE_SOURCE, "".getBytes());
275 manifestBuilder.withSource(SAMPLE_SOURCE);
277 handler.addFile("Definitions/etsi_nfv_sol001_pnfd_2_5_1_types.yaml",
278 getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
279 manifestBuilder.withSource("Definitions/etsi_nfv_sol001_pnfd_2_5_1_types.yaml");
281 final String definitionFileWithValidImports = "validation.files/definition/definitionFileWithValidImports.yaml";
282 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(definitionFileWithValidImports));
283 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
285 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
286 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
288 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
289 assertEquals(0, errors.size());
293 public void testGivenDefinitionFile_whenMultipleDefinitionsImportStatementExist_thenNoErrorsReturned() {
294 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
296 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
297 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
299 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
300 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
302 handler.addFile(SAMPLE_SOURCE, "".getBytes());
303 manifestBuilder.withSource(SAMPLE_SOURCE);
305 final byte[] sampleDefinitionFile1 =
306 getResourceBytesOrFail("validation.files/definition/sampleDefinitionFile1.yaml");
307 handler.addFile(TOSCA_DEFINITION_FILEPATH, sampleDefinitionFile1);
308 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
310 final byte[] sampleDefinitionFile2 =
311 getResourceBytesOrFail("validation.files/definition/sampleDefinitionFile2.yaml");
312 handler.addFile("Definitions/etsi_nfv_sol001_pnfd_2_5_1_types.yaml", sampleDefinitionFile2);
313 manifestBuilder.withSource("Definitions/etsi_nfv_sol001_pnfd_2_5_1_types.yaml");
315 final byte[] sampleDefinitionFile3 =
316 getResourceBytesOrFail("validation.files/definition/sampleDefinitionFile1.yaml");
317 handler.addFile("Definitions/etsi_nfv_sol001_pnfd_2_5_2_types.yaml", sampleDefinitionFile3);
318 manifestBuilder.withSource("Definitions/etsi_nfv_sol001_pnfd_2_5_2_types.yaml");
320 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
321 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
323 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
324 assertEquals(0, errors.size());
328 public void testGivenDefinitionFile_whenInvalidImportStatementExist_thenErrorIsReturned() {
329 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
331 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
332 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
334 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
335 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
337 handler.addFile(SAMPLE_SOURCE, "".getBytes());
338 manifestBuilder.withSource(SAMPLE_SOURCE);
340 final String definitionFileWithInvalidImports =
341 "validation.files/definition/definitionFileWithInvalidImport.yaml";
342 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(definitionFileWithInvalidImports));
343 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
345 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
346 String manifest = manifestBuilder.build();
347 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifest.getBytes(StandardCharsets.UTF_8));
349 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
350 assertExpectedErrors("", errors, getManifestDefinitionErrorCount());
354 * Manifest referenced import file missing
357 public void testGivenDefinitionFile_whenReferencedImportDoesNotExist_thenErrorIsReturned() {
358 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
360 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
361 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
363 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
364 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
366 handler.addFile(SAMPLE_SOURCE, "".getBytes());
367 manifestBuilder.withSource(SAMPLE_SOURCE);
369 handler.addFile("Definitions/etsi_nfv_sol001_pnfd_2_5_1_types.yaml", "".getBytes());
370 manifestBuilder.withSource("Definitions/etsi_nfv_sol001_pnfd_2_5_1_types.yaml");
372 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
373 handler.addFile(TOSCA_DEFINITION_FILEPATH,
374 getResourceBytesOrFail("validation.files/definition/sampleDefinitionFile2.yaml"));
376 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
377 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
379 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
380 assertExpectedErrors("Manifest referenced import file missing", errors, getManifestDefinitionErrorCount());
384 public void testGivenDefinitionFile_whenFileInPackageNotInManifest_thenErrorIsReturned() {
385 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
387 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
388 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
390 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
391 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
393 handler.addFile(SAMPLE_SOURCE, "".getBytes());
395 final byte[] sampleDefinitionFile =
396 getResourceBytesOrFail("validation.files/definition/sampleDefinitionFile2.yaml");
397 handler.addFile("Definitions/etsi_nfv_sol001_pnfd_2_5_2_types.yaml", sampleDefinitionFile);
398 manifestBuilder.withSource("Definitions/etsi_nfv_sol001_pnfd_2_5_2_types.yaml");
400 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
401 handler.addFile(TOSCA_DEFINITION_FILEPATH,
402 getResourceBytesOrFail("validation.files/definition/sampleDefinitionFile2.yaml"));
404 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
406 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
407 assertExpectedErrors("Artifact is not being referenced in manifest file", errors, 1);
411 public void testGivenDefinitionFile_whenManifestNotreferencedInManifest_thenNoErrorIsReturned() {
412 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
414 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
415 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
417 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
418 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
420 handler.addFile(SAMPLE_SOURCE, "".getBytes());
421 manifestBuilder.withSource(SAMPLE_SOURCE);
423 final byte[] sampleDefinitionFile =
424 getResourceBytesOrFail("validation.files/definition/sampleDefinitionFile2.yaml");
425 handler.addFile("Definitions/etsi_nfv_sol001_pnfd_2_5_2_types.yaml", sampleDefinitionFile);
426 manifestBuilder.withSource("Definitions/etsi_nfv_sol001_pnfd_2_5_2_types.yaml");
428 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
429 handler.addFile(TOSCA_DEFINITION_FILEPATH,
430 getResourceBytesOrFail("validation.files/definition/sampleDefinitionFile2.yaml"));
432 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
434 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
435 assertEquals(0, errors.size());
439 * Reference with invalid YAML format.
442 public void testGivenDefinitionFile_withInvalidYAML_thenErrorIsReturned() {
443 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
445 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
446 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
448 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
449 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
451 handler.addFile(SAMPLE_SOURCE, "".getBytes());
452 manifestBuilder.withSource(SAMPLE_SOURCE);
454 final String definitionFileWithInvalidYAML = "validation.files/definition/invalidDefinitionFile.yaml";
455 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(definitionFileWithInvalidYAML));
456 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
458 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
459 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
461 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
462 assertExpectedErrors("Reference with invalid YAML format", errors, getManifestDefinitionErrorCount());
466 public void testGivenManifestFile_withValidSourceAndNonManoSources_thenNoErrorIsReturned() throws IOException {
467 final ManifestBuilder manifestBuilder = getPnfManifestSampleBuilder();
469 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
470 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
472 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
473 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
475 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
476 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
478 handler.addFile(SAMPLE_SOURCE, "".getBytes());
479 manifestBuilder.withSource(SAMPLE_SOURCE);
481 handler.addFile(SAMPLE_DEFINITION_IMPORT_FILE_PATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
482 manifestBuilder.withSource(SAMPLE_DEFINITION_IMPORT_FILE_PATH);
484 final String nonManoSource = "Artifacts/Deployment/Measurements/PM_Dictionary.yaml";
485 handler.addFile(nonManoSource, getResourceBytesOrFail("validation.files/measurements/pmEvents-valid.yaml"));
486 manifestBuilder.withNonManoArtifact(ONAP_PM_DICTIONARY.getType(), nonManoSource);
488 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
489 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
491 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
492 assertEquals(0, errors.size());
496 * Manifest with non existent source files should return error.
499 public void testGivenManifestFile_withNonExistentSourceFile_thenErrorIsReturned() throws IOException {
500 final ManifestBuilder manifestBuilder = getPnfManifestSampleBuilder();
501 //non existent reference
502 manifestBuilder.withSource("Artifacts/Deployment/Events/RadioNode_pnf_v1.yaml");
504 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
505 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
507 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
508 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
510 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
511 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
513 handler.addFile(SAMPLE_DEFINITION_IMPORT_FILE_PATH, "".getBytes());
514 manifestBuilder.withSource(SAMPLE_DEFINITION_IMPORT_FILE_PATH);
516 String nonManoSource = "Artifacts/Deployment/Measurements/PM_Dictionary.yaml";
517 handler.addFile(nonManoSource, getResourceBytesOrFail("validation.files/measurements/pmEvents-valid.yaml"));
518 manifestBuilder.withNonManoArtifact(ONAP_PM_DICTIONARY.getType(), nonManoSource);
520 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
521 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
523 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
524 assertExpectedErrors("Manifest with non existent source files", errors, 1);
528 * Tests the validation for a TOSCA Manifest with invalid data.
531 public void testGivenManifestFile_withInvalidData_thenErrorIsReturned() {
532 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
533 handler.addFile(TOSCA_MANIFEST_FILEPATH, getResourceBytesOrFail("validation.files/manifest/invalidManifest.mf"));
534 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
535 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
536 handler.addFile(SAMPLE_DEFINITION_IMPORT_FILE_PATH, "".getBytes());
538 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
539 assertExpectedErrors("TOSCA manifest with invalid data", errors, 1);
543 public void testGivenManifestAndDefinitionFile_withSameNames_thenNoErrorReturned() {
544 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
546 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
547 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
549 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
550 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
552 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
553 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
555 handler.addFile(SAMPLE_DEFINITION_IMPORT_FILE_PATH, "".getBytes());
556 manifestBuilder.withSource(SAMPLE_DEFINITION_IMPORT_FILE_PATH);
558 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
559 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
561 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
562 assertEquals(0, errors.size());
566 * Main TOSCA definitions file and Manifest file with different name should return error.
569 public void testGivenManifestAndMainDefinitionFile_withDifferentNames_thenErrorIsReturned() {
570 metaFileBuilder = new StringBuilder()
571 .append(TOSCA_META_FILE_VERSION_ENTRY.getName())
572 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" 1.0").append("\n")
573 .append(CSAR_VERSION_ENTRY.getName())
574 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" 1.1").append("\n")
575 .append(CREATED_BY_ENTRY.getName())
576 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" Vendor").append("\n")
577 .append(ENTRY_DEFINITIONS.getName())
578 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" ").append(TOSCA_DEFINITION_FILEPATH).append("\n")
579 .append(ETSI_ENTRY_MANIFEST.getName())
580 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" Definitions/MainServiceTemplate2.mf\n")
581 .append(ETSI_ENTRY_CHANGE_LOG.getName())
582 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" ").append(TOSCA_CHANGELOG_FILEPATH).append("\n");
584 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
586 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
587 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
589 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
590 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
592 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
593 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
595 handler.addFile(SAMPLE_DEFINITION_IMPORT_FILE_PATH, "".getBytes());
596 manifestBuilder.withSource(SAMPLE_DEFINITION_IMPORT_FILE_PATH);
598 manifestBuilder.withSource("Definitions/MainServiceTemplate2.mf");
599 handler.addFile("Definitions/MainServiceTemplate2.mf", manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
601 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
602 assertExpectedErrors("Main TOSCA definitions file and Manifest file with different name should return error",
607 public void testGivenManifestFile_withDifferentExtension_thenErrorIsReturned() {
608 metaFileBuilder = new StringBuilder()
609 .append(TOSCA_META_FILE_VERSION_ENTRY.getName())
610 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" 1.0").append("\n")
611 .append(CSAR_VERSION_ENTRY.getName())
612 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" 1.1").append("\n")
613 .append(CREATED_BY_ENTRY.getName())
614 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" Vendor").append("\n")
615 .append(ENTRY_DEFINITIONS.getName())
616 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" ").append(TOSCA_DEFINITION_FILEPATH).append("\n")
617 .append(ETSI_ENTRY_MANIFEST.getName())
618 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" Definitions/MainServiceTemplate.txt\n")
619 .append(ETSI_ENTRY_CHANGE_LOG.getName())
620 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" ").append(TOSCA_CHANGELOG_FILEPATH).append("\n");
622 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
624 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
625 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
627 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
628 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
630 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
631 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
633 handler.addFile(SAMPLE_DEFINITION_IMPORT_FILE_PATH, "".getBytes());
634 manifestBuilder.withSource(SAMPLE_DEFINITION_IMPORT_FILE_PATH);
636 manifestBuilder.withSource("Definitions/MainServiceTemplate.txt");
637 handler.addFile("Definitions/MainServiceTemplate.txt", manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
639 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
640 assertExpectedErrors("Manifest file with different extension than .mf should return error",
645 public void testGivenManifestFile_withValidVnfMetadata_thenNoErrorsReturned() {
646 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
648 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
649 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
650 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
651 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
652 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
653 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
655 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
656 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
658 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
659 assertExpectedErrors("Manifest with valid vnf mandatory values should not return any errors", errors, 0);
663 public void testGivenManifestFile_withValidPnfMetadata_thenNoErrorsReturned() {
664 final ManifestBuilder manifestBuilder = getPnfManifestSampleBuilder();
666 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
667 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
669 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
670 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
672 manifestBuilder.withSignedSource(TOSCA_DEFINITION_FILEPATH
673 , "SHA-abc", "09e5a788acb180162c51679ae4c998039fa6644505db2415e35107d1ee213943");
674 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
676 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
677 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
679 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
680 assertExpectedErrors("Manifest with valid pnf mandatory values should not return any errors", errors, 0);
684 * Manifest with mixed metadata should return error.
687 public void testGivenManifestFile_withMetadataContainingMixedPnfVnfMetadata_thenErrorIsReturned() {
688 final ManifestBuilder manifestBuilder = new ManifestBuilder()
689 .withMetaData(PNFD_NAME.getToken(), "RadioNode")
690 .withMetaData(VNF_PROVIDER_ID.getToken(), "Bilal Iqbal")
691 .withMetaData(PNFD_ARCHIVE_VERSION.getToken(), "1.0")
692 .withMetaData(VNF_RELEASE_DATE_TIME.getToken(), "2019-12-14T11:25:00+00:00");
694 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
695 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
696 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
697 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
698 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
699 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
701 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
702 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
704 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
705 assertExpectedErrors("Manifest with mixed metadata should return error", errors, 1);
710 public void testGivenManifestFile_withMetadataMissingPnfOrVnfMandatoryEntries_thenErrorIsReturned() {
711 final ManifestBuilder manifestBuilder = new ManifestBuilder()
712 .withMetaData("invalid_product_name", "RadioNode")
713 .withMetaData("invalid_provider_id", "Bilal Iqbal")
714 .withMetaData("invalid_package_version", "1.0")
715 .withMetaData("invalid_release_date_time", "2019-12-14T11:25:00+00:00");
717 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
718 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
720 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
721 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
723 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
724 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
726 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
727 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
729 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
730 assertExpectedErrors("Manifest with missing vnf or pnf mandatory entries should return error", errors, 1);
734 public void testGivenManifestFile_withMetadataMissingMandatoryPnfEntries_thenErrorIsReturned() {
735 final ManifestBuilder manifestBuilder = new ManifestBuilder();
737 manifestBuilder.withMetaData(PNFD_NAME.getToken(), "RadioNode");
738 manifestBuilder.withMetaData(PNFD_RELEASE_DATE_TIME.getToken(), "2019-12-14T11:25:00+00:00");
740 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
741 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
743 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
744 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
746 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
747 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
749 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
750 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
752 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
753 assertExpectedErrors("Manifest with metadata missing pnf mandatory entries should return error", errors, 1);
758 public void testGivenManifestFile_withMetadataMissingMandatoryVnfEntries_thenErrorIsReturned() {
759 final ManifestBuilder manifestBuilder = new ManifestBuilder();
761 manifestBuilder.withMetaData(VNF_PRODUCT_NAME.getToken(), "RadioNode");
763 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
764 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
766 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
767 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
769 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
770 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
772 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
773 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
775 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
776 assertExpectedErrors("Manifest with metadata missing vnf mandatory entries should return error", errors, 1);
781 * Manifest with more than 4 metadata entries should return error.
784 public void testGivenManifestFile_withMetadataEntriesExceedingTheLimit_thenErrorIsReturned() {
785 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder()
786 .withMetaData(PNFD_NAME.getToken(), "RadioNode")
787 .withMetaData(ManifestTokenType.PNFD_PROVIDER.getToken(), "Bilal Iqbal")
788 .withMetaData(PNFD_ARCHIVE_VERSION.getToken(), "1.0")
789 .withMetaData(PNFD_RELEASE_DATE_TIME.getToken(), "2019-03-11T11:25:00+00:00");
791 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
792 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
794 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
795 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
797 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
798 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
800 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
801 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
803 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
804 assertExpectedErrors("Manifest with more than 4 metadata entries should return error", errors, 1);
808 public void testGivenManifestFile_withPnfMetadataAndVfEntries_thenErrorIsReturned() {
809 final ManifestBuilder manifestBuilder = getPnfManifestSampleBuilder();
811 .append(ETSI_ENTRY_TESTS.getName())
812 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" Files/Tests").append("\n")
813 .append(ETSI_ENTRY_LICENSES.getName())
814 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" Files/Licenses");
816 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
817 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
819 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
820 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
822 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
823 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
825 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
826 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
827 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
828 assertExpectedErrors("Tosca.meta should not have entries applicable only to VF", errors, 2);
833 * Tests an imported descriptor with a missing imported file.
836 public void testGivenDefinitionFileWithImportedDescriptor_whenImportedDescriptorImportsMissingFile_thenMissingImportErrorOccur() {
837 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
839 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
840 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
842 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
843 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
845 handler.addFile(SAMPLE_SOURCE, "".getBytes());
846 manifestBuilder.withSource(SAMPLE_SOURCE);
848 final String definitionImportOne = "Definitions/importOne.yaml";
849 handler.addFile(definitionImportOne,
850 getResourceBytesOrFail("validation.files/definition/sampleDefinitionFile2.yaml"));
851 manifestBuilder.withSource(definitionImportOne);
853 final String definitionFileWithValidImports = "validation.files/definition/definitionFileWithOneImport.yaml";
854 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(definitionFileWithValidImports));
855 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
857 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
858 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
860 final Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator.validateContent(handler);
862 final List<ErrorMessage> expectedErrorList = new ArrayList<>();
863 for (int i =0;i < getManifestDefinitionErrorCount();i++)
864 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
865 , Messages.MISSING_IMPORT_FILE.formatMessage("Definitions/etsi_nfv_sol001_pnfd_2_5_2_types.yaml"))
868 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), expectedErrorList);
872 * Tests an imported descriptor with invalid import statement.
875 public void testGivenDefinitionFileWithImportedDescriptor_whenInvalidImportStatementExistInImportedDescriptor_thenInvalidImportErrorOccur() {
876 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
878 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
879 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
881 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
882 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
884 handler.addFile(SAMPLE_SOURCE, "".getBytes());
885 manifestBuilder.withSource(SAMPLE_SOURCE);
887 final String definitionImportOne = "Definitions/importOne.yaml";
888 handler.addFile(definitionImportOne,
889 getResourceBytesOrFail("validation.files/definition/definitionFileWithInvalidImport.yaml"));
890 manifestBuilder.withSource(definitionImportOne);
892 final String definitionFileWithValidImports = "validation.files/definition/definitionFileWithOneImport.yaml";
893 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(definitionFileWithValidImports));
894 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
896 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
897 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
899 final Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator.validateContent(handler);
901 final List<ErrorMessage> expectedErrorList = new ArrayList<>();
902 for (int i =0;i < getManifestDefinitionErrorCount();i++)
903 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
904 , Messages.INVALID_IMPORT_STATEMENT.formatMessage(definitionImportOne, "null"))
907 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), expectedErrorList);
911 public void givenManifestWithNonManoPmAndVesArtifacts_whenNonManoArtifactsAreValid_thenNoErrorsOccur() {
912 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
914 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
915 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
917 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
918 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
920 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
921 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
923 final String nonManoPmEventsSource = "Artifacts/Deployment/Measurements/PM_Dictionary.yaml";
924 handler.addFile(nonManoPmEventsSource,
925 getResourceBytesOrFail("validation.files/measurements/pmEvents-valid.yaml"));
926 manifestBuilder.withNonManoArtifact(ONAP_PM_DICTIONARY.getType(), nonManoPmEventsSource);
928 final String nonManoVesEventsSource = "Artifacts/Deployment/Events/ves_events.yaml";
929 handler.addFile(nonManoVesEventsSource,
930 getResourceBytesOrFail("validation.files/events/vesEvents-valid.yaml"));
931 manifestBuilder.withNonManoArtifact(ONAP_VES_EVENTS.getType(), nonManoVesEventsSource);
933 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
934 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
936 final Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator
937 .validateContent(handler);
939 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), Collections.emptyList());
943 public void givenManifestWithNonManoPmOrVesArtifacts_whenNonManoArtifactsYamlAreInvalid_thenInvalidYamlErrorOccur() {
944 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
946 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
947 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
949 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
950 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
952 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
953 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
955 final String nonManoPmEventsSource = "Artifacts/Deployment/Measurements/PM_Dictionary.yaml";
956 handler.addFile(nonManoPmEventsSource, getResourceBytesOrFail(INVALID_YAML_FILE_PATH));
957 manifestBuilder.withNonManoArtifact(ONAP_PM_DICTIONARY.getType(), nonManoPmEventsSource);
959 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
960 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
962 final List<ErrorMessage> expectedErrorList = new ArrayList<>();
963 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
964 , Messages.INVALID_YAML_FORMAT_1.formatMessage(nonManoPmEventsSource, "while scanning a simple key in 'reader', line 2, column 1: key {} ^could not find expected ':' in 'reader', line 2, column 7: key {} ^"))
966 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR, "while scanning a simple key in 'reader', line 2, column 1: key {} ^could not find expected ':' in 'reader', line 2, column 7: key {} ^")
969 final Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator.validateContent(handler);
970 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), expectedErrorList);
974 public void givenManifestWithNonManoPmOrVesArtifacts_whenNonManoArtifactsYamlAreEmpty_thenEmptyYamlErrorOccur() {
975 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
977 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
978 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
980 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
981 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
983 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
984 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
986 final String nonManoPmEventsSource = "Artifacts/Deployment/Measurements/PM_Dictionary.yaml";
987 handler.addFile(nonManoPmEventsSource, getResourceBytesOrFail(EMPTY_YAML_FILE_PATH));
988 manifestBuilder.withNonManoArtifact(ONAP_PM_DICTIONARY.getType(), nonManoPmEventsSource);
990 final String nonManoVesEventsSource = "Artifacts/Deployment/Events/ves_events.yaml";
991 handler.addFile(nonManoVesEventsSource, getResourceBytesOrFail(EMPTY_YAML_FILE_PATH));
992 manifestBuilder.withNonManoArtifact(ONAP_VES_EVENTS.getType(), nonManoVesEventsSource);
994 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
995 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
997 final List<ErrorMessage> expectedErrorList = new ArrayList<>();
998 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
999 , Messages.EMPTY_YAML_FILE_1.formatMessage(nonManoPmEventsSource))
1001 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
1002 , Messages.EMPTY_YAML_FILE_1.formatMessage(nonManoVesEventsSource))
1004 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
1005 , "PM_Dictionary YAML file is empty")
1008 final Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator
1009 .validateContent(handler);
1011 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), expectedErrorList);
1015 public void givenManifestWithNonManoPmOrVesArtifacts_whenNonManoArtifactsHaveNotYamlExtension_thenInvalidYamlExtensionErrorOccur() {
1016 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
1018 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
1019 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
1021 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
1022 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
1024 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
1025 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
1027 final String nonManoPmEventsSource = "Artifacts/Deployment/Measurements/PM_Dictionary.y1";
1028 handler.addFile(nonManoPmEventsSource, "".getBytes());
1029 manifestBuilder.withNonManoArtifact(ONAP_PM_DICTIONARY.getType(), nonManoPmEventsSource);
1031 final String nonManoVesEventsSource = "Artifacts/Deployment/Events/ves_events.y2";
1032 handler.addFile(nonManoVesEventsSource, "".getBytes());
1033 manifestBuilder.withNonManoArtifact(ONAP_VES_EVENTS.getType(), nonManoVesEventsSource);
1035 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
1036 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
1038 final List<ErrorMessage> expectedErrorList = new ArrayList<>();
1039 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
1040 , Messages.INVALID_YAML_EXTENSION.formatMessage(nonManoPmEventsSource))
1042 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
1043 , Messages.INVALID_YAML_EXTENSION.formatMessage(nonManoVesEventsSource))
1045 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
1046 , "PM_Dictionary YAML file is empty")
1050 final Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator
1051 .validateContent(handler);
1053 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), expectedErrorList);
1057 public void givenPackageWithValidSoftwareInformationNonMano_whenThePackageIsValidated_thenNoErrorsAreReturned() {
1058 //given a package with software information non-mano artifact
1059 final ManifestBuilder manifestBuilder = getPnfManifestSampleBuilder();
1060 final String nonManoSoftwareInformationPath = "Artifacts/software-information/pnf-sw-information-valid.yaml";
1061 handler.addFile(nonManoSoftwareInformationPath,
1062 getResourceBytesOrFail("validation.files/non-mano/pnf-sw-information-valid.yaml"));
1063 manifestBuilder.withNonManoArtifact(ONAP_SW_INFORMATION.getType(), nonManoSoftwareInformationPath);
1064 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString()
1065 .getBytes(StandardCharsets.UTF_8));
1066 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
1067 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
1068 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
1069 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
1070 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
1072 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
1073 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
1074 //when package is validated
1075 final Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator.validateContent(handler);
1077 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), Collections.emptyList());
1081 public void givenPackageWithUnparsableSwInformationNonMano_whenThePackageIsValidated_thenInvalidErrorIsReturned() {
1082 //given a package with unparsable software information non-mano artifact
1083 final ManifestBuilder manifestBuilder = getPnfManifestSampleBuilder();
1084 final String nonManoSoftwareInformationPath = "Artifacts/software-information/pnf-sw-information-valid.yaml";
1085 handler.addFile(nonManoSoftwareInformationPath,
1086 getResourceBytesOrFail("validation.files/invalid.yaml"));
1087 manifestBuilder.withNonManoArtifact(ONAP_SW_INFORMATION.getType(), nonManoSoftwareInformationPath);
1088 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString()
1089 .getBytes(StandardCharsets.UTF_8));
1090 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
1091 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
1092 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
1093 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
1094 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
1096 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
1097 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
1098 //when package is validated
1099 final Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator.validateContent(handler);
1100 //then invalid error returned
1101 final List<ErrorMessage> expectedErrorList = new ArrayList<>();
1102 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
1103 , Messages.INVALID_SW_INFORMATION_NON_MANO_ERROR.formatMessage(nonManoSoftwareInformationPath))
1105 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), expectedErrorList);
1109 public void givenPackageWithIncorrectSwInformationNonMano_whenThePackageIsValidated_thenInvalidErrorIsReturned() {
1110 //given a package with incorrect software information non-mano artifact
1111 final ManifestBuilder manifestBuilder = getPnfManifestSampleBuilder();
1112 final String nonManoSoftwareInformationPath = "Artifacts/software-information/pnf-sw-information-invalid.yaml";
1113 handler.addFile(nonManoSoftwareInformationPath,
1114 getResourceBytesOrFail("validation.files/non-mano/pnf-sw-information-invalid.yaml"));
1115 manifestBuilder.withNonManoArtifact(ONAP_SW_INFORMATION.getType(), nonManoSoftwareInformationPath);
1116 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString()
1117 .getBytes(StandardCharsets.UTF_8));
1118 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
1119 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
1120 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
1121 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
1122 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
1124 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
1125 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
1126 //when package is validated
1127 final Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator.validateContent(handler);
1128 //then incorrect error returned
1129 final List<ErrorMessage> expectedErrorList = new ArrayList<>();
1130 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
1131 , Messages.INCORRECT_SW_INFORMATION_NON_MANO_ERROR.formatMessage(nonManoSoftwareInformationPath))
1133 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), expectedErrorList);
1137 public void givenPackageWithTwoSoftwareInformationNonMano_whenThePackageIsValidated_thenUniqueErrorIsReturned() {
1138 //given a package with two software information non-mano artifacts
1139 final ManifestBuilder manifestBuilder = getPnfManifestSampleBuilder();
1140 final String nonManoSoftwareInformation1Path = "Artifacts/software-information/pnf-sw-information-valid1.yaml";
1141 handler.addFile(nonManoSoftwareInformation1Path,
1142 getResourceBytesOrFail("validation.files/non-mano/pnf-sw-information-valid.yaml"));
1143 manifestBuilder.withNonManoArtifact(ONAP_SW_INFORMATION.getType(), nonManoSoftwareInformation1Path);
1144 final String nonManoSoftwareInformation2Path = "Artifacts/software-information/pnf-sw-information-valid2.yaml";
1145 handler.addFile(nonManoSoftwareInformation2Path,
1146 getResourceBytesOrFail("validation.files/non-mano/pnf-sw-information-valid.yaml"));
1147 manifestBuilder.withNonManoArtifact(ONAP_SW_INFORMATION.getType(), nonManoSoftwareInformation2Path);
1148 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString()
1149 .getBytes(StandardCharsets.UTF_8));
1150 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
1151 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
1152 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
1153 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
1154 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
1156 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
1157 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
1158 //when package is validated
1159 final Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator.validateContent(handler);
1160 //then unique error returned
1161 final List<ErrorMessage> expectedErrorList = new ArrayList<>();
1162 final String errorFiles = Stream.of(nonManoSoftwareInformation1Path, nonManoSoftwareInformation2Path)
1163 .map(s -> String.format("'%s'", s))
1164 .collect(Collectors.joining(", "));
1165 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
1166 , Messages.UNIQUE_SW_INFORMATION_NON_MANO_ERROR.formatMessage(errorFiles))
1168 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), expectedErrorList);
1172 public void signedPackage() throws SecurityManagerException {
1174 final ManifestBuilder manifestBuilder = getPnfManifestSampleBuilder();
1175 final String fakeArtifactPath = "Artifacts/aArtifact.yaml";
1176 final String fakeArtifactCmsPath = "Artifacts/aArtifact.cms";
1177 final String fakeCertificatePath = "certificate.cert";
1178 handler.addFile(fakeArtifactPath, new byte[0]);
1179 manifestBuilder.withSource(fakeArtifactPath);
1180 handler.addFile(fakeArtifactCmsPath, new byte[0]);
1181 manifestBuilder.withSource(fakeArtifactCmsPath);
1182 handler.addFile(fakeCertificatePath, new byte[0]);
1183 manifestBuilder.withSource(fakeCertificatePath);
1184 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
1185 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
1186 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
1187 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
1189 metaFileBuilder.append(ETSI_ENTRY_CERTIFICATE.getName())
1190 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" ").append(fakeCertificatePath).append("\n");
1191 handler.addFile(TOSCA_META_PATH_FILE_NAME,
1192 metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
1193 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
1195 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
1196 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
1198 final SecurityManager securityManagerMock = mock(SecurityManager.class);
1199 when(securityManagerMock.verifySignedData(any(), any(), any())).thenReturn(true);
1200 sol004MetaDirectoryValidator = getSol004WithSecurity(securityManagerMock);
1203 Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator.validateContent(handler);
1205 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), Collections.emptyList());
1208 sol004MetaDirectoryValidator = getSol004WithSecurity(securityManagerMock);
1209 when(securityManagerMock.verifySignedData(any(), any(), any())).thenReturn(false);
1212 actualErrorMap = sol004MetaDirectoryValidator.validateContent(handler);
1215 List<ErrorMessage> expectedErrorList = new ArrayList<>();
1216 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
1217 , Messages.ARTIFACT_INVALID_SIGNATURE.formatMessage(fakeArtifactCmsPath, fakeArtifactPath))
1219 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), expectedErrorList);
1222 sol004MetaDirectoryValidator = getSol004WithSecurity(securityManagerMock);
1223 when(securityManagerMock.verifySignedData(any(), any(), any()))
1224 .thenThrow(new SecurityManagerException("SecurityManagerException"));
1226 actualErrorMap = sol004MetaDirectoryValidator.validateContent(handler);
1229 expectedErrorList = new ArrayList<>();
1230 expectedErrorList.add(
1231 new ErrorMessage(ErrorLevel.ERROR,
1232 Messages.ARTIFACT_SIGNATURE_VALIDATION_ERROR.formatMessage(fakeArtifactCmsPath,
1233 fakeArtifactPath, fakeCertificatePath, "SecurityManagerException")
1236 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), expectedErrorList);
1239 protected void assertExpectedErrors(final String testCase, final Map<String, List<ErrorMessage>> errors, final int expectedErrors){
1240 final List<ErrorMessage> errorMessages = errors.get(SdcCommon.UPLOAD_FILE);
1241 printErrorMessages(errorMessages);
1242 if (expectedErrors > 0) {
1243 assertEquals(testCase, expectedErrors, errorMessages.size());
1245 assertEquals(testCase, expectedErrors, errors.size());
1249 private void printErrorMessages(final List<ErrorMessage> errorMessages) {
1250 if (CollectionUtils.isNotEmpty(errorMessages)) {
1251 errorMessages.forEach(errorMessage ->
1252 System.out.println(String.format("%s: %s", errorMessage.getLevel(), errorMessage.getMessage()))
1257 private void assertExpectedErrors(List<ErrorMessage> actualErrorList, final List<ErrorMessage> expectedErrorList) {
1258 if (actualErrorList == null) {
1259 actualErrorList = new ArrayList<>();
1262 printErrorMessages(actualErrorList);
1264 assertThat("The actual error list should have the same size as the expected error list"
1265 , actualErrorList, hasSize(expectedErrorList.size())
1268 actualErrorList.forEach(error -> {
1269 Predicate<ErrorMessage> matching = e -> e.getLevel() == error.getLevel() && sanitize(e.getMessage()).equalsIgnoreCase(sanitize(error.getMessage()));
1270 assertTrue("The actual error and expected error lists should be the same", expectedErrorList.stream().anyMatch(matching));
1274 private static String sanitize(String s) {
1275 return s.trim().replaceAll("\n", "").replaceAll("\r", "").replaceAll("\\s{2,}", " ").trim();