| 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() |