174a314b490ff542c4dd2ae4aa0d11c6394d92960Dale Curtisimport logging, time
274a314b490ff542c4dd2ae4aa0d11c6394d92960Dale Curtisfrom autotest_lib.client.common_lib import error
374a314b490ff542c4dd2ae4aa0d11c6394d92960Dale Curtis
474a314b490ff542c4dd2ae4aa0d11c6394d92960Dale Curtisdef run_system_reset_bootable(test, params, env):
574a314b490ff542c4dd2ae4aa0d11c6394d92960Dale Curtis    """
674a314b490ff542c4dd2ae4aa0d11c6394d92960Dale Curtis    KVM reset test:
774a314b490ff542c4dd2ae4aa0d11c6394d92960Dale Curtis    1) Boot guest.
874a314b490ff542c4dd2ae4aa0d11c6394d92960Dale Curtis    2) Reset system by monitor command for several times.
974a314b490ff542c4dd2ae4aa0d11c6394d92960Dale Curtis    3) Log into the guest to verify it could normally boot.
1074a314b490ff542c4dd2ae4aa0d11c6394d92960Dale Curtis
1174a314b490ff542c4dd2ae4aa0d11c6394d92960Dale Curtis    @param test: kvm test object
1274a314b490ff542c4dd2ae4aa0d11c6394d92960Dale Curtis    @param params: Dictionary with the test parameters
1374a314b490ff542c4dd2ae4aa0d11c6394d92960Dale Curtis    @param env: Dictionary with test environment.
1474a314b490ff542c4dd2ae4aa0d11c6394d92960Dale Curtis    """
1574a314b490ff542c4dd2ae4aa0d11c6394d92960Dale Curtis    vm = env.get_vm(params["main_vm"])
1674a314b490ff542c4dd2ae4aa0d11c6394d92960Dale Curtis    vm.verify_alive()
1774a314b490ff542c4dd2ae4aa0d11c6394d92960Dale Curtis    timeout = float(params.get("login_timeout", 240))
1874a314b490ff542c4dd2ae4aa0d11c6394d92960Dale Curtis    reset_times = int(params.get("reset_times",20))
1974a314b490ff542c4dd2ae4aa0d11c6394d92960Dale Curtis    interval = int(params.get("reset_interval",10))
2074a314b490ff542c4dd2ae4aa0d11c6394d92960Dale Curtis    wait_time = int(params.get("wait_time_for_reset",60))
2174a314b490ff542c4dd2ae4aa0d11c6394d92960Dale Curtis
2274a314b490ff542c4dd2ae4aa0d11c6394d92960Dale Curtis    logging.info("Wait for %d seconds before reset" % wait_time)
2374a314b490ff542c4dd2ae4aa0d11c6394d92960Dale Curtis    time.sleep(wait_time)
2474a314b490ff542c4dd2ae4aa0d11c6394d92960Dale Curtis
2574a314b490ff542c4dd2ae4aa0d11c6394d92960Dale Curtis    for i in range(reset_times):
2674a314b490ff542c4dd2ae4aa0d11c6394d92960Dale Curtis        logging.info("Reset the system by monitor cmd")
2774a314b490ff542c4dd2ae4aa0d11c6394d92960Dale Curtis        vm.monitor.cmd("system_reset")
2874a314b490ff542c4dd2ae4aa0d11c6394d92960Dale Curtis        time.sleep(interval)
2974a314b490ff542c4dd2ae4aa0d11c6394d92960Dale Curtis
3074a314b490ff542c4dd2ae4aa0d11c6394d92960Dale Curtis    logging.info("Try to login guest after reset")
3174a314b490ff542c4dd2ae4aa0d11c6394d92960Dale Curtis    session = vm.wait_for_login(timeout=timeout)
32