# Yes, that's POSIX sh, not bash!
tmpnam=`mktemp`
+conffile=${tmpnam}.conf
+pidfile=${tmpnam}.pid
+
+ulimit -c unlimited
# Create a one-meg device
-dd if=/dev/zero -C /dev/null of=$tmpnam bs=1024 count=1024
-
-./nbd-server -p ./nbd-server.pid 11111 $tmpnam &
-sleep 1
-./nbd-tester-client localhost 11111
-retval=$?
-kill `cat nbd-server.pid`
-rm -f nbd-server.pid
-exit $retval
+dd if=/dev/zero of=$tmpnam bs=1024 count=4096 >/dev/null 2>&1
+
+echo $1
+
+case $1 in
+ */cmd)
+ # Test with export specified on command line
+ ./nbd-server -C /dev/null -p ${pidfile} 11111 $tmpnam &
+ # -p only works if nbd-server wasn't compiled with -DNOFORK or
+ # -DNODAEMON, which I sometimes do for testing and debugging.
+ PID=$!
+ sleep 1
+ ./nbd-tester-client 127.0.0.1 11111
+ retval=$?
+ ;;
+ */cfgsize)
+ # Test oversized requests
+ ./nbd-server -C /dev/null -p ${pidfile} 11111 $tmpnam &
+ # -p only works if nbd-server wasn't compiled with -DNOFORK or
+ # -DNODAEMON, which I sometimes do for testing and debugging.
+ PID=$!
+ sleep 1
+ ./nbd-tester-client 127.0.0.1 11111 -o
+ retval=$?
+ ;;
+ */cfg1)
+ # Test with export specified in config file
+ cat > ${conffile} <<EOF
+[generic]
+ oldstyle = true
+[export]
+ exportname = $tmpnam
+ port = 11112
+EOF
+ ./nbd-server -C ${conffile} -p ${pidfile} &
+ PID=$!
+ sleep 1
+ ./nbd-tester-client 127.0.0.1 11112
+ retval=$?
+ ;;
+ */cfgmulti)
+ # Test with multiple exports specified in config file, and
+ # testing more options too
+ cat >${conffile} <<EOF
+[generic]
+ oldstyle = true
+[export1]
+ exportname = $tmpnam
+ port = 11113
+ copyonwrite = true
+ listenaddr = 127.0.0.1
+[export2]
+ exportname = $tmpnam
+ port = 11114
+ readonly = true
+ listenaddr = 127.0.0.1
+EOF
+ ./nbd-server -C ${conffile} -p ${pidfile} &
+ PID=$!
+ sleep 1
+ ./nbd-tester-client localhost 11113
+ retval=$?
+ if [ $retval -ne 0 ]
+ then
+ if [ -f ${pidfile} ]
+ then
+ kill `cat ${pidfile}`
+ rm -f ${pidfile}
+ else
+ kill $PID
+ fi
+ if [ -z "$2" ]
+ then
+ rm -f $tmpnam ${conffile}
+ fi
+ exit $retval
+ fi
+ ./nbd-tester-client localhost 11114
+ retval=$?
+ ;;
+ */cfgnew)
+ # Test new-style exports
+ cat >${conffile} <<EOF
+[generic]
+[export1]
+ exportname = $tmpnam
+EOF
+ ./nbd-server -C ${conffile} -p ${pidfile} &
+ PID=$!
+ sleep 1
+ ./nbd-tester-client localhost -N export1
+ retval=$?
+ ;;
+ */write)
+ # Test writing
+ cat >${conffile} <<EOF
+[generic]
+[export1]
+ exportname = $tmpnam
+EOF
+ ./nbd-server -C ${conffile} -p ${pidfile} &
+ PID=$!
+ sleep 1
+ ./nbd-tester-client localhost -N export1 -w
+ retval=$?
+ ;;
+ */flush)
+ # Test writes with flush
+ cat >${conffile} <<EOF
+[generic]
+[export1]
+ exportname = $tmpnam
+ flush = true
+ fua = true
+ rotational = true
+EOF
+ ./nbd-server -C ${conffile} -p ${pidfile} &
+ PID=$!
+ sleep 1
+ ./nbd-tester-client localhost -N export1 -w -f
+ retval=$?
+ ;;
+ */integrity)
+ # Integrity test
+ cat >${conffile} <<EOF
+[generic]
+[export1]
+ exportname = $tmpnam
+ flush = true
+ fua = true
+ rotational = true
+EOF
+ # we need a bigger disk
+ dd if=/dev/zero of=$tmpnam bs=1M count=50 >/dev/null 2>&1
+ ./nbd-server -C ${conffile} -p ${pidfile} &
+ PID=$!
+ sleep 1
+ ./nbd-tester-client localhost -N export1 -i
+ retval=$?
+ ;;
+ *)
+ echo "E: unknown test $1"
+ exit 1
+ ;;
+esac
+if [ -f ${pidfile} ]
+then
+ kill `cat ${pidfile}`
+ rm -f ${pidfile}
+else
+ kill $PID
+fi
+if [ -z "$2" ]
+then
+ rm -f $tmpnam ${conffile}
+fi
+if [ $retval -ne 0 ]
+then
+ exit $retval
+fi