Home | History | Annotate | Download | only in tests
      1 import logging, time, shutil
      2 from autotest_lib.client.common_lib import error
      3 from autotest_lib.client.virt import virt_utils
      4 
      5 
      6 def run_watchdog(test, params, env):
      7     """
      8     Configure watchdog, crash the guest and check if watchdog_action occurs.
      9     @param test: kvm test object.
     10     @param params: Dictionary with test parameters.
     11     @param env: Dictionary with the test environment.
     12     """
     13     vm = env.get_vm(params["main_vm"])
     14     vm.verify_alive()
     15     timeout = int(params.get("login_timeout", 360))
     16     session = vm.wait_for_login(timeout=timeout)
     17     relogin_timeout = int(params.get("relogin_timeout", 240))
     18     watchdog_enable_cmd = "chkconfig watchdog on && service watchdog start"
     19 
     20     def watchdog_action_reset():
     21         """
     22         Trigger a crash dump through sysrq-trigger
     23         Ensure watchdog_action(reset) occur.
     24         """
     25         session = vm.wait_for_login(timeout=timeout)
     26 
     27         logging.info("Triggering crash on vm")
     28         crash_cmd = "echo c > /proc/sysrq-trigger"
     29         session.sendline(crash_cmd)
     30 
     31         if not virt_utils.wait_for(lambda: not session.is_responsive(),
     32                                    240, 0, 1):
     33             raise error.TestFail("Could not trigger crash")
     34 
     35         logging.info("Waiting for kernel watchdog_action to take place")
     36         session = vm.wait_for_login(timeout=relogin_timeout)
     37 
     38     logging.info("Enabling watchdog service...")
     39     session.cmd(watchdog_enable_cmd, timeout=320)
     40     watchdog_action_reset()
     41 
     42     # Close stablished session
     43     session.close()
     44