Files
fm-orchestrator/tests/test_scheduler/test_module_wait.py
2021-06-15 15:05:06 -04:00

253 lines
9.0 KiB
Python

# -*- coding: utf-8 -*-
# SPDX-License-Identifier: MIT
from __future__ import absolute_import
import os
import koji
import mock
from mock import patch
import pytest
from module_build_service.common import build_logs, conf
from module_build_service.common.models import ComponentBuild, ModuleBuild
from module_build_service.common.modulemd import Modulemd
import module_build_service.resolver
from module_build_service.scheduler.db_session import db_session
import module_build_service.scheduler.handlers.modules
from tests import scheduler_init_data
base_dir = os.path.dirname(os.path.dirname(__file__))
class TestModuleWait:
def setup_method(self, test_method):
scheduler_init_data(module_state="wait")
self.config = conf
self.session = mock.Mock()
def teardown_method(self, test_method):
try:
path = build_logs.path(db_session, 1)
os.remove(path)
except Exception:
pass
@patch("module_build_service.builder.GenericBuilder.create_from_module")
def test_init_basic(self, create_builder):
builder = mock.Mock()
builder.get_disttag_srpm.return_value = "some srpm disttag"
builder.build.return_value = 1234, 1, "", None
builder.module_build_tag = {"name": "some-tag-build"}
create_builder.return_value = builder
module_build_id = db_session.query(ModuleBuild).first().id
with patch("module_build_service.resolver.GenericResolver.create"):
module_build_service.scheduler.handlers.modules.wait(
msg_id="msg-id-1",
module_build_id=module_build_id,
module_build_state="some state")
@patch(
"module_build_service.builder.GenericBuilder.default_buildroot_groups",
return_value={"build": [], "srpm-build": []},
)
@patch("module_build_service.builder.GenericBuilder.create_from_module")
@patch("module_build_service.resolver.DBResolver")
@patch("module_build_service.resolver.GenericResolver")
def test_new_repo_called_when_macros_reused(
self, generic_resolver, resolver, create_builder, dbg
):
"""
Test that newRepo is called when module-build-macros build is reused.
"""
koji_session = mock.MagicMock()
koji_session.newRepo.return_value = 123456
builder = mock.MagicMock()
builder.koji_session = koji_session
builder.module_build_tag = {"name": "module-123-build"}
builder.get_disttag_srpm.return_value = "some srpm disttag"
builder.build.return_value = (
1234,
koji.BUILD_STATES["COMPLETE"],
"",
"module-build-macros-1-1",
)
create_builder.return_value = builder
resolver = mock.MagicMock()
resolver.backend = "db"
resolver.get_module_tag.return_value = "module-testmodule-master-20170109091357"
generic_resolver.create.return_value = resolver
module_build_service.scheduler.handlers.modules.wait(
msg_id="msg-id-1",
module_build_id=2, module_build_state="some state")
koji_session.newRepo.assert_called_once_with("module-123-build")
# When module-build-macros is reused, it still has to appear only
# once in database.
builds_count = db_session.query(ComponentBuild).filter_by(
package="module-build-macros", module_id=2).count()
assert builds_count == 1
@patch(
"module_build_service.builder.GenericBuilder.default_buildroot_groups",
return_value={"build": [], "srpm-build": []},
)
@patch("module_build_service.builder.GenericBuilder.create_from_module")
@patch("module_build_service.resolver.DBResolver")
@patch("module_build_service.resolver.GenericResolver")
def test_new_repo_not_called_when_macros_not_reused(
self, generic_resolver, resolver, create_builder, dbg
):
"""
Test that newRepo is called everytime for module-build-macros
"""
koji_session = mock.MagicMock()
koji_session.newRepo.return_value = 123456
builder = mock.MagicMock()
builder.koji_session = koji_session
builder.module_build_tag = {"name": "module-123-build"}
builder.get_disttag_srpm.return_value = "some srpm disttag"
builder.build.return_value = (
1234,
koji.BUILD_STATES["BUILDING"],
"",
"module-build-macros-1-1",
)
create_builder.return_value = builder
resolver = mock.MagicMock()
resolver.backend = "db"
resolver.get_module_tag.return_value = "module-testmodule-master-20170109091357"
generic_resolver.create.return_value = resolver
module_build_service.scheduler.handlers.modules.wait(
msg_id="msg-id-1",
module_build_id=2,
module_build_state="some state")
assert koji_session.newRepo.called
@patch(
"module_build_service.builder.GenericBuilder.default_buildroot_groups",
return_value={"build": [], "srpm-build": []},
)
@patch("module_build_service.builder.GenericBuilder.create_from_module")
@patch("module_build_service.resolver.DBResolver")
@patch("module_build_service.resolver.GenericResolver")
def test_set_cg_build_koji_tag_fallback_to_default(
self, generic_resolver, resolver, create_builder, dbg
):
"""
Test that build.cg_build_koji_tag fallbacks to default tag.
"""
base_mmd = Modulemd.ModuleStreamV2.new("base-runtime", "f27")
koji_session = mock.MagicMock()
koji_session.newRepo.return_value = 123456
builder = mock.MagicMock()
builder.koji_session = koji_session
builder.module_build_tag = {"name": "module-123-build"}
builder.get_disttag_srpm.return_value = "some srpm disttag"
builder.build.return_value = (
1234,
koji.BUILD_STATES["BUILDING"],
"",
"module-build-macros-1-1",
)
create_builder.return_value = builder
resolver = mock.MagicMock()
resolver.backend = "db"
resolver.get_module_tag.return_value = "module-testmodule-master-20170109091357"
resolver.get_module_build_dependencies.return_value = {
"module-bootstrap-tag": [base_mmd]
}
generic_resolver.create.return_value = resolver
module_build_service.scheduler.handlers.modules.wait(
msg_id="msg-id-1",
module_build_id=2,
module_build_state="some state")
module_build = ModuleBuild.get_by_id(db_session, 2)
assert module_build.cg_build_koji_tag == "modular-updates-candidate"
@pytest.mark.parametrize(
"koji_cg_tag_build,expected_cg_koji_build_tag",
[
[True, "f27-modular-updates-candidate"],
[False, None]
],
)
@patch(
"module_build_service.builder.GenericBuilder.default_buildroot_groups",
return_value={"build": [], "srpm-build": []},
)
@patch("module_build_service.builder.GenericBuilder.create_from_module")
@patch("module_build_service.resolver.DBResolver")
@patch("module_build_service.resolver.GenericResolver")
@patch(
"module_build_service.common.config.Config.base_module_names",
new_callable=mock.PropertyMock,
return_value=["base-runtime", "platform"],
)
def test_set_cg_build_koji_tag(
self,
cfg,
generic_resolver,
resolver,
create_builder,
dbg,
koji_cg_tag_build,
expected_cg_koji_build_tag,
):
"""
Test that build.cg_build_koji_tag is set.
"""
base_mmd = Modulemd.ModuleStreamV2.new("base-runtime", "f27")
koji_session = mock.MagicMock()
koji_session.newRepo.return_value = 123456
builder = mock.MagicMock()
builder.koji_session = koji_session
builder.module_build_tag = {"name": "module-123-build"}
builder.get_disttag_srpm.return_value = "some srpm disttag"
builder.build.return_value = (
1234,
koji.BUILD_STATES["BUILDING"],
"",
"module-build-macros-1-1",
)
create_builder.return_value = builder
resolver = mock.MagicMock()
resolver.backend = "db"
resolver.get_module_tag.return_value = "module-testmodule-master-20170109091357"
resolver.get_module_build_dependencies.return_value = {
"module-bootstrap-tag": [base_mmd]
}
with patch.object(
module_build_service.scheduler.handlers.modules.conf,
"koji_cg_tag_build",
new=koji_cg_tag_build,
):
generic_resolver.create.return_value = resolver
module_build_service.scheduler.handlers.modules.wait(
msg_id="msg-id-1",
module_build_id=2,
module_build_state="some state")
module_build = ModuleBuild.get_by_id(db_session, 2)
assert module_build.cg_build_koji_tag == expected_cg_koji_build_tag