Skip to content

Commit d43990c

Browse files
committed
modulemd-validator: Validate modulemd-v1 and modulemd-packager-v2 explicitly
Their parses do not validate. Some invalidites are cought by the parsers (e.g. a license field without a module subfield), some invalidities are cough by the posterior validators (e.g. a missing license field).
1 parent 50384c6 commit d43990c

File tree

4 files changed

+49
-31
lines changed

4 files changed

+49
-31
lines changed

modulemd/meson.build

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -473,7 +473,7 @@ modulemd_validator_tests = {
473473
[['--code', '0'],
474474
['--type', 'modulemd-v1', files('../yaml_specs/modulemd_stream_v1.yaml')]],
475475
'invalid_modulemdv1_as_modulemdv1':
476-
[['--code', '1', '--stderr', 'Unexpected key in licenses'],
476+
[['--code', '1', '--stderr', 'not in valid N-E:V-R.A format'],
477477
['--type', 'modulemd-v1', files('tests/test_data/bad_stream_v1.yaml')]],
478478
'valid_modulemdv2_as_modulemdv1':
479479
[['--code', '1'],
@@ -506,7 +506,7 @@ modulemd_validator_tests = {
506506
[['--code', '0'],
507507
['--type', 'modulemd-packager-v2', files('../yaml_specs/modulemd_packager_v2.yaml')]],
508508
'invalid_packagerv2_as_packagerv2':
509-
[['--code', '1', '--stderr', 'Unexpected key in licenses'],
509+
[['--code', '1', '--stderr', 'license is missing'],
510510
['--type', 'modulemd-packager-v2', files('tests/test_data/bad_packager_v2.yaml')]],
511511
'valid_modulemdv2_as_packagerv2':
512512
[['--code', '1'],

modulemd/modulemd-validator.c

Lines changed: 42 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,7 @@ ModulemdYamlDocumentTypeEnum2string (ModulemdYamlDocumentTypeEnum type)
213213
* subdocuments. We will use private modulemd_defaults_v1_parse_yaml() etc.
214214
* parsers. */
215215
static gboolean
216-
parse_file_as_subdoc (const gchar *filename,
216+
parse_file_as_subdoc_and_validate (const gchar *filename,
217217
enum mmd_type validation_type,
218218
ModulemdYamlDocumentTypeEnum expected_type,
219219
guint64 expected_version,
@@ -312,15 +312,30 @@ parse_file_as_subdoc (const gchar *filename,
312312
return FALSE;
313313
}
314314
if (type == MODULEMD_YAML_DOC_DEFAULTS)
315+
/* validates implicitly */
315316
object = G_OBJECT (modulemd_defaults_v1_parse_yaml (subdoc, TRUE, error));
316317
else if (type == MODULEMD_YAML_DOC_MODULESTREAM)
318+
{
317319
object = G_OBJECT (modulemd_module_stream_v1_parse_yaml (subdoc, TRUE, error));
320+
if (!object)
321+
return FALSE;
322+
if (!modulemd_module_stream_validate( MODULEMD_MODULE_STREAM (object), error))
323+
return FALSE;
324+
}
318325
else if (type == MODULEMD_YAML_DOC_OBSOLETES)
326+
/* validates implicitly */
319327
object = G_OBJECT (modulemd_obsoletes_parse_yaml (subdoc, TRUE, error));
320328
else if (type == MODULEMD_YAML_DOC_PACKAGER)
329+
{
321330
object = G_OBJECT (modulemd_module_stream_v2_parse_yaml (subdoc,
322331
TRUE, TRUE, error));
332+
if (!object)
333+
return FALSE;
334+
if (!modulemd_module_stream_validate( MODULEMD_MODULE_STREAM (object), error))
335+
return FALSE;
336+
}
323337
else if (type == MODULEMD_YAML_DOC_TRANSLATIONS)
338+
/* validates implicitly */
324339
object = G_OBJECT (modulemd_translation_parse_yaml (subdoc, TRUE, error));
325340
else {
326341
g_set_error(
@@ -374,23 +389,23 @@ parse_file (const gchar *filename, GPtrArray **failures, GError **error)
374389
index, filename, TRUE, TRUE, failures, error);
375390
}
376391
case MMD_TYPE_MODULEMD_DEFAULTS_V1:
377-
return parse_file_as_subdoc (filename,
378-
options.type,
379-
MODULEMD_YAML_DOC_DEFAULTS,
380-
1u,
381-
error);
392+
return parse_file_as_subdoc_and_validate (filename,
393+
options.type,
394+
MODULEMD_YAML_DOC_DEFAULTS,
395+
1u,
396+
error);
382397
case MMD_TYPE_MODULEMD_OBSOLETES_V1:
383-
return parse_file_as_subdoc (filename,
384-
options.type,
385-
MODULEMD_YAML_DOC_OBSOLETES,
386-
1u,
387-
error);
398+
return parse_file_as_subdoc_and_validate (filename,
399+
options.type,
400+
MODULEMD_YAML_DOC_OBSOLETES,
401+
1u,
402+
error);
388403
case MMD_TYPE_MODULEMD_V1:
389-
return parse_file_as_subdoc (filename,
390-
options.type,
391-
MODULEMD_YAML_DOC_MODULESTREAM,
392-
1u,
393-
error);
404+
return parse_file_as_subdoc_and_validate (filename,
405+
options.type,
406+
MODULEMD_YAML_DOC_MODULESTREAM,
407+
1u,
408+
error);
394409
case MMD_TYPE_MODULEMD_V2:
395410
{
396411
GType type;
@@ -413,11 +428,11 @@ parse_file (const gchar *filename, GPtrArray **failures, GError **error)
413428
error);
414429
}
415430
case MMD_TYPE_MODULEMD_PACKAGER_V2:
416-
return parse_file_as_subdoc (filename,
417-
options.type,
418-
MODULEMD_YAML_DOC_PACKAGER,
419-
2u,
420-
error);
431+
return parse_file_as_subdoc_and_validate (filename,
432+
options.type,
433+
MODULEMD_YAML_DOC_PACKAGER,
434+
2u,
435+
error);
421436
case MMD_TYPE_MODULEMD_PACKAGER_V3:
422437
{
423438
GType type;
@@ -441,11 +456,12 @@ parse_file (const gchar *filename, GPtrArray **failures, GError **error)
441456
return TRUE;
442457
}
443458
case MMD_TYPE_MODULEMD_TRANSLATIONS_V1:
444-
return parse_file_as_subdoc (filename,
445-
options.type,
446-
MODULEMD_YAML_DOC_TRANSLATIONS,
447-
1u,
448-
error);
459+
return parse_file_as_subdoc_and_validate (
460+
filename,
461+
options.type,
462+
MODULEMD_YAML_DOC_TRANSLATIONS,
463+
1u,
464+
error);
449465
}
450466
g_fprintf (
451467
stderr,

modulemd/tests/test_data/bad_packager_v2.yaml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,5 @@ data:
55
summary: Trivial Summary
66
description: >-
77
Trivial Description
8-
license:
9-
invalid: [MIT]
8+
#license: a missing license breaks validity
109
...

modulemd/tests/test_data/bad_stream_v1.yaml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,8 @@ data:
88
description: >-
99
Trivial Description
1010
license:
11-
invalid: [MIT]
11+
module: [MIT]
12+
artifacts:
13+
rpms:
14+
- "MissingEpoch-0-0.src"
1215
...

0 commit comments

Comments
 (0)