Rename ConfigCheck and separate it to the methods

Rename ConfigCheck to ConfigFilesCheck to distinguish all associated
files (test, .toml) from those associated with config.py.

Remove score-file-must-not-be-conffile check that doesn't make much
sense these days.

Code cleanup, add comments, enhance .toml descriptions and separate the
code to the multiple methods.

Also add a test for ConfigFilesCheck (binary/config-files-1.0-0.x86_64.rpm)

(#225 #156)
This commit is contained in:
Kristýna Streitová 2019-09-13 15:08:30 +02:00 committed by Tomáš Chvátal
parent ee780db4b3
commit 5fa2f85001
7 changed files with 70 additions and 31 deletions

View File

@ -1,23 +0,0 @@
#############################################################################
# File : ConfigCheck.py
# Package : rpmlint
# Author : Frederic Lepied
# Created on : Sun Oct 3 21:48:20 1999
# Purpose :
#############################################################################
from rpmlint.checks.AbstractCheck import AbstractCheck
class ConfigCheck(AbstractCheck):
def check_binary(self, pkg):
config_files = pkg.configFiles()
noreplace_files = pkg.noreplaceFiles()
for c in config_files:
if c.startswith('/var/lib/games/'):
self.output.add_info('E', pkg, 'score-file-must-not-be-conffile', c)
elif not c.startswith('/etc/') and not c.startswith('/var/'):
self.output.add_info('W', pkg, 'non-etc-or-var-file-marked-as-conffile', c)
if c not in noreplace_files:
self.output.add_info('W', pkg, 'conffile-without-noreplace-flag', c)

View File

@ -0,0 +1,32 @@
from rpmlint.checks.AbstractCheck import AbstractCheck
class ConfigFilesCheck(AbstractCheck):
"""
Check that configuration files are in a proper location and marked as
'noreplace'.
"""
def check_binary(self, pkg):
for filename in pkg.configFiles():
self._check_non_confdir_files(pkg, filename)
self._check_noreplace_files(pkg, filename)
def _check_non_confdir_files(self, pkg, fn):
"""
Check if the configuration file is in /etc or /var directory.
Print a warning if it's not.
"""
if not fn.startswith('/etc/') and not fn.startswith('/var/'):
self.output.add_info('W', pkg,
'non-etc-or-var-file-marked-as-conffile', fn)
def _check_noreplace_files(self, pkg, fn):
"""
Check if the configuration file has 'noreplace' flag.
Print a warning if there is no 'noreplace' tag.
"""
if fn not in pkg.noreplaceFiles():
self.output.add_info('W', pkg,
'conffile-without-noreplace-flag', fn)

View File

@ -4,7 +4,7 @@ Checks = [
"BinariesCheck",
"BuildDateCheck",
'BuildRootCheck',
"ConfigCheck",
"ConfigFilesCheck",
"DBusPolicyCheck",
"DistributionCheck",
"DocFilesCheck",

View File

@ -1,14 +1,11 @@
score-file-must-not-be-conffile="""
A file in /var/lib/games/ is a configuration file. Store your conf
files in /etc instead.
"""
non-etc-or-var-file-marked-as-conffile="""
A file not in /etc or /var is marked as being a configuration file.
A file not in /etc or /var is marked as being a configuration file (%config).
Please put your configuration files in /etc or /var.
"""
conffile-without-noreplace-flag="""
A configuration file is stored in your package without the noreplace flag.
This flag tells RPM not to overwrite or replace a configuration file to protect
local modifications.
A way to resolve this is to put the following in your SPEC file:
%config(noreplace) /etc/your_config_file_here
"""

Binary file not shown.

33
test/test_config_files.py Normal file
View File

@ -0,0 +1,33 @@
import pytest
from rpmlint.checks.ConfigFilesCheck import ConfigFilesCheck
from rpmlint.filter import Filter
from Testing import CONFIG, get_tested_package
@pytest.fixture(scope='function', autouse=True)
def configfilescheck():
CONFIG.info = True
output = Filter(CONFIG)
test = ConfigFilesCheck(CONFIG, output)
return output, test
@pytest.mark.parametrize('package', ['binary/config-files'])
def test_config_files(tmpdir, package, configfilescheck):
output, test = configfilescheck
test.check(get_tested_package(package, tmpdir))
out = output.print_results(output.results)
assert 'non-etc-or-var-file-marked-as-conffile /usr/share/conffile3' in out
assert 'conffile-without-noreplace-flag /etc/conffile1' in out
assert 'conffile-without-noreplace-flag /var/conffile2' in out
assert 'conffile-without-noreplace-flag /usr/share/conffile3' in out
@pytest.mark.parametrize('package', ['binary/logrotate'])
def test_config_files_correct(tmpdir, package, configfilescheck):
output, test = configfilescheck
test.check(get_tested_package(package, tmpdir))
out = output.print_results(output.results)
assert 'non-etc-or-var-file-marked-as-conffile' not in out
assert 'conffile-without-noreplace-flag' not in out

View File

@ -21,7 +21,7 @@ basic_tests = [
'BinariesCheck',
'BuildDateCheck',
'BuildRootCheck',
'ConfigCheck',
'ConfigFilesCheck',
'DBusPolicyCheck',
'DistributionCheck',
'DocFilesCheck',