[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v3 3/4] iotests: add timestamp skip feature
From: |
John Snow |
Subject: |
[Qemu-devel] [PATCH v3 3/4] iotests: add timestamp skip feature |
Date: |
Tue, 2 Jun 2015 15:18:40 -0400 |
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.
Reviewed-by: Fam Zheng <address@hidden>
Signed-off-by: John Snow <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 1fa6319..800c7b0 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 ..."
@@ -346,6 +396,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 84b6f16..395c28c 100644
--- a/tests/qemu-iotests/common
+++ b/tests/qemu-iotests/common
@@ -163,6 +163,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
@@ -321,6 +323,10 @@ testlist options
xpand=false
;;
+ -ts)
+ ts_skip=true
+ xpand=false
+ ;;
-v)
verbose=true
xpand=false
--
2.1.0
- [Qemu-devel] [PATCH v3 0/4] iotests: skip tests with unchanged dependencies, John Snow, 2015/06/02
- [Qemu-devel] [PATCH v3 1/4] iotests: fix exclusion option, John Snow, 2015/06/02
- [Qemu-devel] [PATCH v3 2/4] iotests: Add dependency info to groups list, John Snow, 2015/06/02
- [Qemu-devel] [PATCH v3 3/4] iotests: add timestamp skip feature,
John Snow <=
- [Qemu-devel] [PATCH v3 4/4] iotests: clarify help text, John Snow, 2015/06/02
- Re: [Qemu-devel] [PATCH v3 0/4] iotests: skip tests with unchanged dependencies, John Snow, 2015/06/12
- Re: [Qemu-devel] [PATCH v3 0/4] iotests: skip tests with unchanged dependencies, John Snow, 2015/06/23