From mboxrd@z Thu Jan 1 00:00:00 1970 From: Lucas Meneghel Rodrigues Subject: Re: [Autotest] [KVM-AUTOTEST PATCH 3/4] kvm_guest_wizard: allow keeping screendump history for debugging purposes Date: Thu, 18 Jun 2009 11:30:34 -0300 Message-ID: <1245335434.16589.8.camel@freedom> References: <1245095119-29942-1-git-send-email-mgoldish@redhat.com> <68e819f64657acbf6126dee50c5a241f9228acc1.1245094830.git.mgoldish@redhat.com> <450b0ac3f003f5e9d56267d3dabee881ee35fe78.1245094830.git.mgoldish@redhat.com> Mime-Version: 1.0 Content-Type: text/plain Content-Transfer-Encoding: 7bit Cc: autotest@test.kernel.org, kvm@vger.kernel.org To: Michael Goldish Return-path: Received: from mx2.redhat.com ([66.187.237.31]:46216 "EHLO mx2.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755735AbZFROag (ORCPT ); Thu, 18 Jun 2009 10:30:36 -0400 In-Reply-To: <450b0ac3f003f5e9d56267d3dabee881ee35fe78.1245094830.git.mgoldish@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: On Mon, 2009-06-15 at 22:45 +0300, Michael Goldish 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. > > Signed-off-by: Michael Goldish > --- > 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 I see, it depends on kvm subprocess, so I will apply this patch after the kvm subprocess patch is applied. > """ > 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") > + Here I also think that we should check for the presence of ImageMagick to avoid failing the test out of necessity. > 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) -- Lucas Meneghel Rodrigues Software Engineer (QE) Red Hat - Emerging Technologies