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_PACKAGE_VERSION;
43 import static org.openecomp.sdc.tosca.csar.ManifestTokenType.VNF_PRODUCT_NAME;
44 import static org.openecomp.sdc.tosca.csar.ManifestTokenType.VNF_PROVIDER_ID;
45 import static org.openecomp.sdc.tosca.csar.ManifestTokenType.VNF_RELEASE_DATE_TIME;
46 import static org.openecomp.sdc.tosca.csar.ToscaMetaEntry.CREATED_BY_ENTRY;
47 import static org.openecomp.sdc.tosca.csar.ToscaMetaEntry.CSAR_VERSION_ENTRY;
48 import static org.openecomp.sdc.tosca.csar.ToscaMetaEntry.ENTRY_DEFINITIONS;
49 import static org.openecomp.sdc.tosca.csar.ToscaMetaEntry.ETSI_ENTRY_CERTIFICATE;
50 import static org.openecomp.sdc.tosca.csar.ToscaMetaEntry.ETSI_ENTRY_CHANGE_LOG;
51 import static org.openecomp.sdc.tosca.csar.ToscaMetaEntry.ETSI_ENTRY_LICENSES;
52 import static org.openecomp.sdc.tosca.csar.ToscaMetaEntry.ETSI_ENTRY_MANIFEST;
53 import static org.openecomp.sdc.tosca.csar.ToscaMetaEntry.ETSI_ENTRY_TESTS;
54 import static org.openecomp.sdc.tosca.csar.ToscaMetaEntry.TOSCA_META_FILE_VERSION_ENTRY;
55 import static org.openecomp.sdc.tosca.csar.ToscaMetadataFileInfo.TOSCA_META_PATH_FILE_NAME;
56 import static org.openecomp.sdc.vendorsoftwareproduct.impl.orchestration.csar.validation.TestConstants.EMPTY_YAML_FILE_PATH;
57 import static org.openecomp.sdc.vendorsoftwareproduct.impl.orchestration.csar.validation.TestConstants.INVALID_YAML_FILE_PATH;
58 import static org.openecomp.sdc.vendorsoftwareproduct.impl.orchestration.csar.validation.TestConstants.SAMPLE_DEFINITION_FILE_PATH;
59 import static org.openecomp.sdc.vendorsoftwareproduct.impl.orchestration.csar.validation.TestConstants.SAMPLE_DEFINITION_IMPORT_FILE_PATH;
60 import static org.openecomp.sdc.vendorsoftwareproduct.impl.orchestration.csar.validation.TestConstants.SAMPLE_SOURCE;
61 import static org.openecomp.sdc.vendorsoftwareproduct.impl.orchestration.csar.validation.TestConstants.TOSCA_CHANGELOG_FILEPATH;
62 import static org.openecomp.sdc.vendorsoftwareproduct.impl.orchestration.csar.validation.TestConstants.TOSCA_DEFINITION_FILEPATH;
63 import static org.openecomp.sdc.vendorsoftwareproduct.impl.orchestration.csar.validation.TestConstants.TOSCA_MANIFEST_FILEPATH;
65 import java.nio.charset.StandardCharsets;
66 import java.util.ArrayList;
67 import java.util.Collections;
68 import java.util.List;
70 import java.util.stream.Collectors;
71 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 SOL004MetaDirectoryValidator sol004MetaDirectoryValidator;
87 private OnboardingPackageContentHandler handler;
88 private StringBuilder metaFileBuilder;
92 sol004MetaDirectoryValidator = new SOL004MetaDirectoryValidator();
93 handler = new OnboardingPackageContentHandler();
94 metaFileBuilder = new StringBuilder()
95 .append(TOSCA_META_FILE_VERSION_ENTRY.getName())
96 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" 1.0").append("\n")
97 .append(CSAR_VERSION_ENTRY.getName())
98 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" 1.1").append("\n")
99 .append(CREATED_BY_ENTRY.getName())
100 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" Vendor").append("\n")
101 .append(ENTRY_DEFINITIONS.getName())
102 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" ").append(TOSCA_DEFINITION_FILEPATH).append("\n")
103 .append(ETSI_ENTRY_MANIFEST.getName())
104 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" ").append(TOSCA_MANIFEST_FILEPATH).append("\n")
105 .append(ETSI_ENTRY_CHANGE_LOG.getName())
106 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" ").append(TOSCA_CHANGELOG_FILEPATH).append("\n");
110 public void testGivenTOSCAMetaFile_whenEntryHasNoValue_thenErrorIsReturned() {
111 final String metaFileWithInvalidEntry = "TOSCA-Meta-File-Version: \n" +
112 "Entry-Definitions: " + TOSCA_DEFINITION_FILEPATH;
114 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileWithInvalidEntry.getBytes(StandardCharsets.UTF_8));
115 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
117 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
118 assertExpectedErrors("TOSCA Meta file with no entries", errors, 1);
122 public void testGivenTOSCAMeta_withAllSupportedEntries_thenNoErrorsReturned() {
124 final String entryTestFilePath = "Files/Tests";
125 final String entryLicenseFilePath = "Files/Licenses";
127 handler.addFolder("Files/Tests/");
128 handler.addFolder("Files/Licenses/");
130 .append(ETSI_ENTRY_TESTS.getName())
131 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(entryTestFilePath).append("\n")
132 .append(ETSI_ENTRY_LICENSES.getName())
133 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(entryLicenseFilePath).append("\n");
135 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
136 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
137 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
139 handler.addFile(SAMPLE_SOURCE, "".getBytes());
140 handler.addFile(SAMPLE_DEFINITION_IMPORT_FILE_PATH, "".getBytes());
141 handler.addFile(entryTestFilePath, "".getBytes());
142 handler.addFile(entryLicenseFilePath, "".getBytes());
144 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder()
145 .withSource(TOSCA_META_PATH_FILE_NAME)
146 .withSource(TOSCA_DEFINITION_FILEPATH)
147 .withSource(TOSCA_CHANGELOG_FILEPATH)
148 .withSource(TOSCA_MANIFEST_FILEPATH).withSource(SAMPLE_SOURCE)
149 .withSource(SAMPLE_DEFINITION_IMPORT_FILE_PATH)
150 .withSource(entryTestFilePath)
151 .withSource(entryLicenseFilePath);
153 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
155 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
156 assertEquals(0, errors.size());
160 public void testGivenTOSCAMeta_withUnsupportedEntry_thenNoErrorIsReturned() {
162 .append("a-unknown-entry")
163 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" ")
164 .append("Definitions/events.log");
166 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
167 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
168 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
169 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder()
170 .withSource(TOSCA_META_PATH_FILE_NAME)
171 .withSource(TOSCA_DEFINITION_FILEPATH)
172 .withSource(TOSCA_CHANGELOG_FILEPATH)
173 .withSource(TOSCA_MANIFEST_FILEPATH);
175 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
176 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
177 assertThat("Validation should produce no errors", errors, is(anEmptyMap()));
181 * Tests if the meta file contains invalid versions in TOSCA-Meta-File-Version and CSAR-Version attributes.
184 public void testGivenTOSCAMetaFile_withInvalidTOSCAMetaFileVersionAndCSARVersion_thenErrorIsReturned() {
185 final StringBuilder metaFileBuilder = new StringBuilder()
186 .append(TOSCA_META_FILE_VERSION_ENTRY.getName())
187 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(Integer.MAX_VALUE).append("\n")
188 .append(CSAR_VERSION_ENTRY.getName())
189 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(Integer.MAX_VALUE).append("\n")
190 .append(CREATED_BY_ENTRY.getName())
191 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" Vendor").append("\n")
192 .append(ENTRY_DEFINITIONS.getName())
193 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" ").append(TOSCA_DEFINITION_FILEPATH).append("\n")
194 .append(ETSI_ENTRY_MANIFEST.getName())
195 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" ").append(TOSCA_MANIFEST_FILEPATH).append("\n")
196 .append(ETSI_ENTRY_CHANGE_LOG.getName())
197 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" ").append(TOSCA_CHANGELOG_FILEPATH);
198 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
200 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
201 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
203 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
204 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
206 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
207 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
209 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
210 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
212 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
213 assertExpectedErrors("Invalid TOSCA-Meta-File-Version and CSAR-Version attributes", errors, 2);
217 public void testGivenTOSCAMetaFile_withNonExistentFileReferenced_thenErrorsReturned() {
218 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
220 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
221 assertThat("Total of errors should be as expected", errors.size(), is(1));
222 final List<ErrorMessage> errorMessages = errors.get(SdcCommon.UPLOAD_FILE);
223 assertThat("Total of errors messages should be as expected", errorMessages.size(), is(3));
228 public void testGivenDefinitionFile_whenValidImportStatementExist_thenNoErrorsReturned() {
229 final ManifestBuilder manifestBuilder = getPnfManifestSampleBuilder();
231 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
232 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
234 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
235 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
237 handler.addFile(SAMPLE_SOURCE, "".getBytes());
238 manifestBuilder.withSource(SAMPLE_SOURCE);
240 handler.addFile("Definitions/etsi_nfv_sol001_pnfd_2_5_1_types.yaml",
241 getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
242 manifestBuilder.withSource("Definitions/etsi_nfv_sol001_pnfd_2_5_1_types.yaml");
244 final String definitionFileWithValidImports = "validation.files/definition/definitionFileWithValidImports.yaml";
245 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(definitionFileWithValidImports));
246 manifestBuilder.withSource(TOSCA_DEFINITION_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 assertEquals(0, errors.size());
256 public void testGivenDefinitionFile_whenMultipleDefinitionsImportStatementExist_thenNoErrorsReturned() {
257 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
259 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
260 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
262 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
263 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
265 handler.addFile(SAMPLE_SOURCE, "".getBytes());
266 manifestBuilder.withSource(SAMPLE_SOURCE);
268 final byte[] sampleDefinitionFile1 =
269 getResourceBytesOrFail("validation.files/definition/sampleDefinitionFile1.yaml");
270 handler.addFile(TOSCA_DEFINITION_FILEPATH, sampleDefinitionFile1);
271 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
273 final byte[] sampleDefinitionFile2 =
274 getResourceBytesOrFail("validation.files/definition/sampleDefinitionFile2.yaml");
275 handler.addFile("Definitions/etsi_nfv_sol001_pnfd_2_5_1_types.yaml", sampleDefinitionFile2);
276 manifestBuilder.withSource("Definitions/etsi_nfv_sol001_pnfd_2_5_1_types.yaml");
278 final byte[] sampleDefinitionFile3 =
279 getResourceBytesOrFail("validation.files/definition/sampleDefinitionFile1.yaml");
280 handler.addFile("Definitions/etsi_nfv_sol001_pnfd_2_5_2_types.yaml", sampleDefinitionFile3);
281 manifestBuilder.withSource("Definitions/etsi_nfv_sol001_pnfd_2_5_2_types.yaml");
283 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
284 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
286 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
287 assertEquals(0, errors.size());
291 public void testGivenDefinitionFile_whenInvalidImportStatementExist_thenErrorIsReturned() {
292 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
294 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
295 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
297 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
298 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
300 handler.addFile(SAMPLE_SOURCE, "".getBytes());
301 manifestBuilder.withSource(SAMPLE_SOURCE);
303 final String definitionFileWithInvalidImports =
304 "validation.files/definition/definitionFileWithInvalidImport.yaml";
305 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(definitionFileWithInvalidImports));
306 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
308 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
309 String manifest = manifestBuilder.build();
310 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifest.getBytes(StandardCharsets.UTF_8));
312 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
313 assertExpectedErrors("", errors, 1);
317 * Manifest referenced import file missing
320 public void testGivenDefinitionFile_whenReferencedImportDoesNotExist_thenErrorIsReturned() {
321 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
323 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
324 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
326 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
327 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
329 handler.addFile(SAMPLE_SOURCE, "".getBytes());
330 manifestBuilder.withSource(SAMPLE_SOURCE);
332 handler.addFile("Definitions/etsi_nfv_sol001_pnfd_2_5_1_types.yaml", "".getBytes());
333 manifestBuilder.withSource("Definitions/etsi_nfv_sol001_pnfd_2_5_1_types.yaml");
335 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
336 handler.addFile(TOSCA_DEFINITION_FILEPATH,
337 getResourceBytesOrFail("validation.files/definition/sampleDefinitionFile2.yaml"));
339 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
340 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
342 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
343 assertExpectedErrors("Manifest referenced import file missing", errors, 1);
347 public void testGivenDefinitionFile_whenFileInPackageNotInManifest_thenErrorIsReturned() {
348 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
350 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
351 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
353 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
354 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
356 handler.addFile(SAMPLE_SOURCE, "".getBytes());
358 final byte[] sampleDefinitionFile =
359 getResourceBytesOrFail("validation.files/definition/sampleDefinitionFile2.yaml");
360 handler.addFile("Definitions/etsi_nfv_sol001_pnfd_2_5_2_types.yaml", sampleDefinitionFile);
361 manifestBuilder.withSource("Definitions/etsi_nfv_sol001_pnfd_2_5_2_types.yaml");
363 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
364 handler.addFile(TOSCA_DEFINITION_FILEPATH,
365 getResourceBytesOrFail("validation.files/definition/sampleDefinitionFile2.yaml"));
367 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
369 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
370 assertExpectedErrors("Artifact is not being referenced in manifest file", errors, 1);
374 public void testGivenDefinitionFile_whenManifestNotreferencedInManifest_thenNoErrorIsReturned() {
375 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
377 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
378 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
380 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
381 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
383 handler.addFile(SAMPLE_SOURCE, "".getBytes());
384 manifestBuilder.withSource(SAMPLE_SOURCE);
386 final byte[] sampleDefinitionFile =
387 getResourceBytesOrFail("validation.files/definition/sampleDefinitionFile2.yaml");
388 handler.addFile("Definitions/etsi_nfv_sol001_pnfd_2_5_2_types.yaml", sampleDefinitionFile);
389 manifestBuilder.withSource("Definitions/etsi_nfv_sol001_pnfd_2_5_2_types.yaml");
391 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
392 handler.addFile(TOSCA_DEFINITION_FILEPATH,
393 getResourceBytesOrFail("validation.files/definition/sampleDefinitionFile2.yaml"));
395 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
397 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
398 assertEquals(0, errors.size());
402 * Reference with invalid YAML format.
405 public void testGivenDefinitionFile_withInvalidYAML_thenErrorIsReturned() {
406 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
408 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
409 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
411 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
412 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
414 handler.addFile(SAMPLE_SOURCE, "".getBytes());
415 manifestBuilder.withSource(SAMPLE_SOURCE);
417 final String definitionFileWithInvalidYAML = "validation.files/definition/invalidDefinitionFile.yaml";
418 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(definitionFileWithInvalidYAML));
419 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
421 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
422 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
424 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
425 assertExpectedErrors("Reference with invalid YAML format", errors, 1);
429 public void testGivenManifestFile_withValidSourceAndNonManoSources_thenNoErrorIsReturned() {
430 final ManifestBuilder manifestBuilder = getPnfManifestSampleBuilder();
432 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
433 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
435 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
436 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
438 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
439 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
441 handler.addFile(SAMPLE_SOURCE, "".getBytes());
442 manifestBuilder.withSource(SAMPLE_SOURCE);
444 handler.addFile(SAMPLE_DEFINITION_IMPORT_FILE_PATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
445 manifestBuilder.withSource(SAMPLE_DEFINITION_IMPORT_FILE_PATH);
447 final String nonManoSource = "Artifacts/Deployment/Measurements/PM_Dictionary.yaml";
448 handler.addFile(nonManoSource, getResourceBytesOrFail("validation.files/measurements/pmEvents-valid.yaml"));
449 manifestBuilder.withNonManoArtifact(ONAP_PM_DICTIONARY.getType(), nonManoSource);
451 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
452 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
454 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
455 assertEquals(0, errors.size());
459 * Manifest with non existent source files should return error.
462 public void testGivenManifestFile_withNonExistentSourceFile_thenErrorIsReturned() {
463 final ManifestBuilder manifestBuilder = getPnfManifestSampleBuilder();
464 //non existent reference
465 manifestBuilder.withSource("Artifacts/Deployment/Events/RadioNode_pnf_v1.yaml");
467 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
468 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
470 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
471 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
473 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
474 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
476 handler.addFile(SAMPLE_DEFINITION_IMPORT_FILE_PATH, "".getBytes());
477 manifestBuilder.withSource(SAMPLE_DEFINITION_IMPORT_FILE_PATH);
479 String nonManoSource = "Artifacts/Deployment/Measurements/PM_Dictionary.yaml";
480 handler.addFile(nonManoSource, getResourceBytesOrFail("validation.files/measurements/pmEvents-valid.yaml"));
481 manifestBuilder.withNonManoArtifact(ONAP_PM_DICTIONARY.getType(), nonManoSource);
483 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
484 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
486 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
487 assertExpectedErrors("Manifest with non existent source files", errors, 1);
491 * Tests the validation for a TOSCA Manifest with invalid data.
494 public void testGivenManifestFile_withInvalidData_thenErrorIsReturned() {
495 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
496 handler.addFile(TOSCA_MANIFEST_FILEPATH, getResourceBytesOrFail("validation.files/manifest/invalidManifest.mf"));
497 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
498 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
499 handler.addFile(SAMPLE_DEFINITION_IMPORT_FILE_PATH, "".getBytes());
501 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
502 assertExpectedErrors("TOSCA manifest with invalid data", errors, 1);
506 public void testGivenManifestAndDefinitionFile_withSameNames_thenNoErrorReturned() {
507 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
509 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
510 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
512 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
513 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
515 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
516 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
518 handler.addFile(SAMPLE_DEFINITION_IMPORT_FILE_PATH, "".getBytes());
519 manifestBuilder.withSource(SAMPLE_DEFINITION_IMPORT_FILE_PATH);
521 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
522 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
524 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
525 assertEquals(0, errors.size());
529 * Main TOSCA definitions file and Manifest file with different name should return error.
532 public void testGivenManifestAndMainDefinitionFile_withDifferentNames_thenErrorIsReturned() {
533 metaFileBuilder = new StringBuilder()
534 .append(TOSCA_META_FILE_VERSION_ENTRY.getName())
535 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" 1.0").append("\n")
536 .append(CSAR_VERSION_ENTRY.getName())
537 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" 1.1").append("\n")
538 .append(CREATED_BY_ENTRY.getName())
539 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" Vendor").append("\n")
540 .append(ENTRY_DEFINITIONS.getName())
541 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" ").append(TOSCA_DEFINITION_FILEPATH).append("\n")
542 .append(ETSI_ENTRY_MANIFEST.getName())
543 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" Definitions/MainServiceTemplate2.mf\n")
544 .append(ETSI_ENTRY_CHANGE_LOG.getName())
545 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" ").append(TOSCA_CHANGELOG_FILEPATH).append("\n");
547 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
549 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
550 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
552 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
553 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
555 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
556 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
558 handler.addFile(SAMPLE_DEFINITION_IMPORT_FILE_PATH, "".getBytes());
559 manifestBuilder.withSource(SAMPLE_DEFINITION_IMPORT_FILE_PATH);
561 manifestBuilder.withSource("Definitions/MainServiceTemplate2.mf");
562 handler.addFile("Definitions/MainServiceTemplate2.mf", manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
564 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
565 assertExpectedErrors("Main TOSCA definitions file and Manifest file with different name should return error",
570 public void testGivenManifestFile_withDifferentExtension_thenErrorIsReturned() {
571 metaFileBuilder = new StringBuilder()
572 .append(TOSCA_META_FILE_VERSION_ENTRY.getName())
573 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" 1.0").append("\n")
574 .append(CSAR_VERSION_ENTRY.getName())
575 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" 1.1").append("\n")
576 .append(CREATED_BY_ENTRY.getName())
577 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" Vendor").append("\n")
578 .append(ENTRY_DEFINITIONS.getName())
579 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" ").append(TOSCA_DEFINITION_FILEPATH).append("\n")
580 .append(ETSI_ENTRY_MANIFEST.getName())
581 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" Definitions/MainServiceTemplate.txt\n")
582 .append(ETSI_ENTRY_CHANGE_LOG.getName())
583 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" ").append(TOSCA_CHANGELOG_FILEPATH).append("\n");
585 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
587 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
588 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
590 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
591 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
593 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
594 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
596 handler.addFile(SAMPLE_DEFINITION_IMPORT_FILE_PATH, "".getBytes());
597 manifestBuilder.withSource(SAMPLE_DEFINITION_IMPORT_FILE_PATH);
599 manifestBuilder.withSource("Definitions/MainServiceTemplate.txt");
600 handler.addFile("Definitions/MainServiceTemplate.txt", manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
602 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
603 assertExpectedErrors("Manifest file with different extension than .mf should return error",
608 public void testGivenManifestFile_withValidVnfMetadata_thenNoErrorsReturned() {
609 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
611 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
612 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
613 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
614 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
615 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
616 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
618 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
619 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
621 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
622 assertExpectedErrors("Manifest with valid vnf mandatory values should not return any errors", errors, 0);
626 public void testGivenManifestFile_withValidPnfMetadata_thenNoErrorsReturned() {
627 final ManifestBuilder manifestBuilder = getPnfManifestSampleBuilder();
629 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
630 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
632 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
633 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
635 manifestBuilder.withSignedSource(TOSCA_DEFINITION_FILEPATH
636 , "SHA-abc", "09e5a788acb180162c51679ae4c998039fa6644505db2415e35107d1ee213943");
637 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
639 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
640 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
642 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
643 assertExpectedErrors("Manifest with valid pnf mandatory values should not return any errors", errors, 0);
647 * Manifest with mixed metadata should return error.
650 public void testGivenManifestFile_withMetadataContainingMixedPnfVnfMetadata_thenErrorIsReturned() {
651 final ManifestBuilder manifestBuilder = new ManifestBuilder()
652 .withMetaData(PNFD_NAME.getToken(), "RadioNode")
653 .withMetaData(VNF_PROVIDER_ID.getToken(), "Bilal Iqbal")
654 .withMetaData(PNFD_ARCHIVE_VERSION.getToken(), "1.0")
655 .withMetaData(VNF_RELEASE_DATE_TIME.getToken(), "2019-12-14T11:25:00+00:00");
657 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
658 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
659 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
660 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
661 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
662 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
664 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
665 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
667 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
668 assertExpectedErrors("Manifest with mixed metadata should return error", errors, 1);
673 public void testGivenManifestFile_withMetadataMissingPnfOrVnfMandatoryEntries_thenErrorIsReturned() {
674 final ManifestBuilder manifestBuilder = new ManifestBuilder()
675 .withMetaData("invalid_product_name", "RadioNode")
676 .withMetaData("invalid_provider_id", "Bilal Iqbal")
677 .withMetaData("invalid_package_version", "1.0")
678 .withMetaData("invalid_release_date_time", "2019-12-14T11:25:00+00:00");
680 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
681 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
683 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
684 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
686 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
687 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
689 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
690 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
692 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
693 assertExpectedErrors("Manifest with missing vnf or pnf mandatory entries should return error", errors, 1);
697 public void testGivenManifestFile_withMetadataMissingMandatoryPnfEntries_thenErrorIsReturned() {
698 final ManifestBuilder manifestBuilder = new ManifestBuilder();
700 manifestBuilder.withMetaData(PNFD_NAME.getToken(), "RadioNode");
701 manifestBuilder.withMetaData(PNFD_RELEASE_DATE_TIME.getToken(), "2019-12-14T11:25:00+00:00");
703 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
704 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
706 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
707 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
709 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
710 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
712 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
713 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
715 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
716 assertExpectedErrors("Manifest with metadata missing pnf mandatory entries should return error", errors, 1);
721 public void testGivenManifestFile_withMetadataMissingMandatoryVnfEntries_thenErrorIsReturned() {
722 final ManifestBuilder manifestBuilder = new ManifestBuilder();
724 manifestBuilder.withMetaData(VNF_PRODUCT_NAME.getToken(), "RadioNode");
726 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
727 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
729 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
730 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
732 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
733 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
735 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
736 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
738 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
739 assertExpectedErrors("Manifest with metadata missing vnf mandatory entries should return error", errors, 1);
744 * Manifest with more than 4 metadata entries should return error.
747 public void testGivenManifestFile_withMetadataEntriesExceedingTheLimit_thenErrorIsReturned() {
748 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder()
749 .withMetaData(PNFD_NAME.getToken(), "RadioNode")
750 .withMetaData(ManifestTokenType.PNFD_PROVIDER.getToken(), "Bilal Iqbal")
751 .withMetaData(PNFD_ARCHIVE_VERSION.getToken(), "1.0")
752 .withMetaData(PNFD_RELEASE_DATE_TIME.getToken(), "2019-03-11T11:25:00+00:00");
754 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
755 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
757 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
758 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
760 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
761 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
763 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
764 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
766 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
767 assertExpectedErrors("Manifest with more than 4 metadata entries should return error", errors, 1);
771 public void testGivenManifestFile_withPnfMetadataAndVfEntries_thenErrorIsReturned() {
772 final ManifestBuilder manifestBuilder = getPnfManifestSampleBuilder();
774 .append(ETSI_ENTRY_TESTS.getName())
775 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" Files/Tests").append("\n")
776 .append(ETSI_ENTRY_LICENSES.getName())
777 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" Files/Licenses");
779 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
780 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
782 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
783 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
785 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
786 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
788 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
789 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
790 final Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler);
791 assertExpectedErrors("Tosca.meta should not have entries applicable only to VF", errors, 2);
796 * Tests an imported descriptor with a missing imported file.
799 public void testGivenDefinitionFileWithImportedDescriptor_whenImportedDescriptorImportsMissingFile_thenMissingImportErrorOccur() {
800 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
802 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
803 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
805 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
806 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
808 handler.addFile(SAMPLE_SOURCE, "".getBytes());
809 manifestBuilder.withSource(SAMPLE_SOURCE);
811 final String definitionImportOne = "Definitions/importOne.yaml";
812 handler.addFile(definitionImportOne,
813 getResourceBytesOrFail("validation.files/definition/sampleDefinitionFile2.yaml"));
814 manifestBuilder.withSource(definitionImportOne);
816 final String definitionFileWithValidImports = "validation.files/definition/definitionFileWithOneImport.yaml";
817 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(definitionFileWithValidImports));
818 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
820 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
821 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
823 final Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator.validateContent(handler);
825 final List<ErrorMessage> expectedErrorList = new ArrayList<>();
826 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
827 , Messages.MISSING_IMPORT_FILE.formatMessage("Definitions/etsi_nfv_sol001_pnfd_2_5_2_types.yaml"))
830 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), expectedErrorList);
834 * Tests an imported descriptor with invalid import statement.
837 public void testGivenDefinitionFileWithImportedDescriptor_whenInvalidImportStatementExistInImportedDescriptor_thenInvalidImportErrorOccur() {
838 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
840 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
841 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
843 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
844 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
846 handler.addFile(SAMPLE_SOURCE, "".getBytes());
847 manifestBuilder.withSource(SAMPLE_SOURCE);
849 final String definitionImportOne = "Definitions/importOne.yaml";
850 handler.addFile(definitionImportOne,
851 getResourceBytesOrFail("validation.files/definition/definitionFileWithInvalidImport.yaml"));
852 manifestBuilder.withSource(definitionImportOne);
854 final String definitionFileWithValidImports = "validation.files/definition/definitionFileWithOneImport.yaml";
855 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(definitionFileWithValidImports));
856 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
858 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
859 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
861 final Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator.validateContent(handler);
863 final List<ErrorMessage> expectedErrorList = new ArrayList<>();
864 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
865 , Messages.INVALID_IMPORT_STATEMENT.formatMessage(definitionImportOne, "null"))
868 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), expectedErrorList);
872 public void givenManifestWithNonManoPmAndVesArtifacts_whenNonManoArtifactsAreValid_thenNoErrorsOccur() {
873 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
875 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
876 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
878 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
879 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
881 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
882 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
884 final String nonManoPmEventsSource = "Artifacts/Deployment/Measurements/PM_Dictionary.yaml";
885 handler.addFile(nonManoPmEventsSource,
886 getResourceBytesOrFail("validation.files/measurements/pmEvents-valid.yaml"));
887 manifestBuilder.withNonManoArtifact(ONAP_PM_DICTIONARY.getType(), nonManoPmEventsSource);
889 final String nonManoVesEventsSource = "Artifacts/Deployment/Events/ves_events.yaml";
890 handler.addFile(nonManoVesEventsSource,
891 getResourceBytesOrFail("validation.files/events/vesEvents-valid.yaml"));
892 manifestBuilder.withNonManoArtifact(ONAP_VES_EVENTS.getType(), nonManoVesEventsSource);
894 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
895 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
897 final Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator
898 .validateContent(handler);
900 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), Collections.emptyList());
904 public void givenManifestWithNonManoPmOrVesArtifacts_whenNonManoArtifactsYamlAreInvalid_thenInvalidYamlErrorOccur() {
905 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
907 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
908 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
910 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
911 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
913 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
914 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
916 final String nonManoPmEventsSource = "Artifacts/Deployment/Measurements/PM_Dictionary.yaml";
917 handler.addFile(nonManoPmEventsSource, getResourceBytesOrFail(INVALID_YAML_FILE_PATH));
918 manifestBuilder.withNonManoArtifact(ONAP_PM_DICTIONARY.getType(), nonManoPmEventsSource);
920 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
921 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
923 final List<ErrorMessage> expectedErrorList = new ArrayList<>();
924 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
925 , Messages.INVALID_YAML_FORMAT_1.formatMessage(nonManoPmEventsSource, "while scanning a simple key\n"
926 + " in 'reader', line 2, column 1:\n"
929 + "could not find expected ':'\n"
930 + " in 'reader', line 2, column 7:\n"
934 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR, "while scanning a simple key\n" +
935 " in 'reader', line 2, column 1:\n" +
938 "could not find expected ':'\n" +
939 " in 'reader', line 2, column 7:\n" +
944 final Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator
945 .validateContent(handler);
946 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), expectedErrorList);
950 public void givenManifestWithNonManoPmOrVesArtifacts_whenNonManoArtifactsYamlAreEmpty_thenEmptyYamlErrorOccur() {
951 final ManifestBuilder manifestBuilder = getVnfManifestSampleBuilder();
953 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
954 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
956 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
957 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
959 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
960 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
962 final String nonManoPmEventsSource = "Artifacts/Deployment/Measurements/PM_Dictionary.yaml";
963 handler.addFile(nonManoPmEventsSource, getResourceBytesOrFail(EMPTY_YAML_FILE_PATH));
964 manifestBuilder.withNonManoArtifact(ONAP_PM_DICTIONARY.getType(), nonManoPmEventsSource);
966 final String nonManoVesEventsSource = "Artifacts/Deployment/Events/ves_events.yaml";
967 handler.addFile(nonManoVesEventsSource, getResourceBytesOrFail(EMPTY_YAML_FILE_PATH));
968 manifestBuilder.withNonManoArtifact(ONAP_VES_EVENTS.getType(), nonManoVesEventsSource);
970 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
971 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
973 final List<ErrorMessage> expectedErrorList = new ArrayList<>();
974 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
975 , Messages.EMPTY_YAML_FILE_1.formatMessage(nonManoPmEventsSource))
977 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
978 , Messages.EMPTY_YAML_FILE_1.formatMessage(nonManoVesEventsSource))
980 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
981 , "PM_Dictionary YAML file is empty")
984 final Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator
985 .validateContent(handler);
987 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), expectedErrorList);
991 public void givenManifestWithNonManoPmOrVesArtifacts_whenNonManoArtifactsHaveNotYamlExtension_thenInvalidYamlExtensionErrorOccur() {
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.y1";
1004 handler.addFile(nonManoPmEventsSource, "".getBytes());
1005 manifestBuilder.withNonManoArtifact(ONAP_PM_DICTIONARY.getType(), nonManoPmEventsSource);
1007 final String nonManoVesEventsSource = "Artifacts/Deployment/Events/ves_events.y2";
1008 handler.addFile(nonManoVesEventsSource, "".getBytes());
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.INVALID_YAML_EXTENSION.formatMessage(nonManoPmEventsSource))
1018 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
1019 , Messages.INVALID_YAML_EXTENSION.formatMessage(nonManoVesEventsSource))
1021 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
1022 , "PM_Dictionary YAML file is empty")
1026 final Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator
1027 .validateContent(handler);
1029 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), expectedErrorList);
1033 public void givenPackageWithValidSoftwareInformationNonMano_whenThePackageIsValidated_thenNoErrorsAreReturned() {
1034 //given a package with software information non-mano artifact
1035 final ManifestBuilder manifestBuilder = getPnfManifestSampleBuilder();
1036 final String nonManoSoftwareInformationPath = "Artifacts/software-information/pnf-sw-information-valid.yaml";
1037 handler.addFile(nonManoSoftwareInformationPath,
1038 getResourceBytesOrFail("validation.files/non-mano/pnf-sw-information-valid.yaml"));
1039 manifestBuilder.withNonManoArtifact(ONAP_SW_INFORMATION.getType(), nonManoSoftwareInformationPath);
1040 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString()
1041 .getBytes(StandardCharsets.UTF_8));
1042 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
1043 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
1044 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
1045 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
1046 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
1048 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
1049 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
1050 //when package is validated
1051 final Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator.validateContent(handler);
1053 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), Collections.emptyList());
1057 public void givenPackageWithUnparsableSwInformationNonMano_whenThePackageIsValidated_thenInvalidErrorIsReturned() {
1058 //given a package with unparsable 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/invalid.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);
1076 //then invalid error returned
1077 final List<ErrorMessage> expectedErrorList = new ArrayList<>();
1078 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
1079 , Messages.INVALID_SW_INFORMATION_NON_MANO_ERROR.formatMessage(nonManoSoftwareInformationPath))
1081 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), expectedErrorList);
1085 public void givenPackageWithIncorrectSwInformationNonMano_whenThePackageIsValidated_thenInvalidErrorIsReturned() {
1086 //given a package with incorrect software information non-mano artifact
1087 final ManifestBuilder manifestBuilder = getPnfManifestSampleBuilder();
1088 final String nonManoSoftwareInformationPath = "Artifacts/software-information/pnf-sw-information-invalid.yaml";
1089 handler.addFile(nonManoSoftwareInformationPath,
1090 getResourceBytesOrFail("validation.files/non-mano/pnf-sw-information-invalid.yaml"));
1091 manifestBuilder.withNonManoArtifact(ONAP_SW_INFORMATION.getType(), nonManoSoftwareInformationPath);
1092 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString()
1093 .getBytes(StandardCharsets.UTF_8));
1094 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
1095 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
1096 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
1097 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
1098 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
1100 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
1101 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
1102 //when package is validated
1103 final Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator.validateContent(handler);
1104 //then incorrect error returned
1105 final List<ErrorMessage> expectedErrorList = new ArrayList<>();
1106 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
1107 , Messages.INCORRECT_SW_INFORMATION_NON_MANO_ERROR.formatMessage(nonManoSoftwareInformationPath))
1109 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), expectedErrorList);
1113 public void givenPackageWithTwoSoftwareInformationNonMano_whenThePackageIsValidated_thenUniqueErrorIsReturned() {
1114 //given a package with two software information non-mano artifacts
1115 final ManifestBuilder manifestBuilder = getPnfManifestSampleBuilder();
1116 final String nonManoSoftwareInformation1Path = "Artifacts/software-information/pnf-sw-information-valid1.yaml";
1117 handler.addFile(nonManoSoftwareInformation1Path,
1118 getResourceBytesOrFail("validation.files/non-mano/pnf-sw-information-valid.yaml"));
1119 manifestBuilder.withNonManoArtifact(ONAP_SW_INFORMATION.getType(), nonManoSoftwareInformation1Path);
1120 final String nonManoSoftwareInformation2Path = "Artifacts/software-information/pnf-sw-information-valid2.yaml";
1121 handler.addFile(nonManoSoftwareInformation2Path,
1122 getResourceBytesOrFail("validation.files/non-mano/pnf-sw-information-valid.yaml"));
1123 manifestBuilder.withNonManoArtifact(ONAP_SW_INFORMATION.getType(), nonManoSoftwareInformation2Path);
1124 handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileBuilder.toString()
1125 .getBytes(StandardCharsets.UTF_8));
1126 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
1127 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
1128 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
1129 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
1130 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
1132 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
1133 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
1134 //when package is validated
1135 final Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator.validateContent(handler);
1136 //then unique error returned
1137 final List<ErrorMessage> expectedErrorList = new ArrayList<>();
1138 final String errorFiles = Stream.of(nonManoSoftwareInformation1Path, nonManoSoftwareInformation2Path)
1139 .map(s -> String.format("'%s'", s))
1140 .collect(Collectors.joining(", "));
1141 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
1142 , Messages.UNIQUE_SW_INFORMATION_NON_MANO_ERROR.formatMessage(errorFiles))
1144 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), expectedErrorList);
1148 public void signedPackage() throws SecurityManagerException {
1150 final ManifestBuilder manifestBuilder = getPnfManifestSampleBuilder();
1151 final String fakeArtifactPath = "Artifacts/aArtifact.yaml";
1152 final String fakeArtifactCmsPath = "Artifacts/aArtifact.cms";
1153 final String fakeCertificatePath = "certificate.cert";
1154 handler.addFile(fakeArtifactPath, new byte[0]);
1155 manifestBuilder.withSource(fakeArtifactPath);
1156 handler.addFile(fakeArtifactCmsPath, new byte[0]);
1157 manifestBuilder.withSource(fakeArtifactCmsPath);
1158 handler.addFile(fakeCertificatePath, new byte[0]);
1159 manifestBuilder.withSource(fakeCertificatePath);
1160 handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
1161 manifestBuilder.withSource(TOSCA_CHANGELOG_FILEPATH);
1162 handler.addFile(TOSCA_DEFINITION_FILEPATH, getResourceBytesOrFail(SAMPLE_DEFINITION_FILE_PATH));
1163 manifestBuilder.withSource(TOSCA_DEFINITION_FILEPATH);
1165 metaFileBuilder.append(ETSI_ENTRY_CERTIFICATE.getName())
1166 .append(ATTRIBUTE_VALUE_SEPARATOR.getToken()).append(" ").append(fakeCertificatePath).append("\n");
1167 handler.addFile(TOSCA_META_PATH_FILE_NAME,
1168 metaFileBuilder.toString().getBytes(StandardCharsets.UTF_8));
1169 manifestBuilder.withSource(TOSCA_META_PATH_FILE_NAME);
1171 manifestBuilder.withSource(TOSCA_MANIFEST_FILEPATH);
1172 handler.addFile(TOSCA_MANIFEST_FILEPATH, manifestBuilder.build().getBytes(StandardCharsets.UTF_8));
1174 final SecurityManager securityManagerMock = mock(SecurityManager.class);
1175 when(securityManagerMock.verifySignedData(any(), any(), any())).thenReturn(true);
1176 sol004MetaDirectoryValidator = new SOL004MetaDirectoryValidator(securityManagerMock);
1179 Map<String, List<ErrorMessage>> actualErrorMap = sol004MetaDirectoryValidator.validateContent(handler);
1181 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), Collections.emptyList());
1184 sol004MetaDirectoryValidator = new SOL004MetaDirectoryValidator(securityManagerMock);
1185 when(securityManagerMock.verifySignedData(any(), any(), any())).thenReturn(false);
1188 actualErrorMap = sol004MetaDirectoryValidator.validateContent(handler);
1191 List<ErrorMessage> expectedErrorList = new ArrayList<>();
1192 expectedErrorList.add(new ErrorMessage(ErrorLevel.ERROR
1193 , Messages.ARTIFACT_INVALID_SIGNATURE.formatMessage(fakeArtifactCmsPath, fakeArtifactPath))
1195 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), expectedErrorList);
1198 sol004MetaDirectoryValidator = new SOL004MetaDirectoryValidator(securityManagerMock);
1199 when(securityManagerMock.verifySignedData(any(), any(), any()))
1200 .thenThrow(new SecurityManagerException("SecurityManagerException"));
1202 actualErrorMap = sol004MetaDirectoryValidator.validateContent(handler);
1205 expectedErrorList = new ArrayList<>();
1206 expectedErrorList.add(
1207 new ErrorMessage(ErrorLevel.ERROR,
1208 Messages.ARTIFACT_SIGNATURE_VALIDATION_ERROR.formatMessage(fakeArtifactCmsPath,
1209 fakeArtifactPath, fakeCertificatePath, "SecurityManagerException")
1212 assertExpectedErrors(actualErrorMap.get(SdcCommon.UPLOAD_FILE), expectedErrorList);
1216 private void assertExpectedErrors(final String testCase, final Map<String, List<ErrorMessage>> errors, final int expectedErrors) {
1217 final List<ErrorMessage> errorMessages = errors.get(SdcCommon.UPLOAD_FILE);
1218 printErrorMessages(errorMessages);
1219 if (expectedErrors > 0) {
1220 assertEquals(testCase, expectedErrors, errorMessages.size());
1222 assertEquals(testCase, expectedErrors, errors.size());
1226 private void printErrorMessages(final List<ErrorMessage> errorMessages) {
1227 if (CollectionUtils.isNotEmpty(errorMessages)) {
1228 errorMessages.forEach(errorMessage ->
1229 System.out.println(String.format("%s: %s", errorMessage.getLevel(), errorMessage.getMessage()))
1234 private ManifestBuilder getPnfManifestSampleBuilder() {
1235 return new ManifestBuilder()
1236 .withMetaData(PNFD_NAME.getToken(), "myPnf")
1237 .withMetaData(ManifestTokenType.PNFD_PROVIDER.getToken(), "ACME")
1238 .withMetaData(PNFD_ARCHIVE_VERSION.getToken(), "1.0")
1239 .withMetaData(PNFD_RELEASE_DATE_TIME.getToken(), "2019-03-11T11:25:00+00:00");
1242 private ManifestBuilder getVnfManifestSampleBuilder() {
1243 return new ManifestBuilder()
1244 .withMetaData(VNF_PRODUCT_NAME.getToken(), "RadioNode")
1245 .withMetaData(VNF_PROVIDER_ID.getToken(), "ACME")
1246 .withMetaData(VNF_PACKAGE_VERSION.getToken(), "1.0")
1247 .withMetaData(VNF_RELEASE_DATE_TIME.getToken(), "2019-03-11T11:25:00+00:00");
1250 private void assertExpectedErrors(List<ErrorMessage> actualErrorList, final List<ErrorMessage> expectedErrorList) {
1251 if (actualErrorList == null) {
1252 actualErrorList = new ArrayList<>();
1255 printErrorMessages(actualErrorList);
1257 assertThat("The actual error list should have the same size as the expected error list"
1258 , actualErrorList, hasSize(expectedErrorList.size())
1261 assertThat("The actual error and expected error lists should be the same"
1262 , actualErrorList, containsInAnyOrder(expectedErrorList.toArray(new ErrorMessage[0]))