Move application version set to charms.openstack

It comes from layer-openstack in the default assess_status handler.

The version of the application deployed should be set on all
assess_status calls, not just during the 'update-status' hook
execution.

Change-Id: I1ca762875f307db9bb15dd80b0c6a01a9e17b71e
Partial-Bug: 1715429
This commit is contained in:
Alex Kavanagh 2017-09-06 20:38:34 +01:00
parent a251ab7316
commit 62f0b4769b
4 changed files with 28 additions and 7 deletions

View File

@ -772,6 +772,12 @@ class BaseOpenStackCharmAssessStatus(object):
SIDE EFFECT: this function calls status_set(state, message) to set the
workload status in juju.
"""
# set the application version when we set the status (always)
# NOTE(tinwood) this is not, strictly speaking, good code organisation,
# as the 'application_version' property is in the classes.py file.
# However, as this is ALWAYS a mixin on that class, we can get away
# with this.
hookenv.application_version_set(self.application_version)
for f in [self.check_if_paused,
self.custom_assess_status_check,
self.check_interfaces,

View File

@ -151,11 +151,19 @@ class TestProvideCharmInstance(utils.BaseTestCase):
self.assertEqual(charm, 'the-charm')
class AssessStatusCharm(MyOpenStackCharm):
release = 'juno'
@property
def application_version(self):
return None
class TestBaseOpenStackCharmAssessStatus(BaseOpenStackCharmTest):
def setUp(self):
def make_open_stack_charm():
return MyOpenStackCharm(['interface1', 'interface2'])
return AssessStatusCharm(['interface1', 'interface2'])
super().setUp(make_open_stack_charm, TEST_CONFIG)
@ -180,8 +188,13 @@ class TestBaseOpenStackCharmAssessStatus(BaseOpenStackCharmTest):
self.patch_target('custom_assess_status_check',
return_value=(None, None))
self.patch_target('check_services_running', return_value=(None, None))
self.target._assess_status()
self.patch_object(chm_core.hookenv, 'application_version_set')
with mock.patch.object(AssessStatusCharm, 'application_version',
new_callable=mock.PropertyMock,
return_value="abc"):
self.target._assess_status()
self.status_set.assert_called_once_with('active', 'Unit is ready')
self.application_version_set.assert_called_once_with("abc")
# check all the check functions got called
self.check_if_paused.assert_called_once_with()
self.check_interfaces.assert_called_once_with()

View File

@ -31,6 +31,7 @@ class BaseOpenStackCharmTest(unit_tests.utils.BaseTestCase):
chm_core._singleton = None
super().tearDown()
def patch_target(self, attr, return_value=None, name=None, new=None):
def patch_target(self, attr, return_value=None, name=None, new=None,
**kwargs):
# uses BaseTestCase.patch_object() to patch targer.
self.patch_object(self.target, attr, return_value, name, new)
self.patch_object(self.target, attr, return_value, name, new, **kwargs)

View File

@ -52,13 +52,14 @@ class BaseTestCase(unittest.TestCase):
self._patches = None
self._patches_start = None
def patch_object(self, obj, attr, return_value=None, name=None, new=None):
def patch_object(self, obj, attr, return_value=None, name=None, new=None,
**kwargs):
if name is None:
name = attr
if new is not None:
mocked = mock.patch.object(obj, attr, new=new)
mocked = mock.patch.object(obj, attr, new=new, **kwargs)
else:
mocked = mock.patch.object(obj, attr)
mocked = mock.patch.object(obj, attr, **kwargs)
self._patches[name] = mocked
started = mocked.start()
if new is None: