Merge branch 'alex'
[nbd.git] / simple_test
index 71226f2..1ccf84b 100755 (executable)
 #!/bin/sh
 # Yes, that's POSIX sh, not bash!
 
-tmpnam=`mktemp`
+tmpdir=`mktemp -d`
+conffile=${tmpdir}/nbd.conf
+pidfile=${tmpdir}/nbd.pid
+tmpnam=${tmpdir}/nbd.dd
+
+ulimit -c unlimited
 
 # Create a one-meg device
-dd if=/dev/zero of=$tmpnam bs=1024 count=1024
+dd if=/dev/zero of=$tmpnam bs=1024 count=4096 >/dev/null 2>&1
 
-./nbd-server -C /dev/null -p `pwd`/nbd-server.pid 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 localhost 11111
-retval=$?
-if [ -f nbd-server.pid ]
-then
-       kill `cat nbd-server.pid`
-else
-       kill $PID
-fi
-rm -f nbd-server.pid
-if [ $retval -ne 0 ]
-then
-       rm -f $tmpnam
-       exit $retval
-fi
-cat > nbd-server.conf <<EOF
+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 = 11111
+       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}`
+                       else
+                               kill $PID
+                       fi
+                       if [ -z "$2" ]
+                       then
+                               rm -rf $tmpdir
+                       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
-./nbd-server -C nbd-server.conf -p `pwd`/nbd-server.pid &
-PID=$!
-sleep 1
-./nbd-tester-client localhost 11111
-retval=$?
-if [ -f nbd-server.pid ]
+               # 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 -t $(dirname $1)/integrity-test.tr
+               retval=$?
+       ;;
+       *)
+               echo "E: unknown test $1"
+               exit 1
+       ;;
+esac
+if [ -f ${pidfile} ]
 then
-       kill `cat nbd-server.pid`
+       kill `cat ${pidfile}`
 else
        kill $PID
 fi
-rm -f nbd-server.pid
-rm -f nbd-server.conf
-rm -f $tmpnam
-exit $retval
+if [ -z "$2" ]
+then
+       rm -rf $tmpdir
+fi
+if [ $retval -ne 0 ]
+then
+       exit $retval
+fi