From 9204941d823ba4f3d36dfd8b323d74259ec992b7 Mon Sep 17 00:00:00 2001 From: Luiz Carvalho Date: Nov 22 2019 15:17:24 +0000 Subject: [PATCH 1/2] Increase get_module_build_arches test coverage Signed-off-by: Luiz Carvalho --- diff --git a/tests/test_builder/test_koji.py b/tests/test_builder/test_koji.py index 0f990ef..bcbd344 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: Nov 22 2019 15:53:40 +0000 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 --- diff --git a/module_build_service/builder/KojiModuleBuilder.py b/module_build_service/builder/KojiModuleBuilder.py index a95b4bf..40d8a62 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 bcbd344..ce8b344 100644 --- a/tests/test_builder/test_koji.py +++ b/tests/test_builder/test_koji.py @@ -945,13 +945,23 @@ class TestKojiBuilder: @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: