From eb1be7070ea0119a14f70a21a5e9f15a13ede34b Mon Sep 17 00:00:00 2001 From: Liam Young Date: Fri, 24 Apr 2020 14:25:49 +0000 Subject: [PATCH] Tidy up following feedback from dshcherb --- ops_openstack.py | 5 +-- unit_tests/test_ops_openstack.py | 69 ++++++++++++++++---------------- 2 files changed, 37 insertions(+), 37 deletions(-) diff --git a/ops_openstack.py b/ops_openstack.py index df0099b..1b2cb58 100644 --- a/ops_openstack.py +++ b/ops_openstack.py @@ -87,9 +87,8 @@ class OSBaseCharm(CharmBase): return missing_relations = [] for relation in self.REQUIRED_RELATIONS: - try: - self.model.get_relation(relation) - except KeyError: + rel = self.model.get_relation(relation) + if rel is None: missing_relations.append(relation) if missing_relations: self.unit.status = BlockedStatus( diff --git a/unit_tests/test_ops_openstack.py b/unit_tests/test_ops_openstack.py index bfdd1e6..8dca06d 100644 --- a/unit_tests/test_ops_openstack.py +++ b/unit_tests/test_ops_openstack.py @@ -18,13 +18,14 @@ import unittest from mock import patch, MagicMock -from ops.testing import Harness +from ops.testing import Harness, _TestingModelBackend from ops.model import ( ActiveStatus, BlockedStatus, MaintenanceStatus, WaitingStatus, ) +from ops import framework, model import ops_openstack @@ -50,7 +51,7 @@ class OpenStackTestAPICharm(ops_openstack.OSBaseCharm): class CharmTestCase(unittest.TestCase): def setUp(self, obj, patches): - super(CharmTestCase, self).setUp() + super().setUp() self.patches = patches self.obj = obj self.patch_all() @@ -75,12 +76,15 @@ class TestOSBaseCharm(CharmTestCase): 'os_utils'] def setUp(self): - super(TestOSBaseCharm, self).setUp(ops_openstack, self.PATCHES) + super().setUp(ops_openstack, self.PATCHES) self.os_utils.manage_payload_services = MagicMock() self.harness = Harness( OpenStackTestAPICharm, meta=''' name: client + requires: + shared-db: + interface: mysql-shared provides: ceph-client: interface: ceph-client @@ -91,38 +95,35 @@ class TestOSBaseCharm(CharmTestCase): resume: description: resume action ''') + # BEGIN: Workaround until + # https://github.com/canonical/operator/pull/196 lands + class _TestingOPSModelBackend(_TestingModelBackend): + + def relation_ids(self, relation_name): + return self._relation_ids_map.get(relation_name, []) + self.harness._backend = _TestingOPSModelBackend( + self.harness._unit_name) + self.harness._model = model.Model( + self.harness._unit_name, + self.harness._meta, + self.harness._backend) + self.harness._framework = framework.Framework( + ":memory:", + self.harness._charm_dir, + self.harness._meta, + self.harness._model) + # END Workaround def test_init(self): self.harness.begin() self.assertFalse(self.harness.charm.state.is_started) self.assertFalse(self.harness.charm.state.is_paused) self.assertFalse(self.harness.charm.state.series_upgrade) - events = list(self.harness.charm.on.events()) - self.assertEqual( - sorted(events), - [ - 'ceph_client_relation_broken', - 'ceph_client_relation_changed', - 'ceph_client_relation_departed', - 'ceph_client_relation_joined', - 'collect_metrics', - 'config_changed', - 'install', - 'leader_elected', - 'leader_settings_changed', - 'pause_action', - 'post_series_upgrade', - 'pre_series_upgrade', - 'remove', - 'resume_action', - 'start', - 'stop', - 'update_status', - 'upgrade_charm']) def test_install(self): + print(self.harness._backend) self.harness.begin() - self.harness.charm.on_install('An Event') + self.harness.charm.on.install.emit() self.assertFalse(self.add_source.called) self.apt_update.assert_called_once_with(fatal=True) self.apt_install.assert_called_once_with( @@ -135,7 +136,7 @@ class TestOSBaseCharm(CharmTestCase): 'source': 'cloud:myppa', 'key': 'akey'}) self.harness.begin() - self.harness.charm.on_install('An Event') + self.harness.charm.on.install.emit() self.add_source.assert_called_once_with('cloud:myppa', 'akey') self.apt_update.assert_called_once_with(fatal=True) self.apt_install.assert_called_once_with( @@ -146,7 +147,7 @@ class TestOSBaseCharm(CharmTestCase): self.harness.add_relation('shared-db', 'mysql') self.harness.begin() self.harness.charm.state.is_started = True - self.harness.charm.on_update_status('An Event') + self.harness.charm.on.update_status.emit() self.assertEqual( self.harness.charm.unit.status.message, 'Unit is ready') @@ -161,7 +162,7 @@ class TestOSBaseCharm(CharmTestCase): self.harness.add_relation('shared-db', 'mysql') self.harness.begin() self.harness.charm.state.is_started = True - self.harness.charm.on_update_status('An Event') + self.harness.charm.on.update_status.emit() self.assertEqual( self.harness.charm.unit.status.message, 'Custom check failed') @@ -172,7 +173,7 @@ class TestOSBaseCharm(CharmTestCase): def test_update_status_not_started(self): self.harness.add_relation('shared-db', 'mysql') self.harness.begin() - self.harness.charm.on_update_status('An Event') + self.harness.charm.on.update_status.emit() self.assertEqual( self.harness.charm.unit.status.message, 'Charm configuration in progress') @@ -195,7 +196,7 @@ class TestOSBaseCharm(CharmTestCase): def test_update_status_series_paused(self): self.harness.begin() self.harness.charm.state.is_paused = True - self.harness.charm.on_update_status('An Event') + self.harness.charm.on.update_status.emit() self.assertEqual( self.harness.charm.unit.status.message, "Paused. Use 'resume' action to resume normal service.") @@ -205,7 +206,7 @@ class TestOSBaseCharm(CharmTestCase): def test_update_status_missing_relation(self): self.harness.begin() - self.harness.charm.on_update_status('An Event') + self.harness.charm.on.update_status.emit() self.assertEqual( self.harness.charm.unit.status.message, 'Missing relations: shared-db') @@ -224,7 +225,7 @@ class TestOSBaseCharm(CharmTestCase): self.harness.begin() self.assertFalse(self.harness.charm.state.series_upgrade) self.assertFalse(self.harness.charm.state.is_paused) - self.harness.charm.on_pre_series_upgrade('An Event') + self.harness.charm.on.pre_series_upgrade.emit() self.assertTrue(self.harness.charm.state.series_upgrade) self.assertTrue(self.harness.charm.state.is_paused) self.os_utils.manage_payload_services.assert_called_once_with( @@ -237,7 +238,7 @@ class TestOSBaseCharm(CharmTestCase): self.harness.begin() self.harness.charm.state.series_upgrade = True self.harness.charm.state.is_paused = True - self.harness.charm.on_post_series_upgrade('An Event') + self.harness.charm.on.post_series_upgrade.emit() self.assertFalse(self.harness.charm.state.series_upgrade) self.assertFalse(self.harness.charm.state.is_paused) self.os_utils.manage_payload_services.assert_called_once_with(