1*94c4a1e1SFrank Piva#!/bin/bash 2*94c4a1e1SFrank Piva# SPDX-License-Identifier: MIT or GPL-2.0-only 3*94c4a1e1SFrank Piva 4*94c4a1e1SFrank PivaDIR=$(cd "$(dirname "$0")";pwd) 5*94c4a1e1SFrank Pivacd $DIR 6*94c4a1e1SFrank Piva 7*94c4a1e1SFrank Piva#. $DIR/common/fio_common 8*94c4a1e1SFrank Piva 9*94c4a1e1SFrank Piva: ${UBLK:=${DIR}/../ublk} 10*94c4a1e1SFrank Pivaif ! command -v "${UBLK}" &> /dev/null; then 11*94c4a1e1SFrank Piva echo "error: ublk command could not be found: ${UBLK}" 12*94c4a1e1SFrank Piva exit -1 13*94c4a1e1SFrank Pivafi 14*94c4a1e1SFrank Piva 15*94c4a1e1SFrank Pivaexport UBLK 16*94c4a1e1SFrank Pivaexport TEST_DIR=$DIR 17*94c4a1e1SFrank Pivaexport UBLK_TMP=`mktemp /tmp/ublk_tmp_XXXXX` 18*94c4a1e1SFrank Piva 19*94c4a1e1SFrank Piva[ ! -d ${UBLK_TMP_DIR} ] && mkdir ${UBLK_TMP_DIR} 20*94c4a1e1SFrank Piva 21*94c4a1e1SFrank Pivarun_test() { 22*94c4a1e1SFrank Piva TS=$1 23*94c4a1e1SFrank Piva 24*94c4a1e1SFrank Piva NAME=`basename $TS` 25*94c4a1e1SFrank Piva TMP=`dirname $TS` 26*94c4a1e1SFrank Piva GRP=`basename $TMP` 27*94c4a1e1SFrank Piva 28*94c4a1e1SFrank Piva echo "running $GRP/$NAME" | tee /dev/kmsg 29*94c4a1e1SFrank Piva sh -c $TS & 30*94c4a1e1SFrank Piva local TPID=$! 31*94c4a1e1SFrank Piva local timeout=600 32*94c4a1e1SFrank Piva local count=0 33*94c4a1e1SFrank Piva while [ $count -lt $timeout ]; do 34*94c4a1e1SFrank Piva sleep 1 35*94c4a1e1SFrank Piva kill -0 $TPID > /dev/null 2>&1 36*94c4a1e1SFrank Piva [ $? -ne 0 ] && break 37*94c4a1e1SFrank Piva let count++ 38*94c4a1e1SFrank Piva done 39*94c4a1e1SFrank Piva [ $count -ge $timeout ] && echo "test $GRP/$NAME timeout" 40*94c4a1e1SFrank Piva} 41*94c4a1e1SFrank Piva 42*94c4a1e1SFrank Pivarun_test_grp() { 43*94c4a1e1SFrank Piva local D=$1 44*94c4a1e1SFrank Piva for ITEM in `ls ${D} | grep "^[0-9]" | grep -v "~$"`; do 45*94c4a1e1SFrank Piva #echo $D/$ITEM 46*94c4a1e1SFrank Piva run_test $D/$ITEM 47*94c4a1e1SFrank Piva done 48*94c4a1e1SFrank Piva} 49*94c4a1e1SFrank Piva 50*94c4a1e1SFrank Pivarun_test_all() { 51*94c4a1e1SFrank Piva local D=$1 52*94c4a1e1SFrank Piva local GRPS="generic $ALL_TGTS" 53*94c4a1e1SFrank Piva for G in $GRPS; do 54*94c4a1e1SFrank Piva run_test_grp $D/$G 55*94c4a1e1SFrank Piva done 56*94c4a1e1SFrank Piva} 57*94c4a1e1SFrank Piva 58*94c4a1e1SFrank Pivadisplay_usage() { 59*94c4a1e1SFrank Piva echo 'usage:' 60*94c4a1e1SFrank Piva echo ' run_test.sh <test> <test_running_time> <temp_dir>' 61*94c4a1e1SFrank Piva} 62*94c4a1e1SFrank Piva 63*94c4a1e1SFrank PivaTEST=$1 64*94c4a1e1SFrank Pivaif [ -z "$TEST" ]; then 65*94c4a1e1SFrank Piva echo 'error: no test specified' 66*94c4a1e1SFrank Piva display_usage 67*94c4a1e1SFrank Piva exit -1 68*94c4a1e1SFrank Pivafi 69*94c4a1e1SFrank Piva 70*94c4a1e1SFrank Piva[ ! -c /dev/ublk-control ] && echo 'please run "modprobe ublk_drv" first' && exit -1 71*94c4a1e1SFrank Piva 72*94c4a1e1SFrank PivaTDIR=$3 73*94c4a1e1SFrank Pivaif [ -z "$TDIR" ]; then 74*94c4a1e1SFrank Piva echo 'error: no temp dir specified' 75*94c4a1e1SFrank Piva display_usage 76*94c4a1e1SFrank Piva exit -1 77*94c4a1e1SFrank Pivafi 78*94c4a1e1SFrank Piva 79*94c4a1e1SFrank Pivaif [ "${TDIR:0:1}" != "/" ]; then 80*94c4a1e1SFrank Piva TDIR=`dirname $PWD`/${TDIR} 81*94c4a1e1SFrank Pivafi 82*94c4a1e1SFrank Piva 83*94c4a1e1SFrank Pivaexport ALL_TGTS="null loop qcow2 nbd" 84*94c4a1e1SFrank Pivaexport TRUNTIME=$2 85*94c4a1e1SFrank Pivaexport UBLK_TMP_DIR=$TDIR 86*94c4a1e1SFrank Pivaexport T_TYPE_PARAMS="" 87*94c4a1e1SFrank Piva 88*94c4a1e1SFrank Piva[ ! -d ${UBLK_TMP_DIR} ] && mkdir -p ${UBLK_TMP_DIR} 89*94c4a1e1SFrank Piva 90*94c4a1e1SFrank Piva_ITEMS=($(echo ${TEST} | tr ':' '\n')) 91*94c4a1e1SFrank Pivafor _ITEM in "${_ITEMS[@]}"; do 92*94c4a1e1SFrank Piva if [ -d ${_ITEM} ]; then 93*94c4a1e1SFrank Piva run_test_grp ${_ITEM} 94*94c4a1e1SFrank Piva elif [ -f ${_ITEM} ]; then 95*94c4a1e1SFrank Piva run_test ${_ITEM} 96*94c4a1e1SFrank Piva elif [ `basename ${_ITEM}` = "all" ]; then 97*94c4a1e1SFrank Piva run_test_all `dirname ${_ITEM}` 98*94c4a1e1SFrank Piva else 99*94c4a1e1SFrank Piva echo "error: test suite not found: ${_ITEM}" 100*94c4a1e1SFrank Piva exit -1 101*94c4a1e1SFrank Piva fi 102*94c4a1e1SFrank Pivadone 103*94c4a1e1SFrank Piva 104*94c4a1e1SFrank Pivarm -f ${UBLK_TMP} 105