Remove the koji.ClientSession backport

See https://pagure.io/koji/pull-request/1187 for context.
This commit is contained in:
mprahl
2019-12-02 11:12:28 -05:00
parent 4c8a92cb93
commit 3051596166
10 changed files with 51 additions and 152 deletions

View File

@@ -24,7 +24,6 @@ from module_build_service import log, conf, models
import module_build_service.scm
import module_build_service.utils
from module_build_service.builder.utils import execute_cmd
from module_build_service.builder.koji_backports import ClientSession as KojiClientSession
from module_build_service.db_session import db_session
from module_build_service.errors import ProgrammingError
@@ -487,7 +486,7 @@ class KojiModuleBuilder(GenericBuilder):
address = koji_config.server
log.info("Connecting to koji %r.", address)
koji_session = KojiClientSession(address, opts=koji_config)
koji_session = koji.ClientSession(address, opts=koji_config)
if not login:
return koji_session

View File

@@ -1,100 +0,0 @@
# -*- coding: utf-8 -*-
# SPDX-License-Identifier: MIT
# flake8: noqa
import base64
import traceback
import koji
# Import krbV from here so we don't have to redo the whole try except that Koji does
from koji import krbV, PythonImportError, AuthError, AUTHTYPE_KERB
class ClientSession(koji.ClientSession):
"""The koji.ClientSession class with patches from upstream."""
# This backport comes from https://pagure.io/koji/pull-request/1187
def krb_login(self, principal=None, keytab=None, ccache=None, proxyuser=None, ctx=None):
"""Log in using Kerberos. If principal is not None and keytab is
not None, then get credentials for the given principal from the given keytab.
If both are None, authenticate using existing local credentials (as obtained
from kinit). ccache is the absolute path to use for the credential cache. If
not specified, the default ccache will be used. If proxyuser is specified,
log in the given user instead of the user associated with the Kerberos
principal. The principal must be in the "ProxyPrincipals" list on
the server side. ctx is the Kerberos context to use, and should be unique
per thread. If ctx is not specified, the default context is used."""
try:
# Silently try GSSAPI first
if self.gssapi_login(principal, keytab, ccache, proxyuser=proxyuser):
return True
except Exception as e:
if krbV:
e_str = ''.join(traceback.format_exception_only(type(e), e))
self.logger.debug('gssapi auth failed: %s', e_str)
pass
else:
raise
if not krbV:
raise PythonImportError(
"Please install python-krbV to use kerberos."
)
if not ctx:
ctx = krbV.default_context()
if ccache != None:
ccache = krbV.CCache(name=ccache, context=ctx)
else:
ccache = ctx.default_ccache()
if principal != None:
if keytab != None:
cprinc = krbV.Principal(name=principal, context=ctx)
keytab = krbV.Keytab(name=keytab, context=ctx)
ccache.init(cprinc)
ccache.init_creds_keytab(principal=cprinc, keytab=keytab)
else:
raise AuthError('cannot specify a principal without a keytab')
else:
# We're trying to log ourself in. Connect using existing credentials.
cprinc = ccache.principal()
self.logger.debug('Authenticating as: %s', cprinc.name)
sprinc = krbV.Principal(name=self._serverPrincipal(cprinc), context=ctx)
ac = krbV.AuthContext(context=ctx)
ac.flags = krbV.KRB5_AUTH_CONTEXT_DO_SEQUENCE | krbV.KRB5_AUTH_CONTEXT_DO_TIME
ac.rcache = ctx.default_rcache()
# create and encode the authentication request
(ac, req) = ctx.mk_req(server=sprinc, client=cprinc,
auth_context=ac, ccache=ccache,
options=krbV.AP_OPTS_MUTUAL_REQUIRED)
req_enc = base64.encodestring(req)
# ask the server to authenticate us
(rep_enc, sinfo_enc, addrinfo) = self.callMethod('krbLogin', req_enc, proxyuser)
# Set the addrinfo we received from the server
# (necessary before calling rd_priv())
# addrinfo is in (serveraddr, serverport, clientaddr, clientport)
# format, so swap the pairs because clientaddr is now the local addr
ac.addrs = tuple((addrinfo[2], addrinfo[3], addrinfo[0], addrinfo[1]))
# decode and read the reply from the server
rep = base64.decodestring(rep_enc)
ctx.rd_rep(rep, auth_context=ac)
# decode and decrypt the login info
sinfo_priv = base64.decodestring(sinfo_enc)
sinfo_str = ac.rd_priv(sinfo_priv)
sinfo = dict(zip(['session-id', 'session-key'], sinfo_str.split()))
if not sinfo:
self.logger.warn('No session info received')
return False
self.setSession(sinfo)
self.authtype = AUTHTYPE_KERB
return True

View File

@@ -422,7 +422,7 @@ class TestKojiBuilder:
assert mock_session.untagBuild.mock_calls == expected_calls
@patch.dict("sys.modules", krbV=MagicMock())
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_get_build_weights(self, ClientSession):
session = ClientSession.return_value
session.getLoggedInUser.return_value = {"id": 123}
@@ -448,7 +448,7 @@ class TestKojiBuilder:
session.krb_login.assert_called_once()
@patch.dict("sys.modules", krbV=MagicMock())
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_get_build_weights_no_task_id(self, ClientSession):
session = ClientSession.return_value
session.getLoggedInUser.return_value = {"id": 123}
@@ -470,7 +470,7 @@ class TestKojiBuilder:
session.krb_login.assert_called_once()
@patch.dict("sys.modules", krbV=MagicMock())
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_get_build_weights_no_build(self, ClientSession):
session = ClientSession.return_value
session.getLoggedInUser.return_value = {"id": 123}
@@ -492,7 +492,7 @@ class TestKojiBuilder:
session.krb_login.assert_called_once()
@patch.dict("sys.modules", krbV=MagicMock())
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_get_build_weights_listBuilds_failed(self, ClientSession):
session = ClientSession.return_value
session.getLoggedInUser.return_value = {"id": 123}
@@ -512,7 +512,7 @@ class TestKojiBuilder:
session.krb_login.assert_called_once()
@patch.dict("sys.modules", krbV=MagicMock())
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_get_build_weights_getPackageID_failed(self, ClientSession):
session = ClientSession.return_value
session.getLoggedInUser.return_value = {"id": 123}
@@ -528,7 +528,7 @@ class TestKojiBuilder:
session.krb_login.assert_called_once()
@patch.dict("sys.modules", krbV=MagicMock())
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_get_build_weights_getLoggedInUser_failed(self, ClientSession):
session = ClientSession.return_value
session.getAverageBuildDuration.return_value = None
@@ -726,7 +726,7 @@ class TestKojiBuilder:
]
assert session.createBuildTarget.mock_calls == expected_calls
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_get_built_rpms_in_module_build(self, ClientSession):
session = ClientSession.return_value
session.listTaggedRPMS.return_value = (
@@ -817,7 +817,7 @@ class TestKojiBuilder:
([], []),
),
)
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_get_filtered_rpms_on_self_dep(
self, ClientSession, br_filtered_rpms, expected
):
@@ -910,7 +910,7 @@ class TestKojiBuilder:
else:
mock_koji_cg.koji_import.assert_not_called()
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_get_anonymous_session(self, ClientSession):
mbs_config = mock.Mock(koji_profile="koji", koji_config="conf/koji.conf")
session = KojiModuleBuilder.get_session(mbs_config, login=False)
@@ -918,14 +918,14 @@ class TestKojiBuilder:
assert ClientSession.return_value.krb_login.assert_not_called
@patch.dict("sys.modules", krbV=MagicMock())
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_ensure_builder_use_a_logged_in_koji_session(self, ClientSession):
module_build = module_build_service.models.ModuleBuild.get_by_id(db_session, 2)
builder = KojiModuleBuilder(db_session, "owner", module_build, conf, "module-tag", [])
builder.koji_session.krb_login.assert_called_once()
@patch.dict("sys.modules", krbV=MagicMock())
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_get_module_build_arches(self, ClientSession):
module_build = module_build_service.models.ModuleBuild.get_by_id(db_session, 2)
arches = "x86_64 i686 ppc64le aarch64 s390x"
@@ -935,7 +935,7 @@ class TestKojiBuilder:
assert " ".join(ret) == arches
@patch.dict("sys.modules", krbV=MagicMock())
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
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
@@ -944,7 +944,7 @@ class TestKojiBuilder:
assert ret == []
@patch.dict("sys.modules", krbV=MagicMock())
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
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
@@ -955,7 +955,7 @@ class TestKojiBuilder:
session.assert_not_called()
@patch.dict("sys.modules", krbV=MagicMock())
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
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

View File

@@ -73,7 +73,7 @@ class TestBuild:
except OSError:
pass
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
@patch("subprocess.Popen")
@patch("module_build_service.builder.KojiContentGenerator.Modulemd")
@patch("pkg_resources.get_distribution")
@@ -138,7 +138,7 @@ class TestBuild:
# Ensure an anonymous Koji session works
koji_session.krb_login.assert_not_called()
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
@patch("subprocess.Popen")
@patch("module_build_service.builder.KojiContentGenerator.Modulemd")
@patch("pkg_resources.get_distribution")
@@ -205,7 +205,7 @@ class TestBuild:
assert len(mmd.read()) == 254
@patch.dict("sys.modules", krbV=Mock())
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_tag_cg_build(self, ClientSession):
""" Test that the CG build is tagged. """
koji_session = ClientSession.return_value
@@ -221,7 +221,7 @@ class TestBuild:
koji_session.krb_login.assert_called_once()
@patch.dict("sys.modules", krbV=Mock())
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_tag_cg_build_fallback_to_default_tag(self, ClientSession):
""" Test that the CG build is tagged to default tag. """
koji_session = ClientSession.return_value
@@ -240,7 +240,7 @@ class TestBuild:
koji_session.krb_login.assert_called_once()
@patch.dict("sys.modules", krbV=Mock())
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_tag_cg_build_no_tag_set(self, ClientSession):
""" Test that the CG build is not tagged when no tag set. """
koji_session = ClientSession.return_value
@@ -255,7 +255,7 @@ class TestBuild:
koji_session.krb_login.assert_called_once()
@patch.dict("sys.modules", krbV=Mock())
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_tag_cg_build_no_tag_available(self, ClientSession):
""" Test that the CG build is not tagged when no tag available. """
koji_session = ClientSession.return_value
@@ -337,7 +337,7 @@ class TestBuild:
"type": "file",
}
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_koji_rpms_in_tag(self, ClientSession):
koji_session = ClientSession.return_value
koji_session.getUser.return_value = GET_USER_RV
@@ -427,7 +427,7 @@ class TestBuild:
# Listing tagged RPMs does not require to log into a session
koji_session.krb_login.assert_not_called()
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_koji_rpms_in_tag_empty_tag(self, ClientSession):
koji_session = ClientSession.return_value
koji_session.getUser.return_value = GET_USER_RV
@@ -439,7 +439,7 @@ class TestBuild:
assert rpms == []
koji_session.multiCall.assert_not_called()
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_koji_rpms_in_tag_empty_headers(self, ClientSession):
koji_session = ClientSession.return_value
koji_session.getUser.return_value = GET_USER_RV
@@ -966,7 +966,7 @@ class TestBuild:
assert "%s:%s" % (mmd.get_module_name(), mmd.get_stream_name()) in requires
@patch.dict("sys.modules", krbV=Mock())
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
@patch("module_build_service.builder.KojiContentGenerator.KojiContentGenerator._tag_cg_build")
@patch("module_build_service.builder.KojiContentGenerator.KojiContentGenerator._load_koji_tag")
def test_koji_cg_koji_import(self, tag_loader, tagger, cl_session):

View File

@@ -64,7 +64,7 @@ class TestLocalResolverModule:
"testmodule:master:20170109091357:7c29193d",
"testmodule:master:20170109091357:7c29193e"}
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_get_buildrequired_modulemds_name_not_tagged(self, ClientSession):
koji_session = ClientSession.return_value
koji_session.getLastEvent.return_value = {"id": 123}
@@ -82,7 +82,7 @@ class TestLocalResolverModule:
koji_session.listTagged.assert_called_with(
"foo-test", inherit=True, package="testmodule", type="module", event=123)
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_get_buildrequired_modulemds_multiple_streams(self, ClientSession):
koji_session = ClientSession.return_value
@@ -108,7 +108,7 @@ class TestLocalResolverModule:
nsvcs = {m.get_nsvc() for m in result}
assert nsvcs == {"testmodule:master:20170109091357:7c29193d"}
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_get_buildrequired_modulemds_tagged_but_not_in_db(self, ClientSession):
koji_session = ClientSession.return_value
@@ -135,7 +135,7 @@ class TestLocalResolverModule:
with pytest.raises(ValueError, match=expected_error):
resolver.get_buildrequired_modulemds("testmodule", "2", platform.mmd())
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_get_buildrequired_modulemds_multiple_versions_contexts(self, ClientSession):
koji_session = ClientSession.return_value
@@ -172,7 +172,7 @@ class TestLocalResolverModule:
"testmodule:master:20170109091357:7c29193d",
"testmodule:master:20170109091357:7c29193e"}
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_get_buildrequired_modules(self, ClientSession):
koji_session = ClientSession.return_value
@@ -198,7 +198,7 @@ class TestLocalResolverModule:
nvrs = {m.nvr_string for m in result}
assert nvrs == {"testmodule-master-20170109091357.7c29193d"}
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_filter_inherited(self, ClientSession):
koji_session = ClientSession.return_value

View File

@@ -20,7 +20,7 @@ class TestGetCorrespondingModuleBuild:
def setup_method(self, method):
clean_database()
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_module_build_nvr_does_not_exist_in_koji(self, ClientSession):
ClientSession.return_value.getBuild.return_value = None
@@ -37,13 +37,13 @@ class TestGetCorrespondingModuleBuild:
{"extra": {"typeinfo": {"module": {}}}},
],
)
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_cannot_find_module_build_id_from_build_info(self, ClientSession, build_info):
ClientSession.return_value.getBuild.return_value = build_info
assert get_corresponding_module_build("n-v-r") is None
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_corresponding_module_build_id_does_not_exist_in_db(self, ClientSession):
fake_module_build_id, = db_session.query(func.max(ModuleBuild.id)).first()
@@ -53,7 +53,7 @@ class TestGetCorrespondingModuleBuild:
assert get_corresponding_module_build("n-v-r") is None
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_find_the_module_build(self, ClientSession):
expected_module_build = (
db_session.query(ModuleBuild).filter(ModuleBuild.name == "platform").first()
@@ -97,7 +97,7 @@ class TestDecisionUpdateHandler:
)
@patch("module_build_service.messaging.publish")
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_transform_from_done_to_ready(self, ClientSession, publish):
clean_database()

View File

@@ -138,7 +138,7 @@ class TestPoller:
assert len(start_build_component.mock_calls) == expected_build_calls
@patch.dict("sys.modules", krbV=mock.MagicMock())
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_retrigger_new_repo_on_failure(
self, ClientSession, create_builder, global_consumer, dbg
):
@@ -173,7 +173,7 @@ class TestPoller:
"module-testmodule-master-20170219191323-c40c156c-build")
@patch.dict("sys.modules", krbV=mock.MagicMock())
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_trigger_new_repo_when_succeeded(
self, ClientSession, create_builder, global_consumer, dbg
):
@@ -244,7 +244,7 @@ class TestPoller:
assert component.state is None
@patch.dict("sys.modules", krbV=mock.MagicMock())
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_old_build_targets_are_not_associated_with_any_module_builds(
self, ClientSession, create_builder, global_consumer, dbg
):
@@ -266,7 +266,7 @@ class TestPoller:
koji_session.deleteBuildTarget.assert_not_called()
@patch.dict("sys.modules", krbV=mock.MagicMock())
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_dont_delete_base_module_build_target(
self, ClientSession, create_builder, global_consumer, dbg
):
@@ -291,7 +291,7 @@ class TestPoller:
koji_session.deleteBuildTarget.assert_not_called()
@patch.dict("sys.modules", krbV=mock.MagicMock())
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_dont_delete_build_target_for_unfinished_module_builds(
self, ClientSession, create_builder, global_consumer, dbg
):
@@ -318,7 +318,7 @@ class TestPoller:
koji_session.deleteBuildTarget.assert_not_called()
@patch.dict("sys.modules", krbV=mock.MagicMock())
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_only_delete_build_target_with_allowed_koji_tag_prefix(
self, ClientSession, create_builder, global_consumer, dbg
):
@@ -357,7 +357,7 @@ class TestPoller:
koji_session.krb_login.assert_called_once()
@patch.dict("sys.modules", krbV=mock.MagicMock())
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_cant_delete_build_target_if_not_reach_delete_time(
self, ClientSession, create_builder, global_consumer, dbg
):
@@ -618,7 +618,7 @@ class TestPoller:
@pytest.mark.parametrize("tagged", (True, False))
@pytest.mark.parametrize("tagged_in_final", (True, False))
@pytest.mark.parametrize("btime", (True, False))
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_sync_koji_build_tags(
self, ClientSession, create_builder, global_consumer, dbg, tagged, tagged_in_final, btime
):

View File

@@ -111,7 +111,7 @@ class TestGetModulemdsFromUrsineContent:
def teardown_method(self, test_method):
clean_database()
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_return_empty_if_no_ursine_build_tag_is_found(self, ClientSession):
koji_session = ClientSession.return_value
@@ -127,7 +127,7 @@ class TestGetModulemdsFromUrsineContent:
assert [] == modulemds
@patch.object(conf, "koji_tag_prefixes", new=["module"])
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_get_modulemds(self, ClientSession):
koji_session = ClientSession.return_value
@@ -235,7 +235,7 @@ class TestRecordStreamCollisionModules:
@patch.object(conf, "base_module_names", new=["platform", "project-platform"])
@patch("module_build_service.utils.ursine.get_modulemds_from_ursine_content")
@patch("module_build_service.resolver.GenericResolver.create")
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_add_collision_modules(
self, ClientSession, resolver_create, get_modulemds_from_ursine_content
):

View File

@@ -344,7 +344,7 @@ class TestUtils:
def teardown_method(self, test_method):
clean_database()
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_get_build_arches(self, ClientSession):
session = ClientSession.return_value
session.getTag.return_value = {"arches": "ppc64le"}
@@ -352,7 +352,7 @@ class TestUtils:
r = module_build_service.utils.get_build_arches(mmd, conf)
assert r == ["ppc64le"]
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_get_build_arches_no_arch_set(self, ClientSession):
"""
When no architecture is set in Koji tag, fallback to conf.arches.
@@ -1727,7 +1727,7 @@ class TestUtilsModuleReuse:
"module_build_service.config.Config.allow_only_compatible_base_modules",
new_callable=mock.PropertyMock,
)
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
@patch(
"module_build_service.config.Config.resolver",
new_callable=mock.PropertyMock, return_value="koji"

View File

@@ -450,7 +450,7 @@ class TestViews:
assert item[key] == part
@pytest.mark.usefixtures("reuse_component_init_data")
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
@patch("koji.ClientSession")
def test_query_builds_with_binary_rpm(self, ClientSession):
"""
Test for querying MBS with the binary rpm filename. MBS should return all the modules,