Home | History | Annotate | Download | only in tests
      1 import logging
      2 from autotest_lib.client.common_lib import error
      3 from autotest_lib.client.virt import virt_env_process
      4 
      5 
      6 @error.context_aware
      7 def run_stress_boot(test, params, env):
      8     """
      9     Boots VMs until one of them becomes unresponsive, and records the maximum
     10     number of VMs successfully started:
     11     1) boot the first vm
     12     2) boot the second vm cloned from the first vm, check whether it boots up
     13        and all booted vms respond to shell commands
     14     3) go on until cannot create VM anymore or cannot allocate memory for VM
     15 
     16     @param test:   kvm test object
     17     @param params: Dictionary with the test parameters
     18     @param env:    Dictionary with test environment.
     19     """
     20     error.base_context("waiting for the first guest to be up", logging.info)
     21     vm = env.get_vm(params["main_vm"])
     22     vm.verify_alive()
     23     login_timeout = float(params.get("login_timeout", 240))
     24     session = vm.wait_for_login(timeout=login_timeout)
     25 
     26     num = 2
     27     sessions = [session]
     28 
     29     # Boot the VMs
     30     try:
     31         while num <= int(params.get("max_vms")):
     32             # Clone vm according to the first one
     33             error.base_context("booting guest #%d" % num, logging.info)
     34             vm_name = "vm%d" % num
     35             vm_params = vm.params.copy()
     36             curr_vm = vm.clone(vm_name, vm_params)
     37             env.register_vm(vm_name, curr_vm)
     38             virt_env_process.preprocess_vm(test, vm_params, env, vm_name)
     39             params["vms"] += " " + vm_name
     40 
     41             sessions.append(curr_vm.wait_for_login(timeout=login_timeout))
     42             logging.info("Guest #%d booted up successfully", num)
     43 
     44             # Check whether all previous shell sessions are responsive
     45             for i, se in enumerate(sessions):
     46                 error.context("checking responsiveness of guest #%d" % (i + 1),
     47                               logging.debug)
     48                 se.cmd(params.get("alive_test_cmd"))
     49             num += 1
     50     finally:
     51         for se in sessions:
     52             se.close()
     53         logging.info("Total number booted: %d" % (num -1))
     54