Reuse ModuleBuild.get_by_id

Signed-off-by: Chenxiong Qi <cqi@redhat.com>
This commit is contained in:
Chenxiong Qi
2019-06-30 11:05:57 +08:00
parent c15a7cadf3
commit 16bf4e945b
10 changed files with 132 additions and 123 deletions

View File

@@ -27,7 +27,7 @@ from tests import conf, clean_database, read_staged_data
from tests.test_views.test_views import FakeSCM
import module_build_service.messaging
import module_build_service.scheduler.handlers.modules
from module_build_service import build_logs, db
from module_build_service import build_logs
from module_build_service.models import make_session, ModuleBuild, ComponentBuild
from module_build_service.utils.general import mmd_to_str, load_mmd
@@ -59,7 +59,7 @@ class TestModuleInit:
@patch("module_build_service.scm.SCM")
@patch("module_build_service.scheduler.handlers.modules.handle_stream_collision_modules")
@patch("module_build_service.utils.submit.get_build_arches", return_value=["x86_64"])
def test_init_basic(self, get_build_arches, rscm, mocked_scm, built_rpms):
def init_basic(self, db_session, get_build_arches, rscm, mocked_scm, built_rpms):
FakeSCM(
mocked_scm,
"testmodule",
@@ -76,22 +76,23 @@ class TestModuleInit:
"x-debuginfo-0:2.5.48-3.el8+1308+551bfa71",
]
platform_build = ModuleBuild.query.get(1)
platform_build = ModuleBuild.get_by_id(db_session, 1)
mmd = platform_build.mmd()
for rpm in mmd.get_rpm_filters():
mmd.remove_rpm_filter(rpm)
mmd.add_rpm_filter("foo")
mmd.add_rpm_filter("bar")
platform_build.modulemd = mmd_to_str(mmd)
db.session.commit()
db_session.commit()
msg = module_build_service.messaging.MBSModule(
msg_id=None, module_build_id=2, module_build_state="init"
)
with make_session(conf) as session:
self.fn(config=conf, session=session, msg=msg)
build = ModuleBuild.query.filter_by(id=2).one()
self.fn(config=conf, session=db_session, msg=msg)
build = ModuleBuild.get_by_id(db_session, 2)
# Make sure the module entered the wait state
assert build.state == 1, build.state
# Make sure format_mmd was run properly
@@ -102,15 +103,15 @@ class TestModuleInit:
]
return build
def test_init_called_twice(self):
build = self.test_init_basic()
def test_init_called_twice(self, db_session):
build = self.init_basic(db_session)
old_component_builds = len(build.component_builds)
old_mmd = load_mmd(build.modulemd)
build.state = 4
db.session.commit()
build = self.test_init_basic()
db.session.refresh(build)
db_session.commit()
build = self.init_basic(db_session)
db_session.refresh(build)
assert build.state == 1
assert old_component_builds == len(build.component_builds)

View File

@@ -442,28 +442,29 @@ class TestPoller:
# Ensure we did *not* process any of the non-waiting builds.
assert consumer.incoming.qsize() == 0
def test_cleanup_stale_failed_builds(self, create_builder, global_consumer, dbg):
def test_cleanup_stale_failed_builds(self, create_builder, global_consumer, dbg, db_session):
""" Test that one of the two module builds gets to the garbage state when running
cleanup_stale_failed_builds.
"""
builder = mock.MagicMock()
create_builder.return_value = builder
module_build_one = models.ModuleBuild.query.get(2)
module_build_two = models.ModuleBuild.query.get(3)
module_build_one = models.ModuleBuild.get_by_id(db_session, 2)
module_build_one.state = models.BUILD_STATES["failed"]
module_build_one.time_modified = datetime.utcnow() - timedelta(
days=conf.cleanup_failed_builds_time + 1)
module_build_two = models.ModuleBuild.get_by_id(db_session, 3)
module_build_two.time_modified = datetime.utcnow()
module_build_two.state = models.BUILD_STATES["failed"]
failed_component = models.ComponentBuild.query.filter_by(
failed_component = db_session.query(models.ComponentBuild).filter_by(
package="tangerine", module_id=3).one()
failed_component.state = koji.BUILD_STATES["FAILED"]
failed_component.tagged = False
failed_component.tagged_in_final = False
db.session.add(failed_component)
db.session.add(module_build_one)
db.session.add(module_build_two)
db.session.commit()
db_session.commit()
consumer = mock.MagicMock()
consumer.incoming = queue.Queue()
@@ -473,8 +474,8 @@ class TestPoller:
# Ensure the queue is empty before we start
assert consumer.incoming.qsize() == 0
poller.cleanup_stale_failed_builds(conf, db.session)
db.session.refresh(module_build_two)
poller.cleanup_stale_failed_builds(conf, db_session)
db_session.refresh(module_build_two)
# Make sure module_build_one was transitioned to garbage
assert module_build_one.state == models.BUILD_STATES["garbage"]
state_reason = (
@@ -496,25 +497,27 @@ class TestPoller:
"module-build-macros-0.1-1.module+0+d027b723",
])
def test_cleanup_stale_failed_builds_no_components(self, create_builder, global_consumer, dbg):
def test_cleanup_stale_failed_builds_no_components(
self, create_builder, global_consumer, dbg, db_session
):
""" Test that a module build without any components built gets to the garbage state when
running cleanup_stale_failed_builds.
"""
module_build_one = models.ModuleBuild.query.get(1)
module_build_two = models.ModuleBuild.query.get(2)
module_build_one = models.ModuleBuild.get_by_id(db_session, 1)
module_build_one.state = models.BUILD_STATES["failed"]
module_build_one.time_modified = datetime.utcnow()
module_build_two = models.ModuleBuild.get_by_id(db_session, 2)
module_build_two.state = models.BUILD_STATES["failed"]
module_build_two.time_modified = datetime.utcnow() - timedelta(
days=conf.cleanup_failed_builds_time + 1)
module_build_two.koji_tag = None
module_build_two.cg_build_koji_tag = None
for c in module_build_two.component_builds:
c.state = None
db.session.add(c)
db.session.add(module_build_one)
db.session.add(module_build_two)
db.session.commit()
db_session.commit()
consumer = mock.MagicMock()
consumer.incoming = queue.Queue()
@@ -524,8 +527,8 @@ class TestPoller:
# Ensure the queue is empty before we start
assert consumer.incoming.qsize() == 0
poller.cleanup_stale_failed_builds(conf, db.session)
db.session.refresh(module_build_two)
poller.cleanup_stale_failed_builds(conf, db_session)
db_session.refresh(module_build_two)
# Make sure module_build_two was transitioned to garbage
assert module_build_two.state == models.BUILD_STATES["garbage"]
state_reason = (
@@ -541,24 +544,26 @@ class TestPoller:
@pytest.mark.parametrize(
"test_state", [models.BUILD_STATES[state] for state in conf.cleanup_stuck_builds_states]
)
def test_cancel_stuck_module_builds(self, create_builder, global_consumer, dbg, test_state):
def test_cancel_stuck_module_builds(
self, create_builder, global_consumer, dbg, test_state, db_session
):
module_build1 = models.ModuleBuild.query.get(1)
module_build1 = models.ModuleBuild.get_by_id(db_session, 1)
module_build1.state = test_state
under_thresh = conf.cleanup_stuck_builds_time - 1
module_build1.time_modified = datetime.utcnow() - timedelta(
days=under_thresh, hours=23, minutes=59)
module_build2 = models.ModuleBuild.query.get(2)
module_build2 = models.ModuleBuild.get_by_id(db_session, 2)
module_build2.state = test_state
module_build2.time_modified = datetime.utcnow() - timedelta(
days=conf.cleanup_stuck_builds_time)
module_build2 = models.ModuleBuild.query.get(3)
module_build2 = models.ModuleBuild.get_by_id(db_session, 3)
module_build2.state = test_state
module_build2.time_modified = datetime.utcnow()
db.session.commit()
db_session.commit()
consumer = mock.MagicMock()
consumer.incoming = queue.Queue()
@@ -568,9 +573,9 @@ class TestPoller:
assert consumer.incoming.qsize() == 0
poller.cancel_stuck_module_builds(conf, db.session)
poller.cancel_stuck_module_builds(conf, db_session)
module = models.ModuleBuild.query.filter_by(state=4).all()
module = db_session.query(models.ModuleBuild).filter_by(state=4).all()
assert len(module) == 1
assert module[0].id == 2
@@ -634,18 +639,20 @@ class TestPoller:
@pytest.mark.parametrize("greenwave_result", [True, False])
@patch("module_build_service.utils.greenwave.Greenwave.check_gating")
def test_poll_greenwave(self, mock_gw, create_builder, global_consumer, dbg, greenwave_result):
def test_poll_greenwave(
self, mock_gw, create_builder, global_consumer, dbg, greenwave_result, db_session
):
module_build1 = models.ModuleBuild.query.get(1)
module_build1 = models.ModuleBuild.get_by_id(db_session, 1)
module_build1.state = models.BUILD_STATES["ready"]
module_build2 = models.ModuleBuild.query.get(2)
module_build2 = models.ModuleBuild.get_by_id(db_session, 2)
module_build2.state = models.BUILD_STATES["done"]
module_build2 = models.ModuleBuild.query.get(3)
module_build2 = models.ModuleBuild.get_by_id(db_session, 3)
module_build2.state = models.BUILD_STATES["init"]
db.session.commit()
db_session.commit()
consumer = mock.MagicMock()
consumer.incoming = queue.Queue()

View File

@@ -122,15 +122,15 @@ class TestRepoDone:
# Ensure the time_completed is None, so we can test it is set to
# some date once the build is finalized.
module_build = module_build_service.models.ModuleBuild.query.get(2)
module_build = module_build_service.models.ModuleBuild.get_by_id(db_session, 2)
module_build.time_completed = None
db.session.commit()
db_session.commit()
def mocked_finalizer(succeeded=None):
# Check that the time_completed is set in the time when
# finalizer is called.
assert succeeded is True
module_build = db_session.query(module_build_service.models.ModuleBuild).get(2)
module_build = module_build_service.models.ModuleBuild.get_by_id(db_session, 2)
assert module_build.time_completed is not None
finalizer.side_effect = mocked_finalizer
@@ -207,7 +207,7 @@ class TestRepoDone:
mock_log_info.assert_called_with(
"Ignoring repo regen, because not all components are tagged."
)
module_build = module_build_service.models.ModuleBuild.query.get(2)
module_build = module_build_service.models.ModuleBuild.get_by_id(db_session, 2)
# Make sure the module build didn't transition since all the components weren't tagged
assert module_build.state == module_build_service.models.BUILD_STATES["build"]
@@ -242,6 +242,6 @@ class TestRepoDone:
msg = module_build_service.messaging.KojiRepoChange(
"some_msg_id", "module-testmodule-master-20170109091357-7c29193d-build")
module_build_service.scheduler.handlers.repos.done(config=conf, session=db_session, msg=msg)
module_build = module_build_service.models.ModuleBuild.query.get(2)
module_build = module_build_service.models.ModuleBuild.get_by_id(db_session, 2)
assert module_build.state == module_build_service.models.BUILD_STATES["failed"]