# -*- 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 HERE = os.path.dirname(__file__) BINDIR = (os.path.join(HERE, '..', 'bin')) sys.path.insert(0, os.path.join(HERE, '..')) os.environ['PATH'] = '%s:%s' % (BINDIR, os.environ['PATH']) from pungi.wrappers.pungi import PungiWrapper try: from dnf import __version__ as dnf_version 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.assertItemsEqual(pkg_map["rpm"], [ "dummy-kernel-3.1.0-1.x86_64.rpm", # Important ]) self.assertItemsEqual(pkg_map["srpm"], [ "dummy-kernel-3.1.0-1.src.rpm" ]) self.assertItemsEqual(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"]) self.assertItemsEqual(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.assertItemsEqual(pkg_map["srpm"], [ "dummy-kernel-3.1.0-1.src.rpm" ]) self.assertItemsEqual(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.assertItemsEqual(pkg_map["rpm"], [ "dummy-kernel-3.1.0-1.x86_64.rpm", ]) self.assertItemsEqual(pkg_map["srpm"], [ "dummy-kernel-3.1.0-1.src.rpm" ]) self.assertItemsEqual(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"]) self.assertItemsEqual(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.assertItemsEqual(pkg_map["srpm"], [ "dummy-kernel-3.1.0-1.src.rpm" ]) self.assertItemsEqual(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"]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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) self.assertItemsEqual(pkg_map["rpm"], [ "dummy-foo32-1-1.i686.rpm", # Important "dummy-foo32-doc-1-1.noarch.rpm", # Important ]) self.assertItemsEqual(pkg_map["srpm"], [ "dummy-foo32-1-1.src.rpm" ]) self.assertItemsEqual(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") self.assertItemsEqual(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", ]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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") self.assertItemsEqual(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", ]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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"]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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"]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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"]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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"]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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.assertItemsEqual(pkg_map["rpm"], [ "dummy-filesystem-4.2.37-6.x86_64.rpm", ]) self.assertItemsEqual(pkg_map["srpm"], [ "dummy-filesystem-4.2.37-6.src.rpm", ]) self.assertItemsEqual(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"]) self.assertItemsEqual(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 ]) self.assertItemsEqual(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.assertItemsEqual(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"]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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"]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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") self.assertItemsEqual(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", ]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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") self.assertItemsEqual(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", ]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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") self.assertItemsEqual(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", ]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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"]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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"]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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"]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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, {}) self.assertItemsEqual(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.assertItemsEqual(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"]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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"]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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"]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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"]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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*']) self.assertItemsEqual(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", ]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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) 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"]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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"]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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) self.assertItemsEqual(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", ]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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"]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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"]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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"]) self.assertItemsEqual(pkg_map["rpm"], [ "dummy-filesystem-4.2.37-6.i686.rpm", "dummy-filesystem-4.2.37-6.x86_64.rpm", ]) self.assertItemsEqual(pkg_map["srpm"], [ "dummy-filesystem-4.2.37-6.src.rpm", ]) self.assertItemsEqual(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) self.assertItemsEqual(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.assertItemsEqual(pkg_map["srpm"], [ "dummy-ipw3945-kmod-1.2.0-4.20.src.rpm", ]) self.assertItemsEqual(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"]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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") self.assertItemsEqual(pkg_map["rpm"], [ "dummy-freeipa-server-2.2.0-1.ppc64.rpm", # Important "dummy-selinux-policy-mls-3.10.0-121.noarch.rpm", # Important ]) self.assertItemsEqual(pkg_map["srpm"], [ "dummy-freeipa-2.2.0-1.src.rpm", "dummy-selinux-policy-3.10.0-121.src.rpm", ]) self.assertItemsEqual(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") self.assertItemsEqual(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" ]) self.assertItemsEqual(pkg_map["srpm"], [ "dummy-freeipa-2.2.0-1.src.rpm", "dummy-selinux-policy-3.10.0-121.src.rpm", ]) self.assertItemsEqual(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"]) self.assertItemsEqual(pkg_map["rpm"], [ "dummy-freeipa-server-2.2.0-1.ppc64.rpm", # Important "dummy-selinux-policy-targeted-3.10.0-121.noarch.rpm", # Important ]) self.assertItemsEqual(pkg_map["srpm"], [ "dummy-freeipa-2.2.0-1.src.rpm", "dummy-selinux-policy-3.10.0-121.src.rpm", ]) self.assertItemsEqual(pkg_map["debuginfo"], []) def test_selinux_policy_doc_fulltree(self): packages = [ "dummy-selinux-policy-doc" ] pkg_map = self.go(packages, None, fulltree=True) self.assertItemsEqual(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.assertItemsEqual(pkg_map["srpm"], [ "dummy-selinux-policy-3.10.0-121.src.rpm" ]) self.assertItemsEqual(pkg_map["debuginfo"], []) def test_AdobeReader_enu_nosrc(self): packages = [ "dummy-AdobeReader_enu", ] pkg_map = self.go(packages, None) self.assertItemsEqual(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", ]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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) self.assertItemsEqual(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.assertItemsEqual(pkg_map["srpm"], [ "dummy-imsettings-1.2.9-1.src.rpm", ]) self.assertItemsEqual(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) self.assertItemsEqual(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.assertItemsEqual(pkg_map["srpm"], [ "dummy-imsettings-1.2.9-1.src.rpm", ]) self.assertItemsEqual(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.assertItemsEqual(pkg_map["rpm"], [ "dummy-imsettings-1.2.9-1.x86_64.rpm", # Important ]) self.assertItemsEqual(pkg_map["srpm"], [ "dummy-imsettings-1.2.9-1.src.rpm", ]) self.assertItemsEqual(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) self.assertItemsEqual(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.assertItemsEqual(pkg_map["srpm"], [ "dummy-imsettings-1.2.9-1.src.rpm", ]) self.assertItemsEqual(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.assertItemsEqual(pkg_map["rpm"], [ "dummy-bash-4.2.37-6.x86_64.rpm", # Important ]) self.assertItemsEqual(pkg_map["srpm"], [ "dummy-bash-4.2.37-6.src.rpm", ]) self.assertItemsEqual(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"]) self.assertItemsEqual(pkg_map["rpm"], [ "dummy-bash-4.2.37-6.x86_64.rpm", # Important "dummy-bash-doc-4.2.37-6.noarch.rpm", ]) self.assertItemsEqual(pkg_map["srpm"], [ "dummy-bash-4.2.37-6.src.rpm", ]) self.assertItemsEqual(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.assertItemsEqual(pkg_map["rpm"], []) self.assertItemsEqual(pkg_map["srpm"], []) self.assertItemsEqual(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 self.assertItemsEqual(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.assertItemsEqual(pkg_map["srpm"], [ "dummy-glibc-2.14-5.src.rpm", ]) self.assertItemsEqual(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") self.assertItemsEqual(pkg_map["rpm"], [ "dummy-atlas-3.8.4-7.x86_64.rpm", "dummy-atlas-devel-3.8.4-7.x86_64.rpm", ]) self.assertItemsEqual(pkg_map["srpm"], [ "dummy-atlas-3.8.4-7.src.rpm", ]) self.assertItemsEqual(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") self.assertItemsEqual(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.assertItemsEqual(pkg_map["srpm"], [ "dummy-atlas-3.8.4-7.src.rpm", ]) self.assertItemsEqual(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") self.assertItemsEqual(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.assertItemsEqual(pkg_map["srpm"], [ "dummy-atlas-3.8.4-7.src.rpm", ]) self.assertItemsEqual(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") self.assertItemsEqual(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.assertItemsEqual(pkg_map["srpm"], [ "dummy-atlas-3.8.4-7.src.rpm", ]) self.assertItemsEqual(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") self.assertItemsEqual(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.assertItemsEqual(pkg_map["srpm"], [ "dummy-atlas-3.8.4-7.src.rpm", ]) self.assertItemsEqual(pkg_map["debuginfo"], []) def test_skype(self): packages = [ "dummy-skype", ] pkg_map = self.go(packages, None, greedy="build", fulltree=False, arch="x86_64") self.assertItemsEqual(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 self.assertItemsEqual(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", ]) self.assertItemsEqual(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) self.assertItemsEqual(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", ]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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) self.assertItemsEqual(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", ]) self.assertItemsEqual(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.assertItemsEqual(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"]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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.assertItemsEqual(pkg_map["rpm"], [ "dummy-mingw32-qt5-qtbase-5.6.0-1.noarch.rpm", ]) self.assertItemsEqual(pkg_map["srpm"], [ "dummy-mingw-qt5-qtbase-5.6.0-1.src.rpm", ]) self.assertItemsEqual(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) self.assertItemsEqual(pkg_map["rpm"], [ "dummy-release-notes-cs-CZ-1.2-1.noarch.rpm", "dummy-release-notes-en-US-1.2-1.noarch.rpm", ]) self.assertItemsEqual(pkg_map["srpm"], [ "dummy-release-notes-cs-CZ-1.2-1.src.rpm", "dummy-release-notes-en-US-1.2-1.src.rpm", ]) self.assertItemsEqual(pkg_map["debuginfo"], []) def test_requires_pre_post(self): packages = [ "dummy-perl" ] pkg_map = self.go(packages, None) self.assertItemsEqual(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.assertItemsEqual(pkg_map["srpm"], [ "dummy-perl-1.0.0-1.src.rpm", ]) self.assertItemsEqual(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.assertItemsEqual(pkg_map["rpm"], [ "dummy-release-notes-en-US-1.2-1.noarch.rpm", ]) self.assertItemsEqual(pkg_map["srpm"], [ "dummy-release-notes-en-US-1.2-1.src.rpm", ]) self.assertItemsEqual(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") 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 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 int(dnf_version.split('.')[0]) < 3: conf.modulesdir = os.path.join(persistdir, 'modules.d') else: conf.modulesdir._set(os.path.join(persistdir, 'modules.d')) 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_whitelist_old_version(self): # There are two version of dummy-bash in the package set; let's # whitelist only the older one and its dependencies. packages = [ "dummy-bash", ] package_whitelist = [ "dummy-basesystem-10.0-6", "dummy-bash-debuginfo-4.2.37-5", "dummy-bash-4.2.37-5", "dummy-filesystem-4.2.37-6", "dummy-glibc-common-2.14-5", "dummy-glibc-debuginfo-common-2.14-5", "dummy-glibc-debuginfo-2.14-5", "dummy-glibc-2.14-5", ] pkg_map = self.go(packages, None, greedy="none", package_whitelist=package_whitelist) 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"]) self.assertItemsEqual(pkg_map["rpm"], [ "dummy-basesystem-10.0-6.noarch.rpm", "dummy-bash-4.2.37-5.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", ]) self.assertItemsEqual(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", ]) self.assertItemsEqual(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_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]) self.assertFlags("dummy-krb5-debuginfo-1.10-5.x86_64", [PkgFlag.lookaside]) def test_package_whitelist(self): packages = ['*'] whitelist = [ 'dummy-bash-4.2.37-6', ] pkg_map = self.go(packages, None, package_whitelist=whitelist) self.assertItemsEqual(pkg_map["rpm"], [ 'dummy-bash-4.2.37-6.x86_64.rpm', ]) self.assertItemsEqual(pkg_map["srpm"], [ 'dummy-bash-4.2.37-6.src.rpm', ]) self.assertItemsEqual(pkg_map["debuginfo"], [ ])