From e19f867004aae93bac35992d086cf8eeda6422be Mon Sep 17 00:00:00 2001 From: Adam Williamson Date: Apr 26 2018 18:48:36 +0000 Subject: Adjust update test scheduling for FreeIPA upgrade tests This commit includes a few changes to scheduling such that we can run tests involving a system upgrade on updates. It allows scheduling of the new 'server-upgrade' flavor, adjusts the whitelist for that, avoids scheduling upgrade tests for updates to the oldest current stable release (as we don't support upgrades from EOL releases and we don't have the disk images available), passes CURRREL in for these tests (which is used to decide which base disk image to boot from and thus which release to upgrade *from*), and updates the tests for all these changes. Signed-off-by: Adam Williamson --- diff --git a/fedora_openqa/config.py b/fedora_openqa/config.py index d56177a..f4bf2bd 100644 --- a/fedora_openqa/config.py +++ b/fedora_openqa/config.py @@ -226,20 +226,20 @@ WANTED = [ # None (or anything else false-y) which means "run all the flavors". UPDATEWL = { # FreeIPA-related bits - '389-ds': ('server',), - '389-ds-base': ('server',), - 'bind': ('server',), - 'bind-dyndb-ldap': ('server',), - 'certmonger': ('server',), - 'ding-libs': ('server',), - 'freeipa': ('server',), - 'httpd': ('server',), - 'krb5-server': ('server',), - 'pki-core': ('server',), - 'sssd': ('server',), - 'tomcat': ('server',), - 'python-ldap': ('server',), - 'python-pyldap': ('server',), + '389-ds': ('server', 'server-upgrade'), + '389-ds-base': ('server', 'server-upgrade'), + 'bind': ('server', 'server-upgrade'), + 'bind-dyndb-ldap': ('server', 'server-upgrade'), + 'certmonger': ('server', 'server-upgrade'), + 'ding-libs': ('server', 'server-upgrade'), + 'freeipa': ('server', 'server-upgrade'), + 'httpd': ('server', 'server-upgrade'), + 'krb5-server': ('server', 'server-upgrade'), + 'pki-core': ('server', 'server-upgrade'), + 'sssd': ('server', 'server-upgrade'), + 'tomcat': ('server', 'server-upgrade'), + 'python-ldap': ('server', 'server-upgrade'), + 'python-pyldap': ('server', 'server-upgrade'), # Cockpit-related bits 'cockpit': ('server',), # PostgreSQL is a release-blocking server role diff --git a/fedora_openqa/schedule.py b/fedora_openqa/schedule.py index f6bab47..ae95d7c 100644 --- a/fedora_openqa/schedule.py +++ b/fedora_openqa/schedule.py @@ -350,6 +350,8 @@ def jobs_from_update(update, version, flavors=None, force=False, extraparams=Non 'server': { 'HDD_1': 'disk_f{0}_server_3_{1}.img'.format(version, arch), }, + 'server-upgrade': { + }, 'workstation': { 'HDD_1': 'disk_f{0}_desktop_4_{1}.img'.format(version, arch), 'DESKTOP': 'gnome', @@ -364,16 +366,24 @@ def jobs_from_update(update, version, flavors=None, force=False, extraparams=Non # only obsolete pending jobs for same BUILD (i.e. update) '_ONLY_OBSOLETE_SAME_BUILD': '1', 'START_AFTER_TEST': '', + # for upgrade tests run on updates, 'CURRREL' should be the + # release before the release the upgrade is for + 'CURRREL': str(int(version)-1), } # mark if release is a development release; the tests need to know + # also check if release is the oldest current stable, in which + # case we don't need to run upgrade tests try: - curr = int(fedfind.helpers.get_current_release()) + stables = fedfind.helpers.get_current_stables() + curr = max(stables) + oldest = min(stables) if str(version).lower() == 'rawhide' or int(version) > curr: baseparams['DEVELOPMENT'] = 1 except ValueError: # but don't fail to schedule if fedfind fails... - logger.warning("jobs_from_update: could not determine current release! Assuming update is " - "for stable release.") + logger.warning("jobs_from_update: could not determine current or oldest release! Assuming update is " + "for stable release that is not the oldest stable.") + oldest = 0 client = OpenQA_Client(openqa_hostname) jobs = [] @@ -381,6 +391,12 @@ def jobs_from_update(update, version, flavors=None, force=False, extraparams=Non flavors = flavdict.keys() for flavor in flavors: + if int(version) == oldest and 'upgrade' in flavor: + # we don't want to run upgrade tests in this case; we + # don't support upgrade from EOL releases, and we don't + # keep the necessary base disk images around + logger.debug("skipping upgrade tests as release {0} is the oldest stable".format(version)) + continue fullflav = 'updates-{0}'.format(flavor) if not force: # dupe check diff --git a/tests/test_consumers.py b/tests/test_consumers.py index df19fa3..5f41848 100644 --- a/tests/test_consumers.py +++ b/tests/test_consumers.py @@ -291,10 +291,10 @@ class TestConsumers: (EPELCREATE, False), (EPELEDIT, False), # WLCREATE contains only a 'server'-whitelisted package - (WLCREATE, ['server']), + (WLCREATE, ['server', 'server-upgrade']), # WLEDIT contains both 'server' and 'workstation'-whitelisted # packages - (WLEDIT, ['server', 'workstation']), + (WLEDIT, ['server', 'server-upgrade', 'workstation']), # WLALLEDIT contains an 'all flavors'-whitelisted package (WLALLEDIT, None), ] diff --git a/tests/test_schedule.py b/tests/test_schedule.py index eedbc85..8ca4b11 100644 --- a/tests/test_schedule.py +++ b/tests/test_schedule.py @@ -397,7 +397,7 @@ def test_jobs_from_compose_unsupported(): ret = schedule.jobs_from_compose('https://kojipkgs.fedoraproject.org/compose/updates/Fedora-27-updates-testing-20180123.0/compose/') assert ret == ('', []) -@mock.patch('fedfind.helpers.get_current_release', return_value=25) +@mock.patch('fedfind.helpers.get_current_stables', return_value=[24, 25]) @mock.patch('fedora_openqa.schedule.OpenQA_Client', autospec=True) def test_jobs_from_update(fakeclient, fakecurr): """Tests for jobs_from_update.""" @@ -408,12 +408,12 @@ def test_jobs_from_update(fakeclient, fakecurr): fakeinst.openqa_request.return_value = {'jobs': [], 'ids': [1]} # simple case ret = schedule.jobs_from_update('FEDORA-2017-b07d628952', '25') - # should get two jobs (as we schedule for two flavors by default) - assert ret == [1, 1] + # should get three jobs (as we schedule for three flavors by default) + assert ret == [1, 1, 1] # find the POST calls posts = [call for call in fakeinst.openqa_request.call_args_list if call[0][0] == 'POST'] - # two flavors by default, two calls - assert len(posts) == 2 + # three flavors by default, three calls + assert len(posts) == 3 parmdicts = [call[0][2] for call in posts] parmdicts.sort() assert parmdicts == [ @@ -425,8 +425,20 @@ def test_jobs_from_update(fakeclient, fakecurr): 'ADVISORY': 'FEDORA-2017-b07d628952', '_ONLY_OBSOLETE_SAME_BUILD': '1', 'START_AFTER_TEST': '', + 'FLAVOR': 'updates-server-upgrade', + 'CURRREL': '24', + }, + { + 'DISTRI': 'fedora', + 'VERSION': '25', + 'ARCH': 'x86_64', + 'BUILD': 'Update-FEDORA-2017-b07d628952', + 'ADVISORY': 'FEDORA-2017-b07d628952', + '_ONLY_OBSOLETE_SAME_BUILD': '1', + 'START_AFTER_TEST': '', 'HDD_1': 'disk_f25_server_3_x86_64.img', 'FLAVOR': 'updates-server', + 'CURRREL': '24', }, { 'DISTRI': 'fedora', @@ -439,6 +451,7 @@ def test_jobs_from_update(fakeclient, fakecurr): 'HDD_1': 'disk_f25_desktop_4_x86_64.img', 'FLAVOR': 'updates-workstation', 'DESKTOP': 'gnome', + 'CURRREL': '24', } ] @@ -455,9 +468,16 @@ def test_jobs_from_update(fakeclient, fakecurr): fakeinst.openqa_request.reset_mock() fakecurr.side_effect = ValueError("Well, that was unfortunate") ret = schedule.jobs_from_update('FEDORA-2017-b07d628952', '26') - assert ret == [1, 1] + assert ret == [1, 1, 1] fakecurr.side_effect = None + # check we don't schedule upgrade jobs when update is for oldest + # stable release + fakeinst.openqa_request.reset_mock() + ret = schedule.jobs_from_update('FEDORA-2017-b07d628952', '24') + # upgrade flavor skipped, so two jobs + assert ret == [1, 1] + # test 'flavors' fakeinst.openqa_request.reset_mock() ret = schedule.jobs_from_update('FEDORA-2017-b07d628952', '25', flavors=['server']) @@ -472,7 +492,7 @@ def test_jobs_from_update(fakeclient, fakecurr): # test dupe detection and 'force' fakeinst.openqa_request.reset_mock() - # this looks like a 'dupe' for the server flavor + # this looks like a 'dupe' for the server and server-upgrade flavors fakeinst.openqa_request.return_value = { 'jobs': [ { @@ -480,11 +500,16 @@ def test_jobs_from_update(fakeclient, fakecurr): 'FLAVOR': 'updates-server', }, }, + { + 'settings': { + 'FLAVOR': 'updates-server-upgrade', + }, + }, ], 'ids': [1], } ret = schedule.jobs_from_update('FEDORA-2017-b07d628952', '25') - # should get one job, as we shouldn't POST for server + # should get one job, as we shouldn't POST for server or server-upgrade assert ret == [1] # find the POST calls posts = [call for call in fakeinst.openqa_request.call_args_list if call[0][0] == 'POST'] @@ -495,8 +520,8 @@ def test_jobs_from_update(fakeclient, fakecurr): # now try with force=True fakeinst.openqa_request.reset_mock() ret = schedule.jobs_from_update('FEDORA-2017-b07d628952', '25', force=True) - # should get two jobs this time - assert ret == [1, 1] + # should get three jobs this time + assert ret == [1, 1, 1] # test extraparams fakeinst.openqa_request.reset_mock() @@ -519,7 +544,7 @@ def test_jobs_from_update(fakeclient, fakecurr): # find the POST calls posts = [call for call in fakeinst.openqa_request.call_args_list if call[0][0] == 'POST'] # check parm dict values - assert posts[0][0][2]['ARCH'] == 'ppc64le' - assert posts[0][0][2]['HDD_1'] in ['disk_f25_server_3_ppc64le.img', 'disk_f25_desktop_4_ppc64le.img'] + assert posts[1][0][2]['ARCH'] == 'ppc64le' + assert posts[1][0][2]['HDD_1'] in ['disk_f25_server_3_ppc64le.img', 'disk_f25_desktop_4_ppc64le.img'] # vim: set textwidth=120 ts=8 et sw=4: