Don't check for compatibile modules during component reuse if allow_only_compatible_base_modules is false

Addresses #1409
This commit is contained in:
mprahl
2019-09-12 11:11:16 -04:00
parent 2153f4d699
commit d2e7c0cf90
2 changed files with 26 additions and 10 deletions

View File

@@ -93,11 +93,20 @@ def get_reusable_module(db_session, module):
mmd = module.mmd()
previous_module_build = None
base_mmds = get_base_module_mmds(db_session, mmd)["ready"]
# Sort the base_mmds based on the stream version, higher version first.
base_mmds.sort(
key=lambda mmd: models.ModuleBuild.get_stream_version(mmd.get_stream_name(), False),
reverse=True)
if conf.allow_only_compatible_base_modules:
log.debug("Checking for compatible base modules")
base_mmds = get_base_module_mmds(db_session, mmd)["ready"]
# Sort the base_mmds based on the stream version, higher version first.
base_mmds.sort(
key=lambda mmd: models.ModuleBuild.get_stream_version(mmd.get_stream_name(), False),
reverse=True)
else:
log.debug("Skipping the check for compatible base modules")
base_mmds = []
for br in module.buildrequires:
if br.name in conf.base_module_names:
base_mmds.append(br.mmd())
for base_mmd in base_mmds:
mbs_xmd = mmd.get_xmd()["mbs"]
if base_mmd.get_module_name() not in mbs_xmd["buildrequires"]:

View File

@@ -1616,15 +1616,17 @@ class TestUtilsModuleReuse:
assert reusable_module.id == build_module.reused_module_id
assert reusable_module.id == reused_module.id
@pytest.mark.parametrize('allow_ocbm', (True, False))
@patch(
"module_build_service.config.Config.allow_only_compatible_base_modules",
new_callable=mock.PropertyMock, return_value=False
new_callable=mock.PropertyMock,
)
def test_get_reusable_module_use_latest_build(self, cfg, db_session):
def test_get_reusable_module_use_latest_build(self, cfg, db_session, allow_ocbm):
"""
Test that the `get_reusable_module` tries to reuse the latest module in case when
multiple modules can be reused.
multiple modules can be reused allow_only_compatible_base_modules is True.
"""
cfg.return_value = allow_ocbm
# Set "fedora" virtual stream to platform:f28.
platform_f28 = db_session.query(models.ModuleBuild).filter_by(name="platform").one()
mmd = platform_f28.mmd()
@@ -1646,7 +1648,7 @@ class TestUtilsModuleReuse:
# stream version will be higher than the previous one. Also set its buildrequires
# to platform:f29.
latest_module = db_session.query(models.ModuleBuild).filter_by(
name="testmodule").filter_by(state=models.BUILD_STATES["ready"]).one()
name="testmodule", state=models.BUILD_STATES["ready"]).one()
# This is used to clone the ModuleBuild SQLAlchemy object without recreating it from
# scratch.
db_session.expunge(latest_module)
@@ -1677,4 +1679,9 @@ class TestUtilsModuleReuse:
reusable_module = module_build_service.utils.get_reusable_module(
db_session, module)
assert reusable_module.id == latest_module.id
if allow_ocbm:
assert reusable_module.id == latest_module.id
else:
first_module = db_session.query(models.ModuleBuild).filter_by(
name="testmodule", state=models.BUILD_STATES["ready"]).first()
assert reusable_module.id == first_module.id