import logging, time
from autotest_lib.client.common_lib import error
def run_linux_s3(test, params, env):
"""
Suspend a guest Linux OS to memory.
@param test: kvm test object.
@param params: Dictionary with test parameters.
@param env: Dictionary with the 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)
logging.info("Checking that VM supports S3")
session.cmd("grep -q mem /sys/power/state")
logging.info("Waiting for a while for X to start")
time.sleep(10)
src_tty = session.cmd_output("fgconsole").strip()
logging.info("Current virtual terminal is %s", src_tty)
if src_tty not in map(str, range(1, 10)):
raise error.TestFail("Got a strange current vt (%s)" % src_tty)
dst_tty = "1"
if src_tty == "1":
dst_tty = "2"
logging.info("Putting VM into S3")
command = "chvt %s && echo mem > /sys/power/state && chvt %s" % (dst_tty,
src_tty)
suspend_timeout = 120 + int(params.get("smp")) * 60
session.cmd(command, timeout=suspend_timeout)
logging.info("VM resumed after S3")
session.close()