From f8bb6e8e9940148ad203f213c0d0942b3cd8a455 Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: Apr 19 2017 10:30:39 +0000 Subject: Fix another place where test results depend on the yaml parsing order. --- diff --git a/module_build_service/utils.py b/module_build_service/utils.py index cbb6134..41045ab 100644 --- a/module_build_service/utils.py +++ b/module_build_service/utils.py @@ -491,8 +491,16 @@ def _scm_get_latest(pkg): pkgref = module_build_service.scm.SCM( pkg.repository).get_latest(branch=pkg.ref) except Exception as e: - return True, "Failed to get the latest commit for %s#%s" % (pkg.repository, pkg.ref) - return False, (pkg.name, pkgref) + log.exception(e) + return { + 'error': "Failed to get the latest commit for %s#%s" % (pkg.repository, pkg.ref) + } + + return { + 'pkg_name': pkg.name, + 'pkg_ref': pkgref, + 'error': None + } def format_mmd(mmd, scmurl): """ @@ -582,26 +590,28 @@ def format_mmd(mmd, scmurl): # pkg.ref by real SCM hash and store the result to our private xmd # place in modulemd. pool = ThreadPool(20) - pkgrefs = pool.map(_scm_get_latest, mmd.components.rpms.values()) + pkg_dicts = pool.map(_scm_get_latest, mmd.components.rpms.values()) err_msg = "" - for is_error, pkgref in pkgrefs: - if is_error: - err_msg += pkgref + "\n" + for pkg_dict in pkg_dicts: + if pkg_dict["error"]: + err_msg += pkg_dict["error"] + "\n" else: - mmd.xmd['mbs']['rpms'][pkgref[0]] = {'ref': pkgref[1]} + pkg_name = pkg_dict["pkg_name"] + pkg_ref = pkg_dict["pkg_ref"] + mmd.xmd['mbs']['rpms'][pkg_name] = {'ref': pkg_ref} if err_msg: raise UnprocessableEntity(err_msg) -def merge_included_mmd(main_mmd, mmd): +def merge_included_mmd(mmd, included_mmd): """ Merges two modulemds. This merges only metadata which are needed in - the `main_mmd` when it includes another module defined by `mmd` + the `main` when it includes another module defined by `included_mmd` """ - if 'rpms' in mmd.xmd['mbs']: - if 'rpms' not in main_mmd.xmd['mbs']: - main_mmd.xmd['mbs']['rpms'] = mmd.xmd['mbs']['rpms'] + if 'rpms' in included_mmd.xmd['mbs']: + if 'rpms' not in mmd.xmd['mbs']: + mmd.xmd['mbs']['rpms'] = included_mmd.xmd['mbs']['rpms'] else: - main_mmd.xmd['mbs']['rpms'].update(mmd.xmd['mbs']['rpms']) + mmd.xmd['mbs']['rpms'].update(included_mmd.xmd['mbs']['rpms']) def record_component_builds(mmd, module, initial_batch = 1, previous_buildorder = None, main_mmd = None): diff --git a/tests/staged_data/testmodule.yaml b/tests/staged_data/testmodule.yaml index 8ec6798..f7ebf5c 100644 --- a/tests/staged_data/testmodule.yaml +++ b/tests/staged_data/testmodule.yaml @@ -29,8 +29,8 @@ data: ref: f25 perl-Tangerine: rationale: Provides API for this module and is a dependency of tangerine. - ref: f25 + ref: f24 tangerine: rationale: Provides API for this module. buildorder: 10 - ref: f25 + ref: f23 diff --git a/tests/test_build/test_build.py b/tests/test_build/test_build.py index 51ef6da..663cc2c 100644 --- a/tests/test_build/test_build.py +++ b/tests/test_build/test_build.py @@ -265,8 +265,8 @@ class TestBuild(unittest.TestCase): # Check that components are tagged after the batch is built. tag_groups = [] - tag_groups.append(set([u'perl-Tangerine?#f25-1-1', u'perl-List-Compare?#f25-1-1'])) - tag_groups.append(set([u'tangerine?#f25-1-1'])) + tag_groups.append(set([u'perl-Tangerine?#f24-1-1', u'perl-List-Compare?#f25-1-1'])) + tag_groups.append(set([u'tangerine?#f23-1-1'])) def on_tag_artifacts_cb(cls, artifacts): self.assertEqual(tag_groups.pop(0), set(artifacts)) @@ -277,8 +277,8 @@ class TestBuild(unittest.TestCase): # is built. buildroot_groups = [] buildroot_groups.append(set([u'module-build-macros-0.1-1.module_fc4ed5f7.src.rpm-1-1'])) - buildroot_groups.append(set([u'perl-Tangerine?#f25-1-1', u'perl-List-Compare?#f25-1-1'])) - buildroot_groups.append(set([u'tangerine?#f25-1-1'])) + buildroot_groups.append(set([u'perl-Tangerine?#f24-1-1', u'perl-List-Compare?#f25-1-1'])) + buildroot_groups.append(set([u'tangerine?#f23-1-1'])) def on_buildroot_add_artifacts_cb(cls, artifacts, install): self.assertEqual(buildroot_groups.pop(0), set(artifacts)) diff --git a/tests/test_utils/test_utils.py b/tests/test_utils/test_utils.py index 7b354ce..0ca130d 100644 --- a/tests/test_utils/test_utils.py +++ b/tests/test_utils/test_utils.py @@ -81,12 +81,16 @@ class TestUtils(unittest.TestCase): mocked_scm.return_value.commit = \ '620ec77321b2ea7b0d67d82992dda3e1d67055b4' # For all the RPMs in testmodule, get_latest is called - hashes_returned = [ - '4ceea43add2366d8b8c5a622a2fb563b625b9abf', - 'fbed359411a1baa08d4a88e0d12d426fbf8f602c', - '76f9d8c8e87eed0aab91034b01d3d5ff6bd5b4cb'] - original_refs = ["f25"] - mocked_scm.return_value.get_latest.side_effect = hashes_returned + hashes_returned = { + 'f24': '4ceea43add2366d8b8c5a622a2fb563b625b9abf', + 'f23': 'fbed359411a1baa08d4a88e0d12d426fbf8f602c', + 'f25': '76f9d8c8e87eed0aab91034b01d3d5ff6bd5b4cb'} + original_refs = ["f23", "f24", "f25"] + + def mocked_get_latest(branch = "master"): + return hashes_returned[branch] + + mocked_scm.return_value.get_latest = mocked_get_latest mmd = modulemd.ModuleMetadata() with open(path.join(BASE_DIR, '..', 'staged_data', 'testmodule.yaml')) \ as mmd_file: @@ -96,11 +100,6 @@ class TestUtils(unittest.TestCase): '?#620ec77321b2ea7b0d67d82992dda3e1d67055b4') module_build_service.utils.format_mmd(mmd, scmurl) - # Make sure all the commit hashes were properly set in xmd section - # of modulemd. - xmd_pkg_refs = [pkg['ref'] for pkg in mmd.xmd['mbs']['rpms'].values()] - self.assertEqual(set(xmd_pkg_refs), set(hashes_returned)) - # Make sure that original refs are not changed. mmd_pkg_refs = [pkg.ref for pkg in mmd.components.rpms.values()] self.assertEqual(set(mmd_pkg_refs), set(original_refs)) @@ -121,6 +120,7 @@ class TestUtils(unittest.TestCase): '.git?#620ec77321b2ea7b0d67d82992dda3e1d67055b4', } } + self.assertEqual(mmd.xmd, xmd) @vcr.use_cassette( @@ -128,10 +128,13 @@ class TestUtils(unittest.TestCase): @patch('module_build_service.scm.SCM') def test_format_mmd_empty_scmurl(self, mocked_scm): # For all the RPMs in testmodule, get_latest is called - mocked_scm.return_value.get_latest.side_effect = [ - '4ceea43add2366d8b8c5a622a2fb563b625b9abf', - 'fbed359411a1baa08d4a88e0d12d426fbf8f602c', - '76f9d8c8e87eed0aab91034b01d3d5ff6bd5b4cb'] + hashes_returned = { + 'f24': '4ceea43add2366d8b8c5a622a2fb563b625b9abf', + 'f23': 'fbed359411a1baa08d4a88e0d12d426fbf8f602c', + 'f25': '76f9d8c8e87eed0aab91034b01d3d5ff6bd5b4cb'} + def mocked_get_latest(branch = "master"): + return hashes_returned[branch] + mocked_scm.return_value.get_latest = mocked_get_latest mmd = modulemd.ModuleMetadata() with open(path.join(BASE_DIR, '..', 'staged_data', 'testmodule.yaml')) \ diff --git a/tests/test_views/test_views.py b/tests/test_views/test_views.py index 73f0d62..26393ff 100644 --- a/tests/test_views/test_views.py +++ b/tests/test_views/test_views.py @@ -536,9 +536,9 @@ class TestViews(unittest.TestCase): # Test that RPMs are properly merged in case of included modules in mmd. xmd_rpms = {'ed': {'ref': '40bd001563'}, 'perl-List-Compare': {'ref': '2ee8474e44'}, - 'tangerine': {'ref': '2ee8474e44'}, + 'tangerine': {'ref': 'd29d5c24b8'}, 'file': {'ref': 'a2740663f8'}, - 'perl-Tangerine': {'ref': '2ee8474e44'}} + 'perl-Tangerine': {'ref': '27785f9f05'}} self.assertEqual(mmd.xmd['mbs']['rpms'], xmd_rpms) @patch('module_build_service.auth.get_user', return_value=user)