rpmlint/test/test_cli.py

95 lines
3.7 KiB
Python
Raw Permalink Normal View History

from pathlib import PosixPath
import pytest
from rpmlint.cli import process_lint_args
2020-10-21 21:17:38 +08:00
from rpmlint.config import Config
from rpmlint.lint import Lint
from Testing import HAS_CHECKBASHISMS, HAS_DASH
@pytest.mark.parametrize('test_arguments', [['-c', 'rpmlint/configs/thisdoesntexist.toml']])
def test_parsing_non_existing_config_file(test_arguments):
with pytest.raises(SystemExit) as exc:
process_lint_args(test_arguments)
assert exc.value.code == 2
@pytest.mark.parametrize('test_arguments', [['-c', 'rpmlint/configdefaults.toml']])
def test_parsing_config_file(test_arguments):
parsed = process_lint_args(test_arguments)
assert len(parsed['config']) == 1
assert parsed['config'][0] == PosixPath('rpmlint/configdefaults.toml')
Port openSUSE config file to toml Note: This is a port of "config" file from openSUSE:Factory/rpmlint package (ported version timestamp - 2020-10-20 2:54 am) Changes that were made: [Checks] Deleted - it's a default in the devel version of rpmlint - CheckBuildRoot -> BuildRootCheck - CheckPkgConfig -> PkgConfigCheck - DuplicatesCheck - CheckLogrotate -> LogrotateCheck - CheckIconSizes -> IconSizesCheck - CheckDBusPolicy -> DBusPolicyCheck - MixedFileOwnerships -> MixedOwnershipCheck - CheckUpdateAlternatives -> AlternativesCheck - CheckExecDocs -> DocCheck - CheckCommonFiles -> relevant checks ported to FilesCheck - CheckRCLinks -> relevant checks ported to SysVInitOnSystemdCheck Enabled - BashismsCheck - CheckPAMModules -> PAMModulesCheck.py - TmpFilesCheck - CheckSysVinitOnSystemd -> SysVInitOnSystemdCheck Commented out for now - it's not ported yet - LibraryPolicyCheck -> SharedLibraryPolicyCheck - CheckSUIDPermissions - CheckDBUSServices - CheckCronJobs - CheckPolkitPrivs - CheckWorldWritable - CheckDeviceFiles openSUSE only - BrandingPolicyCheck - CheckFilelist -> FilelistCheck.py - KMPPolicyCheck - CheckSystemdInstall -> SystemdInstallCheck.py [Options] Deleted - no longer exist - UseBzip2 = 0 - UseUTF8 = 1 Renamed - PAMModules.WhiteList -> PAMModulesWhiteList [Filters] Deleted - no longer present - '.*invalid-vendor.*' - '.*invalid-distribution.*' - 'non-devel-buildrequires*' - '.*FSSTND-dir-in-var /var/adm/.*', - ' non-remote_fs-dependency.*/boot', - ' file-in-usr-marked-as-conffile', - ' manpage-not-bzipped ', - ' apache2-naming-policy-not-applied', - ' no-%clean-section', - 'update-desktop-files\.\S+: \w: untranslated-desktop-file', Renamed - suse-filelist-forbidden-* -> filelist-forbidden-*
2020-10-20 09:17:10 +08:00
@pytest.mark.skipif(not HAS_CHECKBASHISMS, reason='Optional dependency checkbashisms not installed')
@pytest.mark.skipif(not HAS_DASH, reason='Optional dependency dash not installed')
Port openSUSE config file to toml Note: This is a port of "config" file from openSUSE:Factory/rpmlint package (ported version timestamp - 2020-10-20 2:54 am) Changes that were made: [Checks] Deleted - it's a default in the devel version of rpmlint - CheckBuildRoot -> BuildRootCheck - CheckPkgConfig -> PkgConfigCheck - DuplicatesCheck - CheckLogrotate -> LogrotateCheck - CheckIconSizes -> IconSizesCheck - CheckDBusPolicy -> DBusPolicyCheck - MixedFileOwnerships -> MixedOwnershipCheck - CheckUpdateAlternatives -> AlternativesCheck - CheckExecDocs -> DocCheck - CheckCommonFiles -> relevant checks ported to FilesCheck - CheckRCLinks -> relevant checks ported to SysVInitOnSystemdCheck Enabled - BashismsCheck - CheckPAMModules -> PAMModulesCheck.py - TmpFilesCheck - CheckSysVinitOnSystemd -> SysVInitOnSystemdCheck Commented out for now - it's not ported yet - LibraryPolicyCheck -> SharedLibraryPolicyCheck - CheckSUIDPermissions - CheckDBUSServices - CheckCronJobs - CheckPolkitPrivs - CheckWorldWritable - CheckDeviceFiles openSUSE only - BrandingPolicyCheck - CheckFilelist -> FilelistCheck.py - KMPPolicyCheck - CheckSystemdInstall -> SystemdInstallCheck.py [Options] Deleted - no longer exist - UseBzip2 = 0 - UseUTF8 = 1 Renamed - PAMModules.WhiteList -> PAMModulesWhiteList [Filters] Deleted - no longer present - '.*invalid-vendor.*' - '.*invalid-distribution.*' - 'non-devel-buildrequires*' - '.*FSSTND-dir-in-var /var/adm/.*', - ' non-remote_fs-dependency.*/boot', - ' file-in-usr-marked-as-conffile', - ' manpage-not-bzipped ', - ' apache2-naming-policy-not-applied', - ' no-%clean-section', - 'update-desktop-files\.\S+: \w: untranslated-desktop-file', Renamed - suse-filelist-forbidden-* -> filelist-forbidden-*
2020-10-20 09:17:10 +08:00
@pytest.mark.parametrize('test_arguments', [['-c', 'configs/openSUSE']])
def test_parsing_opensuse_conf(test_arguments):
parsed = process_lint_args(test_arguments)
assert len(parsed['config']) == 7
assert PosixPath('configs/openSUSE/opensuse.toml') in parsed['config']
assert PosixPath('configs/openSUSE/licenses.toml') in parsed['config']
assert PosixPath('configs/openSUSE/pie-executables.toml') in parsed['config']
2020-10-21 21:17:38 +08:00
defaultcfg = Config()
lint = Lint(parsed)
default_checks = defaultcfg.configuration['Checks']
checks = lint.config.configuration['Checks']
# Verify that all original Checks are enabled and some new are added
for check in default_checks:
assert check in checks
assert len(checks) > len(default_checks)
# Verify that all scoring keys are a known checks
checks = set(lint.output.error_details.keys())
checks |= set(defaultcfg.configuration['Descriptions'].keys())
score_keys = lint.config.configuration['Scoring'].keys()
for score_key in score_keys:
if score_key.startswith('percent-in-'):
continue
assert score_key in checks
@pytest.mark.skipif(not HAS_CHECKBASHISMS, reason='Optional dependency checkbashisms not installed')
@pytest.mark.skipif(not HAS_DASH, reason='Optional dependency dash not installed')
@pytest.mark.parametrize('test_arguments', [['-c', 'configs/Fedora']])
def test_parsing_fedora_conf(test_arguments):
parsed = process_lint_args(test_arguments)
assert len(parsed['config']) == 5
assert PosixPath('configs/Fedora/fedora.toml') in parsed['config']
assert PosixPath('configs/Fedora/licenses.toml') in parsed['config']
assert PosixPath('configs/Fedora/users-groups.toml') in parsed['config']
defaultcfg = Config()
lint = Lint(parsed)
default_checks = defaultcfg.configuration['Checks']
checks = lint.config.configuration['Checks']
# Verify that all original Checks are enabled and some new are added
for check in default_checks:
assert check in checks
assert len(checks) > len(default_checks)
# Verify that all scoring keys are a known checks
checks = set(lint.output.error_details.keys())
checks |= set(defaultcfg.configuration['Descriptions'].keys())
score_keys = lint.config.configuration['Scoring'].keys()
for score_key in score_keys:
if score_key.startswith('percent-in-'):
continue
assert score_key in checks
def test_reset_check():
files = ['test/spec/SpecCheck2.spec', 'test/spec/SpecCheck3.spec']
options = process_lint_args(['--checks', 'SpecCheck'] + files)
lint = Lint(options)
lint.run()
out = lint.output.print_results(lint.output.results, lint.config)
assert 'more-than-one-%changelog-section' not in out