github.com/SUSE/skuba@v1.4.17/ci/infra/testrunner/tests/test_addon_upgrade.py (about) 1 import copy 2 import yaml 3 import pytest 4 import re 5 6 from tests.utils import get_skuba_configuration_dict, replace_skuba_config 7 8 9 def addons_up_to_date(skuba): 10 all_fine = re.compile( 11 r'Congratulations! Addons for \d+\.\d+\.\d+ are already at the latest version available' 12 ) 13 out = skuba.addon_upgrade('plan') 14 return bool(all_fine.findall(out)) 15 16 17 def decrease_one_addon_manifest(addons_dict, skip=None): 18 for addon in addons_dict: 19 if skip and addon in skip: 20 continue 21 ver = addons_dict[addon]['ManifestVersion'] 22 if ver > 0: 23 addons_dict[addon]['ManifestVersion'] -= 1 24 return ( 25 addon, addons_dict[addon]['Version'], (ver - 1, ver) 26 ) 27 raise Exception("Could not decrease any addon manifest version!") 28 29 30 def change_one_addon_image(addons_dict, new_tag, skip=None): 31 u_manif = decrease_one_addon_manifest(addons_dict, skip) 32 addons_dict[u_manif[0]]['Version'] = new_tag 33 return (u_manif[0], (new_tag, u_manif[1]), u_manif[2]) 34 35 36 def remove_one_addon(addons_dict, skip=None): 37 for addon in addons_dict.keys(): 38 if skip and addon in skip: 39 continue 40 version = addons_dict.pop(addon) 41 return ( 42 addon, version['Version'], version['ManifestVersion'] 43 ) 44 raise Exception('Could not remove any addon!') 45 46 47 @pytest.mark.pr 48 def test_addon_upgrade_apply(deployment, kubectl, skuba): 49 skubaconf_dict = get_skuba_configuration_dict(kubectl) 50 addons_dict = skubaconf_dict['AddonsVersion'] 51 52 decrease_one_addon_manifest(addons_dict) 53 54 out = replace_skuba_config( 55 kubectl, "SkubaConfiguration='{0}'".format(yaml.dump(skubaconf_dict)) 56 ) 57 assert not addons_up_to_date(skuba) 58 59 out = skuba.addon_refresh('localconfig') 60 assert out.find("Successfully refreshed addons base manifests") != -1 61 62 out = skuba.addon_upgrade('apply') 63 assert out.find("Successfully upgraded addons") != -1 64 assert addons_up_to_date(skuba) 65 66 67 def test_addon_upgrade_plan(deployment, kubectl, skuba): 68 assert addons_up_to_date(skuba) 69 70 skubaconf_dict = get_skuba_configuration_dict(kubectl) 71 skubaconf_orig = copy.deepcopy(skubaconf_dict) 72 addons_dict = skubaconf_dict['AddonsVersion'] 73 74 rm_addon = remove_one_addon(addons_dict) 75 u_manif = decrease_one_addon_manifest(addons_dict) 76 u_img = change_one_addon_image(addons_dict, 'new_tag', skip=[u_manif[0]]) 77 78 u_img_msg = '{0}: {1} -> {2}'.format(u_img[0], u_img[1][0], u_img[1][1]) 79 u_manif_msg = '{0}: {1} (manifest version from {2} to {3})'.format( 80 u_manif[0], u_manif[1], u_manif[2][0], u_manif[2][1] 81 ) 82 n_addon_msg = '{0}: {1} (new addon)'.format(rm_addon[0], rm_addon[1]) 83 84 replace_skuba_config( 85 kubectl, "SkubaConfiguration='{0}'".format(yaml.dump(skubaconf_dict)) 86 ) 87 out = skuba.addon_upgrade('plan') 88 replace_skuba_config( 89 kubectl, "SkubaConfiguration='{0}'".format(yaml.dump(skubaconf_orig)) 90 ) 91 92 assert out.find(u_manif_msg) != -1 93 assert out.find(u_img_msg) != -1 94 assert out.find(n_addon_msg) != -1 95 assert addons_up_to_date(skuba)