43 lines
1.5 KiB
Python
43 lines
1.5 KiB
Python
import logging, time, shutil
|
|
from autotest_lib.client.common_lib import error
|
|
from autotest_lib.client.virt import virt_utils
|
|
|
|
|
|
def run_watchdog(test, params, env):
|
|
"""
|
|
Configure watchdog, crash the guest and check if watchdog_action occurs.
|
|
@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)
|
|
relogin_timeout = int(params.get("relogin_timeout", 240))
|
|
watchdog_enable_cmd = "chkconfig watchdog on && service watchdog start"
|
|
|
|
def watchdog_action_reset():
|
|
"""
|
|
Trigger a crash dump through sysrq-trigger
|
|
Ensure watchdog_action(reset) occur.
|
|
"""
|
|
session = vm.wait_for_login(timeout=timeout)
|
|
|
|
logging.info("Triggering crash on vm")
|
|
crash_cmd = "echo c > /proc/sysrq-trigger"
|
|
session.sendline(crash_cmd)
|
|
|
|
if not virt_utils.wait_for(lambda: not session.is_responsive(),
|
|
240, 0, 1):
|
|
raise error.TestFail("Could not trigger crash")
|
|
|
|
logging.info("Waiting for kernel watchdog_action to take place")
|
|
session = vm.wait_for_login(timeout=relogin_timeout)
|
|
|
|
logging.info("Enabling watchdog service...")
|
|
session.cmd(watchdog_enable_cmd, timeout=320)
|
|
watchdog_action_reset()
|
|
|
|
# Close stablished session
|
|
session.close()
|