diff --git a/harvester_e2e_tests/fixtures/virtualmachines.py b/harvester_e2e_tests/fixtures/virtualmachines.py index 306587ff9..3332f7cda 100644 --- a/harvester_e2e_tests/fixtures/virtualmachines.py +++ b/harvester_e2e_tests/fixtures/virtualmachines.py @@ -170,6 +170,17 @@ def configure(self, snooze=None, wait_timeout=None): finally: self.snooze, self.wait_timeout = s, t + def wait_getable(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)) + if 200 == ctx.code and callback(ctx): + break + sleep(self.snooze) + else: + return False, ctx + return True, ctx + def wait_stopped(self, vm_name, endtime=None, callback=default_cb, **kws): ctx = ResponseContext('vm.stop', *self.vms.stop(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 49825096b..72ee2d882 100644 --- a/harvester_e2e_tests/integrations/test_4_vm_backup_restore.py +++ b/harvester_e2e_tests/integrations/test_4_vm_backup_restore.py @@ -396,6 +396,8 @@ def test_restore_with_new_vm( spec = api_client.backups.RestoreSpec.for_new(restored_vm_name) code, data = api_client.backups.restore(unique_vm_name, spec) assert 201 == code, (code, data) + vm_getable, (code, data) = vm_checker.wait_getable(restored_vm_name) + assert vm_getable, (code, data) # Check VM Started then get IPs (vm and host) vm_got_ips, (code, data) = vm_checker.wait_ip_addresses(restored_vm_name, ['default']) @@ -478,6 +480,8 @@ def test_restore_replace_with_delete_vols( spec = api_client.backups.RestoreSpec.for_existing(delete_volumes=True) code, data = api_client.backups.restore(unique_vm_name, spec) assert 201 == code, f'Failed to restore backup with current VM replaced, {data}' + vm_getable, (code, data) = vm_checker.wait_getable(unique_vm_name) + assert vm_getable, (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']) @@ -596,6 +600,8 @@ def test_restore_replace_with_vm_shutdown_command( spec = api_client.backups.RestoreSpec.for_existing(delete_volumes=True) code, data = api_client.backups.restore(unique_vm_name, spec) assert 201 == code, f'Failed to restore backup with current VM replaced, {data}' + vm_getable, (code, data) = vm_checker.wait_getable(unique_vm_name) + assert vm_getable, (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']) @@ -689,6 +695,8 @@ def test_restore_replace_migrated_vm( spec = api_client.backups.RestoreSpec.for_existing() code, data = api_client.backups.restore(unique_vm_name, spec) assert 201 == code, f'Failed to restore backup with current VM replaced, {data}' + vm_getable, (code, data) = vm_checker.wait_getable(unique_vm_name) + assert vm_getable, (code, data) # Check VM Started vm_got_ips, (code, data) = vm_checker.wait_ip_addresses(unique_vm_name, ['default']) @@ -861,6 +869,8 @@ def test_delete_first_backup( spec = api_client.backups.RestoreSpec.for_existing(delete_volumes=True) code, data = api_client.backups.restore(latest_backup, spec) assert 201 == code, f'Failed to restore backup with current VM replaced, {data}' + vm_getable, (code, data) = vm_checker.wait_getable(unique_vm_name) + assert vm_getable, (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']) @@ -955,6 +965,8 @@ def test_delete_last_backup( spec = api_client.backups.RestoreSpec.for_existing(delete_volumes=True) code, data = api_client.backups.restore(latest_backup, spec) assert 201 == code, f'Failed to restore backup with current VM replaced, {data}' + vm_getable, (code, data) = vm_checker.wait_getable(unique_vm_name) + assert vm_getable, (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']) @@ -1049,6 +1061,8 @@ def test_delete_middle_backup( spec = api_client.backups.RestoreSpec.for_existing(delete_volumes=True) code, data = api_client.backups.restore(latest_backup, spec) assert 201 == code, f'Failed to restore backup with current VM replaced, {data}' + vm_getable, (code, data) = vm_checker.wait_getable(unique_vm_name) + assert vm_getable, (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'])