diff --git a/module_build_service/resolver/MBSResolver.py b/module_build_service/resolver/MBSResolver.py index e28e125a..a9e04084 100644 --- a/module_build_service/resolver/MBSResolver.py +++ b/module_build_service/resolver/MBSResolver.py @@ -66,7 +66,7 @@ class MBSResolver(KojiResolver): """ query = self._query_from_nsvc(name, stream, version, context, states) query["page"] = 1 - query["per_page"] = 10 + query["per_page"] = 5 query.update(kwargs) modules = [] @@ -81,6 +81,11 @@ class MBSResolver(KojiResolver): if not data["meta"]["next"]: break + if version is None and "stream_version_lte" not in kwargs: + # Stop querying when we've gotten a different version + if modules_per_page[-1]["version"] != modules[0]["version"]: + break + query["page"] += 1 # Error handling diff --git a/tests/test_resolver/test_mbs.py b/tests/test_resolver/test_mbs.py index e840be6f..c03fb039 100644 --- a/tests/test_resolver/test_mbs.py +++ b/tests/test_resolver/test_mbs.py @@ -56,11 +56,12 @@ class FakeMBS(object): def __init__(self, session_mock): session_mock.get = self.get self.items = test_items + self.request_count = 0 self.required_params = { 'order_desc_by': 'version', 'state': ['ready'], 'verbose': True, - 'per_page': 10, + 'per_page': 5, } def item_matches(self, item, params): @@ -86,6 +87,8 @@ class FakeMBS(object): self.items.append(item) def get(self, url, params={}): + self.request_count += 1 + for k, v in self.required_params.items(): if v == ABSENT: assert k not in params @@ -153,15 +156,18 @@ class TestMBSModule: ): """ Test for querying MBS without the version of a module """ - version = formatted_testmodule_mmd.get_version() - fake_mbs.items = [] - for i in range(0, 6): - for context in ("00000000", "00000001"): + # First page has version1.context[0..4] + # Second page has version1.context5, version2.context[0..3] + # Third page has version2.context[4..5] + # We should only query the first two pages + for i in range(0, 2): + for context in range(0, 6): + context_string = "{0:08d}".format(context) m = formatted_testmodule_mmd.copy() m.set_version(20180205135154 - i) - m.set_context(context) + m.set_context(context_string) add_item(fake_mbs.items, mmd=m) ret = resolver.get_module_modulemds("testmodule", "master") @@ -169,8 +175,13 @@ class TestMBSModule: expected = { "testmodule:master:20180205135154:00000000", "testmodule:master:20180205135154:00000001", + "testmodule:master:20180205135154:00000002", + "testmodule:master:20180205135154:00000003", + "testmodule:master:20180205135154:00000004", + "testmodule:master:20180205135154:00000005", } assert nsvcs == expected + assert fake_mbs.request_count == 2 @pytest.mark.parametrize('strict', (False, True)) def test_get_module_modulemds_not_found(self, resolver, fake_mbs, strict):