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:
parent
ee780db4b3
commit
5fa2f85001
|
@ -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)
|
|
@ -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)
|
|
@ -4,7 +4,7 @@ Checks = [
|
|||
"BinariesCheck",
|
||||
"BuildDateCheck",
|
||||
'BuildRootCheck',
|
||||
"ConfigCheck",
|
||||
"ConfigFilesCheck",
|
||||
"DBusPolicyCheck",
|
||||
"DistributionCheck",
|
||||
"DocFilesCheck",
|
||||
|
|
|
@ -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.
|
@ -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
|
|
@ -21,7 +21,7 @@ basic_tests = [
|
|||
'BinariesCheck',
|
||||
'BuildDateCheck',
|
||||
'BuildRootCheck',
|
||||
'ConfigCheck',
|
||||
'ConfigFilesCheck',
|
||||
'DBusPolicyCheck',
|
||||
'DistributionCheck',
|
||||
'DocFilesCheck',
|
||||
|
|
Loading…
Reference in New Issue