loader: Validate section keys

This stops silly typos making their way into release notes.

Change-Id: I43d98cc75332677c604e53a5b7a21239505ab4a4
Signed-off-by: Stephen Finucane <stephenfin@redhat.com>
Story: 1670421
Task: 6737
This commit is contained in:
Stephen Finucane 2021-07-09 12:01:32 +01:00
parent c4b517292e
commit 8a80087d92
3 changed files with 24 additions and 1 deletions

View File

@ -2,4 +2,4 @@
features:
- |
Release note file validation is improved. Files missing section information
will now be correctly handled and rejected.
will now be correctly handled and rejected, as will invalid sections.

View File

@ -139,6 +139,15 @@ class Loader(object):
section_name, filename,
)
else:
if section_name not in dict(self._config.sections):
# TODO(stephenfin): Make this an error in a future release
LOG.warning(
'The %s section of %s is not a recognized section. '
'It should be one of: %s. '
'This will be an error in a future release.',
section_name, filename,
', '.join(dict(self._config.sections)),
)
if isinstance(section_content, str):
# A single string is OK, but wrap it with a list
# so the rest of the code can treat the data model

View File

@ -90,6 +90,20 @@ class TestValidate(base.TestCase):
ldr.parse_note_file('note1', None)
self.assertIn('instead of a string', self.logger.output)
def test_invalid_note_with_unrecognized_key(self):
"""Test behavior when note contains an unrecognized section."""
note_bodies = yaml.safe_load(textwrap.dedent('''
foobar:
- |
This is an issue but we're using an unrecognized section key.
'''))
self.assertIsInstance(note_bodies, dict)
ldr = self._make_loader(note_bodies)
ldr.parse_note_file('note1', None)
self.assertIn(
'The foobar section of note1 is not a recognized section.',
self.logger.output)
def test_invalid_note_with_missing_key(self):
"""Test behavior when note is not structured as a mapping.