mirror of
https://pagure.io/fm-orchestrator.git
synced 2026-07-17 11:30:19 +08:00
Add the database resolver plugin
This commit is contained in:
@@ -56,21 +56,21 @@ class TestModuleInit:
|
||||
pass
|
||||
|
||||
@patch('module_build_service.scm.SCM')
|
||||
def test_init_basic(self, mocked_scm, pdc):
|
||||
def test_init_basic(self, mocked_scm):
|
||||
FakeSCM(mocked_scm, 'testmodule', 'testmodule.yaml',
|
||||
'620ec77321b2ea7b0d67d82992dda3e1d67055b4')
|
||||
msg = module_build_service.messaging.MBSModule(
|
||||
msg_id=None, module_build_id=1, module_build_state='init')
|
||||
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=1).one()
|
||||
build = ModuleBuild.query.filter_by(id=2).one()
|
||||
# Make sure the module entered the wait state
|
||||
assert build.state == 1, build.state
|
||||
# Make sure format_mmd was run properly
|
||||
assert type(build.mmd().get_xmd()['mbs']) is GLib.Variant
|
||||
|
||||
@patch('module_build_service.scm.SCM')
|
||||
def test_init_scm_not_available(self, mocked_scm, pdc):
|
||||
def test_init_scm_not_available(self, mocked_scm):
|
||||
def mocked_scm_get_latest():
|
||||
raise RuntimeError("Failed in mocked_scm_get_latest")
|
||||
|
||||
@@ -78,10 +78,10 @@ class TestModuleInit:
|
||||
'620ec77321b2ea7b0d67d82992dda3e1d67055b4')
|
||||
mocked_scm.return_value.get_latest = mocked_scm_get_latest
|
||||
msg = module_build_service.messaging.MBSModule(
|
||||
msg_id=None, module_build_id=1, module_build_state='init')
|
||||
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=1).one()
|
||||
build = ModuleBuild.query.filter_by(id=2).one()
|
||||
# Make sure the module entered the failed state
|
||||
# since the git server is not available
|
||||
assert build.state == 4, build.state
|
||||
@@ -89,7 +89,7 @@ class TestModuleInit:
|
||||
@patch("module_build_service.config.Config.modules_allow_repository",
|
||||
new_callable=PropertyMock, return_value=True)
|
||||
@patch('module_build_service.scm.SCM')
|
||||
def test_init_includedmodule(self, mocked_scm, mocked_mod_allow_repo, pdc):
|
||||
def test_init_includedmodule(self, mocked_scm, mocked_mod_allow_repo):
|
||||
FakeSCM(mocked_scm, "includedmodules", ['testmodule.yaml'])
|
||||
includedmodules_yml_path = os.path.join(
|
||||
self.staged_data_dir, 'includedmodules.yaml')
|
||||
@@ -100,13 +100,13 @@ class TestModuleInit:
|
||||
ModuleBuild.create(
|
||||
session, conf, 'includemodule', '1', 3, yaml, scmurl, 'mprahl')
|
||||
msg = module_build_service.messaging.MBSModule(
|
||||
msg_id=None, module_build_id=2, module_build_state='init')
|
||||
msg_id=None, module_build_id=3, module_build_state='init')
|
||||
self.fn(config=conf, session=session, msg=msg)
|
||||
build = ModuleBuild.query.filter_by(id=2).one()
|
||||
build = ModuleBuild.query.filter_by(id=3).one()
|
||||
assert build.state == 1
|
||||
assert build.name == 'includemodule'
|
||||
batches = {}
|
||||
for comp_build in ComponentBuild.query.filter_by(module_id=2).all():
|
||||
for comp_build in ComponentBuild.query.filter_by(module_id=3).all():
|
||||
batches[comp_build.package] = comp_build.batch
|
||||
assert batches['perl-List-Compare'] == 2
|
||||
assert batches['perl-Tangerine'] == 2
|
||||
@@ -125,14 +125,14 @@ class TestModuleInit:
|
||||
|
||||
@patch('module_build_service.models.ModuleBuild.from_module_event')
|
||||
@patch('module_build_service.scm.SCM')
|
||||
def test_init_when_get_latest_raises(self, mocked_scm, mocked_from_module_event, pdc):
|
||||
def test_init_when_get_latest_raises(self, mocked_scm, mocked_from_module_event):
|
||||
FakeSCM(mocked_scm, 'testmodule', 'testmodule.yaml',
|
||||
'7035bd33614972ac66559ac1fdd019ff6027ad22',
|
||||
get_latest_raise=True)
|
||||
msg = module_build_service.messaging.MBSModule(
|
||||
msg_id=None, module_build_id=1, module_build_state='init')
|
||||
msg_id=None, module_build_id=2, module_build_state='init')
|
||||
with make_session(conf) as session:
|
||||
build = session.query(ModuleBuild).filter_by(id=1).one()
|
||||
build = session.query(ModuleBuild).filter_by(id=2).one()
|
||||
mocked_from_module_event.return_value = build
|
||||
self.fn(config=conf, session=session, msg=msg)
|
||||
# Query the database again to make sure the build object is updated
|
||||
|
||||
@@ -116,7 +116,7 @@ class TestModuleWait:
|
||||
resolver.get_module_tag.return_value = "module-testmodule-master-20170109091357"
|
||||
generic_resolver.create.return_value = resolver
|
||||
|
||||
msg = module_build_service.messaging.MBSModule(msg_id=None, module_build_id=1,
|
||||
msg = module_build_service.messaging.MBSModule(msg_id=None, module_build_id=2,
|
||||
module_build_state='some state')
|
||||
module_build_service.scheduler.handlers.modules.wait(
|
||||
config=conf, session=db.session, msg=msg)
|
||||
@@ -125,7 +125,7 @@ class TestModuleWait:
|
||||
# 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=1).count()
|
||||
package="module-build-macros", module_id=2).count()
|
||||
assert builds_count == 1
|
||||
|
||||
@patch("module_build_service.builder.GenericBuilder.default_buildroot_groups",
|
||||
@@ -158,7 +158,7 @@ class TestModuleWait:
|
||||
resolver.get_module_tag.return_value = "module-testmodule-master-20170109091357"
|
||||
generic_resolver.create.return_value = resolver
|
||||
|
||||
msg = module_build_service.messaging.MBSModule(msg_id=None, module_build_id=1,
|
||||
msg = module_build_service.messaging.MBSModule(msg_id=None, module_build_id=2,
|
||||
module_build_state='some state')
|
||||
module_build_service.scheduler.handlers.modules.wait(
|
||||
config=conf, session=db.session, msg=msg)
|
||||
@@ -200,11 +200,11 @@ class TestModuleWait:
|
||||
"module-bootstrap-tag": base_mmd}
|
||||
generic_resolver.create.return_value = resolver
|
||||
|
||||
msg = module_build_service.messaging.MBSModule(msg_id=None, module_build_id=1,
|
||||
msg = module_build_service.messaging.MBSModule(msg_id=None, module_build_id=2,
|
||||
module_build_state='some state')
|
||||
module_build_service.scheduler.handlers.modules.wait(
|
||||
config=conf, session=db.session, msg=msg)
|
||||
module_build = ModuleBuild.query.filter_by(id=1).one()
|
||||
module_build = ModuleBuild.query.filter_by(id=2).one()
|
||||
assert module_build.cg_build_koji_tag == "modular-updates-candidate"
|
||||
|
||||
@patch("module_build_service.builder.GenericBuilder.default_buildroot_groups",
|
||||
@@ -245,9 +245,9 @@ class TestModuleWait:
|
||||
"module-bootstrap-tag": base_mmd}
|
||||
generic_resolver.create.return_value = resolver
|
||||
|
||||
msg = module_build_service.messaging.MBSModule(msg_id=None, module_build_id=1,
|
||||
msg = module_build_service.messaging.MBSModule(msg_id=None, module_build_id=2,
|
||||
module_build_state='some state')
|
||||
module_build_service.scheduler.handlers.modules.wait(
|
||||
config=conf, session=db.session, msg=msg)
|
||||
module_build = ModuleBuild.query.filter_by(id=1).one()
|
||||
module_build = ModuleBuild.query.filter_by(id=2).one()
|
||||
assert module_build.cg_build_koji_tag == "f27-modular-updates-candidate"
|
||||
|
||||
@@ -62,7 +62,7 @@ class TestPoller:
|
||||
|
||||
# Change the batch to 2, so the module build is in state where
|
||||
# it is not building anything, but the state is "build".
|
||||
module_build = models.ModuleBuild.query.filter_by(id=2).one()
|
||||
module_build = models.ModuleBuild.query.filter_by(id=3).one()
|
||||
module_build.batch = 2
|
||||
# If fresh is set, then we simulate that activity just occurred 2 minutes ago on the build
|
||||
if fresh:
|
||||
@@ -77,7 +77,7 @@ class TestPoller:
|
||||
poller.poll()
|
||||
|
||||
# Refresh our module_build object.
|
||||
module_build = models.ModuleBuild.query.filter_by(id=2).one()
|
||||
module_build = models.ModuleBuild.query.filter_by(id=3).one()
|
||||
db.session.refresh(module_build)
|
||||
|
||||
# If fresh is set, we expect the poller to not touch the module build since it's been less
|
||||
@@ -117,7 +117,7 @@ class TestPoller:
|
||||
|
||||
# Change the batch to 2, so the module build is in state where
|
||||
# it is not building anything, but the state is "build".
|
||||
module_build = models.ModuleBuild.query.filter_by(id=2).one()
|
||||
module_build = models.ModuleBuild.query.filter_by(id=3).one()
|
||||
module_build.batch = 2
|
||||
module_build.new_repo_task_id = 123456
|
||||
db.session.commit()
|
||||
@@ -151,7 +151,7 @@ class TestPoller:
|
||||
|
||||
# Change the batch to 2, so the module build is in state where
|
||||
# it is not building anything, but the state is "build".
|
||||
module_build = models.ModuleBuild.query.filter_by(id=2).one()
|
||||
module_build = models.ModuleBuild.query.filter_by(id=3).one()
|
||||
module_build.batch = 2
|
||||
module_build.new_repo_task_id = 123456
|
||||
db.session.commit()
|
||||
@@ -161,7 +161,7 @@ class TestPoller:
|
||||
poller.poll()
|
||||
|
||||
# Refresh our module_build object.
|
||||
module_build = models.ModuleBuild.query.filter_by(id=2).one()
|
||||
module_build = models.ModuleBuild.query.filter_by(id=3).one()
|
||||
db.session.refresh(module_build)
|
||||
|
||||
assert not koji_session.newRepo.called
|
||||
@@ -185,7 +185,7 @@ class TestPoller:
|
||||
|
||||
# Change the batch to 2, so the module build is in state where
|
||||
# it is not building anything, but the state is "build".
|
||||
module_build = models.ModuleBuild.query.filter_by(id=2).one()
|
||||
module_build = models.ModuleBuild.query.filter_by(id=3).one()
|
||||
module_build.batch = 2
|
||||
module_build.new_repo_task_id = 123456
|
||||
db.session.commit()
|
||||
@@ -196,7 +196,7 @@ class TestPoller:
|
||||
poller.poll()
|
||||
|
||||
# Refresh our module_build object.
|
||||
module_build = models.ModuleBuild.query.filter_by(id=2).one()
|
||||
module_build = models.ModuleBuild.query.filter_by(id=3).one()
|
||||
db.session.refresh(module_build)
|
||||
|
||||
# Components should not be in building state
|
||||
@@ -227,7 +227,7 @@ class TestPoller:
|
||||
|
||||
# Change the batch to 2, so the module build is in state where
|
||||
# it is not building anything, but the state is "build".
|
||||
module_build = models.ModuleBuild.query.filter_by(id=2).one()
|
||||
module_build = models.ModuleBuild.query.filter_by(id=3).one()
|
||||
module_build.state = state
|
||||
module_build.koji_tag = "module-tag"
|
||||
module_build.time_completed = datetime.utcnow()
|
||||
@@ -239,7 +239,7 @@ class TestPoller:
|
||||
poller = MBSProducer(hub)
|
||||
poller.delete_old_koji_targets(conf, db.session)
|
||||
|
||||
module_build = models.ModuleBuild.query.filter_by(id=2).one()
|
||||
module_build = models.ModuleBuild.query.filter_by(id=3).one()
|
||||
db.session.refresh(module_build)
|
||||
module_build.time_completed = datetime.utcnow() - timedelta(hours=23)
|
||||
db.session.commit()
|
||||
@@ -281,7 +281,7 @@ class TestPoller:
|
||||
|
||||
# Change the batch to 2, so the module build is in state where
|
||||
# it is not building anything, but the state is "build".
|
||||
module_build = models.ModuleBuild.query.filter_by(id=2).one()
|
||||
module_build = models.ModuleBuild.query.filter_by(id=3).one()
|
||||
module_build.state = 1
|
||||
original = datetime.utcnow() - timedelta(minutes=11)
|
||||
module_build.time_modified = original
|
||||
@@ -295,7 +295,7 @@ class TestPoller:
|
||||
poller.process_waiting_module_builds(db.session)
|
||||
|
||||
assert consumer.incoming.qsize() == 1
|
||||
module_build = models.ModuleBuild.query.filter_by(id=2).one()
|
||||
module_build = models.ModuleBuild.query.filter_by(id=3).one()
|
||||
# ensure the time_modified was changed.
|
||||
assert module_build.time_modified > original
|
||||
|
||||
@@ -312,7 +312,7 @@ class TestPoller:
|
||||
|
||||
# Change the batch to 2, so the module build is in state where
|
||||
# it is not building anything, but the state is "build".
|
||||
module_build = models.ModuleBuild.query.filter_by(id=2).one()
|
||||
module_build = models.ModuleBuild.query.filter_by(id=3).one()
|
||||
module_build.state = 1
|
||||
original = datetime.utcnow() - timedelta(minutes=9)
|
||||
module_build.time_modified = original
|
||||
@@ -355,15 +355,15 @@ class TestPoller:
|
||||
"""
|
||||
builder = mock.MagicMock()
|
||||
create_builder.return_value = builder
|
||||
module_build_one = models.ModuleBuild.query.get(1)
|
||||
module_build_two = models.ModuleBuild.query.get(2)
|
||||
module_build_one = models.ModuleBuild.query.get(2)
|
||||
module_build_two = models.ModuleBuild.query.get(3)
|
||||
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.time_modified = datetime.utcnow()
|
||||
module_build_two.state = models.BUILD_STATES['failed']
|
||||
failed_component = models.ComponentBuild.query.filter_by(
|
||||
package='tangerine', module_id=2).one()
|
||||
package='tangerine', module_id=3).one()
|
||||
failed_component.state = koji.BUILD_STATES['FAILED']
|
||||
failed_component.tagged = False
|
||||
failed_component.tagged_in_final = False
|
||||
|
||||
@@ -59,7 +59,7 @@ class TestRepoDone:
|
||||
@mock.patch('module_build_service.builder.KojiModuleBuilder.'
|
||||
'KojiModuleBuilder.buildroot_connect')
|
||||
def test_a_single_match(self, connect, build_fn, get_session, ready, list_tasks_fn, mock_gabt,
|
||||
mock_uea, pdc):
|
||||
mock_uea):
|
||||
""" Test that when a repo msg hits us and we have a single match.
|
||||
"""
|
||||
scheduler_init_data()
|
||||
@@ -92,7 +92,7 @@ class TestRepoDone:
|
||||
@mock.patch('module_build_service.builder.KojiModuleBuilder.'
|
||||
'KojiModuleBuilder.buildroot_connect')
|
||||
def test_a_single_match_build_fail(self, connect, build_fn, config, ready, list_tasks_fn,
|
||||
mock_gabt, mock_uea, pdc):
|
||||
mock_gabt, mock_uea):
|
||||
""" Test that when a KojiModuleBuilder.build fails, the build is
|
||||
marked as failed with proper state_reason.
|
||||
"""
|
||||
@@ -129,7 +129,7 @@ class TestRepoDone:
|
||||
config=conf, session=db.session, msg=msg)
|
||||
mock_log_info.assert_called_once_with(
|
||||
'Ignoring repo regen, because not all components are tagged.')
|
||||
module_build = module_build_service.models.ModuleBuild.query.get(1)
|
||||
module_build = module_build_service.models.ModuleBuild.query.get(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']
|
||||
|
||||
@@ -153,12 +153,12 @@ class TestRepoDone:
|
||||
with app.app_context():
|
||||
scheduler_init_data(3)
|
||||
config.return_value = mock.Mock(), 'development'
|
||||
build_fn.return_value = None, 4, 'Failed to submit artifact communicator to Koji', None
|
||||
build_fn.return_value = None, 4, 'Failed to submit artifact x to Koji', None
|
||||
|
||||
msg = module_build_service.messaging.KojiRepoChange(
|
||||
'some_msg_id', 'module-95b214a704c984be-build')
|
||||
module_build_service.scheduler.handlers.repos.done(
|
||||
config=conf, session=db.session, msg=msg)
|
||||
module_build = module_build_service.models.ModuleBuild.query.first()
|
||||
module_build = module_build_service.models.ModuleBuild.query.get(2)
|
||||
|
||||
assert module_build.state == module_build_service.models.BUILD_STATES["failed"]
|
||||
|
||||
@@ -78,7 +78,7 @@ class TestTagTagged:
|
||||
builder.module_build_tag = {"name": "module-fe3adf73caf3e1b7-build"}
|
||||
create_builder.return_value = builder
|
||||
|
||||
module_build = module_build_service.models.ModuleBuild.query.filter_by(id=2).one()
|
||||
module_build = module_build_service.models.ModuleBuild.query.filter_by(id=3).one()
|
||||
|
||||
# Set previous components as COMPLETE and tagged.
|
||||
module_build.batch = 1
|
||||
@@ -128,7 +128,7 @@ class TestTagTagged:
|
||||
|
||||
# Refresh our module_build object.
|
||||
db.session.expunge(module_build)
|
||||
module_build = module_build_service.models.ModuleBuild.query.filter_by(id=2).one()
|
||||
module_build = module_build_service.models.ModuleBuild.query.filter_by(id=3).one()
|
||||
|
||||
# newRepo task_id should be stored in database, so we can check its
|
||||
# status later in poller.
|
||||
@@ -154,7 +154,7 @@ class TestTagTagged:
|
||||
builder.module_build_tag = {"name": "module-fe3adf73caf3e1b7-build"}
|
||||
create_builder.return_value = builder
|
||||
|
||||
module_build = module_build_service.models.ModuleBuild.query.filter_by(id=2).one()
|
||||
module_build = module_build_service.models.ModuleBuild.query.filter_by(id=3).one()
|
||||
module_build.batch = 2
|
||||
component = module_build_service.models.ComponentBuild.query\
|
||||
.filter_by(package='perl-Tangerine', module_id=module_build.id).one()
|
||||
@@ -196,7 +196,7 @@ class TestTagTagged:
|
||||
builder.module_build_tag = {"name": "module-fe3adf73caf3e1b7-build"}
|
||||
create_builder.return_value = builder
|
||||
|
||||
module_build = module_build_service.models.ModuleBuild.query.filter_by(id=2).one()
|
||||
module_build = module_build_service.models.ModuleBuild.query.filter_by(id=3).one()
|
||||
|
||||
# Set previous components as COMPLETE and tagged.
|
||||
module_build.batch = 1
|
||||
@@ -231,7 +231,7 @@ class TestTagTagged:
|
||||
|
||||
# Refresh our module_build object.
|
||||
db.session.expunge(module_build)
|
||||
module_build = module_build_service.models.ModuleBuild.query.filter_by(id=2).one()
|
||||
module_build = module_build_service.models.ModuleBuild.query.filter_by(id=3).one()
|
||||
|
||||
# newRepo task_id should be stored in database, so we can check its
|
||||
# status later in poller.
|
||||
@@ -260,10 +260,10 @@ class TestTagTagged:
|
||||
builder.module_build_tag = {"name": "module-fe3adf73caf3e1b7-build"}
|
||||
create_builder.return_value = builder
|
||||
|
||||
module_build = module_build_service.models.ModuleBuild.query.filter_by(id=2).one()
|
||||
module_build = module_build_service.models.ModuleBuild.query.filter_by(id=3).one()
|
||||
module_build.batch = 2
|
||||
mbm = module_build_service.models.ComponentBuild.query.filter_by(
|
||||
module_id=2, package='module-build-macros').one()
|
||||
module_id=3, package='module-build-macros').one()
|
||||
mbm.tagged = False
|
||||
db.session.add(mbm)
|
||||
for c in module_build.current_batch():
|
||||
@@ -316,7 +316,7 @@ class TestTagTagged:
|
||||
|
||||
# Refresh our module_build object.
|
||||
db.session.expunge(module_build)
|
||||
module_build = module_build_service.models.ModuleBuild.query.filter_by(id=2).one()
|
||||
module_build = module_build_service.models.ModuleBuild.query.filter_by(id=3).one()
|
||||
|
||||
# newRepo task_id should be stored in database, so we can check its
|
||||
# status later in poller.
|
||||
@@ -343,7 +343,7 @@ class TestTagTagged:
|
||||
builder.module_build_tag = {"name": "module-fe3adf73caf3e1b7-build"}
|
||||
create_builder.return_value = builder
|
||||
|
||||
module_build = module_build_service.models.ModuleBuild.query.filter_by(id=2).one()
|
||||
module_build = module_build_service.models.ModuleBuild.query.filter_by(id=3).one()
|
||||
|
||||
# Set previous components as COMPLETE and tagged.
|
||||
module_build.batch = 1
|
||||
@@ -387,7 +387,7 @@ class TestTagTagged:
|
||||
|
||||
# Refresh our module_build object.
|
||||
db.session.expunge(module_build)
|
||||
module_build = module_build_service.models.ModuleBuild.query.filter_by(id=2).one()
|
||||
module_build = module_build_service.models.ModuleBuild.query.filter_by(id=3).one()
|
||||
|
||||
# newRepo task_id should be stored in database, so we can check its
|
||||
# status later in poller.
|
||||
|
||||
Reference in New Issue
Block a user