Integration tests: add v3-packager coverage

This commit is contained in:
jobrauer
2021-03-12 14:21:14 +01:00
parent 46f27ce3ed
commit f8530a49da
6 changed files with 119 additions and 0 deletions

View File

@@ -139,3 +139,15 @@ testdata:
rest_submit_module_build:
module: testmodule
branch: test-submit-module
v3_normal_build:
module: testmodule
branch: test-v3-normal-build
v3_multiple_contexts:
module: testmodule
branch: test-v3-multiple-contexts
v3_no_components:
module: testmodule
branch: test-v3-no-components
v3_buildrequire:
module: testmodule
branch: test-v3-buildrequire

View File

@@ -0,0 +1,44 @@
# -*- coding: utf-8 -*-
# SPDX-License-Identifier: MIT
def test_v3_buildrequire(mbs, clone_and_start_build):
"""Test buildrequire fields in the v3-packager mmd.
Preconditions:
* 2 contexts defined in mmd, one of which 'build-requires' another module
(as well as a koji-resolver enabled platform).
* Build-required module is tagged in koji with koji_tag_with_modules from said platform.
Steps:
* Submit a build.
* Wait until the build(s) are in build state.
* Cancel the build(s).
Checks:
* That that number of builds produced is equal to the number of configurations.
* That each build has expected buildrequires items.
"""
repo, builds = clone_and_start_build()
contexts = {
cfg["context"]: cfg for cfg in repo.modulemd["data"]["configurations"]
}
assert len(builds) == len(contexts)
for build in builds:
mbs.wait_for_module_build(build, lambda bld: bld.get("state") >= 2)
ctx = build.module_build_data["context"]
assert ctx in contexts
for buildrequire, data in build.module_build_data["buildrequires"].items():
if buildrequire == "platform":
mmd_platform = contexts[ctx]["platform"]
assert data["stream"] == mmd_platform \
if mmd_platform.endswith(".z") else f"{mmd_platform}.z"
continue
assert buildrequire in contexts[ctx]["buildrequires"]
assert data["stream"] == contexts[ctx]["buildrequires"][buildrequire][0]

View File

@@ -0,0 +1,8 @@
# -*- coding: utf-8 -*-
# SPDX-License-Identifier: MIT
def test_v3_multiple_contexts(clone_and_start_build):
"""Test that multiple configurations in v3-packager modulemd produce multiple module builds"""
repo, builds = clone_and_start_build("--optional", "rebuild_strategy=all")
assert len(builds) == len(repo.modulemd["data"]["configurations"])

View File

@@ -0,0 +1,12 @@
# -*- coding: utf-8 -*-
# SPDX-License-Identifier: MIT
def test_v3_no_components(mbs, clone_and_start_build):
"""Test a minimal mmd - with no RPM components"""
_, builds = clone_and_start_build(cancel=False)
assert len(builds) == 1
build = builds[0]
mbs.wait_for_module_build_to_succeed(build)
assert not build.data["component_builds"]

View File

@@ -0,0 +1,34 @@
# -*- coding: utf-8 -*-
# SPDX-License-Identifier: MIT
def test_v3_normal_build(mbs, koji, clone_and_start_build):
"""Test a normal module-build submitted with v3-packager YAML modulemd."""
repo, builds = clone_and_start_build("--optional", "rebuild_strategy=all", cancel=False)
build = builds[0]
# actual input (v3 packager mmd)
assert len(repo.modulemd["data"]["configurations"]) == 1
mmd_configuration = repo.modulemd["data"]["configurations"][0]
mmd_context = mmd_configuration["context"]
mmd_platform = mmd_configuration["platform"]
mbs.wait_for_module_build_to_succeed(build)
# assert module build components
assert sorted(build.component_names()) == sorted(repo.components + ["module-build-macros"])
for component_rpm in build.components():
assert koji.get_task(component_rpm["task_id"])["state"] == 2 # is closed
# assert produced koji build
koji_build = koji.get_build(build.nvr())
koji_build_devel = koji.get_build(build.nvr(name_suffix="-devel"))
assert koji_build and koji_build_devel
module_data = koji_build['extra']['typeinfo']['module']
assert module_data['module_build_service_id'] == int(build.id)
assert module_data['context'] == mmd_context
koji_mmd = koji.get_modulemd(koji_build)
actual_platforms = koji_mmd["data"]["dependencies"][0]["buildrequires"]["platform"]
assert len(actual_platforms) == 1
assert actual_platforms[0] == f"{mmd_platform}.z"

View File

@@ -79,6 +79,15 @@ class Koji:
self._session = koji.ClientSession(self._server)
self._pathinfo = koji.PathInfo(self._topurl)
def get_task(self, task_id):
"""Koji task data for task id
:param int task_id: task id
:return: Dictionary with Koji task data or None, if task is not found
:rtype: dict or None
"""
return self._session.getTaskInfo(task_id)
def get_build(self, nvr_dict):
"""Koji build data for NVR