42 lines
1.6 KiB
Python
42 lines
1.6 KiB
Python
import logging, time
|
|
from autotest_lib.client.common_lib import error
|
|
from autotest_lib.client.virt import virt_utils
|
|
|
|
|
|
@error.context_aware
|
|
def run_shutdown(test, params, env):
|
|
"""
|
|
KVM shutdown test:
|
|
1) Log into a guest
|
|
2) Send a shutdown command to the guest, or issue a system_powerdown
|
|
monitor command (depending on the value of shutdown_method)
|
|
3) Wait until the guest is down
|
|
|
|
@param test: kvm test object
|
|
@param params: Dictionary with the test parameters
|
|
@param env: Dictionary with test environment
|
|
"""
|
|
vm = env.get_vm(params["main_vm"])
|
|
vm.verify_alive()
|
|
timeout = int(params.get("login_timeout", 360))
|
|
session = vm.wait_for_login(timeout=timeout)
|
|
|
|
try:
|
|
error.base_context("shutting down the VM")
|
|
if params.get("shutdown_method") == "shell":
|
|
# Send a shutdown command to the guest's shell
|
|
session.sendline(vm.get_params().get("shutdown_command"))
|
|
error.context("waiting VM to go down (shutdown shell cmd)")
|
|
elif params.get("shutdown_method") == "system_powerdown":
|
|
# Sleep for a while -- give the guest a chance to finish booting
|
|
time.sleep(float(params.get("sleep_before_powerdown", 10)))
|
|
# Send a system_powerdown monitor command
|
|
vm.monitor.cmd("system_powerdown")
|
|
error.context("waiting VM to go down "
|
|
"(system_powerdown monitor cmd)")
|
|
|
|
if not virt_utils.wait_for(vm.is_dead, 240, 0, 1):
|
|
raise error.TestFail("Guest refuses to go down")
|
|
|
|
finally:
|
|
session.close()
|