Blame test/regression.sh

Packit Service 646995
#!/bin/bash
Packit Service 646995
#
Packit Service 646995
# Open-iSCSI Regression Test Utility
Packit Service 646995
# Copyright (C) 2004 Dmitry Yusupov
Packit Service 646995
# maintained by open-iscsi@googlegroups.com
Packit Service 646995
#
Packit Service 646995
# This program is free software; you can redistribute it and/or modify
Packit Service 646995
# it under the terms of the GNU General Public License as published
Packit Service 646995
# by the Free Software Foundation; either version 2 of the License, or
Packit Service 646995
# (at your option) any later version.
Packit Service 646995
#
Packit Service 646995
# This program is distributed in the hope that it will be useful, but
Packit Service 646995
# WITHOUT ANY WARRANTY; without even the implied warranty of
Packit Service 646995
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Packit Service 646995
# General Public License for more details.
Packit Service 646995
#
Packit Service 646995
# See the file COPYING included with this distribution for more details.
Packit Service 646995
#
Packit Service 646995
Packit Service 646995
PATH=".:${PATH}"
Packit Service 646995
FSTYPE="${FSTYPE:-ext3}"
Packit Service 646995
DEFAULTMOUNTOPTS='-o _netdev'
Packit Service 646995
[ -z "${MOUNTOPTS}" ] && MOUNTOPTS="${DEFAULTMOUNTOPTS}"
Packit Service 646995
# to avoid mount looking for fstype
Packit Service 646995
MOUNTOPTIONS="${MOUNTOPTIONS} -t ${FSTYPE}"
Packit Service 646995
MKFSCMD="${MKFSCMD:-mkfs.${FSTYPE}} ${MKFSOPTS}"
Packit Service 646995
PARTITIONSUFFIX="1"
Packit Service 646995
BONNIEPARAMS="${BONNIEPARAMS:--r0 -n10:0:0 -s16 -uroot -f -q}"
Packit Service 646995
Packit Service 646995
trap regress_signal INT QUIT TERM
Packit Service 646995
regress_signal() {
Packit Service 646995
    printf "\nterminating, restore defaults: "
Packit Service 646995
	# use the other function to clean up
Packit Service 646995
	imm_data_en="Yes"
Packit Service 646995
	initial_r2t_en="No"
Packit Service 646995
	hdrdgst_en="None,CRC32C"
Packit Service 646995
	datdgst_en="None,CRC32C"
Packit Service 646995
	c="${iscsiadm} -m node -T $target -p $ipnr -o update"
Packit Service 646995
	first_burst="$((256*1024))"
Packit Service 646995
	max_burst="$((16*1024*1024-1024))"
Packit Service 646995
	max_recv_dlength="$((128*1024))"
Packit Service 646995
	max_r2t="1"
Packit Service 646995
	update_cfg
Packit Service 646995
	${iscsiadm} -m node -T $target -p $ipnr --logout 2>/dev/null >/dev/null
Packit Service 646995
    printf "done\n"
Packit Service 646995
    exit 0
Packit Service 646995
}
Packit Service 646995
Packit Service 646995
function update_cfg() {
Packit Service 646995
	c="${iscsiadm} -m node -T $target -p $ipnr -o update"
Packit Service 646995
	$c -n node.session.iscsi.ImmediateData -v $imm_data_en
Packit Service 646995
	$c -n node.session.iscsi.InitialR2T -v $initial_r2t_en
Packit Service 646995
	$c -n node.conn[0].iscsi.HeaderDigest -v $hdrdgst_en
Packit Service 646995
	$c -n node.conn[0].iscsi.DataDigest -v $datdgst_en
Packit Service 646995
	$c -n node.session.iscsi.FirstBurstLength -v $first_burst
Packit Service 646995
	$c -n node.session.iscsi.MaxBurstLength -v $max_burst
Packit Service 646995
	$c -n node.conn[0].iscsi.MaxRecvDataSegmentLength -v $max_recv_dlength
Packit Service 646995
	$c -n node.session.iscsi.MaxOutstandingR2T -v $max_r2t
Packit Service 646995
}
Packit Service 646995
Packit Service 646995
function disktest_run() {
Packit Service 646995
	bsizes="512 1024 2048 4096 8192 16384 32768 65536 131072 1000000"
Packit Service 646995
	test "x$bsize" != x && bsizes=$bsize
Packit Service 646995
	test "x$bsize" = xbonnie && return 0;
Packit Service 646995
	for bs in $bsizes; do
Packit Service 646995
		echo -n "disktest -T2 -K8 -B$bs -r -ID $device: "
Packit Service 646995
		#if ! ${disktest} -T2 -K8 -B$bs -r -ID $device >/dev/null; then
Packit Service 646995
		if ! ${disktest} -T2 -K8 -B$bs -r -ID $device; then
Packit Service 646995
			echo "FAILED"
Packit Service 646995
			return 1;
Packit Service 646995
		fi
Packit Service 646995
		echo "PASSED"
Packit Service 646995
		#echo -n "disktest -T2 -K8 -B$bs -E16 -w -ID $device: "
Packit Service 646995
		#if ! ${disktest} -T2 -K8 -B$bs -E16 -w -ID $device >/dev/null;then
Packit Service 646995
		echo -n "disktest -T2 -K8 -B$bs -E16 -ID $device: "
Packit Service 646995
		if ! ${disktest} -T2 -K8 -B$bs -E16 -ID $device; then
Packit Service 646995
			echo "FAILED"
Packit Service 646995
			return 1;
Packit Service 646995
		fi
Packit Service 646995
		echo "PASSED"
Packit Service 646995
	done
Packit Service 646995
	return 0;
Packit Service 646995
}
Packit Service 646995
Packit Service 646995
function fdisk_run() {
Packit Service 646995
	echo -n "sfdisk -qf $device: "
Packit Service 646995
	#sfdisk -Lqf $device >/dev/null 2>/dev/null <<-EOF
Packit Service 646995
	sfdisk -Lqf $device <<-EOF
Packit Service 646995
	,
Packit Service 646995
	quit
Packit Service 646995
	EOF
Packit Service 646995
	rc=$?
Packit Service 646995
	if [ $rc -ne 0 ]; then
Packit Service 646995
		echo "FAILED"
Packit Service 646995
		return 1;
Packit Service 646995
	fi
Packit Service 646995
	echo "PASSED"
Packit Service 646995
	return 0;
Packit Service 646995
}
Packit Service 646995
Packit Service 646995
function mkfs_run() {
Packit Service 646995
	echo -n "${MKFSCMD} $device_partition: "
Packit Service 646995
	#if ! ${MKFSCMD} $device_partition 2>/dev/null >/dev/null; then
Packit Service 646995
	if ! ${MKFSCMD} $device_partition ; then
Packit Service 646995
		echo "FAILED"
Packit Service 646995
		return 1;
Packit Service 646995
	fi
Packit Service 646995
	echo "PASSED"
Packit Service 646995
	return 0;
Packit Service 646995
}
Packit Service 646995
Packit Service 646995
function bonnie_run() {
Packit Service 646995
	dir="/tmp/iscsi.bonnie.regression.$record.$RANDOM"
Packit Service 646995
	umount $dir 2>/dev/null >/dev/null
Packit Service 646995
	rm -rf $dir; mkdir $dir
Packit Service 646995
	echo -n "mount $dir: "
Packit Service 646995
	if ! mount ${MOUNTOPTIONS} $device_partition $dir; then
Packit Service 646995
		echo "FAILED"
Packit Service 646995
		return 1;
Packit Service 646995
	fi
Packit Service 646995
	echo "PASSED"
Packit Service 646995
	echo -n "bonnie++ ${BONNIEPARAMS}: "
Packit Service 646995
	pushd $dir >/dev/null
Packit Service 646995
	${bonnie} ${BONNIEPARAMS} 2>/dev/null >/dev/null
Packit Service 646995
	rc=$?
Packit Service 646995
	popd >/dev/null
Packit Service 646995
	umount $dir 2>/dev/null >/dev/null
Packit Service 646995
	rmdir ${dir}
Packit Service 646995
	if [ $rc -ne 0 ]; then
Packit Service 646995
		echo "FAILED"
Packit Service 646995
		return 1;
Packit Service 646995
	fi
Packit Service 646995
	echo "PASSED"
Packit Service 646995
	return 0;
Packit Service 646995
}
Packit Service 646995
Packit Service 646995
function fatal() {
Packit Service 646995
	echo "regression.sh: $1"
Packit Service 646995
	echo "Usage: regression.sh [-f | <targetname> <ipnumber#> ] <device> [test#[:#]] [bsize]"
Packit Service 646995
	exit 1
Packit Service 646995
}
Packit Service 646995
Packit Service 646995
############################ main ###################################
Packit Service 646995
Packit Service 646995
disktest=`which disktest`
Packit Service 646995
iscsiadm=`which iscsiadm`
Packit Service 646995
bonnie=`which bonnie++`
Packit Service 646995
datfile=`dirname $0`"/regression.dat"
Packit Service 646995
test ! -e ${datfile} && fatal "can not find regression.dat"
Packit Service 646995
test ! -e ${disktest} && fatal "can not find disktest"
Packit Service 646995
test ! -e ${iscsiadm} && fatal "can not find iscsiadm"
Packit Service 646995
test ! -e ${bonnie} && fatal "can not find bonnie++"
Packit Service 646995
Packit Service 646995
if test x$1 = "x-f" -o x$1 = "x--format"; then
Packit Service 646995
	test x$2 = x && fatal "SCSI device parameter error"
Packit Service 646995
	device=$2
Packit Service 646995
else
Packit Service 646995
	test x$1 = x && fatal "target name parameter error"
Packit Service 646995
	test x$2 = x && fatal "ipnumber parameter error"
Packit Service 646995
	test x$3 = x && fatal "SCSI device parameter error"
Packit Service 646995
Packit Service 646995
	target="$1"
Packit Service 646995
	ipnr="$2"
Packit Service 646995
	device=$3
Packit Service 646995
fi
Packit Service 646995
Packit Service 646995
device_dir="$(dirname ${device})"
Packit Service 646995
device_partition=''
Packit Service 646995
case "${device_dir}" in
Packit Service 646995
	# /dev/sdaX
Packit Service 646995
	/dev) device_partition="${device}1" ;;
Packit Service 646995
	# /dev/disk/by-id/scsi-${ID_SERIAL}-part1
Packit Service 646995
	# where ID_SERIAL is SCSI disk SERIAL from scsi_id
Packit Service 646995
	/dev/disk/by-id|/dev/disk/by-path) device_partition="${device}-part1" ;;
Packit Service 646995
	# upcoming stuff
Packit Service 646995
	/dev/iscsi/*) device_partition="${device}-part1" ;;
Packit Service 646995
esac
Packit Service 646995
Packit Service 646995
if test x$1 = "x-f" -o x$1 = "x--format"; then
Packit Service 646995
	mkfs_run
Packit Service 646995
	exit
Packit Service 646995
fi
Packit Service 646995
Packit Service 646995
if [ -z "${device_partition}" ]; then
Packit Service 646995
	echo 'Unable to find device name for first partition.' >&2
Packit Service 646995
	exit 1
Packit Service 646995
fi
Packit Service 646995
Packit Service 646995
test "x$4" != x && begin="$4"
Packit Service 646995
test "x$5" != x && bsize="$5"
Packit Service 646995
Packit Service 646995
if test "x$begin" != "x"; then
Packit Service 646995
	end="${begin/*:}"
Packit Service 646995
	begin="${begin/:*}"
Packit Service 646995
fi
Packit Service 646995
Packit Service 646995
# don't say we didn't warn you
Packit Service 646995
if [ -z "${SKIP_WARNING}" ]; then
Packit Service 646995
	cat <<-EOF
Packit Service 646995
	BIG FAT WARNING!
Packit Service 646995
	
Packit Service 646995
	Open-iSCSI Regression Test Suite is about to start. It is going
Packit Service 646995
	to use "$device" for its testing. iSCSI session could be re-opened
Packit Service 646995
	during the tests several times and as the result device name could
Packit Service 646995
	not match provided device name if some other SCSI activity happened
Packit Service 646995
	during the test.
Packit Service 646995
	
Packit Service 646995
	Are you sure you want to continue? [y/n]:
Packit Service 646995
	EOF
Packit Service 646995
	read line
Packit Service 646995
	if test x$line = xn -o x$line = xN -o x$line = xno -o x$line = xNO; then
Packit Service 646995
		echo "aborting..."
Packit Service 646995
		exit
Packit Service 646995
	fi
Packit Service 646995
fi
Packit Service 646995
Packit Service 646995
i=0
Packit Service 646995
cat ${datfile} | while read line; do
Packit Service 646995
	if echo $line | grep "^#" >/dev/null; then continue; fi
Packit Service 646995
	if echo $line | grep "^$" >/dev/null; then continue; fi
Packit Service 646995
	if test x$begin != x; then
Packit Service 646995
		if test x$begin != x$i -a x$end = x; then
Packit Service 646995
			let i=i+1
Packit Service 646995
			continue
Packit Service 646995
		elif test x$begin != x -a x$end != x; then
Packit Service 646995
			if test $i -lt $begin -o $i -gt $end; then
Packit Service 646995
				let i=i+1
Packit Service 646995
				continue
Packit Service 646995
			fi
Packit Service 646995
		fi
Packit Service 646995
	fi
Packit Service 646995
	imm_data_en=`echo $line | awk '/^[YesNo]+/ {print $1}'`
Packit Service 646995
	if test x$imm_data_en = x; then continue; fi
Packit Service 646995
	initial_r2t_en=`echo $line | awk '{print $2}'`
Packit Service 646995
	hdrdgst_en=`echo $line | awk '{print $3}'`
Packit Service 646995
	datdgst_en=`echo $line | awk '{print $4}'`
Packit Service 646995
	first_burst=`echo $line | awk '{print $5}'`
Packit Service 646995
	max_burst=`echo $line | awk '{print $6}'`
Packit Service 646995
	max_recv_dlength=`echo $line | awk '{print $7}'`
Packit Service 646995
	max_r2t=`echo $line | awk '{print $8}'`
Packit Service 646995
	# ensure we are logged out
Packit Service 646995
	${iscsiadm} -m node -T $target -p $ipnr --logout 2>/dev/null >/dev/null
Packit Service 646995
	# set parameters for next run
Packit Service 646995
	update_cfg
Packit Service 646995
	echo "================== TEST #$i BEGIN ===================="
Packit Service 646995
	echo "ImmediateData = $imm_data_en"
Packit Service 646995
	echo "InitialR2T = $initial_r2t_en"
Packit Service 646995
	echo "HeaderDigest = $hdrdgst_en"
Packit Service 646995
	echo "DataDigest = $datdgst_en"
Packit Service 646995
	echo "FirstBurstLength = $first_burst"
Packit Service 646995
	echo "MaxBurstLength = $max_burst"
Packit Service 646995
	echo "MaxRecvDataSegmentLength = $max_recv_dlength"
Packit Service 646995
	echo "MaxOutstandingR2T = $max_r2t"
Packit Service 646995
	# login for new test
Packit Service 646995
	# catch errors on this
Packit Service 646995
	if ! ${iscsiadm} -m node -T $target -p $ipnr --login; then break; fi
Packit Service 646995
	while [ ! -e $device ] ; do sleep 1 ; done
Packit Service 646995
	if ! disktest_run; then break; fi
Packit Service 646995
	if ! fdisk_run; then break; fi
Packit Service 646995
	if ! mkfs_run; then break; fi
Packit Service 646995
	if ! bonnie_run; then break; fi
Packit Service 646995
	let i=i+1
Packit Service 646995
done
Packit Service 646995
regress_signal
Packit Service 646995
echo
Packit Service 646995
echo "===================== THE END ========================"