Message ID | 7f24fe107f3dc8e2693e12142ba97010c7063166.1248102188.git.mgoldish@redhat.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Mon, Jul 20, 2009 at 12:07 PM, Michael Goldish<mgoldish@redhat.com> wrote: > Add two new step file test parameters: > - keep_screendump_history: if equals 'yes', screendump history is saved in > Â test.debugdir/barrier_history in JPG format. Â Each screendump taken by the > Â test is saved if it differs from the previous screendump. Â By default, when > Â a barrier succeeds all history is removed, so eventually the remaining files > Â are only those of the (last) failed barrier, if any. > - keep_all_history: if equals 'yes', screendump history is not removed upon > Â barrier success. Â The test leaves behind all the collected screendump history. Applied. > Signed-off-by: Michael Goldish <mgoldish@redhat.com> > --- > Â client/tests/kvm/kvm_guest_wizard.py | Â 38 ++++++++++++++++++++++++++++----- > Â 1 files changed, 32 insertions(+), 6 deletions(-) > > diff --git a/client/tests/kvm/kvm_guest_wizard.py b/client/tests/kvm/kvm_guest_wizard.py > index eb0e2d5..73b830e 100644 > --- a/client/tests/kvm/kvm_guest_wizard.py > +++ b/client/tests/kvm/kvm_guest_wizard.py > @@ -1,6 +1,6 @@ > Â import os, time, md5, re, shutil, logging > Â from autotest_lib.client.common_lib import utils, error > -import kvm_utils, ppm_utils > +import kvm_utils, ppm_utils, kvm_subprocess > > Â """ > Â Utilities to perform automatic guest installation using step files. > @@ -53,6 +53,11 @@ def barrier_2(vm, words, params, debug_dir, data_scrdump_filename, > Â Â else: > Â Â Â Â stuck_detection_history = 2 > > + Â Â keep_screendump_history = params.get("keep_screendump_history") == "yes" > + Â Â if keep_screendump_history: > + Â Â Â Â keep_all_history = params.get("keep_all_history") == "yes" > + Â Â Â Â history_dir = os.path.join(debug_dir, "barrier_history") > + > Â Â end_time = time.time() + timeout > Â Â end_time_stuck = time.time() + fail_if_stuck_for > Â Â start_time = time.time() > @@ -91,21 +96,42 @@ def barrier_2(vm, words, params, debug_dir, data_scrdump_filename, > Â Â Â Â # Read image file > Â Â Â Â (w, h, data) = ppm_utils.image_read_from_ppm_file(scrdump_filename) > > + Â Â Â Â # Compute md5sum of whole image > + Â Â Â Â whole_image_md5sum = ppm_utils.image_md5sum(w, h, data) > + > + Â Â Â Â # Write screendump to history_dir (as JPG) if requested > + Â Â Â Â # and if the screendump differs from the previous one > + Â Â Â Â if (keep_screendump_history and > + Â Â Â Â Â Â whole_image_md5sum not in prev_whole_image_md5sums[:1]): > + Â Â Â Â Â Â try: > + Â Â Â Â Â Â Â Â os.makedirs(history_dir) > + Â Â Â Â Â Â except: > + Â Â Â Â Â Â Â Â pass > + Â Â Â Â Â Â history_scrdump_filename = os.path.join(history_dir, > + Â Â Â Â Â Â Â Â Â Â "scrdump-step_%s-%s.jpg" % (current_step_num, > + Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â time.strftime("%Y%m%d-%H%M%S"))) > + Â Â Â Â Â Â kvm_subprocess.run_fg("convert -quality 30 %s %s" % > + Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â (scrdump_filename, history_scrdump_filename), > + Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â logging.debug, "(convert) ", timeout=30) > + > Â Â Â Â # Compare md5sum of barrier region with the expected md5sum > Â Â Â Â calced_md5sum = ppm_utils.get_region_md5sum(w, h, data, x1, y1, dx, dy, > Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â cropped_scrdump_filename) > Â Â Â Â if calced_md5sum == md5sum: > + Â Â Â Â Â Â # Success -- remove screendump history unless requested not to > + Â Â Â Â Â Â if keep_screendump_history and not keep_all_history: > + Â Â Â Â Â Â Â Â kvm_subprocess.run_fg("rm -rvf %s" % history_dir, > + Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â logging.debug, "(rm) ", timeout=30) > + Â Â Â Â Â Â # Report success > Â Â Â Â Â Â return True > > - Â Â Â Â # Compute md5sum of whole image in order to compare it with > - Â Â Â Â # previous ones > - Â Â Â Â whole_image_md5sum = ppm_utils.image_md5sum(w, h, data) > + Â Â Â Â # Insert image md5sum into queue of last seen images: > Â Â Â Â # If md5sum is already in queue... > Â Â Â Â if whole_image_md5sum in prev_whole_image_md5sums: > Â Â Â Â Â Â # Remove md5sum from queue > Â Â Â Â Â Â prev_whole_image_md5sums.remove(whole_image_md5sum) > Â Â Â Â else: > - Â Â Â Â Â Â # Extend 'stuck' timeout > + Â Â Â Â Â Â # Otherwise extend 'stuck' timeout > Â Â Â Â Â Â end_time_stuck = time.time() + fail_if_stuck_for > Â Â Â Â # Insert md5sum at beginning of queue > Â Â Â Â prev_whole_image_md5sums.insert(0, whole_image_md5sum) > @@ -129,7 +155,7 @@ def barrier_2(vm, words, params, debug_dir, data_scrdump_filename, > Â Â Â Â if data_scrdump_filename and os.path.exists(data_scrdump_filename): > Â Â Â Â Â Â # Read expected screendump image > Â Â Â Â Â Â (ew, eh, edata) = \ > - Â Â Â Â Â Â ppm_utils.image_read_from_ppm_file(data_scrdump_filename) > + Â Â Â Â Â Â Â Â Â Â ppm_utils.image_read_from_ppm_file(data_scrdump_filename) > Â Â Â Â Â Â # Write it in debug_dir > Â Â Â Â Â Â ppm_utils.image_write_to_ppm_file(expected_scrdump_filename, > Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â Â ew, eh, edata) > -- > 1.5.4.1 > > _______________________________________________ > Autotest mailing list > Autotest@test.kernel.org > http://test.kernel.org/cgi-bin/mailman/listinfo/autotest >
diff --git a/client/tests/kvm/kvm_guest_wizard.py b/client/tests/kvm/kvm_guest_wizard.py index eb0e2d5..73b830e 100644 --- a/client/tests/kvm/kvm_guest_wizard.py +++ b/client/tests/kvm/kvm_guest_wizard.py @@ -1,6 +1,6 @@ import os, time, md5, re, shutil, logging from autotest_lib.client.common_lib import utils, error -import kvm_utils, ppm_utils +import kvm_utils, ppm_utils, kvm_subprocess """ Utilities to perform automatic guest installation using step files. @@ -53,6 +53,11 @@ def barrier_2(vm, words, params, debug_dir, data_scrdump_filename, else: stuck_detection_history = 2 + keep_screendump_history = params.get("keep_screendump_history") == "yes" + if keep_screendump_history: + keep_all_history = params.get("keep_all_history") == "yes" + history_dir = os.path.join(debug_dir, "barrier_history") + end_time = time.time() + timeout end_time_stuck = time.time() + fail_if_stuck_for start_time = time.time() @@ -91,21 +96,42 @@ def barrier_2(vm, words, params, debug_dir, data_scrdump_filename, # Read image file (w, h, data) = ppm_utils.image_read_from_ppm_file(scrdump_filename) + # Compute md5sum of whole image + whole_image_md5sum = ppm_utils.image_md5sum(w, h, data) + + # Write screendump to history_dir (as JPG) if requested + # and if the screendump differs from the previous one + if (keep_screendump_history and + whole_image_md5sum not in prev_whole_image_md5sums[:1]): + try: + os.makedirs(history_dir) + except: + pass + history_scrdump_filename = os.path.join(history_dir, + "scrdump-step_%s-%s.jpg" % (current_step_num, + time.strftime("%Y%m%d-%H%M%S"))) + kvm_subprocess.run_fg("convert -quality 30 %s %s" % + (scrdump_filename, history_scrdump_filename), + logging.debug, "(convert) ", timeout=30) + # Compare md5sum of barrier region with the expected md5sum calced_md5sum = ppm_utils.get_region_md5sum(w, h, data, x1, y1, dx, dy, cropped_scrdump_filename) if calced_md5sum == md5sum: + # Success -- remove screendump history unless requested not to + if keep_screendump_history and not keep_all_history: + kvm_subprocess.run_fg("rm -rvf %s" % history_dir, + logging.debug, "(rm) ", timeout=30) + # Report success return True - # Compute md5sum of whole image in order to compare it with - # previous ones - whole_image_md5sum = ppm_utils.image_md5sum(w, h, data) + # Insert image md5sum into queue of last seen images: # If md5sum is already in queue... if whole_image_md5sum in prev_whole_image_md5sums: # Remove md5sum from queue prev_whole_image_md5sums.remove(whole_image_md5sum) else: - # Extend 'stuck' timeout + # Otherwise extend 'stuck' timeout end_time_stuck = time.time() + fail_if_stuck_for # Insert md5sum at beginning of queue prev_whole_image_md5sums.insert(0, whole_image_md5sum) @@ -129,7 +155,7 @@ def barrier_2(vm, words, params, debug_dir, data_scrdump_filename, if data_scrdump_filename and os.path.exists(data_scrdump_filename): # Read expected screendump image (ew, eh, edata) = \ - ppm_utils.image_read_from_ppm_file(data_scrdump_filename) + ppm_utils.image_read_from_ppm_file(data_scrdump_filename) # Write it in debug_dir ppm_utils.image_write_to_ppm_file(expected_scrdump_filename, ew, eh, edata)
Add two new step file test parameters: - keep_screendump_history: if equals 'yes', screendump history is saved in test.debugdir/barrier_history in JPG format. Each screendump taken by the test is saved if it differs from the previous screendump. By default, when a barrier succeeds all history is removed, so eventually the remaining files are only those of the (last) failed barrier, if any. - keep_all_history: if equals 'yes', screendump history is not removed upon barrier success. The test leaves behind all the collected screendump history. Signed-off-by: Michael Goldish <mgoldish@redhat.com> --- client/tests/kvm/kvm_guest_wizard.py | 38 ++++++++++++++++++++++++++++----- 1 files changed, 32 insertions(+), 6 deletions(-)