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
This commit is contained in:
Samuel Allan 2024-02-21 08:51:44 +10:30
parent d0cddbeb4c
commit 365aed9a21
No known key found for this signature in database
GPG Key ID: 622F8E99C893BD61
16 changed files with 132 additions and 118 deletions

View File

@ -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,
)

View File

@ -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):

View File

@ -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):

View File

@ -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"}

View File

@ -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()

View File

@ -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,
)

View File

@ -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,
)

View File

@ -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 = {

View File

@ -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

View File

@ -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):

View File

@ -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)

View File

@ -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

View File

@ -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()

View File

@ -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"

View File

@ -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")
)

View File

@ -1,4 +1,3 @@
mock
stestr
coverage