Skip to content
This repository was archived by the owner on Nov 19, 2018. It is now read-only.

Commit e4c0d85

Browse files
Jenkinsopenstack-gerrit
authored andcommitted
Merge "Allow wait_for_delete to work for all clients"
2 parents 78d5112 + 5903fff commit e4c0d85

2 files changed

Lines changed: 28 additions & 2 deletions

File tree

openstackclient/common/utils.py

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,8 @@ def wait_for_status(status_f,
314314
def wait_for_delete(manager,
315315
res_id,
316316
status_field='status',
317+
error_status=['error'],
318+
exception_name=['NotFound'],
317319
sleep_time=5,
318320
timeout=300,
319321
callback=None):
@@ -324,6 +326,8 @@ def wait_for_delete(manager,
324326
:param status_field: the status attribute in the returned resource object,
325327
this is used to check for error states while the resource is being
326328
deleted
329+
:param error_status: a list of status strings for error
330+
:param exception_name: a list of exception strings for deleted case
327331
:param sleep_time: wait this long between checks (seconds)
328332
:param timeout: check until this long (seconds)
329333
:param callback: called per sleep cycle, useful to display progress; this
@@ -340,12 +344,12 @@ def wait_for_delete(manager,
340344
# handle a NotFound exception here without parsing the message
341345
res = manager.get(res_id)
342346
except Exception as ex:
343-
if type(ex).__name__ == 'NotFound':
347+
if type(ex).__name__ in exception_name:
344348
return True
345349
raise
346350

347351
status = getattr(res, status_field, '').lower()
348-
if status == 'error':
352+
if status in error_status:
349353
return False
350354

351355
if callback:

openstackclient/tests/common/test_utils.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,28 @@ def test_wait_for_delete_error(self, mock_sleep):
212212
self.assertFalse(utils.wait_for_delete(manager, res_id))
213213
self.assertFalse(mock_sleep.called)
214214

215+
@mock.patch.object(time, 'sleep')
216+
def test_wait_for_delete_error_with_overrides(self, mock_sleep):
217+
# Tests that we fail if the resource is my_status=failed
218+
resource = mock.MagicMock(my_status='FAILED')
219+
mock_get = mock.Mock(return_value=resource)
220+
manager = mock.MagicMock(get=mock_get)
221+
res_id = str(uuid.uuid4())
222+
self.assertFalse(utils.wait_for_delete(manager, res_id,
223+
status_field='my_status',
224+
error_status=['failed']))
225+
self.assertFalse(mock_sleep.called)
226+
227+
@mock.patch.object(time, 'sleep')
228+
def test_wait_for_delete_error_with_overrides_exception(self, mock_sleep):
229+
# Tests that we succeed if the resource is specific exception
230+
mock_get = mock.Mock(side_effect=Exception)
231+
manager = mock.MagicMock(get=mock_get)
232+
res_id = str(uuid.uuid4())
233+
self.assertTrue(utils.wait_for_delete(manager, res_id,
234+
exception_name=['Exception']))
235+
self.assertFalse(mock_sleep.called)
236+
215237
def test_build_kwargs_dict_value_set(self):
216238
self.assertEqual({'arg_bla': 'bla'},
217239
utils.build_kwargs_dict('arg_bla', 'bla'))

0 commit comments

Comments
 (0)