diff --git a/sbin/bsdlabel/runtest.sh b/sbin/bsdlabel/runtest.sh index 477886631e3b..373ae407eb22 100644 --- a/sbin/bsdlabel/runtest.sh +++ b/sbin/bsdlabel/runtest.sh @@ -3,108 +3,168 @@ TMP=/tmp/$$. set -e -MD=`mdconfig -a -t malloc -s 2m` -trap "exec 7 /dev/null 2>&1 -./bsdlabel $MD > ${TMP}l0 -sed ' -/ c:/{ -p -s/c:/a:/ -s/4096/1024/ -} -' ${TMP}l0 > ${TMP}l1 -./bsdlabel -R $MD ${TMP}l1 -dd if=/dev/$MD of=${TMP}i1 count=16 > /dev/null 2>&1 -sed ' -/ c:/{ -p -s/c:/a:/ -s/4096/2048/ -} -' ${TMP}l0 > ${TMP}l2 -./bsdlabel -R $MD ${TMP}l2 -dd if=/dev/$MD of=${TMP}i2 count=16 > /dev/null 2>&1 - -exec 7< /dev/${MD}a - -for t in a c +for ARCH in i386 alpha do - if dd if=${TMP}i2 of=/dev/${MD}$t 2>/dev/null ; then - echo "PASS: Could rewrite same label to ...$t while ...a open" 1>&2 + echo "ARCH $ARCH" + MD=`mdconfig -a -t malloc -s 2m` + trap "exec 7 /dev/null 2>&1 + if [ "$ARCH" = "alpha" ] ; then + dd if=${TMP}i0 of=${TMP}b0 iseek=1 count=15 > /dev/null 2>&1 else - echo "FAIL: Could not rewrite same label to ...$t while ...a open" 1>&2 + cp ${TMP}i0 ${TMP}b0 + fi + ./bsdlabel -m ${ARCH} $MD > ${TMP}l0 + + sed ' + / c:/{ + p + s/c:/a:/ + s/4096/1024/ + } + ' ${TMP}l0 > ${TMP}l1 + + ./bsdlabel -m ${ARCH} -R $MD ${TMP}l1 + if [ -c /dev/${MD}a ] ; then + echo "PASS: Created a: partition" 1>&2 + else + echo "FAIL: Did not create a: partition" 1>&2 exit 2 fi - if dd if=${TMP}i1 of=/dev/${MD}$t 2>/dev/null ; then - echo "FAIL: Could label with smaller ...a to ...$t while ...a open" 1>&2 - exit 2 + # Spoil and rediscover + + true > /dev/${MD} + if [ -c /dev/${MD}a ] ; then + echo "PASS: Recreated a: partition after spoilage" 1>&2 else - echo "PASS: Could not label with smaller ...a to ...$t while ...a open" 1>&2 + echo "FAIL: Did not recreate a: partition after spoilage" 1>&2 + exit 2 fi - if dd if=${TMP}i0 of=/dev/${MD}$t 2>/dev/null ; then - echo "FAIL: Could write label missing ...a to ...$t while ...a open" 1>&2 + dd if=/dev/$MD of=${TMP}i1 count=16 > /dev/null 2>&1 + sed ' + / c:/{ + p + s/c:/a:/ + s/4096/2048/ + } + ' ${TMP}l0 > ${TMP}l2 + + ./bsdlabel -m ${ARCH} -R $MD ${TMP}l2 + dd if=/dev/$MD of=${TMP}i2 count=16 > /dev/null 2>&1 + + exec 7< /dev/${MD}a + + for t in a c + do + if dd if=${TMP}i2 of=/dev/${MD}$t 2>/dev/null ; then + echo "PASS: Could rewrite same label to ...$t while ...a open" 1>&2 + else + echo "FAIL: Could not rewrite same label to ...$t while ...a open" 1>&2 + exit 2 + fi + + if dd if=${TMP}i1 of=/dev/${MD}$t 2>/dev/null ; then + echo "FAIL: Could label with smaller ...a to ...$t while ...a open" 1>&2 + exit 2 + else + echo "PASS: Could not label with smaller ...a to ...$t while ...a open" 1>&2 + fi + + if dd if=${TMP}i0 of=/dev/${MD}$t 2>/dev/null ; then + echo "FAIL: Could write label missing ...a to ...$t while ...a open" 1>&2 + exit 2 + else + echo "PASS: Could not write label missing ...a to ...$t while ...a open" 1>&2 + fi + done + + exec 7< /dev/null + + if dd if=${TMP}i0 of=/dev/${MD}c 2>/dev/null ; then + echo "PASS: Could write missing ...a label to ...c" 1>&2 + else + echo "FAIL: Could not write missing ...a label to ...c" 1>&2 + exit 2 + fi + + if dd if=${TMP}i2 of=/dev/${MD}c 2>/dev/null ; then + echo "PASS: Could write large ...a label to ...c" 1>&2 + else + echo "FAIL: Could not write large ...a label to ...c" 1>&2 + exit 2 + fi + + if dd if=${TMP}i1 of=/dev/${MD}c 2>/dev/null ; then + echo "PASS: Could write small ...a label to ...c" 1>&2 + else + echo "FAIL: Could not write small ...a label to ...c" 1>&2 + exit 2 + fi + + if dd if=${TMP}i2 of=/dev/${MD}a 2>/dev/null ; then + echo "PASS: Could increase size of ...a by writing to ...a" 1>&2 + else + echo "FAIL: Could not increase size of ...a by writing to ...a" 1>&2 + exit 2 + fi + + if dd if=${TMP}i1 of=/dev/${MD}a 2>/dev/null ; then + echo "FAIL: Could decrease size of ...a by writing to ...a" 1>&2 exit 2 else - echo "PASS: Could not write label missing ...a to ...$t while ...a open" 1>&2 + echo "PASS: Could not decrease size of ...a by writing to ...a" 1>&2 fi + + if dd if=${TMP}i0 of=/dev/${MD}a 2>/dev/null ; then + echo "FAIL: Could delete ...a by writing to ...a" 1>&2 + exit 2 + else + echo "PASS: Could not delete ...a by writing to ...a" 1>&2 + fi + + if ./bsdlabel -m ${ARCH} -B -b ${TMP}b0 ${MD} ; then + if [ ! -c /dev/${MD}a ] ; then + echo "FAILED: Writing bootcode killed ...a" 1>&2 + exit 2 + else + echo "PASS: Could write bootcode while closed" 1>&2 + fi + else + echo "FAILED: Could not write bootcode while closed" 1>&2 + exit 2 + fi + + exec 7> /dev/${MD}c + if ktrace ./bsdlabel -m ${ARCH} -B -b ${TMP}b0 ${MD} ; then + if [ ! -c /dev/${MD}a ] ; then + echo "FAILED: Writing bootcode killed ...a" 1>&2 + exit 2 + else + echo "PASS: Could write bootcode while open" 1>&2 + fi + else + echo "FAILED: Could not write bootcode while open" 1>&2 + exit 2 + fi + exec 7> /dev/null + + if dd if=${TMP}i0 of=/dev/${MD}c 2>/dev/null ; then + echo "PASS: Could delete ...a by writing to ...c" 1>&2 + else + echo "FAIL: Could not delete ...a by writing to ...c" 1>&2 + exit 2 + fi + + # XXX: need to add a 'b' partition and check for overlaps. + + rm -f ${TMP}* + mdconfig -d -u ${MD} + done - -exec 7< /dev/null - -if dd if=${TMP}i0 of=/dev/${MD}c 2>/dev/null ; then - echo "PASS: Could write missing ...a label to ...c" 1>&2 -else - echo "FAIL: Could not write missing ...a label to ...c" 1>&2 - exit 2 -fi - -if dd if=${TMP}i2 of=/dev/${MD}c 2>/dev/null ; then - echo "PASS: Could write large ...a label to ...c" 1>&2 -else - echo "FAIL: Could not write large ...a label to ...c" 1>&2 - exit 2 -fi - -if dd if=${TMP}i1 of=/dev/${MD}c 2>/dev/null ; then - echo "PASS: Could write small ...a label to ...c" 1>&2 -else - echo "FAIL: Could not write small ...a label to ...c" 1>&2 - exit 2 -fi - -if dd if=${TMP}i2 of=/dev/${MD}a 2>/dev/null ; then - echo "PASS: Could increase size of ...a by writing to ...a" 1>&2 -else - echo "FAIL: Could not increase size of ...a by writing to ...a" 1>&2 - exit 2 -fi - -if dd if=${TMP}i1 of=/dev/${MD}a 2>/dev/null ; then - echo "FAIL: Could decrease size of ...a by writing to ...a" 1>&2 - exit 2 -else - echo "PASS: Could not decrease size of ...a by writing to ...a" 1>&2 -fi - -if dd if=${TMP}i0 of=/dev/${MD}a 2>/dev/null ; then - echo "FAIL: Could delete ...a by writing to ...a" 1>&2 - exit 2 -else - echo "PASS: Could not delete ...a by writing to ...a" 1>&2 -fi - -if dd if=${TMP}i0 of=/dev/${MD}c 2>/dev/null ; then - echo "PASS: Could delete ...a by writing to ...c" 1>&2 -else - echo "FAIL: Could not delete ...a by writing to ...c" 1>&2 - exit 2 -fi - -# XXX: need to add a 'b' partition and check for overlaps. +trap "" EXIT INT TERM exit 0