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:
parent
d0cddbeb4c
commit
365aed9a21
@ -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,
|
||||||
)
|
)
|
||||||
|
@ -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):
|
||||||
|
@ -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):
|
||||||
|
@ -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"}
|
||||||
|
@ -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()
|
||||||
|
@ -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,
|
||||||
)
|
)
|
||||||
|
@ -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,
|
||||||
)
|
)
|
||||||
|
@ -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 = {
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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):
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -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
|
||||||
|
|
||||||
|
@ -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()
|
||||||
|
@ -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"
|
||||||
|
@ -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")
|
||||||
)
|
)
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
mock
|
|
||||||
stestr
|
stestr
|
||||||
coverage
|
coverage
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user