Refactor get_build_by_artifact so that it always returns the same kind of dict.

This commit is contained in:
Ralph Bean
2017-07-14 09:21:52 -04:00
parent d9b1576353
commit bb56e4f057
2 changed files with 33 additions and 17 deletions

View File

@@ -411,12 +411,17 @@ chmod 644 %buildroot/%_rpmconfigdir/macros.d/macros.modules
untagged = self.koji_session.untaggedBuilds(**opts)
for build in untagged:
if build["release"].endswith(release):
build_info = self.koji_session.getBuild(build['id'])
if not build_info:
log.error("Cannot get build info of build %r", build['id'])
return None
self.tag_artifacts([build_info["nvr"]])
return build_info
# Tag it.
nvr = "{name}-{version}-{release}".format(**build)
self.tag_artifacts([nvr])
# Now, make the same query we made earlier to return a dict
# with the same schema.
tagged = self.koji_session.listTagged(tag, **opts)
if not tagged:
# Should be impossible.
raise ValueError("Just tagged %s but didn't find it" % nvr)
return tagged[0]
return None

View File

@@ -104,21 +104,32 @@ class TestKojiBuilder(unittest.TestCase):
builder.module_tag = {"name": "module-foo", "id": 1}
builder.module_build_tag = {"name": "module-foo-build", "id": 2}
# Set listTagged to return test data
tagged = []
builder.koji_session.listTagged.return_value = tagged
untagged = [{
"nvr": "foo-1.0-1.module_e0095747",
"release": "module_e0095747",
"id": "whatever",
}]
builder.koji_session.untaggedBuilds.return_value = untagged
builder.koji_session.getBuild.return_value = {
tagged_build = {
"id": 9000,
"name": "foo",
"version": "1.0",
"release": "1.module_e0095747",
"nvr": "foo-1.0-1.module_e0095747",
}
# Set listTagged to return test data
builder.koji_session.listTagged.side_effect = [
# Return nothing the first time
[],
# Return nothing the second time
[],
# But something the third time.
[tagged_build],
]
untagged = [{
"id": 9000,
"name": "foo",
"version": "1.0",
"release": "1.module_e0095747",
}]
builder.koji_session.untaggedBuilds.return_value = untagged
actual = builder._get_build_by_artifact('foo')
expected = {'nvr': 'foo-1.0-1.module_e0095747'}
expected = tagged_build
self.assertEquals(actual, expected)
builder.koji_session.tagBuild.assert_called_once_with(
1, 'foo-1.0-1.module_e0095747')