From 365aed9a21db72fd7b44099a2b2f20df540f77f5 Mon Sep 17 00:00:00 2001 From: Samuel Allan Date: Wed, 21 Feb 2024 08:51:44 +1030 Subject: [PATCH] Remove pypi mock package for tests 'mock' is built in to python as unittest.mock since python 3.3. The mock package on pypi is a backport, and not required here. The test code throughout this repo used a mix of unittest.mock and the mock package. This makes it consistently unittest.mock now, and makes the import styles consistent too. Change-Id: I643247ac4061c095b327a73cba75a1fa67f1c32e --- .../tests/unit/test_cinder_ceph_charm.py | 8 +- .../tests/unit/test_glance_charm.py | 7 +- charms/gnocchi-k8s/tests/unit/test_charm.py | 7 +- .../tests/unit/test_horizon_charm.py | 7 +- .../tests/unit/test_keystone_charm.py | 10 +- .../tests/unit/test_magnum_charm.py | 6 +- .../tests/unit/test_os_exporter.py | 6 +- .../tests/unit/test_charm.py | 8 +- .../tests/unit/test_ovn_central_charm.py | 9 +- .../sunbeam-clusterd/tests/unit/test_charm.py | 6 +- .../tests/unit/test_tempest_charm.py | 131 +++++++++--------- ops-sunbeam/ops_sunbeam/test_utils.py | 6 +- .../tests/unit_tests/test_compound_status.py | 7 +- ops-sunbeam/tests/unit_tests/test_core.py | 18 +-- .../tests/unit_tests/test_templating.py | 13 +- test-requirements.txt | 1 - 16 files changed, 132 insertions(+), 118 deletions(-) diff --git a/charms/cinder-ceph-k8s/tests/unit/test_cinder_ceph_charm.py b/charms/cinder-ceph-k8s/tests/unit/test_cinder_ceph_charm.py index e9a18c01..6fbc1767 100644 --- a/charms/cinder-ceph-k8s/tests/unit/test_cinder_ceph_charm.py +++ b/charms/cinder-ceph-k8s/tests/unit/test_cinder_ceph_charm.py @@ -17,13 +17,13 @@ """Unit tests for Cinder Ceph operator charm class.""" import json - -import charm -import ops_sunbeam.test_utils as test_utils -from mock import ( +from unittest.mock import ( MagicMock, patch, ) + +import charm +import ops_sunbeam.test_utils as test_utils from ops.testing import ( Harness, ) diff --git a/charms/glance-k8s/tests/unit/test_glance_charm.py b/charms/glance-k8s/tests/unit/test_glance_charm.py index 4553448c..dd3248db 100644 --- a/charms/glance-k8s/tests/unit/test_glance_charm.py +++ b/charms/glance-k8s/tests/unit/test_glance_charm.py @@ -16,12 +16,13 @@ """Tests for glance charm.""" -import charm -import ops_sunbeam.test_utils as test_utils -from mock import ( +from unittest.mock import ( patch, ) +import charm +import ops_sunbeam.test_utils as test_utils + class _GlanceOperatorCharm(charm.GlanceOperatorCharm): def __init__(self, framework): diff --git a/charms/gnocchi-k8s/tests/unit/test_charm.py b/charms/gnocchi-k8s/tests/unit/test_charm.py index 94cb84e6..499cf3f6 100644 --- a/charms/gnocchi-k8s/tests/unit/test_charm.py +++ b/charms/gnocchi-k8s/tests/unit/test_charm.py @@ -16,12 +16,13 @@ """Tests for gnocchi charm.""" -import charm -import ops_sunbeam.test_utils as test_utils -from mock import ( +from unittest.mock import ( patch, ) +import charm +import ops_sunbeam.test_utils as test_utils + class _GnocchiCephOperatorCharm(charm.GnocchiCephOperatorCharm): def __init__(self, framework): diff --git a/charms/horizon-k8s/tests/unit/test_horizon_charm.py b/charms/horizon-k8s/tests/unit/test_horizon_charm.py index a4d93839..867f2f00 100644 --- a/charms/horizon-k8s/tests/unit/test_horizon_charm.py +++ b/charms/horizon-k8s/tests/unit/test_horizon_charm.py @@ -16,8 +16,11 @@ """Unit tests for Horizon operator.""" +from unittest.mock import ( + MagicMock, +) + import charm -import mock import ops_sunbeam.test_utils as test_utils @@ -107,7 +110,7 @@ class TestHorizonOperatorCharm(test_utils.CharmTestCase): def test_get_dashboard_url_action(self): """Test admin account action.""" - action_event = mock.MagicMock() + action_event = MagicMock() self.harness.charm._get_dashboard_url_action(action_event) action_event.set_results.assert_called_with( {"url": "http://dashboard.juju:80"} diff --git a/charms/keystone-k8s/tests/unit/test_keystone_charm.py b/charms/keystone-k8s/tests/unit/test_keystone_charm.py index 327653f5..ea5b0b3e 100644 --- a/charms/keystone-k8s/tests/unit/test_keystone_charm.py +++ b/charms/keystone-k8s/tests/unit/test_keystone_charm.py @@ -22,10 +22,10 @@ import textwrap from unittest.mock import ( ANY, MagicMock, + call, ) import charm -import mock import ops_sunbeam.test_utils as test_utils @@ -116,7 +116,7 @@ class TestKeystoneOperatorCharm(test_utils.CharmTestCase): admin_role_mock = _create_mock("arole_name", "arole_id") - km_mock = mock.MagicMock() + km_mock = MagicMock() km_mock.ksclient.show_domain.side_effect = _get_domain_side_effect km_mock.ksclient.show_project.return_value = admin_project_mock km_mock.ksclient.show_user.return_value = admin_user_mock @@ -323,11 +323,11 @@ class TestKeystoneOperatorCharm(test_utils.CharmTestCase): self.assertEqual(self.km_mock.write_keys.call_count, 2) self.km_mock.write_keys.assert_has_calls( [ - mock.call( + call( key_repository="/etc/keystone/fernet-keys", keys=updated_fernet_keys, ), - mock.call( + call( key_repository="/etc/keystone/credential-keys", keys=updated_fernet_keys, ), @@ -338,7 +338,7 @@ class TestKeystoneOperatorCharm(test_utils.CharmTestCase): self, ): """Test peer_relation_changed when fernet keys and secret have same content.""" - secret_mock = mock.MagicMock() + secret_mock = MagicMock() secret_mock.id = "test-secret-id" secret_mock.get_content.return_value = self.km_mock.read_keys() self.harness.model.app.add_secret = MagicMock() diff --git a/charms/magnum-k8s/tests/unit/test_magnum_charm.py b/charms/magnum-k8s/tests/unit/test_magnum_charm.py index aa3f38e4..4c9832d4 100644 --- a/charms/magnum-k8s/tests/unit/test_magnum_charm.py +++ b/charms/magnum-k8s/tests/unit/test_magnum_charm.py @@ -17,12 +17,12 @@ """Unit tests for Magnum operator.""" import json +from unittest.mock import ( + Mock, +) import charm import ops_sunbeam.test_utils as test_utils -from mock import ( - Mock, -) from ops.testing import ( Harness, ) diff --git a/charms/openstack-exporter-k8s/tests/unit/test_os_exporter.py b/charms/openstack-exporter-k8s/tests/unit/test_os_exporter.py index 88c4f24e..185bf211 100644 --- a/charms/openstack-exporter-k8s/tests/unit/test_os_exporter.py +++ b/charms/openstack-exporter-k8s/tests/unit/test_os_exporter.py @@ -17,12 +17,12 @@ """Unit tests for Openstack Exporter operator.""" import json +from unittest.mock import ( + Mock, +) import charm import ops_sunbeam.test_utils as test_utils -from mock import ( - Mock, -) from ops.testing import ( Harness, ) diff --git a/charms/openstack-hypervisor/tests/unit/test_charm.py b/charms/openstack-hypervisor/tests/unit/test_charm.py index 5ac5d75e..36b6ba38 100644 --- a/charms/openstack-hypervisor/tests/unit/test_charm.py +++ b/charms/openstack-hypervisor/tests/unit/test_charm.py @@ -16,8 +16,8 @@ import base64 import json -from unittest import ( - mock, +from unittest.mock import ( + MagicMock, ) import charm @@ -98,7 +98,7 @@ class TestCharm(test_utils.CharmTestCase): def test_mandatory_relations(self): """Test all the charms relations.""" self.get_local_ip_by_default_route.return_value = "10.0.0.10" - hypervisor_snap_mock = mock.MagicMock() + hypervisor_snap_mock = MagicMock() hypervisor_snap_mock.present = False self.snap.SnapState.Latest = "latest" self.snap.SnapCache.return_value = { @@ -191,7 +191,7 @@ class TestCharm(test_utils.CharmTestCase): ) self.get_local_ip_by_default_route.return_value = "10.0.0.10" - hypervisor_snap_mock = mock.MagicMock() + hypervisor_snap_mock = MagicMock() hypervisor_snap_mock.present = False self.snap.SnapState.Latest = "latest" self.snap.SnapCache.return_value = { diff --git a/charms/ovn-central-k8s/tests/unit/test_ovn_central_charm.py b/charms/ovn-central-k8s/tests/unit/test_ovn_central_charm.py index ab676826..a5765fe1 100644 --- a/charms/ovn-central-k8s/tests/unit/test_ovn_central_charm.py +++ b/charms/ovn-central-k8s/tests/unit/test_ovn_central_charm.py @@ -16,8 +16,11 @@ """Tests for OVN central charm.""" +from unittest.mock import ( + MagicMock, +) + import charm -import mock import ops_sunbeam.test_utils as test_utils @@ -38,11 +41,11 @@ class _OVNCentralOperatorCharm(charm.OVNCentralOperatorCharm): def cluster_status(self, db, cmd_executor): if db == "ovnnb_db": - nb_mock = mock.MagicMock() + nb_mock = MagicMock() nb_mock.cluster_id = "nb_id" return nb_mock if db == "ovnsb_db": - sb_mock = mock.MagicMock() + sb_mock = MagicMock() sb_mock.cluster_id = "sb_id" return sb_mock diff --git a/charms/sunbeam-clusterd/tests/unit/test_charm.py b/charms/sunbeam-clusterd/tests/unit/test_charm.py index 6eb81d7e..ff93a918 100644 --- a/charms/sunbeam-clusterd/tests/unit/test_charm.py +++ b/charms/sunbeam-clusterd/tests/unit/test_charm.py @@ -6,15 +6,15 @@ """Unit tests.""" import pathlib +from unittest.mock import ( + patch, +) import charm import ops import ops.testing as testing import ops_sunbeam.test_utils as test_utils import yaml -from mock import ( - patch, -) class _SunbeamClusterdCharm(charm.SunbeamClusterdCharm): diff --git a/charms/tempest-k8s/tests/unit/test_tempest_charm.py b/charms/tempest-k8s/tests/unit/test_tempest_charm.py index 01977058..ec304ea0 100644 --- a/charms/tempest-k8s/tests/unit/test_tempest_charm.py +++ b/charms/tempest-k8s/tests/unit/test_tempest_charm.py @@ -19,11 +19,12 @@ import json import pathlib from unittest.mock import ( + MagicMock, + Mock, patch, ) import charm -import mock import ops_sunbeam.test_utils as test_utils import yaml from utils.constants import ( @@ -120,8 +121,8 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase): """Add identity resource relation.""" rel_id = harness.add_relation("identity-ops", "keystone") harness.add_relation_unit(rel_id, "keystone/0") - harness.charm.user_id_ops.callback_f = mock.Mock() - harness.charm.user_id_ops.get_user_credential = mock.Mock( + harness.charm.user_id_ops.callback_f = Mock() + harness.charm.user_id_ops.get_user_credential = Mock( return_value={ "username": "tempest", "password": "password", @@ -172,14 +173,14 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase): """Add logging relation.""" rel_id = harness.add_relation("logging", "loki") harness.add_relation_unit(rel_id, "loki/0") - harness.charm.loki.interface = mock.Mock() + harness.charm.loki.interface = Mock() return rel_id def add_grafana_dashboard_relation(self, harness): """Add grafana dashboard relation.""" rel_id = harness.add_relation("grafana_dashboard", "grafana") harness.add_relation_unit(rel_id, "grafana/0") - harness.charm.grafana.interface = mock.Mock() + harness.charm.grafana.interface = Mock() return rel_id def test_pebble_ready_handler(self): @@ -197,8 +198,8 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase): self.harness ) - self.harness.charm.set_tempest_ready = mock.Mock() - self.harness.charm.is_tempest_ready = mock.Mock(return_value=True) + self.harness.charm.set_tempest_ready = Mock() + self.harness.charm.is_tempest_ready = Mock(return_value=True) self.harness.update_config({"schedule": "0 0 */7 * *"}) @@ -225,7 +226,7 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase): self.add_grafana_dashboard_relation(self.harness) # schedule is disabled if it's not ready, so set it ready for testing - self.harness.charm.is_tempest_ready = mock.Mock(return_value=True) + self.harness.charm.is_tempest_ready = Mock(return_value=True) # ok schedule schedule = "0 0 */7 * *" @@ -245,7 +246,7 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase): self.assertEqual(self.harness.charm.contexts().tempest.schedule, "") # tempest init not ready - self.harness.charm.is_tempest_ready = mock.Mock(return_value=False) + self.harness.charm.is_tempest_ready = Mock(return_value=False) schedule = "0 0 */7 * *" self.harness.update_config({"schedule": schedule}) self.assertEqual(self.harness.charm.contexts().tempest.schedule, "") @@ -257,7 +258,7 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase): self.add_identity_ops_relation(self.harness) self.add_grafana_dashboard_relation(self.harness) - action_event = mock.Mock() + action_event = Mock() action_event.params = { "serial": False, "regex": "test(", @@ -278,15 +279,15 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase): self.add_identity_ops_relation(self.harness) self.add_grafana_dashboard_relation(self.harness) - file1 = mock.Mock() + file1 = Mock() file1.name = "file_1" - file2 = mock.Mock() + file2 = Mock() file2.name = "file_2" - self.harness.charm.pebble_handler().container.list_files = mock.Mock( + self.harness.charm.pebble_handler().container.list_files = Mock( return_value=[file1, file2] ) - action_event = mock.Mock() + action_event = Mock() action_event.params = { "serial": False, "regex": "", @@ -307,17 +308,17 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase): self.add_identity_ops_relation(self.harness) self.add_grafana_dashboard_relation(self.harness) - file1 = mock.Mock() + file1 = Mock() file1.name = "file_1" - file2 = mock.Mock() + file2 = Mock() file2.name = "file_2" - self.harness.charm.pebble_handler().container.list_files = mock.Mock( + self.harness.charm.pebble_handler().container.list_files = Mock( return_value=[file1, file2] ) - exec_mock = mock.Mock() + exec_mock = Mock() self.harness.charm.pebble_handler().execute = exec_mock - action_event = mock.Mock() + action_event = Mock() action_event.params = { "serial": False, "regex": "smoke", @@ -342,17 +343,17 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase): self.add_identity_ops_relation(self.harness) self.add_grafana_dashboard_relation(self.harness) - file1 = mock.Mock() + file1 = Mock() file1.name = "file_1" - file2 = mock.Mock() + file2 = Mock() file2.name = "file_2" - self.harness.charm.pebble_handler().container.list_files = mock.Mock( + self.harness.charm.pebble_handler().container.list_files = Mock( return_value=[file1, file2] ) - exec_mock = mock.Mock() + exec_mock = Mock() self.harness.charm.pebble_handler().execute = exec_mock - action_event = mock.Mock() + action_event = Mock() action_event.params = { "serial": True, "regex": "re1 re2", @@ -386,10 +387,10 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase): self.add_identity_ops_relation(self.harness) self.add_grafana_dashboard_relation(self.harness) - exec_mock = mock.Mock() + exec_mock = Mock() self.harness.charm.pebble_handler().execute = exec_mock - action_event = mock.Mock() + action_event = Mock() action_event.params = { "serial": True, "regex": "", @@ -411,15 +412,15 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase): self.add_identity_ops_relation(self.harness) self.add_grafana_dashboard_relation(self.harness) - file1 = mock.Mock() + file1 = Mock() file1.name = "file_1" - file2 = mock.Mock() + file2 = Mock() file2.name = "file_2" - self.harness.charm.pebble_handler().container.list_files = mock.Mock( + self.harness.charm.pebble_handler().container.list_files = Mock( return_value=[file1, file2] ) - action_event = mock.Mock() + action_event = Mock() self.harness.charm._on_get_lists_action(action_event) action_event.fail.assert_not_called() @@ -430,15 +431,15 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase): self.add_identity_ops_relation(self.harness) self.add_grafana_dashboard_relation(self.harness) - file1 = mock.Mock() + file1 = Mock() file1.name = "file_1" - file2 = mock.Mock() + file2 = Mock() file2.name = "file_2" - self.harness.charm.unit.get_container(CONTAINER).can_connect = ( - mock.Mock(return_value=False) + self.harness.charm.unit.get_container(CONTAINER).can_connect = Mock( + return_value=False ) - action_event = mock.Mock() + action_event = Mock() self.harness.charm._on_get_lists_action(action_event) action_event.fail.assert_called_with("pebble is not ready") @@ -449,7 +450,7 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase): self.add_identity_ops_relation(self.harness) self.add_grafana_dashboard_relation(self.harness) - self.harness.charm.is_tempest_ready = mock.Mock(return_value=True) + self.harness.charm.is_tempest_ready = Mock(return_value=True) # invalid schedule should make charm in blocked status self.harness.update_config({"schedule": "* *"}) @@ -468,15 +469,15 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase): self.add_identity_ops_relation(self.harness) self.add_grafana_dashboard_relation(self.harness) - self.harness.charm.peers = mock.Mock() - self.harness.charm.peers.interface.peers_rel.data = mock.MagicMock() + self.harness.charm.peers = Mock() + self.harness.charm.peers.interface.peers_rel.data = MagicMock() self.harness.charm.peers.interface.peers_rel.data.__getitem__.return_value = { TEMPEST_READY_KEY: "" } - mock_pebble = mock.Mock() - mock_pebble.init_tempest = mock.Mock(side_effect=RuntimeError) - self.harness.charm.pebble_handler = mock.Mock(return_value=mock_pebble) + mock_pebble = Mock() + mock_pebble.init_tempest = Mock(side_effect=RuntimeError) + self.harness.charm.pebble_handler = Mock(return_value=mock_pebble) self.harness.update_config({"schedule": "*/21 * * * *"}) @@ -492,8 +493,8 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase): self.add_identity_ops_relation(self.harness) self.add_grafana_dashboard_relation(self.harness) - self.harness.charm.peers = mock.Mock() - self.harness.charm.peers.interface.peers_rel.data = mock.MagicMock() + self.harness.charm.peers = Mock() + self.harness.charm.peers.interface.peers_rel.data = MagicMock() self.harness.charm.peers.interface.peers_rel.data.__getitem__.return_value = { TEMPEST_READY_KEY: "true" } @@ -507,8 +508,8 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase): self.add_identity_ops_relation(self.harness) self.add_grafana_dashboard_relation(self.harness) - self.harness.charm.peers = mock.Mock() - self.harness.charm.peers.interface.peers_rel.data = mock.MagicMock() + self.harness.charm.peers = Mock() + self.harness.charm.peers.interface.peers_rel.data = MagicMock() self.harness.charm.peers.interface.peers_rel.data.__getitem__.return_value = { TEMPEST_READY_KEY: "" } @@ -522,13 +523,13 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase): self.add_identity_ops_relation(self.harness) self.add_grafana_dashboard_relation(self.harness) - self.harness.charm.peers = mock.Mock() + self.harness.charm.peers = Mock() self.harness.charm.set_tempest_ready(True) self.harness.charm.peers.set_unit_data.assert_called_with( {TEMPEST_READY_KEY: "true"} ) - self.harness.charm.peers = mock.Mock() + self.harness.charm.peers = Mock() self.harness.charm.set_tempest_ready(False) self.harness.charm.peers.set_unit_data.assert_called_with( {TEMPEST_READY_KEY: ""} @@ -540,11 +541,11 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase): self.add_identity_ops_relation(self.harness) # tempest init not run yet, pebble init tempest fails - pebble_mock = mock.Mock() - pebble_mock.init_tempest = mock.Mock(side_effect=RuntimeError) - self.harness.charm.pebble_handler = mock.Mock(return_value=pebble_mock) - self.harness.charm.is_tempest_ready = mock.Mock(return_value=False) - self.harness.charm.set_tempest_ready = mock.Mock() + pebble_mock = Mock() + pebble_mock.init_tempest = Mock(side_effect=RuntimeError) + self.harness.charm.pebble_handler = Mock(return_value=pebble_mock) + self.harness.charm.is_tempest_ready = Mock(return_value=False) + self.harness.charm.set_tempest_ready = Mock() self.harness.charm.init_tempest() self.harness.charm.set_tempest_ready.assert_called_once_with(False) @@ -555,11 +556,11 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase): self.add_identity_ops_relation(self.harness) # tempest init succeeds - pebble_mock = mock.Mock() - pebble_mock.init_tempest = mock.Mock() - self.harness.charm.pebble_handler = mock.Mock(return_value=pebble_mock) - self.harness.charm.is_tempest_ready = mock.Mock(return_value=False) - self.harness.charm.set_tempest_ready = mock.Mock() + pebble_mock = Mock() + pebble_mock.init_tempest = Mock() + self.harness.charm.pebble_handler = Mock(return_value=pebble_mock) + self.harness.charm.is_tempest_ready = Mock(return_value=False) + self.harness.charm.set_tempest_ready = Mock() self.harness.charm.init_tempest() self.harness.charm.set_tempest_ready.assert_called_once_with(True) @@ -569,11 +570,11 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase): test_utils.set_all_pebbles_ready(self.harness) # tempest init already run - pebble_mock = mock.Mock() - pebble_mock.init_tempest = mock.Mock() - self.harness.charm.pebble_handler = mock.Mock(return_value=pebble_mock) - self.harness.charm.is_tempest_ready = mock.Mock(return_value=True) - self.harness.charm.set_tempest_ready = mock.Mock() + pebble_mock = Mock() + pebble_mock.init_tempest = Mock() + self.harness.charm.pebble_handler = Mock(return_value=pebble_mock) + self.harness.charm.is_tempest_ready = Mock(return_value=True) + self.harness.charm.set_tempest_ready = Mock() self.harness.charm.init_tempest() self.harness.charm.set_tempest_ready.assert_not_called() @@ -582,8 +583,8 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase): """Test upgrade charm updates things as required.""" test_utils.set_all_pebbles_ready(self.harness) - self.harness.charm.set_tempest_ready = mock.Mock() - self.harness.charm._on_upgrade_charm(mock.Mock()) + self.harness.charm.set_tempest_ready = Mock() + self.harness.charm._on_upgrade_charm(Mock()) self.harness.charm.set_tempest_ready.assert_called_once_with(False) def test_tempest_env_variant(self): @@ -600,7 +601,7 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase): test_utils.set_all_pebbles_ready(self.harness) identity_ops_rel_id = self.add_identity_ops_relation(self.harness) - self.harness.charm.set_tempest_ready = mock.Mock() + self.harness.charm.set_tempest_ready = Mock() self.harness.remove_relation(identity_ops_rel_id) diff --git a/ops-sunbeam/ops_sunbeam/test_utils.py b/ops-sunbeam/ops_sunbeam/test_utils.py index 3620c512..0baab920 100644 --- a/ops-sunbeam/ops_sunbeam/test_utils.py +++ b/ops-sunbeam/ops_sunbeam/test_utils.py @@ -28,14 +28,14 @@ from typing import ( List, Optional, ) - -import ops -from mock import ( +from unittest.mock import ( MagicMock, Mock, patch, ) +import ops + sys.path.append("lib") # noqa sys.path.append("src") # noqa diff --git a/ops-sunbeam/tests/unit_tests/test_compound_status.py b/ops-sunbeam/tests/unit_tests/test_compound_status.py index a2816754..aec6ab78 100644 --- a/ops-sunbeam/tests/unit_tests/test_compound_status.py +++ b/ops-sunbeam/tests/unit_tests/test_compound_status.py @@ -15,8 +15,9 @@ """Test compound_status.""" import sys - -import mock +from unittest.mock import ( + Mock, +) sys.path.append("lib") # noqa sys.path.append("src") # noqa @@ -64,7 +65,7 @@ class TestCompoundStatus(test_utils.CharmTestCase): status.set(WaitingStatus("test")) # manually set the on_update hook and verify it is called - on_update_mock = mock.Mock() + on_update_mock = Mock() status.on_update = on_update_mock status.set(ActiveStatus("test")) on_update_mock.assert_called_once_with() diff --git a/ops-sunbeam/tests/unit_tests/test_core.py b/ops-sunbeam/tests/unit_tests/test_core.py index 2484db0d..b59e8ff0 100644 --- a/ops-sunbeam/tests/unit_tests/test_core.py +++ b/ops-sunbeam/tests/unit_tests/test_core.py @@ -16,8 +16,10 @@ import os import sys - -import mock +from unittest.mock import ( + MagicMock, + patch, +) sys.path.append("tests/lib") # noqa sys.path.append("src") # noqa @@ -40,7 +42,7 @@ class TestOSBaseOperatorCharm(test_utils.CharmTestCase): """Charm test class setup.""" self.container_calls = test_utils.ContainerCalls() super().setUp(sunbeam_charm, self.PATCHES) - self.mock_event = mock.MagicMock() + self.mock_event = MagicMock() self.harness = test_utils.get_harness( test_charms.MyCharm, test_charms.CHARM_METADATA, @@ -81,7 +83,7 @@ class TestOSBaseOperatorCharmK8S(test_utils.CharmTestCase): charm_config=test_charms.CHARM_CONFIG, initial_charm_config=test_charms.INITIAL_CHARM_CONFIG, ) - self.mock_event = mock.MagicMock() + self.mock_event = MagicMock() self.harness.begin() self.addCleanup(self.harness.cleanup) @@ -124,7 +126,7 @@ class _TestOSBaseOperatorAPICharm(test_utils.CharmTestCase): self.container_calls = test_utils.ContainerCalls() super().setUp(sunbeam_charm, self.PATCHES) - self.mock_event = mock.MagicMock() + self.mock_event = MagicMock() self.harness = test_utils.get_harness( charm_to_test, test_charms.API_CHARM_METADATA, @@ -335,8 +337,8 @@ class TestOSBaseOperatorAPICharm(_TestOSBaseOperatorAPICharm): ) self.assertEqual(self.harness.charm.public_url, "http://public-url:80") - @mock.patch("ops_sunbeam.charm.Client") - def test_endpoint_urls_no_ingress(self, mock_client: mock.patch) -> None: + @patch("ops_sunbeam.charm.Client") + def test_endpoint_urls_no_ingress(self, mock_client: patch) -> None: """Test public_url and internal_url with no ingress defined.""" class MockService: @@ -345,7 +347,7 @@ class TestOSBaseOperatorAPICharm(_TestOSBaseOperatorAPICharm): def __init__(self) -> None: self.status = None - mock_client.return_value = mock.MagicMock() + mock_client.return_value = MagicMock() mock_client.return_value.get.return_value = MockService() self.assertEqual( self.harness.charm.internal_url, "http://10.0.0.10:789" diff --git a/ops-sunbeam/tests/unit_tests/test_templating.py b/ops-sunbeam/tests/unit_tests/test_templating.py index 983af2fe..b80c66d6 100644 --- a/ops-sunbeam/tests/unit_tests/test_templating.py +++ b/ops-sunbeam/tests/unit_tests/test_templating.py @@ -19,9 +19,12 @@ from io import ( BytesIO, TextIOWrapper, ) +from unittest.mock import ( + MagicMock, + patch, +) import jinja2 -import mock sys.path.append("lib") # noqa sys.path.append("src") # noqa @@ -40,10 +43,10 @@ class TestTemplating(test_utils.CharmTestCase): """Charm test class setup.""" super().setUp(sunbeam_templating, self.PATCHES) - @mock.patch("jinja2.FileSystemLoader") + @patch("jinja2.FileSystemLoader") def test_render(self, fs_loader: "jinja2.FileSystemLoader") -> None: """Check rendering templates.""" - container_mock = mock.MagicMock() + container_mock = MagicMock() config = sunbeam_core.ContainerConfigFile( "/tmp/testfile.txt", "myuser", "mygrp" ) @@ -61,12 +64,12 @@ class TestTemplating(test_utils.CharmTestCase): permissions=None, ) - @mock.patch("jinja2.FileSystemLoader") + @patch("jinja2.FileSystemLoader") def test_render_no_change( self, fs_loader: "jinja2.FileSystemLoader" ) -> None: """Check rendering template with no content change.""" - container_mock = mock.MagicMock() + container_mock = MagicMock() container_mock.pull.return_value = TextIOWrapper( BytesIO(b"debug = True") ) diff --git a/test-requirements.txt b/test-requirements.txt index e7b8e147..42ddffa6 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -1,4 +1,3 @@ -mock stestr coverage