196 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			196 lines
		
	
	
		
			6.8 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # -*- coding: utf-8 -*-
 | |
| 
 | |
| from unittest import mock
 | |
| 
 | |
| from pungi.phases.gather.methods import method_deps as deps
 | |
| from tests import helpers
 | |
| 
 | |
| 
 | |
| class TestWritePungiConfig(helpers.PungiTestCase):
 | |
|     def setUp(self):
 | |
|         super(TestWritePungiConfig, self).setUp()
 | |
|         self.compose = helpers.DummyCompose(self.topdir, {})
 | |
|         self.package_sets = self._make_pkgset_phase(["p1"]).package_sets
 | |
| 
 | |
|     def assertWritten(self, PungiWrapper, **kwargs):
 | |
|         wrapper = PungiWrapper.return_value
 | |
|         self.assertEqual(wrapper.mock_calls, [mock.call.write_kickstart(**kwargs)])
 | |
| 
 | |
|     @mock.patch("pungi.phases.gather.methods.method_deps.PungiWrapper")
 | |
|     def test_correct(self, PungiWrapper):
 | |
|         pkgs = [("pkg1", None), ("pkg2", "x86_64")]
 | |
|         grps = ["grp1"]
 | |
|         filter = [("pkg3", None), ("pkg4", "x86_64")]
 | |
|         white = mock.Mock()
 | |
|         black = mock.Mock()
 | |
|         prepopulate = mock.Mock()
 | |
|         fulltree = mock.Mock()
 | |
|         deps.write_pungi_config(
 | |
|             self.compose,
 | |
|             "x86_64",
 | |
|             self.compose.variants["Server"],
 | |
|             pkgs,
 | |
|             grps,
 | |
|             filter,
 | |
|             white,
 | |
|             black,
 | |
|             prepopulate=prepopulate,
 | |
|             fulltree_excludes=fulltree,
 | |
|             package_sets=self.package_sets,
 | |
|         )
 | |
|         self.assertWritten(
 | |
|             PungiWrapper,
 | |
|             packages=["pkg1", "pkg2.x86_64"],
 | |
|             ks_path=self.topdir + "/work/x86_64/pungi/Server.x86_64.conf",
 | |
|             lookaside_repos={},
 | |
|             multilib_whitelist=white,
 | |
|             multilib_blacklist=black,
 | |
|             groups=["grp1"],
 | |
|             prepopulate=prepopulate,
 | |
|             repos={
 | |
|                 "pungi-repo-0": self.topdir + "/work/x86_64/repo/p1",
 | |
|                 "comps-repo": self.topdir + "/work/x86_64/comps_repo_Server",
 | |
|             },
 | |
|             exclude_packages=["pkg3", "pkg4.x86_64"],
 | |
|             fulltree_excludes=fulltree,
 | |
|         )
 | |
| 
 | |
|     @mock.patch("pungi.phases.gather.methods.method_deps.PungiWrapper")
 | |
|     def test_duplicated_package_name(self, PungiWrapper):
 | |
|         pkgs = [("pkg1", None), ("pkg1", "x86_64")]
 | |
|         grps = []
 | |
|         filter = [("pkg2", None), ("pkg2", "x86_64")]
 | |
|         white = mock.Mock()
 | |
|         black = mock.Mock()
 | |
|         prepopulate = mock.Mock()
 | |
|         fulltree = mock.Mock()
 | |
|         deps.write_pungi_config(
 | |
|             self.compose,
 | |
|             "x86_64",
 | |
|             self.compose.variants["Server"],
 | |
|             pkgs,
 | |
|             grps,
 | |
|             filter,
 | |
|             white,
 | |
|             black,
 | |
|             prepopulate=prepopulate,
 | |
|             fulltree_excludes=fulltree,
 | |
|             package_sets=self.package_sets,
 | |
|         )
 | |
|         self.assertWritten(
 | |
|             PungiWrapper,
 | |
|             packages=["pkg1", "pkg1.x86_64"],
 | |
|             ks_path=self.topdir + "/work/x86_64/pungi/Server.x86_64.conf",
 | |
|             lookaside_repos={},
 | |
|             multilib_whitelist=white,
 | |
|             multilib_blacklist=black,
 | |
|             groups=[],
 | |
|             prepopulate=prepopulate,
 | |
|             repos={
 | |
|                 "pungi-repo-0": self.topdir + "/work/x86_64/repo/p1",
 | |
|                 "comps-repo": self.topdir + "/work/x86_64/comps_repo_Server",
 | |
|             },
 | |
|             exclude_packages=["pkg2", "pkg2.x86_64"],
 | |
|             fulltree_excludes=fulltree,
 | |
|         )
 | |
| 
 | |
|     @mock.patch("pungi.phases.gather.get_lookaside_repos")
 | |
|     @mock.patch("pungi.phases.gather.methods.method_deps.PungiWrapper")
 | |
|     def test_with_lookaside(self, PungiWrapper, glr):
 | |
|         glr.return_value = ["http://example.com/repo"]
 | |
|         pkgs = [("pkg1", None)]
 | |
|         deps.write_pungi_config(
 | |
|             self.compose,
 | |
|             "x86_64",
 | |
|             self.compose.variants["Server"],
 | |
|             pkgs,
 | |
|             [],
 | |
|             [],
 | |
|             [],
 | |
|             [],
 | |
|             package_sets=self.package_sets,
 | |
|         )
 | |
|         self.assertWritten(
 | |
|             PungiWrapper,
 | |
|             packages=["pkg1"],
 | |
|             ks_path=self.topdir + "/work/x86_64/pungi/Server.x86_64.conf",
 | |
|             lookaside_repos={"lookaside-repo-0": "http://example.com/repo"},
 | |
|             multilib_whitelist=[],
 | |
|             multilib_blacklist=[],
 | |
|             groups=[],
 | |
|             prepopulate=None,
 | |
|             repos={
 | |
|                 "pungi-repo-0": self.topdir + "/work/x86_64/repo/p1",
 | |
|                 "comps-repo": self.topdir + "/work/x86_64/comps_repo_Server",
 | |
|             },
 | |
|             exclude_packages=[],
 | |
|             fulltree_excludes=None,
 | |
|         )
 | |
|         self.assertEqual(
 | |
|             glr.call_args_list,
 | |
|             [mock.call(self.compose, "x86_64", self.compose.variants["Server"])],
 | |
|         )
 | |
| 
 | |
|     @mock.patch("pungi.phases.gather.methods.method_deps.PungiWrapper")
 | |
|     def test_without_input(self, PungiWrapper):
 | |
|         with self.assertRaises(RuntimeError) as ctx:
 | |
|             deps.write_pungi_config(
 | |
|                 self.compose,
 | |
|                 "x86_64",
 | |
|                 self.compose.variants["Server"],
 | |
|                 [],
 | |
|                 [],
 | |
|                 [],
 | |
|                 [],
 | |
|                 [],
 | |
|             )
 | |
|         self.assertEqual(
 | |
|             str(ctx.exception),
 | |
|             "No packages included in Server.x86_64 (no comps groups, no input packages, no prepopulate)",  # noqa: E501
 | |
|         )
 | |
|         self.assertEqual(PungiWrapper.return_value.mock_calls, [])
 | |
| 
 | |
| 
 | |
| class TestRaiseOnInvalidSigkeys(helpers.PungiTestCase):
 | |
|     def test_raise_on_invalid_sigkeys(self):
 | |
|         pkgset = {
 | |
|             "global": mock.Mock(),
 | |
|         }
 | |
|         pkgset["global"].invalid_sigkey_rpms = [{"name": "pkg1"}]
 | |
|         pkgset["global"].raise_invalid_sigkeys_exception = mock.Mock(
 | |
|             side_effect=RuntimeError()
 | |
|         )
 | |
|         result = {
 | |
|             "rpm": [{"path": "pkg1-1-1.el7"}],
 | |
|         }
 | |
|         with self.assertRaises(RuntimeError):
 | |
|             deps.raise_on_invalid_sigkeys("", "", [pkgset], result)
 | |
| 
 | |
| 
 | |
| class TestCheckDeps(helpers.PungiTestCase):
 | |
|     def setUp(self):
 | |
|         super(TestCheckDeps, self).setUp()
 | |
|         self.compose = helpers.DummyCompose(self.topdir, {})
 | |
|         self.arch = "x86_64"
 | |
|         self.variant = self.compose.variants["Server"]
 | |
| 
 | |
|     def test_not_check_deps(self):
 | |
|         self.compose.conf["check_deps"] = False
 | |
|         self.assertIsNone(deps.check_deps(self.compose, self.arch, self.variant, {}))
 | |
| 
 | |
|     def test_missing_deps(self):
 | |
|         self.compose.conf["check_deps"] = True
 | |
|         missing_deps = {"foo.noarch": set(["bar = 1.1"])}
 | |
|         with self.assertRaises(RuntimeError) as ctx:
 | |
|             deps.check_deps(self.compose, self.arch, self.variant, missing_deps)
 | |
|         self.assertEqual(str(ctx.exception), "Unresolved dependencies detected")
 | |
|         self.assertEqual(
 | |
|             self.compose.log_error.call_args_list,
 | |
|             [
 | |
|                 mock.call(
 | |
|                     "Unresolved dependencies for %s.%s in package foo.noarch: ['bar = 1.1']"  # noqa: E501
 | |
|                     % (self.variant, self.arch)
 | |
|                 )
 | |
|             ],
 | |
|         )
 |