diff --git a/unit_tests/helpers.py b/unit_tests/helpers.py new file mode 100644 index 00000000..f0970674 --- /dev/null +++ b/unit_tests/helpers.py @@ -0,0 +1,23 @@ +# Copyright 2020 Canonical Ltd. +# See LICENSE file for licensing details. + +from typing import Callable +from unittest.mock import patch + + +def patch_network_get(private_address="10.0.0.10") -> Callable: + def network_get(*args, **kwargs) -> dict: + """Patch for the not-yet-implemented testing backend needed for `bind_address`. + + This patch decorator can be used for cases such as: + self.model.get_binding(event.relation).network.bind_address + """ + return { + "bind-addresses": [ + { + "addresses": [{"value": private_address}], + } + ], + } + + return patch("ops.testing._TestingModelBackend.network_get", network_get) diff --git a/unit_tests/test_ceph_metrics.py b/unit_tests/test_ceph_metrics.py index 16e89735..8a5e3eba 100644 --- a/unit_tests/test_ceph_metrics.py +++ b/unit_tests/test_ceph_metrics.py @@ -1,22 +1,23 @@ #!/usr/bin/env python3 +# Copyright 2022 Canonical Ltd. +# See LICENSE file for licensing details. + import json import pathlib import tempfile import textwrap -# Copyright 2022 Canonical Ltd. -# See LICENSE file for licensing details. - from unittest.mock import patch import unittest -from ops import storage, model, framework -from ops.testing import Harness, _TestingModelBackend +from ops.testing import Harness import ceph_metrics # noqa: avoid circ. import import charm +import helpers +@helpers.patch_network_get() class TestCephMetrics(unittest.TestCase): @classmethod def setUpClass(cls): @@ -40,35 +41,7 @@ class TestCephMetrics(unittest.TestCase): def setUp(self): super().setUp() self.harness = Harness(charm.CephMonCharm) - - # BEGIN: Workaround until network_get is implemented - class _TestingOPSModelBackend(_TestingModelBackend): - def network_get(self, endpoint_name, relation_id=None): - network_data = { - "bind-addresses": [ - { - "addresses": [{"value": "10.0.0.10"}], - } - ], - } - return network_data - - self.harness._backend = _TestingOPSModelBackend( - self.harness._unit_name, self.harness._meta - ) - self.harness._model = model.Model( - self.harness._meta, self.harness._backend - ) - self.harness._framework = framework.Framework( - storage.SQLiteStorage(":memory:"), - self.harness._charm_dir, - self.harness._meta, - self.harness._model, - ) - # END Workaround - self.addCleanup(self.harness.cleanup) - self.harness.begin() self.harness.set_leader(True) self.harness.charm.metrics_endpoint._alert_rules_path = self.rules_dir @@ -131,7 +104,9 @@ class TestCephMetrics(unittest.TestCase): @patch("ceph_metrics.ceph_utils.is_bootstrapped", return_value=True) @patch("ceph_metrics.CephMetricsEndpointProvider._set_alert_rules") def test_update_alert_rules_empty( - self, set_alert_rules, _is_bootstrapped, + self, + set_alert_rules, + _is_bootstrapped, ): """Test: no alert rules created with empty alert rules file.""" rel_id = self.harness.add_relation("metrics-endpoint", "prometheus")