From f872b494e9d728a6333d128b67bd51789329dfd9 Mon Sep 17 00:00:00 2001 From: Robert Gildein Date: Wed, 20 Mar 2024 11:41:05 +0100 Subject: [PATCH] Cleanup unittests (#319) Remove unused utils functions, replace helper add_steps to .add_steps and rename test files. --- tests/unit/apps/test_auxiliary.py | 15 ++- tests/unit/apps/test_auxiliary_subordinate.py | 7 +- tests/unit/apps/test_channel_based.py | 7 +- tests/unit/apps/test_core.py | 11 +-- tests/unit/apps/test_subordinate.py | 9 +- tests/unit/apps/utils.py | 19 ---- ...{test_steps_analyze.py => test_analyze.py} | 0 .../{test_steps_backup.py => test_backup.py} | 0 ...{test_steps_execute.py => test_execute.py} | 0 .../{test_steps_plan.py => test_plan.py} | 5 +- tests/unit/utils.py | 91 ------------------- 11 files changed, 24 insertions(+), 140 deletions(-) delete mode 100644 tests/unit/apps/utils.py rename tests/unit/steps/{test_steps_analyze.py => test_analyze.py} (100%) rename tests/unit/steps/{test_steps_backup.py => test_backup.py} (100%) rename tests/unit/steps/{test_steps_execute.py => test_execute.py} (100%) rename tests/unit/steps/{test_steps_plan.py => test_plan.py} (98%) delete mode 100644 tests/unit/utils.py diff --git a/tests/unit/apps/test_auxiliary.py b/tests/unit/apps/test_auxiliary.py index 5f14fd79..f0beec7e 100644 --- a/tests/unit/apps/test_auxiliary.py +++ b/tests/unit/apps/test_auxiliary.py @@ -26,7 +26,6 @@ ) from cou.utils import app_utils from cou.utils.openstack import OpenStackRelease -from tests.unit.apps.utils import add_steps def test_auxiliary_app(status, config, model, apps_machines): @@ -152,7 +151,7 @@ def test_auxiliary_upgrade_plan_ussuri_to_victoria_change_channel( coro=app._check_upgrade(target), ), ] - add_steps(expected_plan, upgrade_steps) + expected_plan.add_steps(upgrade_steps) assert upgrade_plan == expected_plan @@ -217,7 +216,7 @@ def test_auxiliary_upgrade_plan_ussuri_to_victoria(status, config, model, apps_m coro=app._check_upgrade(target), ), ] - add_steps(expected_plan, upgrade_steps) + expected_plan.add_steps(upgrade_steps) assert upgrade_plan == expected_plan @@ -287,7 +286,7 @@ def test_auxiliary_upgrade_plan_ussuri_to_victoria_ch_migration( coro=app._check_upgrade(target), ), ] - add_steps(expected_plan, upgrade_steps) + expected_plan.add_steps(upgrade_steps) assert upgrade_plan == expected_plan @@ -481,7 +480,7 @@ def test_ceph_mon_upgrade_plan_xena_to_yoga(status, config, model, apps_machines coro=app._check_upgrade(target), ), ] - add_steps(expected_plan, upgrade_steps) + expected_plan.add_steps(upgrade_steps) assert upgrade_plan == expected_plan @@ -552,7 +551,7 @@ def test_ceph_mon_upgrade_plan_ussuri_to_victoria( coro=app._check_upgrade(target), ), ] - add_steps(expected_plan, upgrade_steps) + expected_plan.add_steps(upgrade_steps) assert upgrade_plan == expected_plan @@ -669,7 +668,7 @@ def test_ovn_principal_upgrade_plan(status, config, model, apps_machines): coro=app._check_upgrade(target), ), ] - add_steps(expected_plan, upgrade_steps) + expected_plan.add_steps(upgrade_steps) assert upgrade_plan == expected_plan @@ -729,6 +728,6 @@ def test_mysql_innodb_cluster_upgrade(status, config, model, apps_machines): coro=app._check_upgrade(target), ), ] - add_steps(expected_plan, upgrade_steps) + expected_plan.add_steps(upgrade_steps) assert upgrade_plan == expected_plan diff --git a/tests/unit/apps/test_auxiliary_subordinate.py b/tests/unit/apps/test_auxiliary_subordinate.py index e9bdedf1..0ac59351 100644 --- a/tests/unit/apps/test_auxiliary_subordinate.py +++ b/tests/unit/apps/test_auxiliary_subordinate.py @@ -22,7 +22,6 @@ from cou.exceptions import ApplicationError, HaltUpgradePlanGeneration from cou.steps import ApplicationUpgradePlan, PreUpgradeStep, UpgradeStep from cou.utils.openstack import OpenStackRelease -from tests.unit.apps.utils import add_steps def test_auxiliary_subordinate(apps): @@ -114,7 +113,7 @@ def test_ovn_subordinate_upgrade_plan(status, model): coro=model.upgrade_charm(app.name, "22.03/stable", switch=None), ), ] - add_steps(expected_plan, upgrade_steps) + expected_plan.add_steps(upgrade_steps) assert upgrade_plan == expected_plan @@ -167,7 +166,7 @@ def test_ceph_dashboard_upgrade_plan_ussuri_to_victoria(status, config, model): coro=model.upgrade_charm(app.name, "octopus/stable", switch=None), ), ] - add_steps(expected_plan, upgrade_steps) + expected_plan.add_steps(upgrade_steps) assert upgrade_plan == expected_plan @@ -202,6 +201,6 @@ def test_ceph_dashboard_upgrade_plan_xena_to_yoga(status, config, model): coro=model.upgrade_charm(app.name, "quincy/stable"), ), ] - add_steps(expected_plan, upgrade_steps) + expected_plan.add_steps(upgrade_steps) assert upgrade_plan == expected_plan diff --git a/tests/unit/apps/test_channel_based.py b/tests/unit/apps/test_channel_based.py index cd192f0a..25284060 100644 --- a/tests/unit/apps/test_channel_based.py +++ b/tests/unit/apps/test_channel_based.py @@ -19,7 +19,6 @@ ) from cou.utils import app_utils from cou.utils.openstack import OpenStackRelease -from tests.unit.apps.utils import add_steps def test_application_versionless(status, config, model, apps_machines): @@ -139,7 +138,7 @@ def test_application_versionless_upgrade_plan_ussuri_to_victoria( ), ] - add_steps(expected_plan, upgrade_steps) + expected_plan.add_steps(upgrade_steps) assert upgrade_plan == expected_plan @@ -211,7 +210,7 @@ def test_application_gnocchi_upgrade_plan_ussuri_to_victoria(status, config, mod ), ] - add_steps(expected_plan, upgrade_steps) + expected_plan.add_steps(upgrade_steps) assert upgrade_plan == expected_plan @@ -284,6 +283,6 @@ def test_application_designate_bind_upgrade_plan_ussuri_to_victoria( ), ] - add_steps(expected_plan, upgrade_steps) + expected_plan.add_steps(upgrade_steps) assert upgrade_plan == expected_plan diff --git a/tests/unit/apps/test_core.py b/tests/unit/apps/test_core.py index 40a439b7..57722228 100644 --- a/tests/unit/apps/test_core.py +++ b/tests/unit/apps/test_core.py @@ -30,7 +30,6 @@ ) from cou.utils import app_utils from cou.utils.openstack import OpenStackRelease -from tests.unit.apps.utils import add_steps def test_application_eq(status, config, model, apps_machines): @@ -440,7 +439,7 @@ def test_upgrade_plan_ussuri_to_victoria(status, config, model, apps_machines): coro=app._check_upgrade(target), ), ] - add_steps(expected_plan, upgrade_steps) + expected_plan.add_steps(upgrade_steps) assert upgrade_plan == expected_plan @@ -509,7 +508,7 @@ def test_upgrade_plan_ussuri_to_victoria_ch_migration(status, config, model, app coro=app._check_upgrade(target), ), ] - add_steps(expected_plan, upgrade_steps) + expected_plan.add_steps(upgrade_steps) assert upgrade_plan == expected_plan @@ -569,7 +568,7 @@ def test_upgrade_plan_channel_on_next_os_release(status, config, model, apps_mac coro=app._check_upgrade(target), ), ] - add_steps(expected_plan, upgrade_steps) + expected_plan.add_steps(upgrade_steps) assert upgrade_plan == expected_plan @@ -629,7 +628,7 @@ def test_upgrade_plan_origin_already_on_next_openstack_release( coro=app._check_upgrade(target), ), ] - add_steps(expected_plan, upgrade_steps) + expected_plan.add_steps(upgrade_steps) assert upgrade_plan == expected_plan @@ -710,6 +709,6 @@ def test_upgrade_plan_application_already_disable_action_managed( coro=app._check_upgrade(target), ), ] - add_steps(expected_plan, upgrade_steps) + expected_plan.add_steps(upgrade_steps) assert upgrade_plan == expected_plan diff --git a/tests/unit/apps/test_subordinate.py b/tests/unit/apps/test_subordinate.py index 5278c8c7..195a0f85 100644 --- a/tests/unit/apps/test_subordinate.py +++ b/tests/unit/apps/test_subordinate.py @@ -20,7 +20,6 @@ from cou.exceptions import ApplicationError from cou.steps import ApplicationUpgradePlan, PreUpgradeStep, UpgradeStep from cou.utils.openstack import OpenStackRelease -from tests.unit.apps.utils import add_steps logger = logging.getLogger(__name__) @@ -61,7 +60,7 @@ def test_generate_upgrade_plan(status, model): coro=model.upgrade_charm(app.name, "victoria/stable"), ), ] - add_steps(expected_plan, upgrade_steps) + expected_plan.add_steps(upgrade_steps) assert upgrade_plan == expected_plan @@ -133,7 +132,7 @@ def test_generate_plan_ch_migration(status, model, channel): coro=model.upgrade_charm(app.name, "wallaby/stable"), ), ] - add_steps(expected_plan, upgrade_steps) + expected_plan.add_steps(upgrade_steps) assert upgrade_plan == expected_plan @@ -167,7 +166,7 @@ def test_generate_plan_from_to(status, model, from_os, to_os): coro=model.upgrade_charm(app.name, f"{to_os}/stable"), ), ] - add_steps(expected_plan, upgrade_steps) + expected_plan.add_steps(upgrade_steps) assert upgrade_plan == expected_plan @@ -198,6 +197,6 @@ def test_generate_plan_in_same_version(status, model, from_to): coro=model.upgrade_charm(app.name, f"{from_to}/stable", switch=None), ), ] - add_steps(expected_plan, upgrade_steps) + expected_plan.add_steps(upgrade_steps) assert upgrade_plan == expected_plan diff --git a/tests/unit/apps/utils.py b/tests/unit/apps/utils.py deleted file mode 100644 index daedc8c4..00000000 --- a/tests/unit/apps/utils.py +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright 2023 Canonical Limited -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -from cou.steps import BaseStep - - -def add_steps(expected_plan: BaseStep, upgrade_steps: list[BaseStep]): - for step in upgrade_steps: - expected_plan.add_step(step) diff --git a/tests/unit/steps/test_steps_analyze.py b/tests/unit/steps/test_analyze.py similarity index 100% rename from tests/unit/steps/test_steps_analyze.py rename to tests/unit/steps/test_analyze.py diff --git a/tests/unit/steps/test_steps_backup.py b/tests/unit/steps/test_backup.py similarity index 100% rename from tests/unit/steps/test_steps_backup.py rename to tests/unit/steps/test_backup.py diff --git a/tests/unit/steps/test_steps_execute.py b/tests/unit/steps/test_execute.py similarity index 100% rename from tests/unit/steps/test_steps_execute.py rename to tests/unit/steps/test_execute.py diff --git a/tests/unit/steps/test_steps_plan.py b/tests/unit/steps/test_plan.py similarity index 98% rename from tests/unit/steps/test_steps_plan.py rename to tests/unit/steps/test_plan.py index 55632f46..62583cd9 100644 --- a/tests/unit/steps/test_steps_plan.py +++ b/tests/unit/steps/test_plan.py @@ -40,7 +40,6 @@ ) from cou.utils import app_utils from cou.utils.openstack import OpenStackRelease -from tests.unit.apps.utils import add_steps def generate_expected_upgrade_plan_principal(app, target, model): @@ -110,7 +109,7 @@ def generate_expected_upgrade_plan_principal(app, target, model): coro=app._check_upgrade(target), ), ] - add_steps(expected_plan, upgrade_steps) + expected_plan.add_steps(upgrade_steps) return expected_plan @@ -133,7 +132,7 @@ def generate_expected_upgrade_plan_subordinate(app, target, model): coro=model.upgrade_charm(app.name, f"{target.codename}/stable"), ), ] - add_steps(expected_plan, upgrade_steps) + expected_plan.add_steps(upgrade_steps) return expected_plan diff --git a/tests/unit/utils.py b/tests/unit/utils.py deleted file mode 100644 index 6e8a3751..00000000 --- a/tests/unit/utils.py +++ /dev/null @@ -1,91 +0,0 @@ -# Copyright 2023 Canonical Limited -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -"""Module to provide helper for writing unit tests.""" - -import contextlib -import io -import unittest -from unittest import mock - - -@contextlib.contextmanager -def patch_open(): - """Patch open(). - - Patch open() to allow mocking both open() itself and the file that is - yielded. - - Yields the mock for "open" and "file", respectively. - """ - mock_open = mock.MagicMock(spec=open) - mock_file = mock.MagicMock(spec=io.FileIO) - - @contextlib.contextmanager - def stub_open(*args, **kwargs): - mock_open(*args, **kwargs) - yield mock_file - - with mock.patch("builtins.open", stub_open): - yield mock_open, mock_file - - -class BaseTestCase(unittest.TestCase): - """Base class for creating classes of unit tests.""" - - def shortDescription(self): - """Disable reporting unit test doc strings rather than names.""" - return None - - def setUp(self): - """Run setup of patches.""" - self._patches = {} - self._patches_start = {} - - def tearDown(self): - """Run teardown of patches.""" - for k, v in self._patches.items(): - v.stop() - setattr(self, k, None) - self._patches = None - self._patches_start = None - - def patch_object(self, obj, attr, return_value=None, name=None, new=None, **kwargs): - """Patch the given object.""" - if name is None: - name = attr - if new is not None: - mocked = mock.patch.object(obj, attr, new=new, **kwargs) - else: - mocked = mock.patch.object(obj, attr, **kwargs) - self._patches[name] = mocked - started = mocked.start() - if new is None: - started.return_value = return_value - self._patches_start[name] = started - setattr(self, name, started) - - def patch(self, item, return_value=None, name=None, new=None, **kwargs): - """Patch the given item.""" - if name is None: - raise RuntimeError("Must pass 'name' to .patch()") - if new is not None: - mocked = mock.patch(item, new=new, **kwargs) - else: - mocked = mock.patch(item, **kwargs) - self._patches[name] = mocked - started = mocked.start() - if new is None: - started.return_value = return_value - self._patches_start[name] = started - setattr(self, name, started)