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 <js...@redhat.com>

Reviewed-by: Fam Zheng <f...@redhat.com>

> ---
>  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 "${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" <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
> 

Reply via email to