From 58f55358a3a1f6309b07a0d958abfb2d6fcc81d5 Mon Sep 17 00:00:00 2001 From: Albin Sun Date: Tue, 27 Aug 2024 10:26:42 +0800 Subject: [PATCH] Add wait_status_running checker --- harvester_e2e_tests/fixtures/virtualmachines.py | 12 ++++++++++++ .../integrations/test_4_vm_backup_restore.py | 16 +++++----------- 2 files changed, 17 insertions(+), 11 deletions(-) diff --git a/harvester_e2e_tests/fixtures/virtualmachines.py b/harvester_e2e_tests/fixtures/virtualmachines.py index 3332f7cda..438d56247 100644 --- a/harvester_e2e_tests/fixtures/virtualmachines.py +++ b/harvester_e2e_tests/fixtures/virtualmachines.py @@ -209,6 +209,18 @@ def cb(ctx): ) return self.wait_stopped(vm_name, endtime, cb, **kws) + def wait_status_running(self, vm_name, endtime=None, callback=default_cb, **kws): + endtime = endtime or self._endtime() + while endtime > datetime.now(): + ctx = ResponseContext('vm.get', *self.vms.get(vm_name, **kws)) + status = ctx.data.get('status', {}).get('printableStatus') + if 200 == ctx.code and "Running" == status and callback(ctx): + break + sleep(self.snooze) + else: + return False, ctx + return True, ctx + def wait_deleted(self, vm_name, endtime=None, callback=default_cb, **kws): ctx = ResponseContext('vm.delete', *self.vms.delete(vm_name, **kws)) if 404 == ctx.code and callback(ctx): diff --git a/harvester_e2e_tests/integrations/test_4_vm_backup_restore.py b/harvester_e2e_tests/integrations/test_4_vm_backup_restore.py index a157736e2..784010c1e 100644 --- a/harvester_e2e_tests/integrations/test_4_vm_backup_restore.py +++ b/harvester_e2e_tests/integrations/test_4_vm_backup_restore.py @@ -481,17 +481,11 @@ def test_restore_replace_with_delete_vols( code, data = api_client.backups.restore(unique_vm_name, spec) assert 201 == code, f'Failed to restore backup with current VM replaced, {data}' - endtime = datetime.now() + timedelta(seconds=wait_timeout) - while endtime > datetime.now(): - code, data = api_client.vms.get(unique_vm_name) - if 200 == code and "Running" == data.get('status', {}).get('printableStatus'): - break - sleep(3) - else: - raise AssertionError( - f"Failed to restore VM({unique_vm_name}) with errors:\n" - f"Status({code}): {data}" - ) + vm_running, (code, data) = vm_checker.wait_status_running(unique_vm_name) + assert vm_running, ( + f"Failed to restore VM({unique_vm_name}) with errors:\n" + f"Status({code}): {data}" + ) # Check VM Started then get IPs (vm and host) vm_got_ips, (code, data) = vm_checker.wait_ip_addresses(unique_vm_name, ['default'])