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)