Skip to content

Commit

Permalink
Add unit tests
Browse files Browse the repository at this point in the history
  • Loading branch information
ilia1243 committed Jan 12, 2024
1 parent e89016f commit 71d0e73
Show file tree
Hide file tree
Showing 2 changed files with 71 additions and 2 deletions.
42 changes: 42 additions & 0 deletions test/unit/core/test_flow.py
Original file line number Diff line number Diff line change
Expand Up @@ -291,6 +291,7 @@ def test_detect_nodes_context(self):
"Here should be all 4 calls of test_func")

self.assertEqual("rhel", cluster.get_os_family())
self.assertEqual(len(hosts), len(cluster.nodes_context))
for host, node_context in cluster.nodes_context.items():
self.assertEqual({'online': True, 'accessible': True, 'sudo': 'Root'}, node_context["access"])
self.assertEqual({'name': 'centos', 'version': '7.6', 'family': 'rhel'}, node_context["os"])
Expand Down Expand Up @@ -332,6 +333,22 @@ def test_any_offline_node_interrupts(self):
self.assertIsInstance(exc, errors.FailException, msg="Exception should be raised")
self.assertTrue(f"['{offline}'] are not reachable." in str(exc.reason))

def test_all_nodes_offline_check_iaas(self):
inventory = demo.generate_inventory(**demo.FULLHA_KEEPALIVED)
self._stub_detect_nodes_context(inventory, [], [])
context = demo.create_silent_context(procedure='check_iaas')
res = demo.FakeResources(context, inventory, fake_shell=self.light_fake_shell)
flow.run_tasks(res, tasks)
cluster = res.cluster()
self.assertEqual(4, cluster.context["test_info"],
"Here should be all 4 calls of test_func")

self.assertEqual("<undefined>", cluster.get_os_family())
for host, node_context in cluster.nodes_context.items():
self.assertEqual({'online': False, 'accessible': False, 'sudo': "No"}, node_context["access"])
self.assertEqual({'name': "<undefined>", 'version': "<undefined>", 'family': "<undefined>"}, node_context["os"])
self.assertEqual("<undefined>", node_context["active_interface"])

def test_any_removed_node_can_be_offline(self):
inventory = demo.generate_inventory(**demo.FULLHA_KEEPALIVED)
online_hosts = [node["address"] for node in inventory["nodes"]]
Expand All @@ -349,6 +366,31 @@ def test_any_removed_node_can_be_offline(self):
# no exception should occur
flow.run_tasks(res, tasks)

def test_detect_nodes_context_removed_node_online(self):
inventory = demo.generate_inventory(**demo.FULLHA_KEEPALIVED)
hosts = [node["address"] for node in inventory["nodes"]]
self._stub_detect_nodes_context(inventory, hosts, hosts)

i = random.randrange(len(inventory["nodes"]))
procedure_inventory = demo.generate_procedure_inventory('remove_node')
procedure_inventory["nodes"] = [{"name": inventory["nodes"][i]["name"]}]

context = demo.create_silent_context(['fake_path.yaml'], procedure='remove_node')
res = demo.FakeResources(context, inventory, procedure_inventory=procedure_inventory,
fake_shell=self.light_fake_shell)

flow.run_tasks(res, tasks)
cluster = res.cluster()
self.assertEqual(4, cluster.context["test_info"],
"Here should be all 4 calls of test_func")

self.assertEqual("rhel", cluster.get_os_family())
self.assertEqual(len(hosts), len(cluster.nodes_context))
for host, node_context in cluster.nodes_context.items():
self.assertEqual({'online': True, 'accessible': True, 'sudo': 'Root'}, node_context["access"])
self.assertEqual({'name': 'centos', 'version': '7.6', 'family': 'rhel'}, node_context["os"])
self.assertEqual('eth0', node_context["active_interface"])

def test_kubernetes_version_not_allowed(self):
k8s_versions = list(sorted(static.KUBERNETES_VERSIONS["compatibility_map"], key=utils.version_key))
k8s_latest = k8s_versions[-1]
Expand Down
31 changes: 29 additions & 2 deletions test/unit/test_upgrade.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,10 +16,11 @@
import unittest
from copy import deepcopy
from typing import List, Optional, Tuple
from unittest import mock

from kubemarine import kubernetes
from kubemarine.core import errors, utils as kutils, static, log
from kubemarine.procedures import upgrade
from kubemarine.procedures import upgrade, install
from kubemarine import demo
from test.unit import utils

Expand Down Expand Up @@ -141,7 +142,6 @@ def setUp(self):
self.old = 'v1.24.2'
self.new = 'v1.24.11'
self.inventory, self.context = generate_upgrade_environment(self.old)
self.context['upgrade_step'] = 0
self.nodes_context = demo.generate_nodes_context(self.inventory, os_name='ubuntu', os_version='20.04')
self.inventory['services'].update({'packages': {'associations': {
'docker': {},
Expand All @@ -160,6 +160,7 @@ def setUp(self):
}

def _new_cluster(self):
self.context['upgrade_step'] = 0
return demo.new_cluster(deepcopy(self.inventory), procedure_inventory=deepcopy(self.upgrade),
context=self.context, nodes_context=self.nodes_context)

Expand Down Expand Up @@ -269,6 +270,32 @@ def test_procedure_inventory_upgrade_required_inventory_redefined(self):
'containerd' in cluster.context["upgrade"]["required"]['packages'],
f"CRI was {'not' if expected_upgrade_required else 'unexpectedly'} scheduled for upgrade")

def test_no_custom_packages_upgrade_not_required(self):
self._run_upgrade_packages_and_check(False)

def test_custom_packages_upgrade_not_required(self):
self.inventory['services']['packages']['install'] = ['curl']
self._run_upgrade_packages_and_check(False)

def test_custom_packages_procedure_extended_upgrade_required(self):
self.inventory['services']['packages']['install'] = ['curl']
self.upgrade[self.new]['packages']['install'] = ['unzip', {'<<': 'merge'}]
self._run_upgrade_packages_and_check(True)

def test_procedure_upgrade_custom_packages_upgrade_required(self):
self.upgrade[self.new]['packages']['upgrade'] = ['unzip']
self._run_upgrade_packages_and_check(True)

def _run_upgrade_packages_and_check(self, called: bool):
args = self.context['execution_arguments']
args['without_act'] = False
args['tasks'] = 'packages'
resources = demo.FakeResources(self.context, self.inventory,
procedure_inventory=self.upgrade, nodes_context=self.nodes_context)
with mock.patch.object(install, install.manage_custom_packages.__name__) as run:
utils.run_actions(resources, [upgrade.UpgradeAction(0)])
self.assertEqual(called, run.called, f"Upgrade was {'not' if called else 'unexpectedly'} run")

def test_final_inventory_merge_packages(self):
self.inventory['services']['packages'].setdefault('install', {})['include'] = ['curl']
self.upgrade[self.new]['packages']['install'] = ['unzip', {'<<': 'merge'}]
Expand Down

0 comments on commit 71d0e73

Please sign in to comment.