Bug fixes for mojo's use of zaza
Now with more unit tests! A couple of minor bug fixes exposed while testing mojo's use of zaza.
This commit is contained in:
@@ -8,6 +8,30 @@ class TestLocalUtils(ut_utils.BaseTestCase):
|
||||
def setUp(self):
|
||||
super(TestLocalUtils, self).setUp()
|
||||
|
||||
# Juju Status Object and data
|
||||
self.key = "instance-id"
|
||||
self.key_data = "machine-uuid"
|
||||
self.machine = "1"
|
||||
self.machine_data = {self.key: self.key_data}
|
||||
self.unit = "app/1"
|
||||
self.unit_data = {"machine": self.machine}
|
||||
self.application = "app"
|
||||
self.application_data = {"units": {self.unit: self.unit_data}}
|
||||
self.subordinate_application = "subordinate_application"
|
||||
self.subordinate_application_data = {
|
||||
"subordinate-to": [self.application]}
|
||||
self.juju_status = mock.MagicMock()
|
||||
self.juju_status.name = "juju_status_object"
|
||||
self.juju_status.applications.get.return_value = self.application_data
|
||||
self.juju_status.machines.get.return_value = self.machine_data
|
||||
|
||||
# Model
|
||||
self.patch_object(_local_utils, "model")
|
||||
self.patch_object(_local_utils.lifecycle_utils, "get_juju_model")
|
||||
self.model_name = "model-name"
|
||||
self.get_juju_model.return_value = self.model_name
|
||||
self.model.get_status.return_value = self.juju_status
|
||||
|
||||
def test_get_yaml_config(self):
|
||||
self.patch("builtins.open",
|
||||
new_callable=mock.mock_open(),
|
||||
@@ -87,3 +111,75 @@ class TestLocalUtils(ut_utils.BaseTestCase):
|
||||
_local_utils.get_network_config(net_topology),
|
||||
_data[net_topology])
|
||||
self.get_undercloud_env_vars.assert_called_once_with()
|
||||
|
||||
def test_get_full_juju_status(self):
|
||||
self.assertEqual(_local_utils.get_full_juju_status(), self.juju_status)
|
||||
self.model.get_status.assert_called_once_with(self.model_name)
|
||||
|
||||
def test_get_application_status(self):
|
||||
self.patch_object(_local_utils, "get_full_juju_status")
|
||||
self.get_full_juju_status.return_value = self.juju_status
|
||||
|
||||
# Full status juju object return
|
||||
self.assertEqual(
|
||||
_local_utils.get_application_status(), self.juju_status)
|
||||
self.get_full_juju_status.assert_called_once()
|
||||
|
||||
# Application only dictionary return
|
||||
self.assertEqual(
|
||||
_local_utils.get_application_status(application=self.application),
|
||||
self.application_data)
|
||||
|
||||
# Unit no application dictionary return
|
||||
self.assertEqual(
|
||||
_local_utils.get_application_status(unit=self.unit),
|
||||
self.unit_data)
|
||||
|
||||
def test_get_machine_status(self):
|
||||
self.patch_object(_local_utils, "get_full_juju_status")
|
||||
self.get_full_juju_status.return_value = self.juju_status
|
||||
|
||||
# All machine data
|
||||
self.assertEqual(
|
||||
_local_utils.get_machine_status(self.machine),
|
||||
self.machine_data)
|
||||
self.get_full_juju_status.assert_called_once()
|
||||
|
||||
# Request a specific key
|
||||
self.assertEqual(
|
||||
_local_utils.get_machine_status(self.machine, self.key),
|
||||
self.key_data)
|
||||
|
||||
def test_get_machines_for_application(self):
|
||||
self.patch_object(_local_utils, "get_application_status")
|
||||
self.get_application_status.return_value = self.application_data
|
||||
|
||||
# Machine data
|
||||
self.assertEqual(
|
||||
_local_utils.get_machines_for_application(self.application),
|
||||
[self.machine])
|
||||
self.get_application_status.assert_called_once()
|
||||
|
||||
# Subordinate application has no units
|
||||
def _get_application_status(application):
|
||||
_apps = {
|
||||
self.application: self.application_data,
|
||||
self.subordinate_application:
|
||||
self.subordinate_application_data}
|
||||
return _apps[application]
|
||||
self.get_application_status.side_effect = _get_application_status
|
||||
|
||||
self.assertEqual(
|
||||
_local_utils.get_machines_for_application(
|
||||
self.subordinate_application),
|
||||
[self.machine])
|
||||
|
||||
def test_get_machine_uuids_for_application(self):
|
||||
self.patch_object(_local_utils, "get_machines_for_application")
|
||||
self.get_machines_for_application.return_value = [self.machine]
|
||||
|
||||
self.assertEqual(
|
||||
_local_utils.get_machine_uuids_for_application(self.application),
|
||||
[self.machine_data.get("instance-id")])
|
||||
self.get_machines_for_application.assert_called_once_with(
|
||||
self.application)
|
||||
|
||||
@@ -290,10 +290,14 @@ def get_application_status(application=None, unit=None):
|
||||
"""
|
||||
|
||||
status = get_full_juju_status()
|
||||
|
||||
if unit and not application:
|
||||
application = unit.split("/")[0]
|
||||
|
||||
if application:
|
||||
status = status.applications.get(application)
|
||||
if unit:
|
||||
status = status.units.get(unit)
|
||||
status = status.get('units').get(unit)
|
||||
return status
|
||||
|
||||
|
||||
@@ -325,6 +329,12 @@ def get_machines_for_application(application):
|
||||
"""
|
||||
|
||||
status = get_application_status(application)
|
||||
|
||||
# libjuju juju status no longer has units for subordinate charms
|
||||
# Use the application it is subordinate-to to find machines
|
||||
if status.get('units') is None and status.get('subordinate-to'):
|
||||
return get_machines_for_application(status.get('subordinate-to')[0])
|
||||
|
||||
machines = []
|
||||
for unit in status.get('units').keys():
|
||||
machines.append(
|
||||
|
||||
Reference in New Issue
Block a user