xref: /aosp_15_r20/external/ublksrv/tests/run_test.sh (revision 94c4a1e103eb1715230460aab379dff275992c20)
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