mirror of
https://pagure.io/fm-orchestrator.git
synced 2026-04-14 23:50:04 +08:00
Allow the virtual streams of a base module to be queryable in the database and API
This commit is contained in:
@@ -33,7 +33,9 @@ import module_build_service
|
||||
from module_build_service import db
|
||||
from module_build_service.utils import get_rpm_release, import_mmd
|
||||
from module_build_service.config import init_config
|
||||
from module_build_service.models import ModuleBuild, ComponentBuild, make_session, BUILD_STATES
|
||||
from module_build_service.models import (
|
||||
ModuleBuild, ComponentBuild, VirtualStream, make_session, BUILD_STATES,
|
||||
)
|
||||
from module_build_service import glib, Modulemd
|
||||
|
||||
|
||||
@@ -791,4 +793,16 @@ def make_module(nsvc, requires_list=None, build_requires_list=None, base_module=
|
||||
db.session.add(module_build)
|
||||
db.session.commit()
|
||||
|
||||
if virtual_streams:
|
||||
for virtual_stream in virtual_streams:
|
||||
vs_obj = db.session.query(VirtualStream).filter_by(name=virtual_stream).first()
|
||||
if not vs_obj:
|
||||
vs_obj = VirtualStream(name=virtual_stream)
|
||||
db.session.add(vs_obj)
|
||||
db.session.commit()
|
||||
|
||||
if vs_obj not in module_build.virtual_streams:
|
||||
module_build.virtual_streams.append(vs_obj)
|
||||
db.session.commit()
|
||||
|
||||
return module_build
|
||||
|
||||
@@ -172,3 +172,16 @@ class TestModelsGetStreamsContexts:
|
||||
build.context) for build in builds])
|
||||
assert builds == set(['platform:f29.1.0:15:c11', 'platform:f29.1.0:15:c11.another',
|
||||
'platform:f29.2.0:1:c11'])
|
||||
|
||||
def test_add_virtual_streams_filter(self):
|
||||
clean_database(False)
|
||||
make_module("platform:f29.1.0:10:c1", {}, {}, virtual_streams=["f29"])
|
||||
make_module("platform:f29.1.0:15:c1", {}, {}, virtual_streams=["f29"])
|
||||
make_module("platform:f29.3.0:15:old_version", {}, {}, virtual_streams=["f28", "f29"])
|
||||
make_module("platform:f29.3.0:20:c11", {}, {}, virtual_streams=["f30"])
|
||||
|
||||
with make_session(conf) as session:
|
||||
query = session.query(ModuleBuild).filter_by(name="platform")
|
||||
query = ModuleBuild._add_virtual_streams_filter(session, query, ["f28", "f29"])
|
||||
count = query.count()
|
||||
assert count == 3
|
||||
|
||||
@@ -55,8 +55,8 @@ class TestMBSModule:
|
||||
mock_session().get.return_value = mock_res
|
||||
|
||||
resolver = mbs_resolver.GenericResolver.create(tests.conf, backend='mbs')
|
||||
module_mmds = resolver.get_module_modulemds('testmodule', 'master', '20180205135154',
|
||||
'9c690d0e')
|
||||
module_mmds = resolver.get_module_modulemds(
|
||||
'testmodule', 'master', '20180205135154', '9c690d0e', virtual_streams=["f28"])
|
||||
nsvcs = set(
|
||||
'{}:{}:{}:{}'.format(m.peek_name(), m.peek_stream(),
|
||||
m.peek_version(), m.peek_context())
|
||||
@@ -73,7 +73,8 @@ class TestMBSModule:
|
||||
"order_desc_by": "version",
|
||||
"page": 1,
|
||||
"per_page": 10,
|
||||
"state": "ready"
|
||||
"state": "ready",
|
||||
"virtual_stream": ["f28"],
|
||||
}
|
||||
mock_session().get.assert_called_once_with(mbs_url, params=expected_query)
|
||||
assert nsvcs == expected
|
||||
|
||||
@@ -191,6 +191,7 @@ class TestViews:
|
||||
assert data['modulemd'] == to_text_type(mmd.read())
|
||||
assert data['name'] == 'nginx'
|
||||
assert data['owner'] == 'Moe Szyslak'
|
||||
assert data['rebuild_strategy'] == 'changed-and-after'
|
||||
assert data['scmurl'] == ('git://pkgs.domain.local/modules/nginx'
|
||||
'?#ba95886c7a443b36a9ce31abda1f9bef22f2f8c9')
|
||||
assert data['scratch'] is False
|
||||
@@ -224,8 +225,7 @@ class TestViews:
|
||||
assert data['time_modified'] == u'2016-09-03T11:25:32Z'
|
||||
assert data['time_submitted'] == u'2016-09-03T11:23:20Z'
|
||||
assert data['version'] == '2'
|
||||
assert data['rebuild_strategy'] == 'changed-and-after'
|
||||
assert data['siblings'] == []
|
||||
assert data['virtual_streams'] == []
|
||||
|
||||
def test_query_build_with_br_verbose_mode(self):
|
||||
reuse_component_init_data()
|
||||
@@ -674,6 +674,31 @@ class TestViews:
|
||||
elif stream_version_lte == '293000':
|
||||
assert total == 3
|
||||
|
||||
@pytest.mark.parametrize('virtual_streams', ([], ('f28',), ('f29',), ('f28', 'f29')))
|
||||
def test_query_builds_filter_virtual_streams(self, virtual_streams):
|
||||
# Populate some platform modules with virtual streams
|
||||
init_data(data_size=1, multiple_stream_versions=True)
|
||||
url = '/module-build-service/1/module-builds/?name=platform&verbose=true'
|
||||
for virtual_stream in virtual_streams:
|
||||
url += '&virtual_stream={}'.format(virtual_stream)
|
||||
rv = self.client.get(url)
|
||||
data = json.loads(rv.data)
|
||||
total = data['meta']['total']
|
||||
if virtual_streams == ('f28',):
|
||||
assert total == 1
|
||||
for module in data['items']:
|
||||
assert module['virtual_streams'] == ['f28']
|
||||
elif virtual_streams == ('f29',):
|
||||
assert total == 3
|
||||
for module in data['items']:
|
||||
assert module['virtual_streams'] == ['f29']
|
||||
elif virtual_streams == ('f28', 'f29'):
|
||||
assert total == 4
|
||||
for module in data['items']:
|
||||
assert len(set(module['virtual_streams']) - set(['f28', 'f29'])) == 0
|
||||
elif len(virtual_streams) == 0:
|
||||
assert total == 5
|
||||
|
||||
def test_query_builds_order_by(self):
|
||||
build = db.session.query(module_build_service.models.ModuleBuild).filter_by(id=2).one()
|
||||
build.name = 'candy'
|
||||
@@ -1974,7 +1999,7 @@ class TestViews:
|
||||
platform_mmd.set_stream(platform_override)
|
||||
if platform_override == 'el8.0.0':
|
||||
xmd = from_variant_dict(platform_mmd.get_xmd())
|
||||
xmd['mbs']['virtual_streams'] = 'el8'
|
||||
xmd['mbs']['virtual_streams'] = ['el8']
|
||||
platform_mmd.set_xmd(dict_values(xmd))
|
||||
import_mmd(db.session, platform_mmd)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user