From dfecc58f5af22b726d7b799b9b332e8a00428afe Mon Sep 17 00:00:00 2001 From: Liam Young Date: Wed, 18 Nov 2020 12:13:59 +0000 Subject: [PATCH] Extend resource_reaches_status The resource_reaches_status assumes that the attribute to be checked is called 'status' but this can vary between resource types so allow the name of the attribute to specified. --- .../utilities/test_zaza_utilities_openstack.py | 9 ++++++--- zaza/openstack/utilities/openstack.py | 13 ++++++++++--- 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/unit_tests/utilities/test_zaza_utilities_openstack.py b/unit_tests/utilities/test_zaza_utilities_openstack.py index 5ad0b9b..75509aa 100644 --- a/unit_tests/utilities/test_zaza_utilities_openstack.py +++ b/unit_tests/utilities/test_zaza_utilities_openstack.py @@ -369,12 +369,15 @@ class TestOpenStackUtils(ut_utils.BaseTestCase): 'e01df65a') def test__resource_reaches_status_bespoke(self): + client_mock = mock.MagicMock() resource_mock = mock.MagicMock() - resource_mock.get.return_value = mock.MagicMock(status='readyish') + resource_mock.special_status = 'readyish' + client_mock.get.return_value = resource_mock openstack_utils._resource_reaches_status( - resource_mock, + client_mock, 'e01df65a', - 'readyish') + 'readyish', + resource_attribute='special_status') def test__resource_reaches_status_bespoke_fail(self): resource_mock = mock.MagicMock() diff --git a/zaza/openstack/utilities/openstack.py b/zaza/openstack/utilities/openstack.py index c309116..0b25093 100644 --- a/zaza/openstack/utilities/openstack.py +++ b/zaza/openstack/utilities/openstack.py @@ -1886,7 +1886,8 @@ def download_image(image_url, target_file): def _resource_reaches_status(resource, resource_id, expected_status='available', - msg='resource'): + msg='resource', + resource_attribute='status'): """Wait for an openstack resources status to reach an expected status. Wait for an openstack resources status to reach an expected status @@ -1902,9 +1903,11 @@ def _resource_reaches_status(resource, resource_id, :type expected_status: str :param msg: text to identify purpose in logging :type msg: str + :param resource_attribute: Resource attribute to check against + :type resource_attribute: str :raises: AssertionError """ - resource_status = resource.get(resource_id).status + resource_status = getattr(resource.get(resource_id), resource_attribute) logging.info("{}: resource {} in {} state, waiting for {}".format( msg, resource_id, resource_status, expected_status)) assert resource_status == expected_status @@ -1914,6 +1917,7 @@ def resource_reaches_status(resource, resource_id, expected_status='available', msg='resource', + resource_attribute='status', wait_exponential_multiplier=1, wait_iteration_max_time=60, stop_after_attempt=8, @@ -1933,6 +1937,8 @@ def resource_reaches_status(resource, :type expected_status: str :param msg: text to identify purpose in logging :type msg: str + :param resource_attribute: Resource attribute to check against + :type resource_attribute: str :param wait_exponential_multiplier: Wait 2^x * wait_exponential_multiplier seconds between each retry :type wait_exponential_multiplier: int @@ -1954,7 +1960,8 @@ def resource_reaches_status(resource, resource, resource_id, expected_status, - msg) + msg, + resource_attribute) def _resource_removed(resource, resource_id, msg="resource"):