pungi/tests/test_pkgset_common.py

116 lines
4.1 KiB
Python
Executable File

# -*- coding: utf-8 -*-
import os
import mock
import six
from pungi.module_util import Modulemd
from pungi.phases.pkgset import common
from tests import helpers
class MockCreateRepo(object):
def __init__(self, createrepo_c):
self.createrepo_c = createrepo_c
def get_createrepo_cmd(self, path_prefix, outputdir, pkglist, **kwargs):
return (path_prefix, outputdir, pkglist)
@mock.patch("pungi.phases.init.run_in_threads", new=helpers.fake_run_in_threads)
@mock.patch("pungi.phases.pkgset.common.CreaterepoWrapper", new=MockCreateRepo)
@mock.patch("pungi.phases.pkgset.common.run")
class TestMaterializedPkgsetCreate(helpers.PungiTestCase):
def setUp(self):
super(TestMaterializedPkgsetCreate, self).setUp()
self.compose = helpers.DummyCompose(self.topdir, {})
self.prefix = "/prefix"
self.pkgset = self._make_pkgset("foo")
self.subsets = {}
def _mk_call(self, arch, name):
pkglist = "%s.%s.conf" % (arch, name)
logfile = "arch_repo.%s.%s.log" % (name, arch)
return mock.call(
(
self.prefix,
os.path.join(self.topdir, "work", arch, "repo", name),
os.path.join(self.topdir, "work", arch, "package_list", pkglist),
),
logfile=os.path.join(self.topdir, "logs", arch, logfile),
show_cmd=True,
)
def _make_pkgset(self, name):
pkgset = mock.Mock()
pkgset.name = name
def mock_subset(primary, arch_list, exclusive_noarch):
self.subsets[primary] = mock.Mock()
return self.subsets[primary]
pkgset.subset.side_effect = mock_subset
return pkgset
def _mk_paths(self, name, arches):
paths = {"global": os.path.join(self.topdir, "work/global/repo", name)}
for arch in arches:
paths[arch] = os.path.join(self.topdir, "work", arch, "repo", name)
return paths
def test_run(self, mock_run):
result = common.MaterializedPackageSet.create(
self.compose, self.pkgset, self.prefix
)
six.assertCountEqual(
self, result.package_sets.keys(), ["global", "amd64", "x86_64"]
)
self.assertEqual(result["global"], self.pkgset)
self.assertEqual(result["x86_64"], self.subsets["x86_64"])
self.assertEqual(result["amd64"], self.subsets["amd64"])
self.pkgset.subset.assert_any_call(
"x86_64", ["x86_64", "noarch", "src"], exclusive_noarch=True
)
self.pkgset.subset.assert_any_call(
"amd64", ["amd64", "x86_64", "noarch", "src"], exclusive_noarch=True
)
for arch, pkgset in result.package_sets.items():
pkgset.save_file_list.assed_any_call(
os.path.join(
self.topdir, "work", arch, "package_list", arch + ".foo.conf"
),
remove_path_prefix=self.prefix,
)
self.assertEqual(result.paths, self._mk_paths("foo", ["amd64", "x86_64"]))
mock_run.assert_has_calls(
[self._mk_call(arch, "foo") for arch in ["global", "amd64", "x86_64"]],
any_order=True,
)
@helpers.unittest.skipUnless(Modulemd, "Skipping tests, no module support")
@mock.patch("pungi.phases.pkgset.common.collect_module_defaults")
@mock.patch("pungi.phases.pkgset.common.add_modular_metadata")
def test_run_with_modulemd(self, amm, cmd, mock_run):
mmd = {"x86_64": [mock.Mock()]}
common.MaterializedPackageSet.create(
self.compose, self.pkgset, self.prefix, mmd=mmd
)
cmd.assert_called_once_with(
os.path.join(self.topdir, "work/global/module_defaults"),
set(x.get_module_name.return_value for x in mmd["x86_64"]),
overrides_dir=None,
)
amm.assert_called_once_with(
mock.ANY,
os.path.join(self.topdir, "work/x86_64/repo/foo"),
cmd.return_value,
os.path.join(self.topdir, "logs/x86_64/arch_repo_modulemd.foo.x86_64.log"),
)
cmd.return_value.add_module_stream.assert_called_once_with(mmd["x86_64"][0])