Files
fm-orchestrator/tests/test_scheduler/test_module_wait.py
Chenxiong Qi b939d53c57 Pass event info arguments to event handler directly
This patch drops message objects, defined by class BaseMessage and its
subclasses, and pass event info arguments to event handler directly.
Different event handler requires different arguments to handle a kind of
specific event. The event info is parsed from the raw message received
from message bus.

Signed-off-by: Chenxiong Qi <cqi@redhat.com>
2020-03-03 14:48:47 -05:00

250 lines
8.9 KiB
Python

# -*- coding: utf-8 -*-
# SPDX-License-Identifier: MIT
import mock
from mock import patch
import module_build_service.messaging
import module_build_service.scheduler.handlers.modules
import os
import koji
import pytest
from tests import conf, scheduler_init_data
import module_build_service.resolver
from module_build_service import build_logs, Modulemd
from module_build_service.db_session import db_session
from module_build_service.models import ComponentBuild, ModuleBuild
base_dir = os.path.dirname(os.path.dirname(__file__))
class TestModuleWait:
def setup_method(self, test_method):
scheduler_init_data()
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.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