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