Tidy up following feedback from dshcherb

This commit is contained in:
Liam Young 2020-04-24 14:25:49 +00:00
parent 6760bd9d7f
commit eb1be7070e
2 changed files with 37 additions and 37 deletions

View File

@ -87,9 +87,8 @@ class OSBaseCharm(CharmBase):
return return
missing_relations = [] missing_relations = []
for relation in self.REQUIRED_RELATIONS: for relation in self.REQUIRED_RELATIONS:
try: rel = self.model.get_relation(relation)
self.model.get_relation(relation) if rel is None:
except KeyError:
missing_relations.append(relation) missing_relations.append(relation)
if missing_relations: if missing_relations:
self.unit.status = BlockedStatus( self.unit.status = BlockedStatus(

View File

@ -18,13 +18,14 @@ import unittest
from mock import patch, MagicMock from mock import patch, MagicMock
from ops.testing import Harness from ops.testing import Harness, _TestingModelBackend
from ops.model import ( from ops.model import (
ActiveStatus, ActiveStatus,
BlockedStatus, BlockedStatus,
MaintenanceStatus, MaintenanceStatus,
WaitingStatus, WaitingStatus,
) )
from ops import framework, model
import ops_openstack import ops_openstack
@ -50,7 +51,7 @@ class OpenStackTestAPICharm(ops_openstack.OSBaseCharm):
class CharmTestCase(unittest.TestCase): class CharmTestCase(unittest.TestCase):
def setUp(self, obj, patches): def setUp(self, obj, patches):
super(CharmTestCase, self).setUp() super().setUp()
self.patches = patches self.patches = patches
self.obj = obj self.obj = obj
self.patch_all() self.patch_all()
@ -75,12 +76,15 @@ class TestOSBaseCharm(CharmTestCase):
'os_utils'] 'os_utils']
def setUp(self): 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.os_utils.manage_payload_services = MagicMock()
self.harness = Harness( self.harness = Harness(
OpenStackTestAPICharm, OpenStackTestAPICharm,
meta=''' meta='''
name: client name: client
requires:
shared-db:
interface: mysql-shared
provides: provides:
ceph-client: ceph-client:
interface: ceph-client interface: ceph-client
@ -91,38 +95,35 @@ class TestOSBaseCharm(CharmTestCase):
resume: resume:
description: resume action 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): def test_init(self):
self.harness.begin() self.harness.begin()
self.assertFalse(self.harness.charm.state.is_started) self.assertFalse(self.harness.charm.state.is_started)
self.assertFalse(self.harness.charm.state.is_paused) self.assertFalse(self.harness.charm.state.is_paused)
self.assertFalse(self.harness.charm.state.series_upgrade) 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): def test_install(self):
print(self.harness._backend)
self.harness.begin() self.harness.begin()
self.harness.charm.on_install('An Event') self.harness.charm.on.install.emit()
self.assertFalse(self.add_source.called) self.assertFalse(self.add_source.called)
self.apt_update.assert_called_once_with(fatal=True) self.apt_update.assert_called_once_with(fatal=True)
self.apt_install.assert_called_once_with( self.apt_install.assert_called_once_with(
@ -135,7 +136,7 @@ class TestOSBaseCharm(CharmTestCase):
'source': 'cloud:myppa', 'source': 'cloud:myppa',
'key': 'akey'}) 'key': 'akey'})
self.harness.begin() 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.add_source.assert_called_once_with('cloud:myppa', 'akey')
self.apt_update.assert_called_once_with(fatal=True) self.apt_update.assert_called_once_with(fatal=True)
self.apt_install.assert_called_once_with( self.apt_install.assert_called_once_with(
@ -146,7 +147,7 @@ class TestOSBaseCharm(CharmTestCase):
self.harness.add_relation('shared-db', 'mysql') self.harness.add_relation('shared-db', 'mysql')
self.harness.begin() self.harness.begin()
self.harness.charm.state.is_started = True 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.assertEqual(
self.harness.charm.unit.status.message, self.harness.charm.unit.status.message,
'Unit is ready') 'Unit is ready')
@ -161,7 +162,7 @@ class TestOSBaseCharm(CharmTestCase):
self.harness.add_relation('shared-db', 'mysql') self.harness.add_relation('shared-db', 'mysql')
self.harness.begin() self.harness.begin()
self.harness.charm.state.is_started = True 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.assertEqual(
self.harness.charm.unit.status.message, self.harness.charm.unit.status.message,
'Custom check failed') 'Custom check failed')
@ -172,7 +173,7 @@ class TestOSBaseCharm(CharmTestCase):
def test_update_status_not_started(self): def test_update_status_not_started(self):
self.harness.add_relation('shared-db', 'mysql') self.harness.add_relation('shared-db', 'mysql')
self.harness.begin() self.harness.begin()
self.harness.charm.on_update_status('An Event') self.harness.charm.on.update_status.emit()
self.assertEqual( self.assertEqual(
self.harness.charm.unit.status.message, self.harness.charm.unit.status.message,
'Charm configuration in progress') 'Charm configuration in progress')
@ -195,7 +196,7 @@ class TestOSBaseCharm(CharmTestCase):
def test_update_status_series_paused(self): def test_update_status_series_paused(self):
self.harness.begin() self.harness.begin()
self.harness.charm.state.is_paused = True 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.assertEqual(
self.harness.charm.unit.status.message, self.harness.charm.unit.status.message,
"Paused. Use 'resume' action to resume normal service.") "Paused. Use 'resume' action to resume normal service.")
@ -205,7 +206,7 @@ class TestOSBaseCharm(CharmTestCase):
def test_update_status_missing_relation(self): def test_update_status_missing_relation(self):
self.harness.begin() self.harness.begin()
self.harness.charm.on_update_status('An Event') self.harness.charm.on.update_status.emit()
self.assertEqual( self.assertEqual(
self.harness.charm.unit.status.message, self.harness.charm.unit.status.message,
'Missing relations: shared-db') 'Missing relations: shared-db')
@ -224,7 +225,7 @@ class TestOSBaseCharm(CharmTestCase):
self.harness.begin() self.harness.begin()
self.assertFalse(self.harness.charm.state.series_upgrade) self.assertFalse(self.harness.charm.state.series_upgrade)
self.assertFalse(self.harness.charm.state.is_paused) 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.series_upgrade)
self.assertTrue(self.harness.charm.state.is_paused) self.assertTrue(self.harness.charm.state.is_paused)
self.os_utils.manage_payload_services.assert_called_once_with( self.os_utils.manage_payload_services.assert_called_once_with(
@ -237,7 +238,7 @@ class TestOSBaseCharm(CharmTestCase):
self.harness.begin() self.harness.begin()
self.harness.charm.state.series_upgrade = True self.harness.charm.state.series_upgrade = True
self.harness.charm.state.is_paused = 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.series_upgrade)
self.assertFalse(self.harness.charm.state.is_paused) self.assertFalse(self.harness.charm.state.is_paused)
self.os_utils.manage_payload_services.assert_called_once_with( self.os_utils.manage_payload_services.assert_called_once_with(