From 78d31ade2d6a2ef4ee9f97642828cbbc204ba11b Mon Sep 17 00:00:00 2001 From: Dan Callaghan Date: Mon, 8 May 2017 16:22:09 +1000 Subject: [PATCH] tests: extra cases covering old/obsoleted packages for repoclosure I wrote these will experimenting with libsolv. They are covering existing behaviour which works correctly but I found difficult to get right while porting to libsolv. Change-Id: Id4d67230808bcbcc1edb8a246cb6b73992f0436c --- acceptance_tests/test_check_repoclosure.py | 66 ++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/acceptance_tests/test_check_repoclosure.py b/acceptance_tests/test_check_repoclosure.py index bf63aba..1faf8db 100644 --- a/acceptance_tests/test_check_repoclosure.py +++ b/acceptance_tests/test_check_repoclosure.py @@ -98,6 +98,72 @@ def cleanUp(): assert err == '' +def test_ignores_problems_in_older_packages(request, dir_server): + # We only care if the *latest* version of each package in the repos is + # satisfied. If there are dependency problems with an older version, it is + # irrelevant because nobody will be installing it anyway. + p_older = rpmfluff.SimpleRpmBuild('a', '4.0', '1', ['i386']) + p_older.add_provides('libfoo.so.4') + p_older.add_provides('libfoo.so.5') + p_older_depending = rpmfluff.SimpleRpmBuild('b', '0.1', '1', ['i386']) + p_older_depending.add_requires('libfoo.so.4') + p_newer_depending = rpmfluff.SimpleRpmBuild('b', '0.2', '1', ['i386']) + p_newer_depending.add_requires('libfoo.so.5') + baserepo = rpmfluff.YumRepoBuild([p_older, p_older_depending, p_newer_depending]) + baserepo.make('i386') + dir_server.basepath = baserepo.repoDir + + p_newer = rpmfluff.SimpleRpmBuild('a', '5.0', '1', ['i386']) + p_newer.add_provides('libfoo.so.5') + p_newer.make() + + def cleanUp(): + shutil.rmtree(baserepo.repoDir) + shutil.rmtree(p_older_depending.get_base_dir()) + shutil.rmtree(p_newer_depending.get_base_dir()) + shutil.rmtree(p_older.get_base_dir()) + shutil.rmtree(p_newer.get_base_dir()) + request.addfinalizer(cleanUp) + + exitcode, out, err = run_rpmdeplint(['rpmdeplint', 'check-repoclosure', + '--repo=base,{}'.format(dir_server.url), + p_newer.get_built_rpm('i386')]) + assert exitcode == 0 + + +def test_ignores_problems_in_obsoleted_packages(request, dir_server): + # As above, we also don't care about any dependency problems in packages + # that have been obsoleted. + p_older = rpmfluff.SimpleRpmBuild('a', '4.0', '1', ['i386']) + p_older.add_provides('libfoo.so.4') + p_older.add_provides('libfoo.so.5') + p_obsolete_depending = rpmfluff.SimpleRpmBuild('foofouruser', '1.0', '1', ['i386']) + p_obsolete_depending.add_requires('libfoo.so.4') + p_newer_depending = rpmfluff.SimpleRpmBuild('foofiveuser', '0.1', '1', ['i386']) + p_newer_depending.add_requires('libfoo.so.5') + p_newer_depending.add_obsoletes('foofouruser <= 1.0-1') + baserepo = rpmfluff.YumRepoBuild([p_older, p_obsolete_depending, p_newer_depending]) + baserepo.make('i386') + dir_server.basepath = baserepo.repoDir + + p_newer = rpmfluff.SimpleRpmBuild('a', '5.0', '1', ['i386']) + p_newer.add_provides('libfoo.so.5') + p_newer.make() + + def cleanUp(): + shutil.rmtree(baserepo.repoDir) + shutil.rmtree(p_obsolete_depending.get_base_dir()) + shutil.rmtree(p_newer_depending.get_base_dir()) + shutil.rmtree(p_older.get_base_dir()) + shutil.rmtree(p_newer.get_base_dir()) + request.addfinalizer(cleanUp) + + exitcode, out, err = run_rpmdeplint(['rpmdeplint', 'check-repoclosure', + '--repo=base,{}'.format(dir_server.url), + p_newer.get_built_rpm('i386')]) + assert exitcode == 0 + + def test_warns_on_preexisting_repoclosure_problems(request, dir_server): # If the repos have some existing dependency problems, we don't want that # to be an error -- otherwise a bad repo will make it impossible to get any