From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:46674) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YxoWQ-0007zb-Fx for qemu-devel@nongnu.org; Wed, 27 May 2015 23:30:20 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YxoWN-0005l9-9C for qemu-devel@nongnu.org; Wed, 27 May 2015 23:30:18 -0400 Received: from mx1.redhat.com ([209.132.183.28]:39956) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YxoWN-0005kz-26 for qemu-devel@nongnu.org; Wed, 27 May 2015 23:30:15 -0400 Received: from int-mx14.intmail.prod.int.phx2.redhat.com (int-mx14.intmail.prod.int.phx2.redhat.com [10.5.11.27]) by mx1.redhat.com (Postfix) with ESMTPS id 732DD19F200 for ; Thu, 28 May 2015 03:30:14 +0000 (UTC) Date: Thu, 28 May 2015 11:30:11 +0800 From: Fam Zheng Message-ID: <20150528033011.GB6975@dhcp-14-238.nay.redhat.com> References: <1432325832-12887-1-git-send-email-jsnow@redhat.com> <1432325832-12887-4-git-send-email-jsnow@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1432325832-12887-4-git-send-email-jsnow@redhat.com> Subject: Re: [Qemu-devel] [PATCH 3/4] iotests: add timestamp skip feature List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: John Snow Cc: kwolf@redhat.com, qemu-devel@nongnu.org On Fri, 05/22 16:17, John Snow wrote: > Like a makefile, try to skip tests if we know they have already been > executed using the current set of external dependencies. > > If a user passes the -ts option to ./check, if a test or its output > or its dependencies (qemu, qemu-nbd, qemu-io, qemu-img, > socket-scm-helper) have been modified, the test will be skipped. > > This is primarily to speed up running bisectability tests for larger > series where each interim patch may or may not change all of the > dependencies, so some tests can be skipped. > > Signed-off-by: John Snow Reviewed-by: Fam Zheng > --- > tests/qemu-iotests/check | 56 ++++++++++++++++++++++++++++++++++++++++++++++- > tests/qemu-iotests/common | 6 +++++ > 2 files changed, 61 insertions(+), 1 deletion(-) > > diff --git a/tests/qemu-iotests/check b/tests/qemu-iotests/check > index baeae80..0db40e2 100755 > --- a/tests/qemu-iotests/check > +++ b/tests/qemu-iotests/check > @@ -141,6 +141,51 @@ _timestamp() > echo -n " [$now]" > } > > +_okfile() > +{ > + echo "ts/${IMGPROTO}/${IMGFMT}/${1}.ok" > +} > + > +# _hasdep > +_hasdep() > +{ > + grep -q "^${1}.*${2}" "${source_iotests}/group" > +} > + > +# _skippable > +_skippable() > +{ > + tsfile=$(_okfile "${1}") > + deps=(${QEMU_IMG} \ > + ${QEMU_IO} \ > + "${source_iotests}/${1}" \ > + "${source_iotests}/${1}.out" \ > + "${source_iotests}/common" \ > + "${source_iotests}/common.rc" \ > + "${source_iotests}/common.env" \ > + "${source_iotests}/common.config") > + > + if _hasdep "${1}" "scm"; then > + deps+=("${SOCKET_SCM_HELPER}") > + fi > + > + if _hasdep "${1}" "nbd" || [ "$IMGPROTO" = "nbd" ]; then > + deps+=("${QEMU_NBD}") > + fi > + > + if _hasdep "${1}" "qemu"; then > + deps+=("${QEMU}") > + fi > + > + if [ ! -e "${tsfile}" ]; then return 1; fi > + for dep in "${deps[@]}"; do > + if [ "${tsfile}" -ot "${dep}" ]; then return 1; fi > + done > + > + # Looks skippable, .ok file is newer than all external dependencies. > + return 0 > +} > + > _wrapup() > { > # for hangcheck ... > @@ -268,6 +313,10 @@ do > echo " - expunged" > rm -f $seq.out.bad > echo "/^$seq\$/d" >>$tmp.expunged > + > + elif [ "${ts_skip}" == "true" ] && _skippable "${seq}"; then > + echo " [skip] (Results are recent)" > + > elif [ ! -f "$source_iotests/$seq" ] > then > echo " - no such test?" > @@ -275,7 +324,8 @@ do > else > # really going to try and run this one > # > - rm -f $seq.out.bad > + tsfile="$(_okfile ${seq})" > + rm -f $seq.out.bad "${tsfile}" > lasttime=`sed -n -e "/^$seq /s/.* //p" if [ "X$lasttime" != X ]; then > echo -n " ${lasttime}s ..." > @@ -340,6 +390,10 @@ do > then > : > else > + if [ ! -d "$(dirname ${tsfile})" ]; then > + mkdir -p "$(dirname ${tsfile})" > + fi > + touch "${tsfile}" > echo "$seq `expr $stop - $start`" >>$tmp.time > fi > else > diff --git a/tests/qemu-iotests/common b/tests/qemu-iotests/common > index c4d0742..b3d869e 100644 > --- a/tests/qemu-iotests/common > +++ b/tests/qemu-iotests/common > @@ -161,6 +161,8 @@ check options > -T output timestamps > -r randomize test order > -c mode cache mode > + -ts timestamp skip: skip tests when already ran and > + no dependencies have changed on disk. > > testlist options > -g group[,group...] include tests from these groups > @@ -319,6 +321,10 @@ testlist options > xpand=false > ;; > > + -ts) > + ts_skip=true > + xpand=false > + ;; > -v) > verbose=true > xpand=false > -- > 2.1.0 >