From 9204941d823ba4f3d36dfd8b323d74259ec992b7 Mon Sep 17 00:00:00 2001 From: Luiz Carvalho Date: Fri, 22 Nov 2019 10:17:24 -0500 Subject: [PATCH 1/2] Increase get_module_build_arches test coverage Signed-off-by: Luiz Carvalho --- tests/test_builder/test_koji.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tests/test_builder/test_koji.py b/tests/test_builder/test_koji.py index 0f990ef2..bcbd344f 100644 --- a/tests/test_builder/test_koji.py +++ b/tests/test_builder/test_koji.py @@ -934,6 +934,25 @@ class TestKojiBuilder: ret = KojiModuleBuilder.get_module_build_arches(module_build) assert " ".join(ret) == arches + @patch.dict("sys.modules", krbV=MagicMock()) + @patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession") + def test_get_module_build_arches_with_archless_tag(self, ClientSession): + module_build = module_build_service.models.ModuleBuild.get_by_id(db_session, 2) + session = ClientSession.return_value + session.getTag.return_value = {"arches": ""} + ret = KojiModuleBuilder.get_module_build_arches(module_build) + assert ret == [] + + @patch.dict("sys.modules", krbV=MagicMock()) + @patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession") + def test_get_module_build_arches_with_unknown_tag(self, ClientSession): + module_build = module_build_service.models.ModuleBuild.get_by_id(db_session, 2) + session = ClientSession.return_value + session.getTag.return_value = None + with pytest.raises(ValueError) as exc_info: + KojiModuleBuilder.get_module_build_arches(module_build) + assert "Unknown Koji tag" in str(exc_info.value) + class TestGetDistTagSRPM: """Test KojiModuleBuilder.get_disttag_srpm""" From 618eb3a3c64e916dc22e6525254e0fcd6e681c13 Mon Sep 17 00:00:00 2001 From: Luiz Carvalho Date: Fri, 22 Nov 2019 10:18:42 -0500 Subject: [PATCH 2/2] Gracefully handle builds without a koji tag MBS will iterate through all the builds in buildrequires to determine the expected list of arches on the associated Koji tag. In some cases, these builds do not have a Koji tag. They should be skipped for this operation. Signed-off-by: Luiz Carvalho --- module_build_service/builder/KojiModuleBuilder.py | 3 +++ tests/test_builder/test_koji.py | 14 ++++++++++++-- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/module_build_service/builder/KojiModuleBuilder.py b/module_build_service/builder/KojiModuleBuilder.py index a95b4bfe..40d8a626 100644 --- a/module_build_service/builder/KojiModuleBuilder.py +++ b/module_build_service/builder/KojiModuleBuilder.py @@ -1336,6 +1336,9 @@ class KojiModuleBuilder(GenericBuilder): the module build in the build system. :return: list of architectures """ + if not module.koji_tag: + log.warning("No Koji tag associated with module %r", module) + return [] koji_session = KojiModuleBuilder.get_session(conf, login=False) tag = koji_session.getTag(module.koji_tag) if not tag: diff --git a/tests/test_builder/test_koji.py b/tests/test_builder/test_koji.py index bcbd344f..ce8b3443 100644 --- a/tests/test_builder/test_koji.py +++ b/tests/test_builder/test_koji.py @@ -943,15 +943,25 @@ class TestKojiBuilder: ret = KojiModuleBuilder.get_module_build_arches(module_build) assert ret == [] + @patch.dict("sys.modules", krbV=MagicMock()) + @patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession") + def test_get_module_build_arches_without_tag(self, ClientSession): + module_build = module_build_service.models.ModuleBuild.get_by_id(db_session, 2) + module_build.koji_tag = None + session = ClientSession.return_value + ret = KojiModuleBuilder.get_module_build_arches(module_build) + assert ret == [] + session.getTag.assert_not_called() + session.assert_not_called() + @patch.dict("sys.modules", krbV=MagicMock()) @patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession") def test_get_module_build_arches_with_unknown_tag(self, ClientSession): module_build = module_build_service.models.ModuleBuild.get_by_id(db_session, 2) session = ClientSession.return_value session.getTag.return_value = None - with pytest.raises(ValueError) as exc_info: + with pytest.raises(ValueError, match="Unknown Koji tag .*"): KojiModuleBuilder.get_module_build_arches(module_build) - assert "Unknown Koji tag" in str(exc_info.value) class TestGetDistTagSRPM: