93c8b232680e57cae0dfaeccbea8f7295bebdeae
[sdc.git] /
1 package org.openecomp.sdc.vendorsoftwareproduct.impl.orchestration.csar.validation;
2
3 import org.junit.Before;
4 import org.junit.Test;
5 import org.openecomp.core.utilities.file.FileContentHandler;
6 import org.openecomp.sdc.common.utils.SdcCommon;
7 import org.openecomp.sdc.datatypes.error.ErrorLevel;
8 import org.openecomp.sdc.datatypes.error.ErrorMessage;
9 import java.io.IOException;
10 import java.nio.charset.StandardCharsets;
11 import java.util.ArrayList;
12 import java.util.Collections;
13 import java.util.List;
14 import java.util.Map;
15
16 import static org.junit.Assert.assertTrue;
17 import static org.openecomp.sdc.tosca.csar.CSARConstants.SEPERATOR_MF_ATTRIBUTE;
18 import static org.openecomp.sdc.tosca.csar.CSARConstants.TOSCA_META_ENTRY_DEFINITIONS;
19 import static org.openecomp.sdc.tosca.csar.CSARConstants.TOSCA_META_ETSI_ENTRY_CERTIFICATE;
20 import static org.openecomp.sdc.tosca.csar.CSARConstants.TOSCA_META_ETSI_ENTRY_CHANGE_LOG;
21 import static org.openecomp.sdc.tosca.csar.CSARConstants.TOSCA_META_ETSI_ENTRY_LICENSES;
22 import static org.openecomp.sdc.tosca.csar.CSARConstants.TOSCA_META_ETSI_ENTRY_MANIFEST;
23 import static org.openecomp.sdc.tosca.csar.CSARConstants.TOSCA_META_ETSI_ENTRY_TESTS;
24 import static org.openecomp.sdc.tosca.csar.CSARConstants.TOSCA_META_PATH_FILE_NAME;
25 import static org.openecomp.sdc.vendorsoftwareproduct.impl.orchestration.csar.validation.TestConstants.*;
26
27 public class SOL004MetaDirectoryValidatorTest {
28
29     private SOL004MetaDirectoryValidator sol004MetaDirectoryValidator;
30     private FileContentHandler handler;
31     private String metaFile;
32
33     @Before
34     public void setUp(){
35         sol004MetaDirectoryValidator = new SOL004MetaDirectoryValidator();
36         handler = new FileContentHandler();
37         metaFile =
38                 "TOSCA-Meta-File-Version: 1.0\n"+
39                 "CSAR-Version: 1.1\n"+
40                 "Created-by: Vendor\n"+
41                 TOSCA_META_ENTRY_DEFINITIONS + SEPERATOR_MF_ATTRIBUTE + "Definitions/MainServiceTemplate.yaml\n"+
42                 TOSCA_META_ETSI_ENTRY_MANIFEST + SEPERATOR_MF_ATTRIBUTE + "Definitions/MainServiceTemplate.mf\n"+
43                 TOSCA_META_ETSI_ENTRY_CHANGE_LOG + SEPERATOR_MF_ATTRIBUTE + "Artifacts/changeLog.text\n";
44     }
45
46     @Test
47     public void testGivenTOSCAMetaFile_whenEntryHasNoValue_thenErrorIsReturned() throws IOException{
48
49         String  metaFileWithInvalidEntry = "TOSCA-Meta-File-Version: \n" +
50                 "Entry-Definitions: Definitions/MainServiceTemplate.yaml";
51
52         handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFileWithInvalidEntry.getBytes(StandardCharsets.UTF_8));
53         handler.addFile(TOSCA_DEFINITION_FILEPATH, ValidatorUtil.getFileResource(TestConstants.SAMPLE_DEFINITION_FILE_PATH));
54
55         Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler, Collections.emptyList());
56         List<ErrorMessage> errorMessages = errors.get(SdcCommon.UPLOAD_FILE);
57         assertTrue(errors.size() == 1 && errorMessages.size() == 1);
58     }
59
60     @Test
61     public void testGivenTOSCAMeta_withAllSupportedEntries_thenNoErrorsReturned() throws IOException{
62
63         String entryTestFilePath = "Files/Tests";
64         String entryLicenseFilePath = "Files/Licenses";
65
66         List<String> folderList = new ArrayList<>();
67         folderList.add("Files/Tests/");
68         folderList.add("Files/Licenses/");
69
70         metaFile = metaFile +
71                 TOSCA_META_ETSI_ENTRY_TESTS + SEPERATOR_MF_ATTRIBUTE + entryTestFilePath + "\n" +
72                 TOSCA_META_ETSI_ENTRY_LICENSES + SEPERATOR_MF_ATTRIBUTE + entryLicenseFilePath +"\n";
73
74         handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
75         handler.addFile(TOSCA_DEFINITION_FILEPATH, ValidatorUtil.getFileResource(SAMPLE_DEFINITION_FILE_PATH));
76         handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
77         handler.addFile(TOSCA_MANIFEST_FILEPATH, ValidatorUtil.getFileResource(SAMPLE_MANIFEST_FILE_PATH));
78         handler.addFile(SAMPLE_SOURCE, "".getBytes());
79         handler.addFile(SAMPLE_DEFINITION_IMPORT_FILE_PATH, "".getBytes());
80         handler.addFile(entryTestFilePath, "".getBytes());
81         handler.addFile(entryLicenseFilePath, "".getBytes());
82
83         Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler, folderList);
84         assertTrue(errors.size() == 0);
85     }
86
87     @Test
88     public void testGivenTOSCAMeta_withUnsupportedEntry_thenWarningIsReturned(){
89
90         metaFile = "Entry-Events: Definitions/events.log";
91
92         handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
93         Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler, Collections.emptyList());
94         List<ErrorMessage> errorMessages = errors.get(SdcCommon.UPLOAD_FILE);
95         assertTrue(errors.size() == 1 && errorMessages.size() == 1);
96         assertTrue(errorMessages.get(0).getLevel() == ErrorLevel.ERROR);
97
98     }
99
100     @Test
101     public void testGivenTOSCAMetaFile_withInvalidTOSCAMetaFileVersionAndCSARVersion_thenErrorIsReturned() throws IOException{
102
103         String metaFile =
104                 "TOSCA-Meta-File-Version: " + Integer.MAX_VALUE +
105                 "\nCSAR-Version: " + Integer.MAX_VALUE  +
106                 "\nCreated-by: Bilal Iqbal\n" +
107                 TOSCA_META_ENTRY_DEFINITIONS+ SEPERATOR_MF_ATTRIBUTE + "Definitions/MainServiceTemplate.yaml\n" +
108                 TOSCA_META_ETSI_ENTRY_MANIFEST + SEPERATOR_MF_ATTRIBUTE + "Definitions/MainServiceTemplate.mf\n"+
109                 TOSCA_META_ETSI_ENTRY_CHANGE_LOG + SEPERATOR_MF_ATTRIBUTE + "Artifacts/changeLog.text";
110
111         handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
112         handler.addFile(TOSCA_DEFINITION_FILEPATH, ValidatorUtil.getFileResource(TestConstants.SAMPLE_DEFINITION_FILE_PATH));
113         handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
114         handler.addFile(TOSCA_MANIFEST_FILEPATH, ValidatorUtil.getFileResource(SAMPLE_MANIFEST_FILE_PATH));
115
116         Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler, Collections.emptyList());
117         List<ErrorMessage> errorMessages = errors.get(SdcCommon.UPLOAD_FILE);
118         assertTrue(errors.size() == 1 && errorMessages.size() == 2);
119     }
120
121     @Test
122     public void testGivenTOSCAMetaFile_withNonExistentFileReferenced_thenErrorsReturned(){
123
124         handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
125
126         Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler, Collections.emptyList());
127         List<ErrorMessage> errorMessages = errors.get(SdcCommon.UPLOAD_FILE);
128         assertTrue(errors.size() == 1 && errorMessages.size() == 3);
129     }
130
131
132     @Test
133     public void testGivenDefinitionFile_whenValidImportStatementExist_thenNoErrorsReturned() throws IOException{
134
135         String definitionFileWithValidImports = "/validation.files/definition/definitionFileWithValidImports.yaml";
136
137
138         handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
139         handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
140         handler.addFile(TOSCA_MANIFEST_FILEPATH, ValidatorUtil.getFileResource(SAMPLE_MANIFEST_FILE_PATH));
141         handler.addFile(SAMPLE_SOURCE, "".getBytes());
142         handler.addFile("Definitions/etsi_nfv_sol001_pnfd_2_5_1_types.yaml", ValidatorUtil.getFileResource(SAMPLE_DEFINITION_FILE_PATH));
143         handler.addFile(TOSCA_DEFINITION_FILEPATH, ValidatorUtil.getFileResource(definitionFileWithValidImports));
144
145         Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler, Collections.emptyList());
146         assertTrue(errors.size() == 0);
147     }
148
149     @Test
150     public void testGivenDefinitionFile_whenMultipleDefinitionsImportStatementExist_thenNoErrorsReturned() throws IOException{
151
152         byte [] sampleDefinitionFile1 = ValidatorUtil.getFileResource("/validation.files/definition/sampleDefinitionFile1.yaml");
153         byte [] sampleDefinitionFile2 = ValidatorUtil.getFileResource("/validation.files/definition/sampleDefinitionFile2.yaml");
154         byte [] sampleDefinitionFile3 = ValidatorUtil.getFileResource("/validation.files/definition/sampleDefinitionFile3.yaml");
155
156         handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
157         handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
158         handler.addFile(TOSCA_MANIFEST_FILEPATH, ValidatorUtil.getFileResource(SAMPLE_MANIFEST_FILE_PATH));
159         handler.addFile(SAMPLE_SOURCE, "".getBytes());
160         handler.addFile(TOSCA_DEFINITION_FILEPATH, sampleDefinitionFile1);
161         handler.addFile("Definitions/etsi_nfv_sol001_pnfd_2_5_1_types.yaml", sampleDefinitionFile2);
162         handler.addFile("Definitions/etsi_nfv_sol001_pnfd_2_5_2_types.yaml", sampleDefinitionFile3);
163
164         Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler, Collections.emptyList());
165         assertTrue(errors.size() == 0);
166     }
167
168     @Test
169     public void testGivenDefinitionFile_whenInvalidImportStatementExist_thenErrorIsReturned() throws IOException{
170
171         String definitionFileWithInvalidImports = "/validation.files/definition/definitionFileWithInvalidImport.yaml";
172
173         handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
174         handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
175         handler.addFile(TOSCA_MANIFEST_FILEPATH, ValidatorUtil.getFileResource(SAMPLE_MANIFEST_FILE_PATH));
176         handler.addFile(SAMPLE_SOURCE, "".getBytes());
177         handler.addFile(TOSCA_DEFINITION_FILEPATH, ValidatorUtil.getFileResource(definitionFileWithInvalidImports));
178
179         Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler, Collections.emptyList());
180         List<ErrorMessage> errorMessages = errors.get(SdcCommon.UPLOAD_FILE);
181         assertTrue(errors.size() == 1 && errorMessages.size() == 1);
182     }
183
184     @Test
185     public void testGivenDefinitionFile_whenReferencedImportDoesNotExist_thenErrorIsReturned() throws IOException{
186
187         handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
188         handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
189         handler.addFile(TOSCA_MANIFEST_FILEPATH, ValidatorUtil.getFileResource(SAMPLE_MANIFEST_FILE_PATH));
190         handler.addFile(SAMPLE_SOURCE, "".getBytes());
191         handler.addFile("Definitions/etsi_nfv_sol001_pnfd_2_5_1_types.yaml", "".getBytes());
192         handler.addFile(TOSCA_DEFINITION_FILEPATH, ValidatorUtil.getFileResource("/validation.files/definition/sampleDefinitionFile2.yaml"));
193
194         Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler, Collections.emptyList());
195         List<ErrorMessage> errorMessages = errors.get(SdcCommon.UPLOAD_FILE);
196         assertTrue(errors.size() == 1 && errorMessages.size() == 1);
197
198     }
199
200     @Test
201     public void testGivenDefinitionFile_withInvalidYAML_thenErrorIsReturned() throws IOException{
202
203         String definitionFileWithInvalidYAML = "/validation.files/definition/invalidDefinitionFile.yaml";
204
205         handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
206         handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes(StandardCharsets.UTF_8));
207         handler.addFile(TOSCA_MANIFEST_FILEPATH, ValidatorUtil.getFileResource(SAMPLE_MANIFEST_FILE_PATH));
208         handler.addFile(SAMPLE_SOURCE, "".getBytes());
209
210         handler.addFile(TOSCA_DEFINITION_FILEPATH, ValidatorUtil.getFileResource(definitionFileWithInvalidYAML));
211
212         Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler, Collections.emptyList());
213         List<ErrorMessage> errorMessages = errors.get(SdcCommon.UPLOAD_FILE);
214         assertTrue(errors.size() == 1 && errorMessages.size() == 1);
215     }
216
217     @Test
218     public void testGivenManifestFile_withValidSourceAndNonManoSources_thenNoErrorIsReturned() throws IOException{
219
220         String nonManoSource = "Artifacts/Deployment/Measurements/PM_Dictionary.yaml";
221
222         handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
223         handler.addFile(TOSCA_MANIFEST_FILEPATH, ValidatorUtil.getFileResource("/validation.files/manifest/validManifest.mf"));
224         handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
225         handler.addFile(TOSCA_DEFINITION_FILEPATH, ValidatorUtil.getFileResource(SAMPLE_DEFINITION_FILE_PATH));
226         handler.addFile(SAMPLE_SOURCE, "".getBytes());
227         handler.addFile(SAMPLE_DEFINITION_IMPORT_FILE_PATH, ValidatorUtil.getFileResource(SAMPLE_DEFINITION_FILE_PATH));
228         handler.addFile(nonManoSource, "".getBytes());
229
230         Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler, Collections.emptyList());
231         assertTrue(errors.size() == 0);
232     }
233
234     @Test
235     public void testGivenManifestFile_withNonExistentSourceFile_thenErrorIsReturned() throws IOException{
236         String nonManoSource = "Artifacts/Deployment/Measurements/PM_Dictionary.yaml";
237
238         handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
239         handler.addFile(TOSCA_MANIFEST_FILEPATH, ValidatorUtil.getFileResource("/validation.files/manifest/validManifest.mf"));
240         handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
241         handler.addFile(TOSCA_DEFINITION_FILEPATH, ValidatorUtil.getFileResource(SAMPLE_DEFINITION_FILE_PATH));
242         handler.addFile(SAMPLE_DEFINITION_IMPORT_FILE_PATH, "".getBytes());
243         handler.addFile(nonManoSource, "".getBytes());
244
245         Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler, Collections.emptyList());
246         List<ErrorMessage> errorMessages = errors.get(SdcCommon.UPLOAD_FILE);
247         assertTrue(errors.size() == 1 && errorMessages.size() == 1);
248     }
249
250     @Test
251     public void testGivenManifestFile_withInvalidData_thenErrorIsReturned() throws IOException{
252
253         handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
254         handler.addFile(TOSCA_MANIFEST_FILEPATH, ValidatorUtil.getFileResource("/validation.files/manifest/invalidManifest.mf"));
255         handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
256         handler.addFile(TOSCA_DEFINITION_FILEPATH, ValidatorUtil.getFileResource(SAMPLE_DEFINITION_FILE_PATH));
257         handler.addFile(SAMPLE_DEFINITION_IMPORT_FILE_PATH, "".getBytes());
258
259         Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler, Collections.emptyList());
260         List<ErrorMessage> errorMessages = errors.get(SdcCommon.UPLOAD_FILE);
261         assertTrue(errors.size() == 1 && errorMessages.size() == 1);
262     }
263
264     @Test
265     public void testGivenManifestAndDefinitionFile_withSameNames_thenNoErrorReturned() throws IOException {
266
267         handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
268         handler.addFile(TOSCA_MANIFEST_FILEPATH, ValidatorUtil.getFileResource("/validation.files/manifest/sampleManifest.mf"));
269         handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
270         handler.addFile(TOSCA_DEFINITION_FILEPATH, ValidatorUtil.getFileResource(SAMPLE_DEFINITION_FILE_PATH));
271         handler.addFile(SAMPLE_DEFINITION_IMPORT_FILE_PATH, "".getBytes());
272
273         Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler, Collections.emptyList());
274         assertTrue(errors.size() == 0);
275     }
276
277     @Test
278     public void testGivenManifestAndMainDefinitionFile_withDifferentNames_thenErrorIsReturned() throws IOException {
279         metaFile =
280                 "TOSCA-Meta-File-Version: 1.0\n"+
281                 "CSAR-Version: 1.1\n"+
282                 "Created-by: Vendor\n"+
283                 TOSCA_META_ENTRY_DEFINITIONS + SEPERATOR_MF_ATTRIBUTE + "Definitions/MainServiceTemplate.yaml\n"+
284                 TOSCA_META_ETSI_ENTRY_MANIFEST + SEPERATOR_MF_ATTRIBUTE +"Definitions/MainServiceTemplate2.mf\n"+
285                 TOSCA_META_ETSI_ENTRY_CHANGE_LOG + SEPERATOR_MF_ATTRIBUTE +"Artifacts/changeLog.text\n";
286
287         handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
288         handler.addFile("Definitions/MainServiceTemplate2.mf", ValidatorUtil.getFileResource("/validation.files/manifest/sampleManifest.mf"));
289         handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
290         handler.addFile(TOSCA_DEFINITION_FILEPATH, ValidatorUtil.getFileResource(SAMPLE_DEFINITION_FILE_PATH));
291         handler.addFile(SAMPLE_DEFINITION_IMPORT_FILE_PATH, "".getBytes());
292
293         Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler, Collections.emptyList());
294         assertExpectedErrors("Main TOSCA definitions file and Manifest file with different name should return error",
295                errors, 1);
296     }
297
298     @Test
299     public void testGivenManifestFile_withDifferentExtension_thenErrorIsReturned() throws IOException {
300         metaFile =
301                 "TOSCA-Meta-File-Version: 1.0\n"+
302                 "CSAR-Version: 1.1\n"+
303                 "Created-by: Vendor\n"+
304                 "Entry-Definitions: Definitions/MainServiceTemplate.yaml\n"+
305                 TOSCA_META_ETSI_ENTRY_MANIFEST + SEPERATOR_MF_ATTRIBUTE +  "Definitions/MainServiceTemplate.txt\n"+
306                 TOSCA_META_ETSI_ENTRY_CHANGE_LOG + SEPERATOR_MF_ATTRIBUTE + "Artifacts/changeLog.text\n";
307
308         handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
309         handler.addFile("Definitions/MainServiceTemplate.txt", ValidatorUtil.getFileResource("/validation.files/manifest/sampleManifest.mf"));
310         handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
311         handler.addFile(TOSCA_DEFINITION_FILEPATH, ValidatorUtil.getFileResource(SAMPLE_DEFINITION_FILE_PATH));
312         handler.addFile(SAMPLE_DEFINITION_IMPORT_FILE_PATH, "".getBytes());
313
314         Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler, Collections.emptyList());
315         assertExpectedErrors("Manifest file with different extension than .mf should return error",
316                 errors, 1);
317     }
318
319     @Test
320     public void testGivenManifestFile_withValidVnfMetadata_thenNoErrorsReturned() throws IOException{
321         handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
322         handler.addFile(TOSCA_MANIFEST_FILEPATH, ValidatorUtil.getFileResource("/validation.files/manifest/sampleManifest.mf"));
323         handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
324         handler.addFile(TOSCA_DEFINITION_FILEPATH, ValidatorUtil.getFileResource(SAMPLE_DEFINITION_FILE_PATH));
325
326         Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler, Collections.emptyList());
327         assertExpectedErrors("Manifest with valid vnf mandatory values should not return any errors", errors, 0);
328     }
329
330     @Test
331     public void testGivenManifestFile_withValidPnfMetadata_thenNoErrorsReturned() throws IOException {
332         handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
333         handler.addFile(TOSCA_MANIFEST_FILEPATH, ValidatorUtil.getFileResource("/validation.files/manifest/sampleManifest2.mf"));
334         handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
335         handler.addFile(TOSCA_DEFINITION_FILEPATH, ValidatorUtil.getFileResource(SAMPLE_DEFINITION_FILE_PATH));
336
337         Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler, Collections.emptyList());
338         assertExpectedErrors("Manifest with valid pnf mandatory values should not return any errors", errors, 0);
339     }
340
341     @Test
342     public void testGivenManifestFile_withMetadataContainingMixedPnfVnfMetadata_thenErrorIsReturned() throws IOException {
343
344         handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
345         handler.addFile(TOSCA_MANIFEST_FILEPATH, ValidatorUtil.getFileResource("/validation.files/manifest/manifestInvalidMetadata.mf"));
346         handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
347         handler.addFile(TOSCA_DEFINITION_FILEPATH, ValidatorUtil.getFileResource(SAMPLE_DEFINITION_FILE_PATH));
348
349         Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler, Collections.emptyList());
350         assertExpectedErrors("Manifest with mixed metadata should return error", errors, 1);
351     }
352
353
354     @Test
355     public void testGivenManifestFile_withMetadataMissingPnfOrVnfMandatoryEntries_thenErrorIsReturned() throws IOException{
356
357         handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
358         handler.addFile(TOSCA_MANIFEST_FILEPATH, ValidatorUtil.getFileResource("/validation.files/manifest/manifestInvalidMetadata2.mf"));
359         handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
360         handler.addFile(TOSCA_DEFINITION_FILEPATH, ValidatorUtil.getFileResource(SAMPLE_DEFINITION_FILE_PATH));
361
362         Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler, Collections.emptyList());
363         assertExpectedErrors("Manifest with missing vnf or pnf mandatory entries should return error", errors, 1);
364     }
365
366     @Test
367     public void testGivenManifestFile_withMetadataMissingMandatoryPnfEntries_thenErrorIsReturned() throws IOException{
368         handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
369         handler.addFile(TOSCA_MANIFEST_FILEPATH, ValidatorUtil.getFileResource("/validation.files/manifest/manifestInvalidMetadata4.mf"));
370         handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
371         handler.addFile(TOSCA_DEFINITION_FILEPATH, ValidatorUtil.getFileResource(SAMPLE_DEFINITION_FILE_PATH));
372
373         Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler, Collections.emptyList());
374         assertExpectedErrors("Manifest with metadata missing pnf mandatory entries should return error", errors, 3);
375
376     }
377
378     @Test
379     public void testGivenManifestFile_withMetadataMissingMandatoryVnfEntries_thenErrorIsReturned() throws IOException{
380         handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
381         handler.addFile(TOSCA_MANIFEST_FILEPATH, ValidatorUtil.getFileResource("/validation.files/manifest/manifestInvalidMetadata5.mf"));
382         handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
383         handler.addFile(TOSCA_DEFINITION_FILEPATH, ValidatorUtil.getFileResource(SAMPLE_DEFINITION_FILE_PATH));
384
385         Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler, Collections.emptyList());
386         assertExpectedErrors("Manifest with metadata missing vnf mandatory entries should return error", errors, 4);
387
388     }
389
390     @Test
391     public void testGivenManifestFile_withMetadataEntriesExceedingTheLimit_thenErrorIsReturned() throws IOException{
392         handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
393         handler.addFile(TOSCA_MANIFEST_FILEPATH, ValidatorUtil.getFileResource("/validation.files/manifest/manifestInvalidMetadata3.mf"));
394         handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
395         handler.addFile(TOSCA_DEFINITION_FILEPATH, ValidatorUtil.getFileResource(SAMPLE_DEFINITION_FILE_PATH));
396
397         Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler, Collections.emptyList());
398         assertExpectedErrors("Manifest with more than 4 metadata entries should return error", errors, 2);
399     }
400
401     @Test
402     public void testGivenManifestFile_withPnfMetadataAndVfEntries_thenErrorIsReturned() throws IOException {
403
404         List<String> folderList = new ArrayList<>();
405         folderList.add("Files/Certificates/");
406
407         metaFile = metaFile +
408                 TOSCA_META_ETSI_ENTRY_TESTS + SEPERATOR_MF_ATTRIBUTE + "Files/Tests\n" +
409                 TOSCA_META_ETSI_ENTRY_LICENSES + SEPERATOR_MF_ATTRIBUTE + "Files/Licenses\n" +
410                 TOSCA_META_ETSI_ENTRY_CERTIFICATE + SEPERATOR_MF_ATTRIBUTE + "Files/Certificates";
411
412         handler.addFile(TOSCA_META_PATH_FILE_NAME, metaFile.getBytes(StandardCharsets.UTF_8));
413         handler.addFile(TOSCA_MANIFEST_FILEPATH, ValidatorUtil.getFileResource("/validation.files/manifest/sampleManifest2.mf"));
414         handler.addFile(TOSCA_CHANGELOG_FILEPATH, "".getBytes());
415         handler.addFile(TOSCA_DEFINITION_FILEPATH, ValidatorUtil.getFileResource(SAMPLE_DEFINITION_FILE_PATH));
416
417         Map<String, List<ErrorMessage>> errors = sol004MetaDirectoryValidator.validateContent(handler, folderList);
418         assertExpectedErrors("Tosca.meta should not have entries applicable only to VF", errors, 2);
419
420     }
421
422     private void assertExpectedErrors( String testCase, Map<String, List<ErrorMessage>> errors, int expectedErrors){
423         if(expectedErrors > 0){
424             List<ErrorMessage> errorMessages = errors.get(SdcCommon.UPLOAD_FILE);
425             assertTrue(testCase, errorMessages.size() == expectedErrors);
426         }else{
427             assertTrue(testCase,errors.size() == expectedErrors);
428         }
429     }
430 }