[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 3/4] iotests: add timestamp skip feature
From: |
Fam Zheng |
Subject: |
Re: [Qemu-devel] [PATCH 3/4] iotests: add timestamp skip feature |
Date: |
Thu, 28 May 2015 11:30:11 +0800 |
User-agent: |
Mutt/1.5.23 (2014-03-12) |
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 <address@hidden>
Reviewed-by: Fam Zheng <address@hidden>
> ---
> 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 <seq> <dep>
> +_hasdep()
> +{
> + grep -q "^${1}.*${2}" "${source_iotests}/group"
> +}
> +
> +# _skippable <seq>
> +_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 "address@hidden"; 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" <check.time`
> 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
>