# -*- coding: utf-8 -*- try: import unittest2 as unittest except ImportError: import unittest import os import tempfile import shutil import six import sys import logging from six.moves import cStringIO from pungi.wrappers.pungi import PungiWrapper try: from pungi.dnf_wrapper import DnfWrapper, Conf from pungi.gather_dnf import Gather, GatherOptions, PkgFlag HAS_DNF = True except ImportError: HAS_DNF = False if six.PY2: HAS_YUM = True else: HAS_YUM = False def convert_pkg_map(data): """ Go through the mapping, extract only paths and convert them to just basenames. """ result = {} for pkg_type in data: result[pkg_type] = sorted( set([os.path.basename(pkg["path"]) for pkg in data[pkg_type]]) ) return result class DepsolvingBase(object): def setUp(self): self.tmp_dir = tempfile.mkdtemp(prefix="test_compose_") self.repo = os.path.join(os.path.dirname(__file__), "fixtures/repos/repo") self.lookaside = os.path.join( os.path.dirname(__file__), "fixtures/repos/repo-krb5-lookaside" ) def tearDown(self): shutil.rmtree(self.tmp_dir) def test_kernel(self): packages = [ "dummy-kernel", ] pkg_map = self.go(packages, None, greedy="none") self.assertNotIn("dummy-kernel-3.1.0-1.i686.rpm", pkg_map["rpm"]) self.assertEqual(pkg_map["rpm"], ["dummy-kernel-3.1.0-1.x86_64.rpm"]) self.assertEqual(pkg_map["srpm"], ["dummy-kernel-3.1.0-1.src.rpm"]) self.assertEqual(pkg_map["debuginfo"], []) def test_kernel_fulltree(self): packages = [ "dummy-kernel", ] pkg_map = self.go(packages, None, greedy="none", fulltree=True) self.assertNotIn("dummy-kernel-3.1.0-1.i686.rpm", pkg_map["rpm"]) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-kernel-3.1.0-1.x86_64.rpm", # Important "dummy-kernel-headers-3.1.0-1.x86_64.rpm", "dummy-kernel-doc-3.1.0-1.noarch.rpm", ], ) self.assertEqual(pkg_map["srpm"], ["dummy-kernel-3.1.0-1.src.rpm"]) self.assertEqual(pkg_map["debuginfo"], []) def test_kernel_fulltree_excludes(self): packages = [ "dummy-kernel", ] pkg_map = self.go( packages, None, greedy="none", fulltree=True, fulltree_excludes=["dummy-kernel"], ) self.assertNotIn("dummy-kernel-3.1.0-1.i686.rpm", pkg_map["rpm"]) self.assertEqual(pkg_map["rpm"], ["dummy-kernel-3.1.0-1.x86_64.rpm"]) self.assertEqual(pkg_map["srpm"], ["dummy-kernel-3.1.0-1.src.rpm"]) self.assertEqual(pkg_map["debuginfo"], []) def test_kernel_doc_fulltree(self): packages = [ "dummy-kernel-doc", ] pkg_map = self.go(packages, None, greedy="none", fulltree=True) self.assertNotIn("dummy-kernel-3.1.0-1.i686.rpm", pkg_map["rpm"]) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-kernel-3.1.0-1.x86_64.rpm", # Important "dummy-kernel-headers-3.1.0-1.x86_64.rpm", "dummy-kernel-doc-3.1.0-1.noarch.rpm", # Important ], ) self.assertEqual(pkg_map["srpm"], ["dummy-kernel-3.1.0-1.src.rpm"]) self.assertEqual(pkg_map["debuginfo"], []) def test_bash_noarch_pulls_64bit(self): packages = [ "dummy-glibc.+", "dummy-bash-doc", ] pkg_map = self.go(packages, None, greedy="none", fulltree=False, arch="ppc64") self.assertNotIn("dummy-bash-4.2.37-6.ppc.rpm", pkg_map["rpm"]) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-basesystem-10.0-6.noarch.rpm", "dummy-bash-4.2.37-6.ppc64.rpm", # Important "dummy-bash-doc-4.2.37-6.noarch.rpm", # Important "dummy-filesystem-4.2.37-6.ppc64.rpm", "dummy-glibc-2.14-5.ppc.rpm", "dummy-glibc-2.14-5.ppc64.rpm", "dummy-glibc-common-2.14-5.ppc64.rpm", ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-basesystem-10.0-6.src.rpm", "dummy-bash-4.2.37-6.src.rpm", "dummy-filesystem-4.2.37-6.src.rpm", "dummy-glibc-2.14-5.src.rpm", ], ) six.assertCountEqual( self, pkg_map["debuginfo"], [ "dummy-bash-debuginfo-4.2.37-6.ppc64.rpm", "dummy-bash-debugsource-4.2.37-6.ppc64.rpm", "dummy-glibc-debuginfo-2.14-5.ppc.rpm", "dummy-glibc-debuginfo-2.14-5.ppc64.rpm", "dummy-glibc-debuginfo-common-2.14-5.ppc.rpm", "dummy-glibc-debuginfo-common-2.14-5.ppc64.rpm", ], ) def test_foo32_doc_fulltree(self): packages = [ "dummy-foo32-doc", ] pkg_map = self.go(packages, None, greedy="none", fulltree=True) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-foo32-1-1.i686.rpm", # Important "dummy-foo32-doc-1-1.noarch.rpm", # Important ], ) self.assertEqual(pkg_map["srpm"], ["dummy-foo32-1-1.src.rpm"]) self.assertEqual(pkg_map["debuginfo"], []) def test_bash_exclude_debuginfo(self): packages = [ "dummy-bash", "-dummy-bash-debuginfo", "-dummy-bash-debugsource", ] pkg_map = self.go(packages, None, greedy="none") six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-basesystem-10.0-6.noarch.rpm", "dummy-bash-4.2.37-6.x86_64.rpm", "dummy-filesystem-4.2.37-6.x86_64.rpm", "dummy-glibc-2.14-5.x86_64.rpm", "dummy-glibc-common-2.14-5.x86_64.rpm", ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-basesystem-10.0-6.src.rpm", "dummy-bash-4.2.37-6.src.rpm", "dummy-filesystem-4.2.37-6.src.rpm", "dummy-glibc-2.14-5.src.rpm", ], ) six.assertCountEqual( self, pkg_map["debuginfo"], [ "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", ], ) def test_bash_multilib_exclude_debuginfo(self): packages = [ "dummy-bash.+", "-dummy-bash-debuginfo", "-dummy-bash-debugsource", ] pkg_map = self.go(packages, None, greedy="none") six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-basesystem-10.0-6.noarch.rpm", "dummy-bash-4.2.37-6.i686.rpm", "dummy-filesystem-4.2.37-6.x86_64.rpm", "dummy-glibc-2.14-5.i686.rpm", "dummy-glibc-common-2.14-5.x86_64.rpm", ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-basesystem-10.0-6.src.rpm", "dummy-bash-4.2.37-6.src.rpm", "dummy-filesystem-4.2.37-6.src.rpm", "dummy-glibc-2.14-5.src.rpm", ], ) six.assertCountEqual( self, pkg_map["debuginfo"], [ "dummy-glibc-debuginfo-2.14-5.i686.rpm", "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", "dummy-glibc-debuginfo-common-2.14-5.i686.rpm", "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", ], ) def test_bash(self): packages = [ "dummy-bash", ] pkg_map = self.go(packages, None, greedy="none") self.assertNotIn("dummy-bash-4.2.37-5.i686.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-bash-4.2.37-5.x86_64.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-bash-4.2.37-6.i686.rpm", pkg_map["rpm"]) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-basesystem-10.0-6.noarch.rpm", "dummy-bash-4.2.37-6.x86_64.rpm", # Important "dummy-filesystem-4.2.37-6.x86_64.rpm", "dummy-glibc-2.14-5.x86_64.rpm", "dummy-glibc-common-2.14-5.x86_64.rpm", ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-basesystem-10.0-6.src.rpm", "dummy-bash-4.2.37-6.src.rpm", "dummy-filesystem-4.2.37-6.src.rpm", "dummy-glibc-2.14-5.src.rpm", ], ) six.assertCountEqual( self, pkg_map["debuginfo"], [ "dummy-bash-debuginfo-4.2.37-6.x86_64.rpm", "dummy-bash-debugsource-4.2.37-6.x86_64.rpm", "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", ], ) def test_bash_s390x(self): packages = [ "dummy-bash", ] pkg_map = self.go(packages, None, greedy="none", arch="s390x") self.assertNotIn("dummy-bash-4.2.37-5.s390.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-bash-4.2.37-5.s390x.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-bash-4.2.37-6.s390.rpm", pkg_map["rpm"]) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-basesystem-10.0-6.noarch.rpm", "dummy-bash-4.2.37-6.s390x.rpm", # Important "dummy-filesystem-4.2.37-6.s390x.rpm", "dummy-glibc-2.14-5.s390x.rpm", "dummy-glibc-common-2.14-5.s390x.rpm", ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-basesystem-10.0-6.src.rpm", "dummy-bash-4.2.37-6.src.rpm", "dummy-filesystem-4.2.37-6.src.rpm", "dummy-glibc-2.14-5.src.rpm", ], ) six.assertCountEqual( self, pkg_map["debuginfo"], [ "dummy-bash-debuginfo-4.2.37-6.s390x.rpm", "dummy-bash-debugsource-4.2.37-6.s390x.rpm", "dummy-glibc-debuginfo-2.14-5.s390x.rpm", "dummy-glibc-debuginfo-common-2.14-5.s390x.rpm", ], ) def test_bash_greedy(self): # we want only the latest package version packages = [ "dummy-bash", ] pkg_map = self.go(packages, None, greedy="all") self.assertNotIn("dummy-bash-4.2.37-5.i686.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-bash-4.2.37-5.x86_64.rpm", pkg_map["rpm"]) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-basesystem-10.0-6.noarch.rpm", "dummy-bash-4.2.37-6.i686.rpm", # Important "dummy-bash-4.2.37-6.x86_64.rpm", # Important "dummy-filesystem-4.2.37-6.i686.rpm", "dummy-filesystem-4.2.37-6.x86_64.rpm", "dummy-glibc-2.14-5.i686.rpm", "dummy-glibc-2.14-5.x86_64.rpm", "dummy-glibc-common-2.14-5.i686.rpm", "dummy-glibc-common-2.14-5.x86_64.rpm", ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-basesystem-10.0-6.src.rpm", "dummy-bash-4.2.37-6.src.rpm", "dummy-filesystem-4.2.37-6.src.rpm", "dummy-glibc-2.14-5.src.rpm", ], ) six.assertCountEqual( self, pkg_map["debuginfo"], [ "dummy-bash-debuginfo-4.2.37-6.i686.rpm", "dummy-bash-debugsource-4.2.37-6.i686.rpm", "dummy-bash-debuginfo-4.2.37-6.x86_64.rpm", "dummy-bash-debugsource-4.2.37-6.x86_64.rpm", "dummy-glibc-debuginfo-2.14-5.i686.rpm", "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", "dummy-glibc-debuginfo-common-2.14-5.i686.rpm", "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", ], ) def test_bash_older(self): packages = [ "dummy-bash-4.2.37-5", ] pkg_map = self.go(packages, None, greedy="none") self.assertNotIn("dummy-bash-4.2.37-5.i686.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-bash-4.2.37-6.i686.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-bash-4.2.37-6.x86_64.rpm", pkg_map["rpm"]) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-basesystem-10.0-6.noarch.rpm", "dummy-bash-4.2.37-5.x86_64.rpm", # Important "dummy-filesystem-4.2.37-6.x86_64.rpm", "dummy-glibc-2.14-5.x86_64.rpm", "dummy-glibc-common-2.14-5.x86_64.rpm", ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-basesystem-10.0-6.src.rpm", "dummy-bash-4.2.37-5.src.rpm", "dummy-filesystem-4.2.37-6.src.rpm", "dummy-glibc-2.14-5.src.rpm", ], ) six.assertCountEqual( self, pkg_map["debuginfo"], [ "dummy-bash-debuginfo-4.2.37-5.x86_64.rpm", "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", ], ) def test_system_release(self): packages = [ "dummy-filesystem", "system-release", ] pkg_map = self.go(packages, None, greedy="none") self.assertNotIn( "dummy-release-client-workstation-1.0.0-1.i686.rpm", pkg_map["rpm"] ) self.assertNotIn( "dummy-release-client-workstation-1.0.0-1.x86_64.rpm", pkg_map["rpm"] ) self.assertNotIn("dummy-release-client-1.0.0-1.i686.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-release-client-1.0.0-1.x86_64.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-release-server-1.0.0-1.i686.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-release-server-1.0.0-1.x86_64.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-release-notes-1.2-1.noarch.rpm", pkg_map["rpm"]) self.assertEqual(pkg_map["rpm"], ["dummy-filesystem-4.2.37-6.x86_64.rpm"]) self.assertEqual(pkg_map["srpm"], ["dummy-filesystem-4.2.37-6.src.rpm"]) self.assertEqual(pkg_map["debuginfo"], []) def test_system_release_greedy(self): packages = [ "system-release", ] pkg_map = self.go(packages, None, greedy="all") self.assertNotIn("dummy-release-notes-1.2-1.noarch.rpm", pkg_map["rpm"]) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-release-client-1.0.0-1.i686.rpm", # Important "dummy-release-client-1.0.0-1.x86_64.rpm", # Important "dummy-release-client-workstation-1.0.0-1.i686.rpm", # Important "dummy-release-client-workstation-1.0.0-1.x86_64.rpm", # Important "dummy-release-server-1.0.0-1.i686.rpm", # Important "dummy-release-server-1.0.0-1.x86_64.rpm", # Important ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-release-client-1.0.0-1.src.rpm", "dummy-release-client-workstation-1.0.0-1.src.rpm", "dummy-release-server-1.0.0-1.src.rpm", ], ) self.assertEqual(pkg_map["debuginfo"], []) def test_smtpdaemon(self): packages = [ "dummy-vacation", ] pkg_map = self.go(packages, None, greedy="none") self.assertNotIn("dummy-postfix-2.9.2-2.i686.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-sendmail-8.14.5-12.i686.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-sendmail-8.14.5-12.x86_64.rpm", pkg_map["rpm"]) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-basesystem-10.0-6.noarch.rpm", "dummy-filesystem-4.2.37-6.x86_64.rpm", "dummy-glibc-2.14-5.x86_64.rpm", "dummy-glibc-common-2.14-5.x86_64.rpm", "dummy-postfix-2.9.2-2.x86_64.rpm", # Important "dummy-vacation-1.2.7.1-1.x86_64.rpm", ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-basesystem-10.0-6.src.rpm", "dummy-filesystem-4.2.37-6.src.rpm", "dummy-glibc-2.14-5.src.rpm", "dummy-postfix-2.9.2-2.src.rpm", "dummy-vacation-1.2.7.1-1.src.rpm", ], ) six.assertCountEqual( self, pkg_map["debuginfo"], [ "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", "dummy-postfix-debuginfo-2.9.2-2.x86_64.rpm", "dummy-vacation-debuginfo-1.2.7.1-1.x86_64.rpm", ], ) def test_smtpdaemon_sendmail(self): packages = [ "dummy-vacation", "dummy-sendmail", ] pkg_map = self.go(packages, None, greedy="none") self.assertNotIn("dummy-postfix-2.9.2-2.i686.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-postfix-2.9.2-2.x86_64.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-sendmail-8.14.5-12.i686.rpm", pkg_map["rpm"]) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-basesystem-10.0-6.noarch.rpm", "dummy-filesystem-4.2.37-6.x86_64.rpm", "dummy-glibc-2.14-5.x86_64.rpm", "dummy-glibc-common-2.14-5.x86_64.rpm", "dummy-sendmail-8.14.5-12.x86_64.rpm", # Important "dummy-vacation-1.2.7.1-1.x86_64.rpm", ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-basesystem-10.0-6.src.rpm", "dummy-filesystem-4.2.37-6.src.rpm", "dummy-glibc-2.14-5.src.rpm", "dummy-sendmail-8.14.5-12.src.rpm", "dummy-vacation-1.2.7.1-1.src.rpm", ], ) six.assertCountEqual( self, pkg_map["debuginfo"], [ "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", "dummy-sendmail-debuginfo-8.14.5-12.x86_64.rpm", "dummy-vacation-debuginfo-1.2.7.1-1.x86_64.rpm", ], ) def test_smtpdaemon_greedy_all(self): packages = [ "dummy-vacation", ] pkg_map = self.go(packages, None, greedy="all") six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-basesystem-10.0-6.noarch.rpm", "dummy-filesystem-4.2.37-6.i686.rpm", "dummy-filesystem-4.2.37-6.x86_64.rpm", "dummy-glibc-2.14-5.i686.rpm", "dummy-glibc-2.14-5.x86_64.rpm", "dummy-glibc-common-2.14-5.i686.rpm", "dummy-glibc-common-2.14-5.x86_64.rpm", "dummy-postfix-2.9.2-2.i686.rpm", # Important "dummy-postfix-2.9.2-2.x86_64.rpm", # Important "dummy-sendmail-8.14.5-12.i686.rpm", # Important "dummy-sendmail-8.14.5-12.x86_64.rpm", # Important "dummy-vacation-1.2.7.1-1.i686.rpm", "dummy-vacation-1.2.7.1-1.x86_64.rpm", ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-basesystem-10.0-6.src.rpm", "dummy-filesystem-4.2.37-6.src.rpm", "dummy-glibc-2.14-5.src.rpm", "dummy-postfix-2.9.2-2.src.rpm", "dummy-sendmail-8.14.5-12.src.rpm", "dummy-vacation-1.2.7.1-1.src.rpm", ], ) six.assertCountEqual( self, pkg_map["debuginfo"], [ "dummy-glibc-debuginfo-2.14-5.i686.rpm", "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", "dummy-glibc-debuginfo-common-2.14-5.i686.rpm", "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", "dummy-postfix-debuginfo-2.9.2-2.i686.rpm", "dummy-postfix-debuginfo-2.9.2-2.x86_64.rpm", "dummy-sendmail-debuginfo-8.14.5-12.i686.rpm", "dummy-sendmail-debuginfo-8.14.5-12.x86_64.rpm", "dummy-vacation-debuginfo-1.2.7.1-1.i686.rpm", "dummy-vacation-debuginfo-1.2.7.1-1.x86_64.rpm", ], ) def test_smtpdaemon_greedy_all_explicit_postfix(self): # Postfix provides smtpdaemon, but we still want sendmail in because we # are greedy. packages = [ "dummy-postfix", "dummy-vacation", ] pkg_map = self.go(packages, None, greedy="all") six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-basesystem-10.0-6.noarch.rpm", "dummy-filesystem-4.2.37-6.i686.rpm", "dummy-filesystem-4.2.37-6.x86_64.rpm", "dummy-glibc-2.14-5.i686.rpm", "dummy-glibc-2.14-5.x86_64.rpm", "dummy-glibc-common-2.14-5.i686.rpm", "dummy-glibc-common-2.14-5.x86_64.rpm", "dummy-postfix-2.9.2-2.i686.rpm", "dummy-postfix-2.9.2-2.x86_64.rpm", "dummy-sendmail-8.14.5-12.i686.rpm", "dummy-sendmail-8.14.5-12.x86_64.rpm", "dummy-vacation-1.2.7.1-1.i686.rpm", "dummy-vacation-1.2.7.1-1.x86_64.rpm", ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-basesystem-10.0-6.src.rpm", "dummy-filesystem-4.2.37-6.src.rpm", "dummy-glibc-2.14-5.src.rpm", "dummy-postfix-2.9.2-2.src.rpm", "dummy-sendmail-8.14.5-12.src.rpm", "dummy-vacation-1.2.7.1-1.src.rpm", ], ) six.assertCountEqual( self, pkg_map["debuginfo"], [ "dummy-glibc-debuginfo-2.14-5.i686.rpm", "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", "dummy-glibc-debuginfo-common-2.14-5.i686.rpm", "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", "dummy-postfix-debuginfo-2.9.2-2.i686.rpm", "dummy-postfix-debuginfo-2.9.2-2.x86_64.rpm", "dummy-sendmail-debuginfo-8.14.5-12.i686.rpm", "dummy-sendmail-debuginfo-8.14.5-12.x86_64.rpm", "dummy-vacation-debuginfo-1.2.7.1-1.i686.rpm", "dummy-vacation-debuginfo-1.2.7.1-1.x86_64.rpm", ], ) def test_smtpdaemon_greedy_all_explicit_sendmail(self): # Same as above, but the other way around. packages = [ "dummy-sendmail", "dummy-vacation", ] pkg_map = self.go(packages, None, greedy="all") six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-basesystem-10.0-6.noarch.rpm", "dummy-filesystem-4.2.37-6.i686.rpm", "dummy-filesystem-4.2.37-6.x86_64.rpm", "dummy-glibc-2.14-5.i686.rpm", "dummy-glibc-2.14-5.x86_64.rpm", "dummy-glibc-common-2.14-5.i686.rpm", "dummy-glibc-common-2.14-5.x86_64.rpm", "dummy-postfix-2.9.2-2.i686.rpm", "dummy-postfix-2.9.2-2.x86_64.rpm", "dummy-sendmail-8.14.5-12.i686.rpm", "dummy-sendmail-8.14.5-12.x86_64.rpm", "dummy-vacation-1.2.7.1-1.i686.rpm", "dummy-vacation-1.2.7.1-1.x86_64.rpm", ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-basesystem-10.0-6.src.rpm", "dummy-filesystem-4.2.37-6.src.rpm", "dummy-glibc-2.14-5.src.rpm", "dummy-postfix-2.9.2-2.src.rpm", "dummy-sendmail-8.14.5-12.src.rpm", "dummy-vacation-1.2.7.1-1.src.rpm", ], ) six.assertCountEqual( self, pkg_map["debuginfo"], [ "dummy-glibc-debuginfo-2.14-5.i686.rpm", "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", "dummy-glibc-debuginfo-common-2.14-5.i686.rpm", "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", "dummy-postfix-debuginfo-2.9.2-2.i686.rpm", "dummy-postfix-debuginfo-2.9.2-2.x86_64.rpm", "dummy-sendmail-debuginfo-8.14.5-12.i686.rpm", "dummy-sendmail-debuginfo-8.14.5-12.x86_64.rpm", "dummy-vacation-debuginfo-1.2.7.1-1.i686.rpm", "dummy-vacation-debuginfo-1.2.7.1-1.x86_64.rpm", ], ) def test_firefox(self): packages = [ "Dummy-firefox", ] pkg_map = self.go(packages, None, greedy="none") self.assertNotIn("Dummy-firefox-16.0.1-1.i686.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-krb5-devel-1.10-5.i686.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-krb5-devel-1.10-5.x86_64.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-krb5-workstation-1.10-5.i686.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-krb5-workstation-1.10-5.x86_64.rpm", pkg_map["rpm"]) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-basesystem-10.0-6.noarch.rpm", "dummy-filesystem-4.2.37-6.x86_64.rpm", "Dummy-firefox-16.0.1-1.x86_64.rpm", # Important "dummy-glibc-2.14-5.x86_64.rpm", "dummy-glibc-common-2.14-5.x86_64.rpm", "Dummy-xulrunner-16.0.1-1.x86_64.rpm", ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-basesystem-10.0-6.src.rpm", "dummy-filesystem-4.2.37-6.src.rpm", "Dummy-firefox-16.0.1-1.src.rpm", "dummy-glibc-2.14-5.src.rpm", "Dummy-xulrunner-16.0.1-1.src.rpm", ], ) six.assertCountEqual( self, pkg_map["debuginfo"], [ "Dummy-firefox-debuginfo-16.0.1-1.x86_64.rpm", "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", "Dummy-xulrunner-debuginfo-16.0.1-1.x86_64.rpm", ], ) def test_firefox_selfhosting(self): packages = [ "Dummy-firefox", ] pkg_map = self.go(packages, None, greedy="none", selfhosting=True) self.assertNotIn("Dummy-firefox-16.0.1-2.i686.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-krb5-devel-1.10-5.i686.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-krb5-workstation-1.10-5.i686.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-krb5-workstation-1.10-5.x86_64.rpm", pkg_map["rpm"]) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-bash-4.2.37-6.x86_64.rpm", "dummy-basesystem-10.0-6.noarch.rpm", "dummy-filesystem-4.2.37-6.x86_64.rpm", "Dummy-firefox-16.0.1-1.x86_64.rpm", # Important "dummy-glibc-2.14-5.x86_64.rpm", "dummy-glibc-common-2.14-5.x86_64.rpm", "dummy-krb5-1.10-5.x86_64.rpm", "dummy-krb5-devel-1.10-5.x86_64.rpm", # Important "dummy-krb5-libs-1.10-5.x86_64.rpm", "Dummy-xulrunner-16.0.1-1.x86_64.rpm", ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-bash-4.2.37-6.src.rpm", "dummy-basesystem-10.0-6.src.rpm", "dummy-filesystem-4.2.37-6.src.rpm", "Dummy-firefox-16.0.1-1.src.rpm", "dummy-glibc-2.14-5.src.rpm", "dummy-krb5-1.10-5.src.rpm", "Dummy-xulrunner-16.0.1-1.src.rpm", ], ) six.assertCountEqual( self, pkg_map["debuginfo"], [ "dummy-bash-debuginfo-4.2.37-6.x86_64.rpm", "dummy-bash-debugsource-4.2.37-6.x86_64.rpm", "Dummy-firefox-debuginfo-16.0.1-1.x86_64.rpm", "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", # Important "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", # Important "dummy-krb5-debuginfo-1.10-5.x86_64.rpm", "Dummy-xulrunner-debuginfo-16.0.1-1.x86_64.rpm", ], ) def test_firefox_selfhosting_with_krb5_lookaside(self): packages = [ "Dummy-firefox", ] pkg_map = self.go(packages, None, lookaside=self.lookaside, selfhosting=True) self.assertNotIn("Dummy-firefox-16.0.1-2.i686.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-krb5-1.10-5.x86_64.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-krb5-debuginfo-1.10-5.x86_64.rpm", pkg_map["debuginfo"]) self.assertNotIn("dummy-krb5-1.10-5.src.rpm", pkg_map["srpm"]) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-basesystem-10.0-6.noarch.rpm", "dummy-filesystem-4.2.37-6.x86_64.rpm", "Dummy-firefox-16.0.1-1.x86_64.rpm", # Important "dummy-glibc-2.14-5.x86_64.rpm", "dummy-glibc-common-2.14-5.x86_64.rpm", "Dummy-xulrunner-16.0.1-1.x86_64.rpm", ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-basesystem-10.0-6.src.rpm", "dummy-filesystem-4.2.37-6.src.rpm", "Dummy-firefox-16.0.1-1.src.rpm", "dummy-glibc-2.14-5.src.rpm", "Dummy-xulrunner-16.0.1-1.src.rpm", ], ) six.assertCountEqual( self, pkg_map["debuginfo"], [ "Dummy-firefox-debuginfo-16.0.1-1.x86_64.rpm", "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", "Dummy-xulrunner-debuginfo-16.0.1-1.x86_64.rpm", ], ) def test_old_dep_in_lookaside_is_not_pulled_in(self): # main repo: # dummy-cockpit-docker-141-1 depends on dummy-cockpit-system # dummy-cockpit-system-141-1 # lookaside: # dummy-cockpit-system-138-1 # # By default newer version should be pulled in. self.repo = os.path.join(os.path.dirname(__file__), "fixtures/repos/cockpit") self.lookaside = os.path.join( os.path.dirname(__file__), "fixtures/repos/cockpit-lookaside" ) packages = [ "dummy-cockpit-docker", ] pkg_map = self.go(packages, None, lookaside=self.lookaside) self.assertEqual(self.broken_deps, {}) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-cockpit-docker-141-1.noarch.rpm", "dummy-cockpit-system-141-1.noarch.rpm", ], ) def test_does_not_exclude_from_lookaside(self): # main repo: # dummy-cockpit-docker-141-1 depends on dummy-cockpit-system # dummy-cockpit-system-141-1 # lookaside: # dummy-cockpit-system-138-1 # # The -system package is excluded and the dependency should be # satisfied by the older version in lookaside. No broken dependencies # should be reported. self.repo = os.path.join(os.path.dirname(__file__), "fixtures/repos/cockpit") self.lookaside = os.path.join( os.path.dirname(__file__), "fixtures/repos/cockpit-lookaside" ) packages = [ "dummy-cockpit-docker", "-dummy-cockpit-system", ] pkg_map = self.go(packages, None, lookaside=self.lookaside) self.assertEqual(self.broken_deps, {}) self.assertEqual(pkg_map["rpm"], ["dummy-cockpit-docker-141-1.noarch.rpm"]) def test_firefox_fulltree(self): packages = [ "Dummy-firefox", ] pkg_map = self.go(packages, None, greedy="none", fulltree=True) self.assertNotIn("Dummy-firefox-16.0.1-2.i686.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-krb5-devel-1.10-5.i686.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-krb5-devel-1.10-5.x86_64.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-krb5-workstation-1.10-5.i686.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-krb5-workstation-1.10-5.x86_64.rpm", pkg_map["rpm"]) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-basesystem-10.0-6.noarch.rpm", "dummy-filesystem-4.2.37-6.x86_64.rpm", "Dummy-firefox-16.0.1-1.x86_64.rpm", # Important "dummy-glibc-2.14-5.x86_64.rpm", "dummy-glibc-common-2.14-5.x86_64.rpm", "dummy-nscd-2.14-5.x86_64.rpm", "Dummy-xulrunner-16.0.1-1.x86_64.rpm", ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-basesystem-10.0-6.src.rpm", "dummy-filesystem-4.2.37-6.src.rpm", "Dummy-firefox-16.0.1-1.src.rpm", "dummy-glibc-2.14-5.src.rpm", "Dummy-xulrunner-16.0.1-1.src.rpm", ], ) six.assertCountEqual( self, pkg_map["debuginfo"], [ "Dummy-firefox-debuginfo-16.0.1-1.x86_64.rpm", "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", "Dummy-xulrunner-debuginfo-16.0.1-1.x86_64.rpm", ], ) def test_firefox_selfhosting_fulltree(self): packages = [ "Dummy-firefox", ] pkg_map = self.go( packages, None, greedy="none", selfhosting=True, fulltree=True ) self.assertNotIn("Dummy-firefox-16.0.1-2.i686.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-krb5-devel-1.10-5.i686.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-krb5-workstation-1.10-5.i686.rpm", pkg_map["rpm"]) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-bash-4.2.37-6.x86_64.rpm", "dummy-bash-doc-4.2.37-6.noarch.rpm", "dummy-basesystem-10.0-6.noarch.rpm", "dummy-filesystem-4.2.37-6.x86_64.rpm", "Dummy-firefox-16.0.1-1.x86_64.rpm", # Important "dummy-glibc-2.14-5.x86_64.rpm", "dummy-glibc-common-2.14-5.x86_64.rpm", "dummy-krb5-1.10-5.x86_64.rpm", "dummy-krb5-devel-1.10-5.x86_64.rpm", # Important "dummy-krb5-libs-1.10-5.x86_64.rpm", "dummy-krb5-workstation-1.10-5.x86_64.rpm", # Important "dummy-nscd-2.14-5.x86_64.rpm", "Dummy-xulrunner-16.0.1-1.x86_64.rpm", ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-bash-4.2.37-6.src.rpm", "dummy-basesystem-10.0-6.src.rpm", "dummy-filesystem-4.2.37-6.src.rpm", "Dummy-firefox-16.0.1-1.src.rpm", "dummy-glibc-2.14-5.src.rpm", "dummy-krb5-1.10-5.src.rpm", "Dummy-xulrunner-16.0.1-1.src.rpm", ], ) six.assertCountEqual( self, pkg_map["debuginfo"], [ "dummy-bash-debuginfo-4.2.37-6.x86_64.rpm", "dummy-bash-debugsource-4.2.37-6.x86_64.rpm", "Dummy-firefox-debuginfo-16.0.1-1.x86_64.rpm", "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", "dummy-krb5-debuginfo-1.10-5.x86_64.rpm", "Dummy-xulrunner-debuginfo-16.0.1-1.x86_64.rpm", ], ) def test_krb5_fulltree(self): packages = [ "dummy-krb5", ] pkg_map = self.go(packages, None, greedy="none", fulltree=True) self.assertNotIn("dummy-krb5-devel-1.10-5.i686.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-krb5-workstation-1.10-5.i686.rpm", pkg_map["rpm"]) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-basesystem-10.0-6.noarch.rpm", "dummy-filesystem-4.2.37-6.x86_64.rpm", "dummy-glibc-2.14-5.x86_64.rpm", "dummy-glibc-common-2.14-5.x86_64.rpm", "dummy-krb5-1.10-5.x86_64.rpm", "dummy-krb5-devel-1.10-5.x86_64.rpm", # Important "dummy-krb5-libs-1.10-5.x86_64.rpm", "dummy-krb5-workstation-1.10-5.x86_64.rpm", # Important "dummy-nscd-2.14-5.x86_64.rpm", ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-basesystem-10.0-6.src.rpm", "dummy-filesystem-4.2.37-6.src.rpm", "dummy-glibc-2.14-5.src.rpm", "dummy-krb5-1.10-5.src.rpm", ], ) six.assertCountEqual( self, pkg_map["debuginfo"], [ "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", "dummy-krb5-debuginfo-1.10-5.x86_64.rpm", ], ) def test_bash_multilib(self): packages = [ "dummy-bash.+", ] pkg_map = self.go(packages, None, greedy="none", fulltree=True) # 'dummy-bash' req already satisfied by bash.i686 self.assertNotIn("dummy-bash-4.2.37-6.x86_64.rpm", pkg_map["rpm"]) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-basesystem-10.0-6.noarch.rpm", "dummy-bash-4.2.37-6.i686.rpm", # Important "dummy-bash-doc-4.2.37-6.noarch.rpm", "dummy-filesystem-4.2.37-6.x86_64.rpm", "dummy-glibc-2.14-5.i686.rpm", "dummy-glibc-2.14-5.x86_64.rpm", "dummy-glibc-common-2.14-5.x86_64.rpm", "dummy-nscd-2.14-5.x86_64.rpm", ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-basesystem-10.0-6.src.rpm", "dummy-bash-4.2.37-6.src.rpm", "dummy-filesystem-4.2.37-6.src.rpm", "dummy-glibc-2.14-5.src.rpm", ], ) six.assertCountEqual( self, pkg_map["debuginfo"], [ "dummy-bash-debuginfo-4.2.37-6.i686.rpm", "dummy-bash-debugsource-4.2.37-6.i686.rpm", "dummy-glibc-debuginfo-2.14-5.i686.rpm", "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", "dummy-glibc-debuginfo-common-2.14-5.i686.rpm", "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", ], ) def test_wildcard_with_multilib_blacklist(self): packages = [ "dummy-glibc*", ] pkg_map = self.go(packages, None, multilib_blacklist=["dummy-glibc*"]) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-basesystem-10.0-6.noarch.rpm", "dummy-filesystem-4.2.37-6.x86_64.rpm", "dummy-glibc-2.14-5.x86_64.rpm", "dummy-glibc-common-2.14-5.x86_64.rpm", ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-basesystem-10.0-6.src.rpm", "dummy-filesystem-4.2.37-6.src.rpm", "dummy-glibc-2.14-5.src.rpm", ], ) six.assertCountEqual( self, pkg_map["debuginfo"], [ "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", ], ) def test_bash_multilib_exclude(self): # test if excluding a package really works # NOTE: dummy-bash-doc would pull x86_64 bash in (we want noarch pulling 64bit deps in composes) # noqa: E501 packages = [ "dummy-bash.+", "-dummy-bash-doc", ] pkg_map = self.go(packages, None, greedy="none", fulltree=True) self.assertNotIn("dummy-bash-4.2.37-6.x86_64.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-bash-doc-4.2.37-6.noarch.rpm", pkg_map["rpm"]) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-basesystem-10.0-6.noarch.rpm", "dummy-bash-4.2.37-6.i686.rpm", # Important "dummy-filesystem-4.2.37-6.x86_64.rpm", "dummy-glibc-2.14-5.i686.rpm", "dummy-glibc-2.14-5.x86_64.rpm", "dummy-glibc-common-2.14-5.x86_64.rpm", "dummy-nscd-2.14-5.x86_64.rpm", ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-basesystem-10.0-6.src.rpm", "dummy-bash-4.2.37-6.src.rpm", "dummy-filesystem-4.2.37-6.src.rpm", "dummy-glibc-2.14-5.src.rpm", ], ) six.assertCountEqual( self, pkg_map["debuginfo"], [ "dummy-bash-debuginfo-4.2.37-6.i686.rpm", "dummy-bash-debugsource-4.2.37-6.i686.rpm", "dummy-glibc-debuginfo-2.14-5.i686.rpm", "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", "dummy-glibc-debuginfo-common-2.14-5.i686.rpm", "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", ], ) def test_bash_multilib_exclude_source(self): packages = [ "dummy-bash.+", "-dummy-bash.src", ] pkg_map = self.go(packages, None, greedy="none") self.assertNotIn("dummy-bash-4.2.37-6.src.rpm", pkg_map["srpm"]) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-basesystem-10.0-6.noarch.rpm", "dummy-bash-4.2.37-6.i686.rpm", "dummy-filesystem-4.2.37-6.x86_64.rpm", "dummy-glibc-2.14-5.i686.rpm", "dummy-glibc-common-2.14-5.x86_64.rpm", ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-basesystem-10.0-6.src.rpm", "dummy-filesystem-4.2.37-6.src.rpm", "dummy-glibc-2.14-5.src.rpm", ], ) six.assertCountEqual( self, pkg_map["debuginfo"], [ "dummy-bash-debuginfo-4.2.37-6.i686.rpm", "dummy-bash-debugsource-4.2.37-6.i686.rpm", "dummy-glibc-debuginfo-2.14-5.i686.rpm", "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", "dummy-glibc-debuginfo-common-2.14-5.i686.rpm", "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", ], ) def test_bash_multilib_greedy(self): packages = [ "dummy-bash.+", ] pkg_map = self.go(packages, None, greedy="all", fulltree=True) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-basesystem-10.0-6.noarch.rpm", "dummy-bash-4.2.37-6.i686.rpm", # Important "dummy-bash-4.2.37-6.x86_64.rpm", # Important "dummy-bash-doc-4.2.37-6.noarch.rpm", "dummy-filesystem-4.2.37-6.i686.rpm", "dummy-filesystem-4.2.37-6.x86_64.rpm", "dummy-glibc-2.14-5.i686.rpm", "dummy-glibc-2.14-5.x86_64.rpm", "dummy-glibc-common-2.14-5.i686.rpm", "dummy-glibc-common-2.14-5.x86_64.rpm", "dummy-nscd-2.14-5.i686.rpm", "dummy-nscd-2.14-5.x86_64.rpm", ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-basesystem-10.0-6.src.rpm", "dummy-bash-4.2.37-6.src.rpm", "dummy-filesystem-4.2.37-6.src.rpm", "dummy-glibc-2.14-5.src.rpm", ], ) six.assertCountEqual( self, pkg_map["debuginfo"], [ "dummy-bash-debuginfo-4.2.37-6.i686.rpm", "dummy-bash-debugsource-4.2.37-6.i686.rpm", "dummy-bash-debuginfo-4.2.37-6.x86_64.rpm", "dummy-bash-debugsource-4.2.37-6.x86_64.rpm", "dummy-glibc-debuginfo-2.14-5.i686.rpm", "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", "dummy-glibc-debuginfo-common-2.14-5.i686.rpm", "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", ], ) @unittest.skip("This test is broken") def test_bash_multilib_nogreedy(self): packages = [ "dummy-bash.+", ] pkg_map = self.go(packages, None, greedy="none", fulltree=True) self.assertNotIn("dummy-bash-4.2.37-6.x86_64.rpm", pkg_map["rpm"]) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-basesystem-10.0-6.noarch.rpm", "dummy-bash-4.2.37-6.i686.rpm", # Important "dummy-bash-doc-4.2.37-6.noarch.rpm", "dummy-filesystem-4.2.37-6.x86_64.rpm", # "dummy-glibc-2.14-5.i686.rpm", "dummy-glibc-2.14-5.x86_64.rpm", # "dummy-glibc-common-2.14-5.i686.rpm", "dummy-glibc-common-2.14-5.x86_64.rpm", ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-basesystem-10.0-6.src.rpm", "dummy-bash-4.2.37-6.src.rpm", "dummy-filesystem-4.2.37-6.src.rpm", "dummy-glibc-2.14-5.src.rpm", ], ) six.assertCountEqual( self, pkg_map["debuginfo"], [ "dummy-bash-debuginfo-4.2.37-6.i686.rpm", "dummy-bash-debugsource-4.2.37-6.i686.rpm", # "dummy-glibc-debuginfo-2.14-5.i686.rpm", "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", # "dummy-glibc-debuginfo-common-2.14-5.i686.rpm", "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", ], ) def test_bash_multilib_filter_greedy(self): packages = [ "dummy-bash", "-dummy-bash.+", ] pkg_map = self.go(packages, None, greedy="all", fulltree=True) self.assertNotIn("dummy-bash-4.2.37-6.i686.rpm", pkg_map["rpm"]) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-basesystem-10.0-6.noarch.rpm", "dummy-bash-4.2.37-6.x86_64.rpm", # Important "dummy-bash-doc-4.2.37-6.noarch.rpm", "dummy-filesystem-4.2.37-6.i686.rpm", "dummy-filesystem-4.2.37-6.x86_64.rpm", "dummy-glibc-2.14-5.i686.rpm", "dummy-glibc-2.14-5.x86_64.rpm", "dummy-glibc-common-2.14-5.i686.rpm", "dummy-glibc-common-2.14-5.x86_64.rpm", "dummy-nscd-2.14-5.i686.rpm", "dummy-nscd-2.14-5.x86_64.rpm", ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-basesystem-10.0-6.src.rpm", "dummy-bash-4.2.37-6.src.rpm", "dummy-filesystem-4.2.37-6.src.rpm", "dummy-glibc-2.14-5.src.rpm", ], ) six.assertCountEqual( self, pkg_map["debuginfo"], [ "dummy-bash-debuginfo-4.2.37-6.x86_64.rpm", "dummy-bash-debugsource-4.2.37-6.x86_64.rpm", "dummy-glibc-debuginfo-2.14-5.i686.rpm", "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", "dummy-glibc-debuginfo-common-2.14-5.i686.rpm", "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", ], ) def test_bash_filter_greedy(self): packages = [ "dummy-filesystem", "dummy-bash.+", "-dummy-bash", ] pkg_map = self.go(packages, None, greedy="all", fulltree=True) self.assertNotIn("dummy-bash-4.2.37-6.i686.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-bash-4.2.37-6.x86_64.rpm", pkg_map["rpm"]) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-filesystem-4.2.37-6.i686.rpm", "dummy-filesystem-4.2.37-6.x86_64.rpm", ], ) self.assertEqual(pkg_map["srpm"], ["dummy-filesystem-4.2.37-6.src.rpm"]) self.assertEqual(pkg_map["debuginfo"], []) def test_ipw3945_kmod(self): # every package name is different packages = [ "dummy-kmod-ipw3945", ] pkg_map = self.go(packages, None, greedy="none", fulltree=True) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-kmod-ipw3945-1.2.0-4.20.x86_64.rpm", # Important "dummy-kmod-ipw3945-xen-1.2.0-4.20.x86_64.rpm", ], ) self.assertEqual(pkg_map["srpm"], ["dummy-ipw3945-kmod-1.2.0-4.20.src.rpm"]) self.assertEqual( pkg_map["debuginfo"], ["dummy-ipw3945-kmod-debuginfo-1.2.0-4.20.x86_64.rpm"] ) def test_multilib_method_devel_runtime(self): packages = [ "dummy-lvm2-devel", ] pkg_map = self.go( packages, None, greedy="none", fulltree=False, multilib_methods=["devel", "runtime"], ) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-basesystem-10.0-6.noarch.rpm", "dummy-filesystem-4.2.37-6.x86_64.rpm", "dummy-glibc-2.14-5.x86_64.rpm", "dummy-glibc-2.14-5.i686.rpm", "dummy-glibc-common-2.14-5.x86_64.rpm", "dummy-lvm2-2.02.84-4.x86_64.rpm", "dummy-lvm2-devel-2.02.84-4.i686.rpm", # Important "dummy-lvm2-devel-2.02.84-4.x86_64.rpm", # Important "dummy-lvm2-libs-2.02.84-4.x86_64.rpm", ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-basesystem-10.0-6.src.rpm", "dummy-filesystem-4.2.37-6.src.rpm", "dummy-glibc-2.14-5.src.rpm", "dummy-lvm2-2.02.84-4.src.rpm", ], ) six.assertCountEqual( self, pkg_map["debuginfo"], [ "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", "dummy-glibc-debuginfo-2.14-5.i686.rpm", "dummy-glibc-debuginfo-common-2.14-5.i686.rpm", "dummy-lvm2-debuginfo-2.02.84-4.i686.rpm", "dummy-lvm2-debuginfo-2.02.84-4.x86_64.rpm", ], ) def test_selinux_policy_base(self): packages = [ "dummy-freeipa-server", ] pkg_map = self.go(packages, None, greedy="none", fulltree=False, arch="ppc64") six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-freeipa-server-2.2.0-1.ppc64.rpm", # Important "dummy-selinux-policy-mls-3.10.0-121.noarch.rpm", # Important ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-freeipa-2.2.0-1.src.rpm", "dummy-selinux-policy-3.10.0-121.src.rpm", ], ) self.assertEqual(pkg_map["debuginfo"], []) def test_selinux_policy_base_greedy_build(self): packages = [ "dummy-freeipa-server", ] pkg_map = self.go(packages, None, greedy="build", fulltree=False, arch="ppc64") six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-freeipa-server-2.2.0-1.ppc64.rpm", # Important "dummy-selinux-policy-minimal-3.10.0-121.noarch.rpm", "dummy-selinux-policy-mls-3.10.0-121.noarch.rpm", # Important "dummy-selinux-policy-targeted-3.10.0-121.noarch.rpm", ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-freeipa-2.2.0-1.src.rpm", "dummy-selinux-policy-3.10.0-121.src.rpm", ], ) self.assertEqual(pkg_map["debuginfo"], []) def test_selinux_policy_base_existing_provides(self): packages = [ "dummy-selinux-policy-targeted", "dummy-freeipa-server", ] pkg_map = self.go(packages, None, greedy="none", fulltree=False, arch="ppc64") self.assertNotIn( "dummy-selinux-policy-mls-3.10.0-121.noarch.rpm", pkg_map["rpm"] ) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-freeipa-server-2.2.0-1.ppc64.rpm", # Important "dummy-selinux-policy-targeted-3.10.0-121.noarch.rpm", # Important ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-freeipa-2.2.0-1.src.rpm", "dummy-selinux-policy-3.10.0-121.src.rpm", ], ) self.assertEqual(pkg_map["debuginfo"], []) def test_selinux_policy_doc_fulltree(self): packages = ["dummy-selinux-policy-doc"] pkg_map = self.go(packages, None, fulltree=True) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-selinux-policy-doc-3.10.0-121.noarch.rpm", "dummy-selinux-policy-minimal-3.10.0-121.noarch.rpm", "dummy-selinux-policy-mls-3.10.0-121.noarch.rpm", "dummy-selinux-policy-targeted-3.10.0-121.noarch.rpm", ], ) self.assertEqual(pkg_map["srpm"], ["dummy-selinux-policy-3.10.0-121.src.rpm"]) self.assertEqual(pkg_map["debuginfo"], []) def test_AdobeReader_enu_nosrc(self): packages = [ "dummy-AdobeReader_enu", ] pkg_map = self.go(packages, None) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-AdobeReader_enu-9.5.1-1.i486.rpm", # Important "dummy-basesystem-10.0-6.noarch.rpm", "dummy-filesystem-4.2.37-6.x86_64.rpm", "dummy-glibc-common-2.14-5.x86_64.rpm", "dummy-glibc-2.14-5.x86_64.rpm", ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-AdobeReader_enu-9.5.1-1.nosrc.rpm", "dummy-basesystem-10.0-6.src.rpm", "dummy-filesystem-4.2.37-6.src.rpm", "dummy-glibc-2.14-5.src.rpm", ], ) six.assertCountEqual( self, pkg_map["debuginfo"], [ "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", ], ) def test_imsettings(self): packages = [ "dummy-imsettings", ] pkg_map = self.go(packages, None, greedy="none", fulltree=False, arch="x86_64") self.assertNotIn("dummy-imsettings-gnome-1.2.9-1.x86_64.rpm", pkg_map["rpm"]) # prefers qt over gnome (shorter name) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-imsettings-1.2.9-1.x86_64.rpm", # Important "dummy-imsettings-qt-1.2.9-1.x86_64.rpm", # Important ], ) self.assertEqual(pkg_map["srpm"], ["dummy-imsettings-1.2.9-1.src.rpm"]) self.assertEqual(pkg_map["debuginfo"], []) def test_imsettings_basic_desktop(self): packages = [ "dummy-imsettings", ] groups = ["basic-desktop"] pkg_map = self.go( packages, groups, greedy="none", fulltree=False, arch="x86_64" ) self.assertNotIn("dummy-imsettings-qt-1.2.9-1.x86_64.rpm", pkg_map["rpm"]) # prefers gnome over qt (condrequires in @basic-desktop) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-imsettings-1.2.9-1.x86_64.rpm", # Important "dummy-imsettings-gnome-1.2.9-1.x86_64.rpm", # Important ], ) self.assertEqual(pkg_map["srpm"], ["dummy-imsettings-1.2.9-1.src.rpm"]) self.assertEqual(pkg_map["debuginfo"], []) def test_imsettings_basic_desktop_nodeps(self): packages = [ "dummy-imsettings", ] groups = ["basic-desktop"] pkg_map = self.go( packages, groups, greedy="none", fulltree=False, nodeps=True, arch="x86_64" ) self.assertNotIn("dummy-imsettings-gnome-1.2.9-1.x86_64.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-imsettings-qt-1.2.9-1.x86_64.rpm", pkg_map["rpm"]) # prefers gnome over qt (condrequires in @basic-desktop) self.assertEqual(pkg_map["rpm"], ["dummy-imsettings-1.2.9-1.x86_64.rpm"]) self.assertEqual(pkg_map["srpm"], ["dummy-imsettings-1.2.9-1.src.rpm"]) self.assertEqual(pkg_map["debuginfo"], []) def test_imsettings_basic_desktop_and_qt(self): packages = [ "dummy-imsettings", "dummy-imsettings-qt", ] groups = ["basic-desktop"] pkg_map = self.go( packages, groups, greedy="none", fulltree=False, arch="x86_64" ) # prefers gnome over qt (condrequires in @basic-desktop) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-imsettings-1.2.9-1.x86_64.rpm", # Important "dummy-imsettings-gnome-1.2.9-1.x86_64.rpm", # Important "dummy-imsettings-qt-1.2.9-1.x86_64.rpm", # Important ], ) self.assertEqual(pkg_map["srpm"], ["dummy-imsettings-1.2.9-1.src.rpm"]) self.assertEqual(pkg_map["debuginfo"], []) def test_bash_nodeps(self): packages = [ "dummy-bash", ] pkg_map = self.go(packages, None, greedy="none", nodeps=True) self.assertNotIn("dummy-bash-4.2.37-5.i686.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-bash-4.2.37-5.x86_64.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-bash-4.2.37-6.i686.rpm", pkg_map["rpm"]) self.assertEqual(pkg_map["rpm"], ["dummy-bash-4.2.37-6.x86_64.rpm"]) self.assertEqual(pkg_map["srpm"], ["dummy-bash-4.2.37-6.src.rpm"]) six.assertCountEqual( self, pkg_map["debuginfo"], [ "dummy-bash-debuginfo-4.2.37-6.x86_64.rpm", "dummy-bash-debugsource-4.2.37-6.x86_64.rpm", ], ) def test_bash_fulltree_nodeps(self): packages = [ "dummy-bash", ] pkg_map = self.go(packages, None, nodeps=True, fulltree=True) self.assertNotIn("dummy-bash-4.2.37-5.i686.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-bash-4.2.37-5.x86_64.rpm", pkg_map["rpm"]) self.assertNotIn("dummy-bash-4.2.37-6.i686.rpm", pkg_map["rpm"]) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-bash-4.2.37-6.x86_64.rpm", # Important "dummy-bash-doc-4.2.37-6.noarch.rpm", ], ) self.assertEqual(pkg_map["srpm"], ["dummy-bash-4.2.37-6.src.rpm"]) six.assertCountEqual( self, pkg_map["debuginfo"], [ "dummy-bash-debuginfo-4.2.37-6.x86_64.rpm", "dummy-bash-debugsource-4.2.37-6.x86_64.rpm", ], ) def test_lookaside_empty(self): # if the input repo and lookaside repo are the same, output must be empty packages = [ "*", ] pkg_map = self.go( packages, None, lookaside=self.repo, nodeps=True, fulltree=True ) self.assertEqual(pkg_map["rpm"], []) self.assertEqual(pkg_map["srpm"], []) self.assertEqual(pkg_map["debuginfo"], []) def test_exclude_wildcards(self): packages = [ "dummy-bash", "-dummy-bas*", "dummy-glibc", ] pkg_map = self.go(packages, None, greedy="none", nodeps=True, fulltree=True) # neither dummy-bash or dummy-basesystem is pulled in six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-glibc-2.14-5.x86_64.rpm", "dummy-glibc-common-2.14-5.x86_64.rpm", "dummy-nscd-2.14-5.x86_64.rpm", ], ) self.assertEqual(pkg_map["srpm"], ["dummy-glibc-2.14-5.src.rpm"]) six.assertCountEqual( self, pkg_map["debuginfo"], [ "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", ], ) def test_atlas_greedy_none(self): packages = [ "dummy-atlas-devel", ] pkg_map = self.go(packages, None, greedy="none", fulltree=False, arch="x86_64") six.assertCountEqual( self, pkg_map["rpm"], ["dummy-atlas-3.8.4-7.x86_64.rpm", "dummy-atlas-devel-3.8.4-7.x86_64.rpm"], ) self.assertEqual(pkg_map["srpm"], ["dummy-atlas-3.8.4-7.src.rpm"]) self.assertEqual(pkg_map["debuginfo"], []) def test_atlas_greedy_build(self): packages = [ "dummy-atlas", "dummy-atlas-devel", ] pkg_map = self.go(packages, None, greedy="build", fulltree=False, arch="x86_64") six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-atlas-3.8.4-7.x86_64.rpm", "dummy-atlas-devel-3.8.4-7.x86_64.rpm", "dummy-atlas-sse3-3.8.4-7.x86_64.rpm", ], ) self.assertEqual(pkg_map["srpm"], ["dummy-atlas-3.8.4-7.src.rpm"]) self.assertEqual(pkg_map["debuginfo"], []) def test_atlas_greedy_build_multilib_devel(self): packages = [ "dummy-atlas-devel", ] pkg_map = self.go( packages, None, greedy="build", multilib_methods=["devel", "runtime"], fulltree=False, arch="x86_64", ) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-atlas-3.8.4-7.x86_64.rpm", "dummy-atlas-devel-3.8.4-7.i686.rpm", "dummy-atlas-devel-3.8.4-7.x86_64.rpm", "dummy-atlas-sse3-3.8.4-7.x86_64.rpm", ], ) self.assertEqual(pkg_map["srpm"], ["dummy-atlas-3.8.4-7.src.rpm"]) self.assertEqual(pkg_map["debuginfo"], []) def test_atlas_greedy_build_multilib_devel_32bit(self): packages = [ "dummy-atlas-devel.+", ] pkg_map = self.go( packages, None, greedy="build", multilib_methods=["devel", "runtime"], fulltree=False, arch="x86_64", ) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-atlas-3.8.4-7.x86_64.rpm", "dummy-atlas-devel-3.8.4-7.i686.rpm", "dummy-atlas-sse3-3.8.4-7.x86_64.rpm", ], ) self.assertEqual(pkg_map["srpm"], ["dummy-atlas-3.8.4-7.src.rpm"]) self.assertEqual(pkg_map["debuginfo"], []) def test_atlas_greedy_all(self): packages = [ "dummy-atlas-devel", ] pkg_map = self.go(packages, None, greedy="all", fulltree=False, arch="x86_64") six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-atlas-3.8.4-7.i686.rpm", "dummy-atlas-3dnow-3.8.4-7.i686.rpm", "dummy-atlas-devel-3.8.4-7.i686.rpm", "dummy-atlas-sse-3.8.4-7.i686.rpm", "dummy-atlas-sse2-3.8.4-7.i686.rpm", "dummy-atlas-sse3-3.8.4-7.i686.rpm", "dummy-atlas-3.8.4-7.x86_64.rpm", "dummy-atlas-devel-3.8.4-7.x86_64.rpm", "dummy-atlas-sse3-3.8.4-7.x86_64.rpm", ], ) self.assertEqual(pkg_map["srpm"], ["dummy-atlas-3.8.4-7.src.rpm"]) self.assertEqual(pkg_map["debuginfo"], []) def test_skype(self): packages = [ "dummy-skype", ] pkg_map = self.go(packages, None, greedy="build", fulltree=False, arch="x86_64") six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-skype-4.2.0.13-1.i586.rpm", "dummy-basesystem-10.0-6.noarch.rpm", "dummy-filesystem-4.2.37-6.x86_64.rpm", "dummy-glibc-common-2.14-5.x86_64.rpm", "dummy-glibc-2.14-5.i686.rpm", ], ) # no SRPM for skype six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-basesystem-10.0-6.src.rpm", "dummy-glibc-2.14-5.src.rpm", "dummy-filesystem-4.2.37-6.src.rpm", ], ) six.assertCountEqual( self, pkg_map["debuginfo"], [ "dummy-glibc-debuginfo-common-2.14-5.i686.rpm", "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", "dummy-glibc-debuginfo-2.14-5.i686.rpm", ], ) def test_prepopulate(self): packages = [ "dummy-glibc", ] prepopulate = [ "dummy-bash.i686", "dummy-lvm2.x86_64", ] pkg_map = self.go(packages, None, prepopulate=prepopulate) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-basesystem-10.0-6.noarch.rpm", "dummy-bash-4.2.37-6.i686.rpm", "dummy-filesystem-4.2.37-6.x86_64.rpm", "dummy-glibc-2.14-5.i686.rpm", "dummy-glibc-2.14-5.x86_64.rpm", "dummy-glibc-common-2.14-5.x86_64.rpm", "dummy-lvm2-2.02.84-4.x86_64.rpm", "dummy-lvm2-libs-2.02.84-4.x86_64.rpm", ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-basesystem-10.0-6.src.rpm", "dummy-bash-4.2.37-6.src.rpm", "dummy-glibc-2.14-5.src.rpm", "dummy-filesystem-4.2.37-6.src.rpm", "dummy-lvm2-2.02.84-4.src.rpm", ], ) six.assertCountEqual( self, pkg_map["debuginfo"], [ "dummy-bash-debuginfo-4.2.37-6.i686.rpm", "dummy-bash-debugsource-4.2.37-6.i686.rpm", "dummy-glibc-debuginfo-2.14-5.i686.rpm", "dummy-glibc-debuginfo-common-2.14-5.i686.rpm", "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", "dummy-lvm2-debuginfo-2.02.84-4.x86_64.rpm", ], ) def test_langpacks(self): packages = [ "dummy-release-notes", ] pkg_map = self.go(packages, None) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-release-notes-1.2-1.noarch.rpm", "dummy-release-notes-cs-CZ-1.2-1.noarch.rpm", "dummy-release-notes-en-US-1.2-1.noarch.rpm", ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-release-notes-1.2-1.src.rpm", "dummy-release-notes-cs-CZ-1.2-1.src.rpm", "dummy-release-notes-en-US-1.2-1.src.rpm", ], ) self.assertEqual(pkg_map["debuginfo"], []) def test_multilib_whitelist(self): # whitelist must work regardless if multilib_method is specified or not packages = [ "dummy-glibc", ] pkg_map = self.go(packages, None, multilib_whitelist=["dummy-glibc"]) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-filesystem-4.2.37-6.x86_64.rpm", "dummy-glibc-common-2.14-5.x86_64.rpm", "dummy-glibc-2.14-5.i686.rpm", "dummy-glibc-2.14-5.x86_64.rpm", "dummy-basesystem-10.0-6.noarch.rpm", ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-basesystem-10.0-6.src.rpm", "dummy-glibc-2.14-5.src.rpm", "dummy-filesystem-4.2.37-6.src.rpm", ], ) six.assertCountEqual( self, pkg_map["debuginfo"], [ "dummy-glibc-debuginfo-2.14-5.i686.rpm", "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", "dummy-glibc-debuginfo-common-2.14-5.i686.rpm", "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", ], ) def test_noarch_debuginfo(self): packages = [ "dummy-mingw32-qt5-qtbase", ] pkg_map = self.go(packages, None) self.assertEqual( pkg_map["rpm"], ["dummy-mingw32-qt5-qtbase-5.6.0-1.noarch.rpm"] ) self.assertEqual(pkg_map["srpm"], ["dummy-mingw-qt5-qtbase-5.6.0-1.src.rpm"]) self.assertEqual( pkg_map["debuginfo"], ["dummy-mingw32-qt5-qtbase-debuginfo-5.6.0-1.noarch.rpm"], ) def test_input_by_wildcard(self): packages = [ "dummy-release-notes-*", # Yum matches globs against NVR, DNF against names; let's exclude # the extra package to unify the behaviour. "-dummy-release-notes", ] pkg_map = self.go(packages, None) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-release-notes-cs-CZ-1.2-1.noarch.rpm", "dummy-release-notes-en-US-1.2-1.noarch.rpm", ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-release-notes-cs-CZ-1.2-1.src.rpm", "dummy-release-notes-en-US-1.2-1.src.rpm", ], ) self.assertEqual(pkg_map["debuginfo"], []) def test_requires_pre_post(self): packages = ["dummy-perl"] pkg_map = self.go(packages, None) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-perl-1.0.0-1.x86_64.rpm", "dummy-perl-macros-1.0.0-1.x86_64.rpm", # Requires(pre) "dummy-perl-utils-1.0.0-1.x86_64.rpm", # Requires(post) ], ) self.assertEqual(pkg_map["srpm"], ["dummy-perl-1.0.0-1.src.rpm"]) self.assertEqual(pkg_map["debuginfo"], []) def test_multilib_exclude_pattern_does_not_match_noarch(self): packages = [ "dummy-release-notes-en-US", "-dummy-release-notes-en*.+", ] pkg_map = self.go(packages, None) self.assertEqual(pkg_map["rpm"], ["dummy-release-notes-en-US-1.2-1.noarch.rpm"]) self.assertEqual(pkg_map["srpm"], ["dummy-release-notes-en-US-1.2-1.src.rpm"]) self.assertEqual(pkg_map["debuginfo"], []) @unittest.skipUnless(HAS_YUM, "YUM only available on Python 2") class PungiYumDepsolvingTestCase(DepsolvingBase, unittest.TestCase): def setUp(self): super(PungiYumDepsolvingTestCase, self).setUp() self.ks = os.path.join(self.tmp_dir, "ks") self.out = os.path.join(self.tmp_dir, "out") self.cwd = os.path.join(self.tmp_dir, "cwd") os.mkdir(self.cwd) self.old_cwd = os.getcwd() os.chdir(self.cwd) logger = logging.getLogger("Pungi") if not logger.handlers: formatter = logging.Formatter("%(name)s:%(levelname)s: %(message)s") console = logging.StreamHandler(sys.stdout) console.setFormatter(formatter) console.setLevel(logging.INFO) logger.addHandler(console) def tearDown(self): os.chdir(self.old_cwd) super(PungiYumDepsolvingTestCase, self).tearDown() def go( self, packages, groups, lookaside=None, prepopulate=None, fulltree_excludes=None, multilib_blacklist=None, multilib_whitelist=None, **kwargs ): """ Write a kickstart with given packages and groups, then run the depsolving and parse the output. """ p = PungiWrapper() repos = {"repo": self.repo} if lookaside: repos["lookaside"] = lookaside kwargs["lookaside_repos"] = ["lookaside"] p.write_kickstart( self.ks, repos, groups, packages, prepopulate=prepopulate, multilib_whitelist=multilib_whitelist, multilib_blacklist=multilib_blacklist, fulltree_excludes=fulltree_excludes, ) kwargs.setdefault("cache_dir", self.tmp_dir) # Unless the test specifies an arch, we need to default to x86_64. # Otherwise the arch of current machine will be used, which will cause # failure most of the time. kwargs.setdefault("arch", "x86_64") p.run_pungi(self.ks, self.tmp_dir, "DP", **kwargs) with open(self.out, "r") as f: pkg_map, self.broken_deps, _ = p.parse_log(f) return convert_pkg_map(pkg_map) def convert_dnf_packages(pkgs, flags): convert_table = { # Hawkey returns nosrc package as src "dummy-AdobeReader_enu-9.5.1-1.src": "dummy-AdobeReader_enu-9.5.1-1.nosrc", } result = set() for p in pkgs: name = str(p) name = convert_table.get(name, name) if PkgFlag.lookaside in flags.get(p, []): # Package is coming from lookaside repo, we don't want those in # output. continue result.add(name + ".rpm") return sorted(result) @unittest.skipUnless(HAS_DNF, "Dependencies are not available") class DNFDepsolvingTestCase(DepsolvingBase, unittest.TestCase): def setUp(self): super(DNFDepsolvingTestCase, self).setUp() self.cachedir = os.path.join(self.tmp_dir, "pungi_dnf_cache") self.get_langpacks = False logger = logging.getLogger("gather_dnf") if not logger.handlers: formatter = logging.Formatter("%(name)s:%(levelname)s: %(message)s") console = logging.StreamHandler(sys.stdout) console.setFormatter(formatter) console.setLevel(logging.INFO) logger.addHandler(console) self.maxDiff = None def go(self, packages, groups, lookaside=None, **kwargs): arch = kwargs.pop("arch", "x86_64") if "greedy" in kwargs: kwargs["greedy_method"] = kwargs.pop("greedy") if "nodeps" in kwargs: kwargs["resolve_deps"] = not kwargs.pop("nodeps") if lookaside: kwargs["lookaside_repos"] = ["lookaside"] self.dnf = self.dnf_instance(arch, lookaside=lookaside, persistdir=self.tmp_dir) if self.get_langpacks: kwargs["langpacks"] = self.dnf.comps_wrapper.get_langpacks() groups = groups or [] exclude_groups = [] _, conditional_packages = self.dnf.comps_wrapper.get_comps_packages( groups, exclude_groups ) self.g = Gather(self.dnf, GatherOptions(**kwargs)) self.g.logger.handlers = [ h for h in self.g.logger.handlers if h.name != "capture-logs" ] log_output = cStringIO() handler = logging.StreamHandler(log_output) handler.name = "capture-logs" handler.setLevel(logging.WARNING) self.g.logger.addHandler(handler) self.g.gather(packages, conditional_packages) log_output.seek(0) _, self.broken_deps, _ = PungiWrapper().parse_log(log_output) return { "debuginfo": convert_dnf_packages( self.g.result_debug_packages, self.g.result_package_flags ), "srpm": convert_dnf_packages( self.g.result_source_packages, self.g.result_package_flags ), "rpm": convert_dnf_packages( self.g.result_binary_packages, self.g.result_package_flags ), } def dnf_instance(self, base_arch, exclude=None, lookaside=False, persistdir=None): conf = Conf(base_arch) conf.persistdir = persistdir conf.cachedir = self.cachedir if exclude: conf.exclude = exclude dnf = DnfWrapper(conf) if lookaside: dnf.add_repo("lookaside", lookaside, lookaside=True) dnf.add_repo("test-repo", self.repo) dnf.fill_sack(load_system_repo=False, load_available_repos=True) dnf.read_comps() return dnf def assertFlags(self, nvra, expected_flags): assert isinstance(nvra, str) assert isinstance(expected_flags, list) expected_flags = set(expected_flags) found = False for pkg, flags in self.g.result_package_flags.items(): if nvra == "%s-%s-%s.%s" % (pkg.name, pkg.version, pkg.release, pkg.arch): self.assertEqual( flags, expected_flags, "pkg: %s; flags: %s; expected flags: %s" % (nvra, flags, expected_flags), ) found = True if not found: flags = set() self.assertEqual( flags, expected_flags, "pkg: %s; flags: %s; expected flags: %s" % (nvra, flags, expected_flags), ) def test_langpacks(self): self.get_langpacks = True super(DNFDepsolvingTestCase, self).test_langpacks() @unittest.skip("DNF code does not support NVR as input") def test_bash_older(self): pass def test_firefox_selfhosting_with_krb5_lookaside(self): super( DNFDepsolvingTestCase, self ).test_firefox_selfhosting_with_krb5_lookaside() self.assertFlags("dummy-krb5-devel-1.10-5.x86_64", [PkgFlag.lookaside]) self.assertFlags("dummy-krb5-1.10-5.src", [PkgFlag.lookaside]) def test_only_required_debuginfo_pulled_in(self): self.repo = os.path.join(os.path.dirname(__file__), "fixtures/repos/debuginfo") packages = ["libuser.+", "python-libuser"] pkg_map = self.go(packages, None) six.assertCountEqual( self, pkg_map["rpm"], ["libuser-1-1.i686.rpm", "python-libuser-1-1.x86_64.rpm"], ) self.assertEqual(pkg_map["srpm"], ["libuser-1-1.src.rpm"]) six.assertCountEqual( self, pkg_map["debuginfo"], [ "libuser-debuginfo-1-1.i686.rpm", "python-libuser-debuginfo-1-1.x86_64.rpm", ], ) def test_skype(self): packages = [ "dummy-skype", ] pkg_map = self.go(packages, None, greedy="build", fulltree=False, arch="x86_64") six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-skype-4.2.0.13-1.i586.rpm", "dummy-basesystem-10.0-6.noarch.rpm", "dummy-filesystem-4.2.37-6.x86_64.rpm", "dummy-glibc-common-2.14-5.x86_64.rpm", "dummy-glibc-2.14-5.i686.rpm", ], ) # no SRPM for skype six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-basesystem-10.0-6.src.rpm", "dummy-glibc-2.14-5.src.rpm", "dummy-filesystem-4.2.37-6.src.rpm", ], ) six.assertCountEqual( self, pkg_map["debuginfo"], [ "dummy-glibc-debuginfo-common-2.14-5.i686.rpm", "dummy-glibc-debuginfo-2.14-5.i686.rpm", ], ) def test_bash_multilib_exclude_debuginfo(self): packages = [ "dummy-bash.+", "-dummy-bash-debuginfo", "-dummy-bash-debugsource", ] pkg_map = self.go(packages, None, greedy="none") six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-basesystem-10.0-6.noarch.rpm", "dummy-bash-4.2.37-6.i686.rpm", "dummy-filesystem-4.2.37-6.x86_64.rpm", "dummy-glibc-2.14-5.i686.rpm", "dummy-glibc-common-2.14-5.x86_64.rpm", ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-basesystem-10.0-6.src.rpm", "dummy-bash-4.2.37-6.src.rpm", "dummy-filesystem-4.2.37-6.src.rpm", "dummy-glibc-2.14-5.src.rpm", ], ) six.assertCountEqual( self, pkg_map["debuginfo"], [ "dummy-glibc-debuginfo-2.14-5.i686.rpm", "dummy-glibc-debuginfo-common-2.14-5.i686.rpm", ], ) def test_exclude_wildcards(self): packages = [ "dummy-bash", "-dummy-bas*", "dummy-glibc", ] pkg_map = self.go(packages, None, greedy="none", nodeps=True, fulltree=True) # neither dummy-bash or dummy-basesystem is pulled in six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-glibc-2.14-5.x86_64.rpm", "dummy-glibc-common-2.14-5.x86_64.rpm", "dummy-nscd-2.14-5.x86_64.rpm", ], ) self.assertEqual(pkg_map["srpm"], ["dummy-glibc-2.14-5.src.rpm"]) self.assertEqual( pkg_map["debuginfo"], ["dummy-glibc-debuginfo-2.14-5.x86_64.rpm"] ) def test_bash_multilib_exclude_source(self): packages = [ "dummy-bash.+", "-dummy-bash.src", ] pkg_map = self.go(packages, None, greedy="none") self.assertNotIn("dummy-bash-4.2.37-6.src.rpm", pkg_map["srpm"]) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-basesystem-10.0-6.noarch.rpm", "dummy-bash-4.2.37-6.i686.rpm", "dummy-filesystem-4.2.37-6.x86_64.rpm", "dummy-glibc-2.14-5.i686.rpm", "dummy-glibc-common-2.14-5.x86_64.rpm", ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-basesystem-10.0-6.src.rpm", "dummy-filesystem-4.2.37-6.src.rpm", "dummy-glibc-2.14-5.src.rpm", ], ) six.assertCountEqual( self, pkg_map["debuginfo"], [ "dummy-bash-debuginfo-4.2.37-6.i686.rpm", "dummy-bash-debugsource-4.2.37-6.i686.rpm", "dummy-glibc-debuginfo-2.14-5.i686.rpm", "dummy-glibc-debuginfo-common-2.14-5.i686.rpm", ], ) def test_ipw3945_kmod(self): # every package name is different packages = [ "dummy-kmod-ipw3945", ] pkg_map = self.go(packages, None, greedy="none", fulltree=True) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-kmod-ipw3945-1.2.0-4.20.x86_64.rpm", # Important "dummy-kmod-ipw3945-xen-1.2.0-4.20.x86_64.rpm", ], ) self.assertEqual(pkg_map["srpm"], ["dummy-ipw3945-kmod-1.2.0-4.20.src.rpm"]) self.assertEqual(pkg_map["debuginfo"], []) def test_multilib_method_devel_runtime(self): packages = [ "dummy-lvm2-devel", ] pkg_map = self.go( packages, None, greedy="none", fulltree=False, multilib_methods=["devel", "runtime"], ) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-basesystem-10.0-6.noarch.rpm", "dummy-filesystem-4.2.37-6.x86_64.rpm", "dummy-glibc-2.14-5.x86_64.rpm", "dummy-glibc-2.14-5.i686.rpm", "dummy-glibc-common-2.14-5.x86_64.rpm", "dummy-lvm2-2.02.84-4.x86_64.rpm", "dummy-lvm2-devel-2.02.84-4.i686.rpm", # Important "dummy-lvm2-devel-2.02.84-4.x86_64.rpm", # Important "dummy-lvm2-libs-2.02.84-4.x86_64.rpm", ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-basesystem-10.0-6.src.rpm", "dummy-filesystem-4.2.37-6.src.rpm", "dummy-glibc-2.14-5.src.rpm", "dummy-lvm2-2.02.84-4.src.rpm", ], ) six.assertCountEqual( self, pkg_map["debuginfo"], [ "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", "dummy-glibc-debuginfo-2.14-5.i686.rpm", "dummy-glibc-debuginfo-common-2.14-5.i686.rpm", "dummy-lvm2-debuginfo-2.02.84-4.x86_64.rpm", ], ) def test_exclude_source(self): packages = ["dummy-bash"] pkg_map = self.go(packages, None, exclude_source=True) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-basesystem-10.0-6.noarch.rpm", "dummy-bash-4.2.37-6.x86_64.rpm", "dummy-filesystem-4.2.37-6.x86_64.rpm", "dummy-glibc-2.14-5.x86_64.rpm", "dummy-glibc-common-2.14-5.x86_64.rpm", ], ) six.assertCountEqual(self, pkg_map["srpm"], []) six.assertCountEqual( self, pkg_map["debuginfo"], [ "dummy-bash-debuginfo-4.2.37-6.x86_64.rpm", "dummy-bash-debugsource-4.2.37-6.x86_64.rpm", "dummy-glibc-debuginfo-2.14-5.x86_64.rpm", "dummy-glibc-debuginfo-common-2.14-5.x86_64.rpm", ], ) def test_exclude_debug(self): packages = ["dummy-bash"] pkg_map = self.go(packages, None, exclude_debug=True) six.assertCountEqual( self, pkg_map["rpm"], [ "dummy-basesystem-10.0-6.noarch.rpm", "dummy-bash-4.2.37-6.x86_64.rpm", "dummy-filesystem-4.2.37-6.x86_64.rpm", "dummy-glibc-2.14-5.x86_64.rpm", "dummy-glibc-common-2.14-5.x86_64.rpm", ], ) six.assertCountEqual( self, pkg_map["srpm"], [ "dummy-basesystem-10.0-6.src.rpm", "dummy-bash-4.2.37-6.src.rpm", "dummy-filesystem-4.2.37-6.src.rpm", "dummy-glibc-2.14-5.src.rpm", ], ) six.assertCountEqual(self, pkg_map["debuginfo"], [])