Browse Source

tests/functional: Add a generic test that checks the files with pylint

To avoid that new pylint-related warnings get committed, let's check
the files with pylint during each run (similar to what we are doing
for the iotests already).

Message-Id: <20251119082636.43286-16-thuth@redhat.com>
Signed-off-by: Thomas Huth <thuth@redhat.com>
pull/316/head
Thomas Huth 5 months ago
parent
commit
58cb0a35fb
  1. 1
      MAINTAINERS
  2. 1
      tests/functional/generic/meson.build
  3. 41
      tests/functional/generic/test_linters.py

1
MAINTAINERS

@ -4461,6 +4461,7 @@ F: docs/devel/testing/functional.rst
F: scripts/clean_functional_cache.py
F: tests/functional/meson.build
F: tests/functional/generic/meson.build
F: tests/functional/generic/test_linters.py
F: tests/functional/pylintrc
F: tests/functional/qemu_test/

1
tests/functional/generic/meson.build

@ -3,6 +3,7 @@
tests_generic_system = [
'empty_cpu_model',
'info_usernet',
'linters',
'version',
'vnc',
]

41
tests/functional/generic/test_linters.py

@ -0,0 +1,41 @@
#!/usr/bin/env python3
#
# SPDX-License-Identifier: GPL-2.0-or-later
#
'''Python linter tests'''
import os
from pathlib import Path
from qemu_test import QemuBaseTest, skipIfMissingImports
class LinterTest(QemuBaseTest):
'''
Run python linters on the test *.py files
'''
@skipIfMissingImports("pylint")
def test_pylint(self):
'''Check source files with pylint'''
from pylint.lint import Run as pylint_run
from pylint.reporters.collecting_reporter import CollectingReporter
srcdir = os.path.join(Path(__file__).parent.parent, self.arch)
rcfile = os.path.join(Path(__file__).parent.parent, "pylintrc")
self.log.info('Checking files in %s with pylint', srcdir)
reporter = CollectingReporter()
pylint_run(["--rcfile", rcfile, srcdir], reporter=reporter, exit=False)
if reporter.messages:
fmt = '"{path}:{line}: {msg_id}: {msg} ({symbol})"'
for msg in reporter.messages:
if msg.category == "error":
self.log.error(msg.format(fmt))
elif msg.category == "warning":
self.log.warning(msg.format(fmt))
else:
self.log.info(msg.format(fmt))
self.fail("Pylint failed, see base.log for details.")
if __name__ == '__main__':
QemuBaseTest.main()
Loading…
Cancel
Save