Skip to content

Commit

Permalink
* [e2e] fix bug in fixture vm_checker
Browse files Browse the repository at this point in the history
  • Loading branch information
lanfon72 committed Sep 20, 2023
1 parent 11cd64c commit f386460
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 13 deletions.
34 changes: 22 additions & 12 deletions harvester_e2e_tests/fixtures/virtualmachines.py
Original file line number Diff line number Diff line change
Expand Up @@ -93,8 +93,14 @@ def vm_login_from_host(


@pytest.fixture(scope="session")
def vm_checker(api_client, wait_timeout):
def vm_checker(request, api_client, wait_timeout):
def _cb(code, data):
''' identity callback function for adjust checking condition.
:rtype: boolean
:return: True when hit the additional check
'''

return True

class VMChecker:
Expand All @@ -114,7 +120,7 @@ def wait_stopped(self, vm_name, endtime=None, callback=_cb, **kws):
endtime = endtime or self._endtime()
while endtime > datetime.now():
code, data = self.vms.get_status(vm_name)
if 404 == code and _cb(code, data):
if 404 == code and callback(code, data):
break
sleep(self.snooze)
else:
Expand All @@ -140,7 +146,7 @@ def wait_started(self, vm_name, endtime=None, callback=_cb, **kws):
if (
200 == code
and "Running" == data.get('status', {}).get('phase')
and _cb(code, data)
and callback(code, data)
):
break
sleep(self.snooze)
Expand All @@ -149,28 +155,28 @@ def wait_started(self, vm_name, endtime=None, callback=_cb, **kws):
return True, (code, data)

def wait_agent_connected(self, vm_name, endtime=None, callback=_cb, **kws):
def cb_(code, data):
def cb(code, data):
conds = data.get('status', {}).get('conditions', [{}])
return (
"AgentConnected" == conds[-1].get('type')
and _cb(code, data)
and callback(code, data)
)

return self.wait_started(vm_name, endtime, cb_, **kws)
return self.wait_started(vm_name, endtime, cb, **kws)

def wait_interfaces(self, vm_name, endtime=None, callback=_cb, **kws):
def cb_(code, data):
def cb(code, data):
return (
data.get('status', {}).get('interfaces')
and _cb(code, data)
and callback(code, data)
)
return self.wait_agent_connected(vm_name, endtime, callback, **kws)
return self.wait_agent_connected(vm_name, endtime, cb, **kws)

def wait_cloudinit_done(self, shell, endtime=None, callback=_cb, **kws):
endtime = endtime or self._endtime()
while endtime > datetime.now():
out, err = shell.exec_command('cloud-init status')
if 'done' in out and _cb(out, err):
if 'done' in out and callback(out, err):
break
sleep(self.snooze)
else:
Expand All @@ -186,11 +192,15 @@ def wait_migrated(self, vm_name, new_host, endtime=None, callback=_cb, **kws):
while endtime > datetime.now():
code, data = self.vms.get_status(vm_name)
migrating = data['metadata']['annotations'].get("harvesterhci.io/migrationState")
if not migrating and new_host == data['status']['nodeName'] and _cb(code, data):
if (
not migrating and new_host == data['status']['nodeName']
and callback(code, data)
):
break
sleep(self.snooze)
else:
return False, (code, data)
return True, (code, data)

return VMChecker(api_client.vms, wait_timeout)
return VMChecker(api_client.vms, wait_timeout,
request.config.getoption("--sleep-timeout") or 3)
2 changes: 1 addition & 1 deletion harvester_e2e_tests/integration/test_backup_restore.py
Original file line number Diff line number Diff line change
Expand Up @@ -365,7 +365,7 @@ def test_restore_with_new_vm(
sh.exec_command('sync')

# Restore VM into new
restored_vm_name = f"{backup_config[0]}.lower()-restore-{unique_vm_name}"
restored_vm_name = f"{backup_config[0].lower()}-restore-{unique_vm_name}"
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)
Expand Down

0 comments on commit f386460

Please sign in to comment.