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.""" """Unit tests for Cinder Ceph operator charm class."""
import json import json
from unittest.mock import (
import charm
import ops_sunbeam.test_utils as test_utils
from mock import (
MagicMock, MagicMock,
patch, patch,
) )
import charm
import ops_sunbeam.test_utils as test_utils
from ops.testing import ( from ops.testing import (
Harness, Harness,
) )

View File

@ -16,12 +16,13 @@
"""Tests for glance charm.""" """Tests for glance charm."""
import charm from unittest.mock import (
import ops_sunbeam.test_utils as test_utils
from mock import (
patch, patch,
) )
import charm
import ops_sunbeam.test_utils as test_utils
class _GlanceOperatorCharm(charm.GlanceOperatorCharm): class _GlanceOperatorCharm(charm.GlanceOperatorCharm):
def __init__(self, framework): def __init__(self, framework):

View File

@ -16,12 +16,13 @@
"""Tests for gnocchi charm.""" """Tests for gnocchi charm."""
import charm from unittest.mock import (
import ops_sunbeam.test_utils as test_utils
from mock import (
patch, patch,
) )
import charm
import ops_sunbeam.test_utils as test_utils
class _GnocchiCephOperatorCharm(charm.GnocchiCephOperatorCharm): class _GnocchiCephOperatorCharm(charm.GnocchiCephOperatorCharm):
def __init__(self, framework): def __init__(self, framework):

View File

@ -16,8 +16,11 @@
"""Unit tests for Horizon operator.""" """Unit tests for Horizon operator."""
from unittest.mock import (
MagicMock,
)
import charm import charm
import mock
import ops_sunbeam.test_utils as test_utils import ops_sunbeam.test_utils as test_utils
@ -107,7 +110,7 @@ class TestHorizonOperatorCharm(test_utils.CharmTestCase):
def test_get_dashboard_url_action(self): def test_get_dashboard_url_action(self):
"""Test admin account action.""" """Test admin account action."""
action_event = mock.MagicMock() action_event = MagicMock()
self.harness.charm._get_dashboard_url_action(action_event) self.harness.charm._get_dashboard_url_action(action_event)
action_event.set_results.assert_called_with( action_event.set_results.assert_called_with(
{"url": "http://dashboard.juju:80"} {"url": "http://dashboard.juju:80"}

View File

@ -22,10 +22,10 @@ import textwrap
from unittest.mock import ( from unittest.mock import (
ANY, ANY,
MagicMock, MagicMock,
call,
) )
import charm import charm
import mock
import ops_sunbeam.test_utils as test_utils 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") 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_domain.side_effect = _get_domain_side_effect
km_mock.ksclient.show_project.return_value = admin_project_mock km_mock.ksclient.show_project.return_value = admin_project_mock
km_mock.ksclient.show_user.return_value = admin_user_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.assertEqual(self.km_mock.write_keys.call_count, 2)
self.km_mock.write_keys.assert_has_calls( self.km_mock.write_keys.assert_has_calls(
[ [
mock.call( call(
key_repository="/etc/keystone/fernet-keys", key_repository="/etc/keystone/fernet-keys",
keys=updated_fernet_keys, keys=updated_fernet_keys,
), ),
mock.call( call(
key_repository="/etc/keystone/credential-keys", key_repository="/etc/keystone/credential-keys",
keys=updated_fernet_keys, keys=updated_fernet_keys,
), ),
@ -338,7 +338,7 @@ class TestKeystoneOperatorCharm(test_utils.CharmTestCase):
self, self,
): ):
"""Test peer_relation_changed when fernet keys and secret have same content.""" """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.id = "test-secret-id"
secret_mock.get_content.return_value = self.km_mock.read_keys() secret_mock.get_content.return_value = self.km_mock.read_keys()
self.harness.model.app.add_secret = MagicMock() self.harness.model.app.add_secret = MagicMock()

View File

@ -17,12 +17,12 @@
"""Unit tests for Magnum operator.""" """Unit tests for Magnum operator."""
import json import json
from unittest.mock import (
Mock,
)
import charm import charm
import ops_sunbeam.test_utils as test_utils import ops_sunbeam.test_utils as test_utils
from mock import (
Mock,
)
from ops.testing import ( from ops.testing import (
Harness, Harness,
) )

View File

@ -17,12 +17,12 @@
"""Unit tests for Openstack Exporter operator.""" """Unit tests for Openstack Exporter operator."""
import json import json
from unittest.mock import (
Mock,
)
import charm import charm
import ops_sunbeam.test_utils as test_utils import ops_sunbeam.test_utils as test_utils
from mock import (
Mock,
)
from ops.testing import ( from ops.testing import (
Harness, Harness,
) )

View File

@ -16,8 +16,8 @@
import base64 import base64
import json import json
from unittest import ( from unittest.mock import (
mock, MagicMock,
) )
import charm import charm
@ -98,7 +98,7 @@ class TestCharm(test_utils.CharmTestCase):
def test_mandatory_relations(self): def test_mandatory_relations(self):
"""Test all the charms relations.""" """Test all the charms relations."""
self.get_local_ip_by_default_route.return_value = "10.0.0.10" 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 hypervisor_snap_mock.present = False
self.snap.SnapState.Latest = "latest" self.snap.SnapState.Latest = "latest"
self.snap.SnapCache.return_value = { 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" 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 hypervisor_snap_mock.present = False
self.snap.SnapState.Latest = "latest" self.snap.SnapState.Latest = "latest"
self.snap.SnapCache.return_value = { self.snap.SnapCache.return_value = {

View File

@ -16,8 +16,11 @@
"""Tests for OVN central charm.""" """Tests for OVN central charm."""
from unittest.mock import (
MagicMock,
)
import charm import charm
import mock
import ops_sunbeam.test_utils as test_utils import ops_sunbeam.test_utils as test_utils
@ -38,11 +41,11 @@ class _OVNCentralOperatorCharm(charm.OVNCentralOperatorCharm):
def cluster_status(self, db, cmd_executor): def cluster_status(self, db, cmd_executor):
if db == "ovnnb_db": if db == "ovnnb_db":
nb_mock = mock.MagicMock() nb_mock = MagicMock()
nb_mock.cluster_id = "nb_id" nb_mock.cluster_id = "nb_id"
return nb_mock return nb_mock
if db == "ovnsb_db": if db == "ovnsb_db":
sb_mock = mock.MagicMock() sb_mock = MagicMock()
sb_mock.cluster_id = "sb_id" sb_mock.cluster_id = "sb_id"
return sb_mock return sb_mock

View File

@ -6,15 +6,15 @@
"""Unit tests.""" """Unit tests."""
import pathlib import pathlib
from unittest.mock import (
patch,
)
import charm import charm
import ops import ops
import ops.testing as testing import ops.testing as testing
import ops_sunbeam.test_utils as test_utils import ops_sunbeam.test_utils as test_utils
import yaml import yaml
from mock import (
patch,
)
class _SunbeamClusterdCharm(charm.SunbeamClusterdCharm): class _SunbeamClusterdCharm(charm.SunbeamClusterdCharm):

View File

@ -19,11 +19,12 @@
import json import json
import pathlib import pathlib
from unittest.mock import ( from unittest.mock import (
MagicMock,
Mock,
patch, patch,
) )
import charm import charm
import mock
import ops_sunbeam.test_utils as test_utils import ops_sunbeam.test_utils as test_utils
import yaml import yaml
from utils.constants import ( from utils.constants import (
@ -120,8 +121,8 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase):
"""Add identity resource relation.""" """Add identity resource relation."""
rel_id = harness.add_relation("identity-ops", "keystone") rel_id = harness.add_relation("identity-ops", "keystone")
harness.add_relation_unit(rel_id, "keystone/0") harness.add_relation_unit(rel_id, "keystone/0")
harness.charm.user_id_ops.callback_f = mock.Mock() harness.charm.user_id_ops.callback_f = Mock()
harness.charm.user_id_ops.get_user_credential = mock.Mock( harness.charm.user_id_ops.get_user_credential = Mock(
return_value={ return_value={
"username": "tempest", "username": "tempest",
"password": "password", "password": "password",
@ -172,14 +173,14 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase):
"""Add logging relation.""" """Add logging relation."""
rel_id = harness.add_relation("logging", "loki") rel_id = harness.add_relation("logging", "loki")
harness.add_relation_unit(rel_id, "loki/0") harness.add_relation_unit(rel_id, "loki/0")
harness.charm.loki.interface = mock.Mock() harness.charm.loki.interface = Mock()
return rel_id return rel_id
def add_grafana_dashboard_relation(self, harness): def add_grafana_dashboard_relation(self, harness):
"""Add grafana dashboard relation.""" """Add grafana dashboard relation."""
rel_id = harness.add_relation("grafana_dashboard", "grafana") rel_id = harness.add_relation("grafana_dashboard", "grafana")
harness.add_relation_unit(rel_id, "grafana/0") harness.add_relation_unit(rel_id, "grafana/0")
harness.charm.grafana.interface = mock.Mock() harness.charm.grafana.interface = Mock()
return rel_id return rel_id
def test_pebble_ready_handler(self): def test_pebble_ready_handler(self):
@ -197,8 +198,8 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase):
self.harness self.harness
) )
self.harness.charm.set_tempest_ready = mock.Mock() self.harness.charm.set_tempest_ready = Mock()
self.harness.charm.is_tempest_ready = mock.Mock(return_value=True) self.harness.charm.is_tempest_ready = Mock(return_value=True)
self.harness.update_config({"schedule": "0 0 */7 * *"}) self.harness.update_config({"schedule": "0 0 */7 * *"})
@ -225,7 +226,7 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase):
self.add_grafana_dashboard_relation(self.harness) self.add_grafana_dashboard_relation(self.harness)
# schedule is disabled if it's not ready, so set it ready for testing # 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 # ok schedule
schedule = "0 0 */7 * *" schedule = "0 0 */7 * *"
@ -245,7 +246,7 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase):
self.assertEqual(self.harness.charm.contexts().tempest.schedule, "") self.assertEqual(self.harness.charm.contexts().tempest.schedule, "")
# tempest init not ready # 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 * *" schedule = "0 0 */7 * *"
self.harness.update_config({"schedule": schedule}) self.harness.update_config({"schedule": schedule})
self.assertEqual(self.harness.charm.contexts().tempest.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_identity_ops_relation(self.harness)
self.add_grafana_dashboard_relation(self.harness) self.add_grafana_dashboard_relation(self.harness)
action_event = mock.Mock() action_event = Mock()
action_event.params = { action_event.params = {
"serial": False, "serial": False,
"regex": "test(", "regex": "test(",
@ -278,15 +279,15 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase):
self.add_identity_ops_relation(self.harness) self.add_identity_ops_relation(self.harness)
self.add_grafana_dashboard_relation(self.harness) self.add_grafana_dashboard_relation(self.harness)
file1 = mock.Mock() file1 = Mock()
file1.name = "file_1" file1.name = "file_1"
file2 = mock.Mock() file2 = Mock()
file2.name = "file_2" 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] return_value=[file1, file2]
) )
action_event = mock.Mock() action_event = Mock()
action_event.params = { action_event.params = {
"serial": False, "serial": False,
"regex": "", "regex": "",
@ -307,17 +308,17 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase):
self.add_identity_ops_relation(self.harness) self.add_identity_ops_relation(self.harness)
self.add_grafana_dashboard_relation(self.harness) self.add_grafana_dashboard_relation(self.harness)
file1 = mock.Mock() file1 = Mock()
file1.name = "file_1" file1.name = "file_1"
file2 = mock.Mock() file2 = Mock()
file2.name = "file_2" 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] return_value=[file1, file2]
) )
exec_mock = mock.Mock() exec_mock = Mock()
self.harness.charm.pebble_handler().execute = exec_mock self.harness.charm.pebble_handler().execute = exec_mock
action_event = mock.Mock() action_event = Mock()
action_event.params = { action_event.params = {
"serial": False, "serial": False,
"regex": "smoke", "regex": "smoke",
@ -342,17 +343,17 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase):
self.add_identity_ops_relation(self.harness) self.add_identity_ops_relation(self.harness)
self.add_grafana_dashboard_relation(self.harness) self.add_grafana_dashboard_relation(self.harness)
file1 = mock.Mock() file1 = Mock()
file1.name = "file_1" file1.name = "file_1"
file2 = mock.Mock() file2 = Mock()
file2.name = "file_2" 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] return_value=[file1, file2]
) )
exec_mock = mock.Mock() exec_mock = Mock()
self.harness.charm.pebble_handler().execute = exec_mock self.harness.charm.pebble_handler().execute = exec_mock
action_event = mock.Mock() action_event = Mock()
action_event.params = { action_event.params = {
"serial": True, "serial": True,
"regex": "re1 re2", "regex": "re1 re2",
@ -386,10 +387,10 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase):
self.add_identity_ops_relation(self.harness) self.add_identity_ops_relation(self.harness)
self.add_grafana_dashboard_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 self.harness.charm.pebble_handler().execute = exec_mock
action_event = mock.Mock() action_event = Mock()
action_event.params = { action_event.params = {
"serial": True, "serial": True,
"regex": "", "regex": "",
@ -411,15 +412,15 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase):
self.add_identity_ops_relation(self.harness) self.add_identity_ops_relation(self.harness)
self.add_grafana_dashboard_relation(self.harness) self.add_grafana_dashboard_relation(self.harness)
file1 = mock.Mock() file1 = Mock()
file1.name = "file_1" file1.name = "file_1"
file2 = mock.Mock() file2 = Mock()
file2.name = "file_2" 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] return_value=[file1, file2]
) )
action_event = mock.Mock() action_event = Mock()
self.harness.charm._on_get_lists_action(action_event) self.harness.charm._on_get_lists_action(action_event)
action_event.fail.assert_not_called() action_event.fail.assert_not_called()
@ -430,15 +431,15 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase):
self.add_identity_ops_relation(self.harness) self.add_identity_ops_relation(self.harness)
self.add_grafana_dashboard_relation(self.harness) self.add_grafana_dashboard_relation(self.harness)
file1 = mock.Mock() file1 = Mock()
file1.name = "file_1" file1.name = "file_1"
file2 = mock.Mock() file2 = Mock()
file2.name = "file_2" file2.name = "file_2"
self.harness.charm.unit.get_container(CONTAINER).can_connect = ( self.harness.charm.unit.get_container(CONTAINER).can_connect = Mock(
mock.Mock(return_value=False) return_value=False
) )
action_event = mock.Mock() action_event = Mock()
self.harness.charm._on_get_lists_action(action_event) self.harness.charm._on_get_lists_action(action_event)
action_event.fail.assert_called_with("pebble is not ready") 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_identity_ops_relation(self.harness)
self.add_grafana_dashboard_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 # invalid schedule should make charm in blocked status
self.harness.update_config({"schedule": "* *"}) self.harness.update_config({"schedule": "* *"})
@ -468,15 +469,15 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase):
self.add_identity_ops_relation(self.harness) self.add_identity_ops_relation(self.harness)
self.add_grafana_dashboard_relation(self.harness) self.add_grafana_dashboard_relation(self.harness)
self.harness.charm.peers = mock.Mock() self.harness.charm.peers = Mock()
self.harness.charm.peers.interface.peers_rel.data = mock.MagicMock() self.harness.charm.peers.interface.peers_rel.data = MagicMock()
self.harness.charm.peers.interface.peers_rel.data.__getitem__.return_value = { self.harness.charm.peers.interface.peers_rel.data.__getitem__.return_value = {
TEMPEST_READY_KEY: "" TEMPEST_READY_KEY: ""
} }
mock_pebble = mock.Mock() mock_pebble = Mock()
mock_pebble.init_tempest = mock.Mock(side_effect=RuntimeError) mock_pebble.init_tempest = Mock(side_effect=RuntimeError)
self.harness.charm.pebble_handler = mock.Mock(return_value=mock_pebble) self.harness.charm.pebble_handler = Mock(return_value=mock_pebble)
self.harness.update_config({"schedule": "*/21 * * * *"}) self.harness.update_config({"schedule": "*/21 * * * *"})
@ -492,8 +493,8 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase):
self.add_identity_ops_relation(self.harness) self.add_identity_ops_relation(self.harness)
self.add_grafana_dashboard_relation(self.harness) self.add_grafana_dashboard_relation(self.harness)
self.harness.charm.peers = mock.Mock() self.harness.charm.peers = Mock()
self.harness.charm.peers.interface.peers_rel.data = mock.MagicMock() self.harness.charm.peers.interface.peers_rel.data = MagicMock()
self.harness.charm.peers.interface.peers_rel.data.__getitem__.return_value = { self.harness.charm.peers.interface.peers_rel.data.__getitem__.return_value = {
TEMPEST_READY_KEY: "true" TEMPEST_READY_KEY: "true"
} }
@ -507,8 +508,8 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase):
self.add_identity_ops_relation(self.harness) self.add_identity_ops_relation(self.harness)
self.add_grafana_dashboard_relation(self.harness) self.add_grafana_dashboard_relation(self.harness)
self.harness.charm.peers = mock.Mock() self.harness.charm.peers = Mock()
self.harness.charm.peers.interface.peers_rel.data = mock.MagicMock() self.harness.charm.peers.interface.peers_rel.data = MagicMock()
self.harness.charm.peers.interface.peers_rel.data.__getitem__.return_value = { self.harness.charm.peers.interface.peers_rel.data.__getitem__.return_value = {
TEMPEST_READY_KEY: "" TEMPEST_READY_KEY: ""
} }
@ -522,13 +523,13 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase):
self.add_identity_ops_relation(self.harness) self.add_identity_ops_relation(self.harness)
self.add_grafana_dashboard_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.set_tempest_ready(True)
self.harness.charm.peers.set_unit_data.assert_called_with( self.harness.charm.peers.set_unit_data.assert_called_with(
{TEMPEST_READY_KEY: "true"} {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.set_tempest_ready(False)
self.harness.charm.peers.set_unit_data.assert_called_with( self.harness.charm.peers.set_unit_data.assert_called_with(
{TEMPEST_READY_KEY: ""} {TEMPEST_READY_KEY: ""}
@ -540,11 +541,11 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase):
self.add_identity_ops_relation(self.harness) self.add_identity_ops_relation(self.harness)
# tempest init not run yet, pebble init tempest fails # tempest init not run yet, pebble init tempest fails
pebble_mock = mock.Mock() pebble_mock = Mock()
pebble_mock.init_tempest = mock.Mock(side_effect=RuntimeError) pebble_mock.init_tempest = Mock(side_effect=RuntimeError)
self.harness.charm.pebble_handler = mock.Mock(return_value=pebble_mock) self.harness.charm.pebble_handler = Mock(return_value=pebble_mock)
self.harness.charm.is_tempest_ready = mock.Mock(return_value=False) self.harness.charm.is_tempest_ready = Mock(return_value=False)
self.harness.charm.set_tempest_ready = mock.Mock() self.harness.charm.set_tempest_ready = Mock()
self.harness.charm.init_tempest() self.harness.charm.init_tempest()
self.harness.charm.set_tempest_ready.assert_called_once_with(False) 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) self.add_identity_ops_relation(self.harness)
# tempest init succeeds # tempest init succeeds
pebble_mock = mock.Mock() pebble_mock = Mock()
pebble_mock.init_tempest = mock.Mock() pebble_mock.init_tempest = Mock()
self.harness.charm.pebble_handler = mock.Mock(return_value=pebble_mock) self.harness.charm.pebble_handler = Mock(return_value=pebble_mock)
self.harness.charm.is_tempest_ready = mock.Mock(return_value=False) self.harness.charm.is_tempest_ready = Mock(return_value=False)
self.harness.charm.set_tempest_ready = mock.Mock() self.harness.charm.set_tempest_ready = Mock()
self.harness.charm.init_tempest() self.harness.charm.init_tempest()
self.harness.charm.set_tempest_ready.assert_called_once_with(True) 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) test_utils.set_all_pebbles_ready(self.harness)
# tempest init already run # tempest init already run
pebble_mock = mock.Mock() pebble_mock = Mock()
pebble_mock.init_tempest = mock.Mock() pebble_mock.init_tempest = Mock()
self.harness.charm.pebble_handler = mock.Mock(return_value=pebble_mock) self.harness.charm.pebble_handler = Mock(return_value=pebble_mock)
self.harness.charm.is_tempest_ready = mock.Mock(return_value=True) self.harness.charm.is_tempest_ready = Mock(return_value=True)
self.harness.charm.set_tempest_ready = mock.Mock() self.harness.charm.set_tempest_ready = Mock()
self.harness.charm.init_tempest() self.harness.charm.init_tempest()
self.harness.charm.set_tempest_ready.assert_not_called() 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 upgrade charm updates things as required."""
test_utils.set_all_pebbles_ready(self.harness) test_utils.set_all_pebbles_ready(self.harness)
self.harness.charm.set_tempest_ready = mock.Mock() self.harness.charm.set_tempest_ready = Mock()
self.harness.charm._on_upgrade_charm(mock.Mock()) self.harness.charm._on_upgrade_charm(Mock())
self.harness.charm.set_tempest_ready.assert_called_once_with(False) self.harness.charm.set_tempest_ready.assert_called_once_with(False)
def test_tempest_env_variant(self): def test_tempest_env_variant(self):
@ -600,7 +601,7 @@ class TestTempestOperatorCharm(test_utils.CharmTestCase):
test_utils.set_all_pebbles_ready(self.harness) test_utils.set_all_pebbles_ready(self.harness)
identity_ops_rel_id = self.add_identity_ops_relation(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) self.harness.remove_relation(identity_ops_rel_id)

View File

@ -28,14 +28,14 @@ from typing import (
List, List,
Optional, Optional,
) )
from unittest.mock import (
import ops
from mock import (
MagicMock, MagicMock,
Mock, Mock,
patch, patch,
) )
import ops
sys.path.append("lib") # noqa sys.path.append("lib") # noqa
sys.path.append("src") # noqa sys.path.append("src") # noqa

View File

@ -15,8 +15,9 @@
"""Test compound_status.""" """Test compound_status."""
import sys import sys
from unittest.mock import (
import mock Mock,
)
sys.path.append("lib") # noqa sys.path.append("lib") # noqa
sys.path.append("src") # noqa sys.path.append("src") # noqa
@ -64,7 +65,7 @@ class TestCompoundStatus(test_utils.CharmTestCase):
status.set(WaitingStatus("test")) status.set(WaitingStatus("test"))
# manually set the on_update hook and verify it is called # 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.on_update = on_update_mock
status.set(ActiveStatus("test")) status.set(ActiveStatus("test"))
on_update_mock.assert_called_once_with() on_update_mock.assert_called_once_with()

View File

@ -16,8 +16,10 @@
import os import os
import sys import sys
from unittest.mock import (
import mock MagicMock,
patch,
)
sys.path.append("tests/lib") # noqa sys.path.append("tests/lib") # noqa
sys.path.append("src") # noqa sys.path.append("src") # noqa
@ -40,7 +42,7 @@ class TestOSBaseOperatorCharm(test_utils.CharmTestCase):
"""Charm test class setup.""" """Charm test class setup."""
self.container_calls = test_utils.ContainerCalls() self.container_calls = test_utils.ContainerCalls()
super().setUp(sunbeam_charm, self.PATCHES) super().setUp(sunbeam_charm, self.PATCHES)
self.mock_event = mock.MagicMock() self.mock_event = MagicMock()
self.harness = test_utils.get_harness( self.harness = test_utils.get_harness(
test_charms.MyCharm, test_charms.MyCharm,
test_charms.CHARM_METADATA, test_charms.CHARM_METADATA,
@ -81,7 +83,7 @@ class TestOSBaseOperatorCharmK8S(test_utils.CharmTestCase):
charm_config=test_charms.CHARM_CONFIG, charm_config=test_charms.CHARM_CONFIG,
initial_charm_config=test_charms.INITIAL_CHARM_CONFIG, initial_charm_config=test_charms.INITIAL_CHARM_CONFIG,
) )
self.mock_event = mock.MagicMock() self.mock_event = MagicMock()
self.harness.begin() self.harness.begin()
self.addCleanup(self.harness.cleanup) self.addCleanup(self.harness.cleanup)
@ -124,7 +126,7 @@ class _TestOSBaseOperatorAPICharm(test_utils.CharmTestCase):
self.container_calls = test_utils.ContainerCalls() self.container_calls = test_utils.ContainerCalls()
super().setUp(sunbeam_charm, self.PATCHES) super().setUp(sunbeam_charm, self.PATCHES)
self.mock_event = mock.MagicMock() self.mock_event = MagicMock()
self.harness = test_utils.get_harness( self.harness = test_utils.get_harness(
charm_to_test, charm_to_test,
test_charms.API_CHARM_METADATA, test_charms.API_CHARM_METADATA,
@ -335,8 +337,8 @@ class TestOSBaseOperatorAPICharm(_TestOSBaseOperatorAPICharm):
) )
self.assertEqual(self.harness.charm.public_url, "http://public-url:80") self.assertEqual(self.harness.charm.public_url, "http://public-url:80")
@mock.patch("ops_sunbeam.charm.Client") @patch("ops_sunbeam.charm.Client")
def test_endpoint_urls_no_ingress(self, mock_client: mock.patch) -> None: def test_endpoint_urls_no_ingress(self, mock_client: patch) -> None:
"""Test public_url and internal_url with no ingress defined.""" """Test public_url and internal_url with no ingress defined."""
class MockService: class MockService:
@ -345,7 +347,7 @@ class TestOSBaseOperatorAPICharm(_TestOSBaseOperatorAPICharm):
def __init__(self) -> None: def __init__(self) -> None:
self.status = None self.status = None
mock_client.return_value = mock.MagicMock() mock_client.return_value = MagicMock()
mock_client.return_value.get.return_value = MockService() mock_client.return_value.get.return_value = MockService()
self.assertEqual( self.assertEqual(
self.harness.charm.internal_url, "http://10.0.0.10:789" self.harness.charm.internal_url, "http://10.0.0.10:789"

View File

@ -19,9 +19,12 @@ from io import (
BytesIO, BytesIO,
TextIOWrapper, TextIOWrapper,
) )
from unittest.mock import (
MagicMock,
patch,
)
import jinja2 import jinja2
import mock
sys.path.append("lib") # noqa sys.path.append("lib") # noqa
sys.path.append("src") # noqa sys.path.append("src") # noqa
@ -40,10 +43,10 @@ class TestTemplating(test_utils.CharmTestCase):
"""Charm test class setup.""" """Charm test class setup."""
super().setUp(sunbeam_templating, self.PATCHES) super().setUp(sunbeam_templating, self.PATCHES)
@mock.patch("jinja2.FileSystemLoader") @patch("jinja2.FileSystemLoader")
def test_render(self, fs_loader: "jinja2.FileSystemLoader") -> None: def test_render(self, fs_loader: "jinja2.FileSystemLoader") -> None:
"""Check rendering templates.""" """Check rendering templates."""
container_mock = mock.MagicMock() container_mock = MagicMock()
config = sunbeam_core.ContainerConfigFile( config = sunbeam_core.ContainerConfigFile(
"/tmp/testfile.txt", "myuser", "mygrp" "/tmp/testfile.txt", "myuser", "mygrp"
) )
@ -61,12 +64,12 @@ class TestTemplating(test_utils.CharmTestCase):
permissions=None, permissions=None,
) )
@mock.patch("jinja2.FileSystemLoader") @patch("jinja2.FileSystemLoader")
def test_render_no_change( def test_render_no_change(
self, fs_loader: "jinja2.FileSystemLoader" self, fs_loader: "jinja2.FileSystemLoader"
) -> None: ) -> None:
"""Check rendering template with no content change.""" """Check rendering template with no content change."""
container_mock = mock.MagicMock() container_mock = MagicMock()
container_mock.pull.return_value = TextIOWrapper( container_mock.pull.return_value = TextIOWrapper(
BytesIO(b"debug = True") BytesIO(b"debug = True")
) )

View File

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