Add support for KojiResolver in component reuse code.

In this commit, when component reuse code finds out that the base module uses
KojiResolver, it uses the `KojiResolver.get_buildrequired_modules` method
to find out possible modules to reuse and limits the original query just
by the IDs of these modules.

In order to do that, this commit splits the original
`KojiResolver.get_buildrequired_modulemds` into two methods:

- The `get_buildrequired_modules` returning the ModuleBuilds.
- The `get_buildrequired_modulemds` calling the `get_buildrequired_modules`
  and returning modulemd metadata.
This commit is contained in:
Jan Kaluza
2019-10-02 15:42:25 +02:00
parent fc39df9487
commit 486dc39898
6 changed files with 208 additions and 51 deletions

View File

@@ -98,7 +98,7 @@ class TestLocalResolverModule:
assert result == []
koji_session.listTagged.assert_called_with(
'foo-test', inherit=True, package='testmodule', type='module', event=123)
"foo-test", inherit=True, package="testmodule", type="module", event=123)
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
def test_get_buildrequired_modulemds_multiple_streams(self, ClientSession, db_session):
@@ -107,12 +107,12 @@ class TestLocalResolverModule:
# We will ask for testmodule:master, but there is also testmodule:2 in a tag.
koji_session.listTagged.return_value = [
{
'build_id': 123, 'name': 'testmodule', 'version': '2',
'release': '820181219174508.9edba152', 'tag_name': 'foo-test'
"build_id": 123, "name": "testmodule", "version": "2",
"release": "820181219174508.9edba152", "tag_name": "foo-test"
},
{
'build_id': 124, 'name': 'testmodule', 'version': 'master',
'release': '20170109091357.7c29193d', 'tag_name': 'foo-test'
"build_id": 124, "name": "testmodule", "version": "master",
"release": "20170109091357.7c29193d", "tag_name": "foo-test"
}]
self._create_test_modules(db_session)
@@ -131,12 +131,12 @@ class TestLocalResolverModule:
# ValueError later.
koji_session.listTagged.return_value = [
{
'build_id': 123, 'name': 'testmodule', 'version': '2',
'release': '820181219174508.9edba152', 'tag_name': 'foo-test'
"build_id": 123, "name": "testmodule", "version": "2",
"release": "820181219174508.9edba152", "tag_name": "foo-test"
},
{
'build_id': 124, 'name': 'testmodule', 'version': 'master',
'release': '20170109091357.7c29193d', 'tag_name': 'foo-test'
"build_id": 124, "name": "testmodule", "version": "master",
"release": "20170109091357.7c29193d", "tag_name": "foo-test"
}]
self._create_test_modules(db_session)
@@ -156,20 +156,20 @@ class TestLocalResolverModule:
# ValueError later.
koji_session.listTagged.return_value = [
{
'build_id': 124, 'name': 'testmodule', 'version': 'master',
'release': '20160110091357.7c29193d', 'tag_name': 'foo-test'
"build_id": 124, "name": "testmodule", "version": "master",
"release": "20160110091357.7c29193d", "tag_name": "foo-test"
},
{
'build_id': 124, 'name': 'testmodule', 'version': 'master',
'release': '20170109091357.7c29193d', 'tag_name': 'foo-test'
"build_id": 124, "name": "testmodule", "version": "master",
"release": "20170109091357.7c29193d", "tag_name": "foo-test"
},
{
'build_id': 124, 'name': 'testmodule', 'version': 'master',
'release': '20170109091357.7c29193e', 'tag_name': 'foo-test'
"build_id": 124, "name": "testmodule", "version": "master",
"release": "20170109091357.7c29193e", "tag_name": "foo-test"
},
{
'build_id': 124, 'name': 'testmodule', 'version': 'master',
'release': '20160109091357.7c29193d', 'tag_name': 'foo-test'
"build_id": 124, "name": "testmodule", "version": "master",
"release": "20160109091357.7c29193d", "tag_name": "foo-test"
}]
self._create_test_modules(db_session)
@@ -182,6 +182,29 @@ class TestLocalResolverModule:
"testmodule:master:20170109091357:7c29193d",
"testmodule:master:20170109091357:7c29193e"}
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
def test_get_buildrequired_modules(self, ClientSession, db_session):
koji_session = ClientSession.return_value
# We will ask for testmodule:master, but there is also testmodule:2 in a tag.
koji_session.listTagged.return_value = [
{
"build_id": 123, "name": "testmodule", "version": "2",
"release": "820181219174508.9edba152", "tag_name": "foo-test"
},
{
"build_id": 124, "name": "testmodule", "version": "master",
"release": "20170109091357.7c29193d", "tag_name": "foo-test"
}]
self._create_test_modules(db_session)
platform = db_session.query(ModuleBuild).filter_by(stream="f30.1.3").one()
resolver = mbs_resolver.GenericResolver.create(db_session, tests.conf, backend="koji")
result = resolver.get_buildrequired_modules("testmodule", "master", platform.mmd())
nvrs = {m.nvr_string for m in result}
assert nvrs == {"testmodule-master-20170109091357.7c29193d"}
@patch("module_build_service.builder.KojiModuleBuilder.KojiClientSession")
def test_filter_inherited(self, ClientSession, db_session):
koji_session = ClientSession.return_value
@@ -193,16 +216,16 @@ class TestLocalResolverModule:
builds = [
{
'build_id': 124, 'name': 'testmodule', 'version': 'master',
'release': '20170110091357.7c29193d', 'tag_name': 'foo-test'
"build_id": 124, "name": "testmodule", "version": "master",
"release": "20170110091357.7c29193d", "tag_name": "foo-test"
},
{
'build_id': 125, 'name': 'testmodule', 'version': 'master',
'release': '20180109091357.7c29193d', 'tag_name': 'foo-test-parent'
"build_id": 125, "name": "testmodule", "version": "master",
"release": "20180109091357.7c29193d", "tag_name": "foo-test-parent"
},
{
'build_id': 126, 'name': 'testmodule', 'version': '2',
'release': '20180109091357.7c29193d', 'tag_name': 'foo-test-parent'
"build_id": 126, "name": "testmodule", "version": "2",
"release": "20180109091357.7c29193d", "tag_name": "foo-test-parent"
}]
resolver = mbs_resolver.GenericResolver.create(db_session, tests.conf, backend="koji")