Also avoids end_time race condition between while loop and final if statement.
Signed-off-by: Chris Evich <[email protected]> --- client/tests/kvm/subtests.cfg.sample | 9 ++++++++- client/tests/kvm/tests/boot_savevm.py | 25 +++++++++++++++++++------ 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/client/tests/kvm/subtests.cfg.sample b/client/tests/kvm/subtests.cfg.sample index 844b67f..95147ff 100644 --- a/client/tests/kvm/subtests.cfg.sample +++ b/client/tests/kvm/subtests.cfg.sample @@ -285,9 +285,16 @@ variants: - boot_savevm: install setup image_copy unattended_install.cdrom type = boot_savevm + # Time in seconds to sleep between cycles savevm_delay = 0.3 + # Time limit in seconds to login after vm restored savevm_login_timeout = 120 - savevm_timeout = 2000 + # Total number of stop/save/reset/load/cont cycles to perform. + savevm_cycles = 10 + # Maximum percentage time variance allowed after first cycle. + # e.g. if threshold is 10%, first cycle + savevm_delay takes 55s, + # no subsequent cycle permitted to take more than (about) 1 minute. + cycle_duration_threshold = 10 kill_vm_on_error = yes kill_vm_gracefully = yes kill_vm = yes diff --git a/client/tests/kvm/tests/boot_savevm.py b/client/tests/kvm/tests/boot_savevm.py index 7bbc98c..6730447 100644 --- a/client/tests/kvm/tests/boot_savevm.py +++ b/client/tests/kvm/tests/boot_savevm.py @@ -19,9 +19,13 @@ def run_boot_savevm(test, params, env): vm.verify_alive() savevm_delay = float(params.get("savevm_delay")) savevm_login_timeout = float(params.get("savevm_login_timeout")) - end_time = time.time() + float(params.get("savevm_timeout")) + max_duration = -1 # check value. set after first cycle. + cycle_duration_threshold = float(params.get("cycle_duration_threshold")) + savevm_cycles = int(params.get("savevm_cycles")) + assert cycle_duration_threshold > 0.5 + assert savevm_cycles > 1 - while time.time() < end_time: + def _do_cycle(cycle_number): time.sleep(savevm_delay) try: vm.monitor.cmd("stop") @@ -43,13 +47,22 @@ def run_boot_savevm(test, params, env): vm.monitor.cmd("cont") except kvm_monitor.MonitorError, e: logging.error(e) - try: vm.wait_for_login(timeout=savevm_login_timeout) break except Exception, detail: logging.debug(detail) - if (time.time() > end_time): - raise error.TestFail("Not possible to log onto the vm after %s s" % - params.get("savevm_timeout")) + + for cycle_number in xrange(0,savevm_cycles): + start_time = time.time() + _do_cycle(cycle_number) + end_time = time.time() + duration = end_time - start_time + if cycle_number == 0: # simplify outer for loop + max_duration = duration * (1.0 + cycle_duration_threshold) + else: + if duration > max_duration: + overrun = max_duration - duration; + raise error.TestFail("savevm cycle %d took %0.4f seconds longer than %0.4f." % + (cycle_number, overrun, max_duration)) -- 1.7.1 _______________________________________________ Autotest mailing list [email protected] http://test.kernel.org/cgi-bin/mailman/listinfo/autotest
