1292915Sdim#!/bin/sh 2292915Sdim# $FreeBSD$ 3292915Sdim 4292915SdimTMP=/tmp/$$. 5292915Sdimset -e 6292915SdimMD=`mdconfig -a -t malloc -s 2m` 7292915Sdimtrap "exec 7</dev/null; rm -f ${TMP}* ; mdconfig -d -u ${MD}" EXIT INT TERM 8292915Sdim 9292915Sdim./sunlabel -r -w $MD auto 10292915Sdim 11292915Sdimdd if=/dev/$MD of=${TMP}i0 count=16 > /dev/null 2>&1 12292915Sdim./sunlabel $MD > ${TMP}l0 13292915Sdim 14292915Sdimsed ' 15292915Sdim/ c:/{ 16292915Sdimp 17292915Sdims/c:/a:/ 18292915Sdims/3969/1024/ 19309124Sdim} 20309124Sdim' ${TMP}l0 > ${TMP}l1 21309124Sdim 22309124Sdim./sunlabel -R $MD ${TMP}l1 23292915Sdimif [ -c /dev/${MD}a ] ; then 24292915Sdim echo "PASS: Created a: partition" 1>&2 25292915Sdimelse 26292915Sdim echo "FAIL: Did not create a: partition" 1>&2 27292915Sdim exit 2 28292915Sdimfi 29292915Sdim 30292915Sdim# Spoil and rediscover 31292915Sdim 32292915Sdimtrue > /dev/${MD} 33292915Sdimif [ -c /dev/${MD}a ] ; then 34292915Sdim echo "PASS: Recreated a: partition after spoilage" 1>&2 35292915Sdimelse 36292915Sdim echo "FAIL: Did not recreate a: partition after spoilage" 1>&2 37292915Sdim exit 2 38292915Sdimfi 39292915Sdim 40292915Sdimdd if=/dev/$MD of=${TMP}i1 count=16 > /dev/null 2>&1 41292915Sdimsed ' 42292915Sdim/ c:/{ 43292915Sdimp 44292915Sdims/c:/a:/ 45292915Sdims/3969/2048/ 46292915Sdim} 47292915Sdim' ${TMP}l0 > ${TMP}l2 48292915Sdim 49292915Sdim./sunlabel -R $MD ${TMP}l2 50292915Sdimdd if=/dev/$MD of=${TMP}i2 count=16 > /dev/null 2>&1 51292915Sdim 52292915Sdimexec 7< /dev/${MD}a 53292915Sdim 54292915Sdimfor t in a c 55292915Sdimdo 56292915Sdim if dd if=${TMP}i2 of=/dev/${MD}$t 2>/dev/null ; then 57292915Sdim echo "PASS: Could rewrite same label to ...$t while ...a open" 1>&2 58292915Sdim else 59292915Sdim echo "FAIL: Could not rewrite same label to ...$t while ...a open" 1>&2 60292915Sdim exit 2 61292915Sdim fi 62292915Sdim 63292915Sdim if dd if=${TMP}i1 of=/dev/${MD}$t 2>/dev/null ; then 64292915Sdim echo "FAIL: Could label with smaller ...a to ...$t while ...a open" 1>&2 65292915Sdim exit 2 66292915Sdim else 67292915Sdim echo "PASS: Could not label with smaller ...a to ...$t while ...a open" 1>&2 68292915Sdim fi 69292915Sdim 70292915Sdim if dd if=${TMP}i0 of=/dev/${MD}$t 2>/dev/null ; then 71292915Sdim echo "FAIL: Could write label missing ...a to ...$t while ...a open" 1>&2 72292915Sdim exit 2 73292915Sdim else 74292915Sdim echo "PASS: Could not write label missing ...a to ...$t while ...a open" 1>&2 75292915Sdim fi 76292915Sdimdone 77292915Sdim 78292915Sdimexec 7< /dev/null 79292915Sdim 80292915Sdimif dd if=${TMP}i0 of=/dev/${MD}c 2>/dev/null ; then 81292915Sdim echo "PASS: Could write missing ...a label to ...c" 1>&2 82292915Sdimelse 83292915Sdim echo "FAIL: Could not write missing ...a label to ...c" 1>&2 84292915Sdim exit 2 85292915Sdimfi 86292915Sdim 87292915Sdimif dd if=${TMP}i2 of=/dev/${MD}c 2>/dev/null ; then 88353358Sdim echo "PASS: Could write large ...a label to ...c" 1>&2 89353358Sdimelse 90353358Sdim echo "FAIL: Could not write large ...a label to ...c" 1>&2 91292915Sdim exit 2 92292915Sdimfi 93292915Sdim 94292915Sdimif dd if=${TMP}i1 of=/dev/${MD}c 2>/dev/null ; then 95292915Sdim echo "PASS: Could write small ...a label to ...c" 1>&2 96292915Sdimelse 97292915Sdim echo "FAIL: Could not write small ...a label to ...c" 1>&2 98292915Sdim exit 2 99292915Sdimfi 100292915Sdim 101292915Sdimif dd if=${TMP}i2 of=/dev/${MD}a 2>/dev/null ; then 102292915Sdim echo "PASS: Could increase size of ...a by writing to ...a" 1>&2 103292915Sdimelse 104292915Sdim echo "FAIL: Could not increase size of ...a by writing to ...a" 1>&2 105292915Sdim exit 2 106292915Sdimfi 107292915Sdim 108292915Sdimif dd if=${TMP}i1 of=/dev/${MD}a 2>/dev/null ; then 109292915Sdim echo "FAIL: Could decrease size of ...a by writing to ...a" 1>&2 110292915Sdim exit 2 111292915Sdimelse 112353358Sdim echo "PASS: Could not decrease size of ...a by writing to ...a" 1>&2 113353358Sdimfi 114353358Sdim 115341825Sdimif dd if=${TMP}i0 of=/dev/${MD}a 2>/dev/null ; then 116341825Sdim echo "FAIL: Could delete ...a by writing to ...a" 1>&2 117341825Sdim exit 2 118292915Sdimelse 119292915Sdim echo "PASS: Could not delete ...a by writing to ...a" 1>&2 120292915Sdimfi 121341825Sdim 122341825Sdimif ./sunlabel -B -b ${TMP}i0 ${MD} ; then 123341825Sdim if [ ! -c /dev/${MD}a ] ; then 124292915Sdim echo "FAILED: Writing bootcode killed ...a" 1>&2 125292915Sdim exit 2 126292915Sdim else 127292915Sdim echo "PASS: Could write bootcode while closed" 1>&2 128292915Sdim fi 129292915Sdimelse 130292915Sdim echo "FAILED: Could not write bootcode while closed" 1>&2 131292915Sdim exit 2 132292915Sdimfi 133292915Sdim 134292915Sdimexec 7> /dev/${MD}c 135292915Sdimif ktrace ./sunlabel -B -b ${TMP}i0 ${MD} ; then 136292915Sdim if [ ! -c /dev/${MD}a ] ; then 137292915Sdim echo "FAILED: Writing bootcode killed ...a" 1>&2 138292915Sdim exit 2 139353358Sdim else 140353358Sdim echo "PASS: Could write bootcode while open" 1>&2 141353358Sdim fi 142292915Sdimelse 143292915Sdim echo "FAILED: Could not write bootcode while open" 1>&2 144292915Sdim exit 2 145292915Sdimfi 146292915Sdimexec 7> /dev/null 147292915Sdim 148341825Sdimif dd if=${TMP}i0 of=/dev/${MD}c 2>/dev/null ; then 149341825Sdim echo "PASS: Could delete ...a by writing to ...c" 1>&2 150341825Sdimelse 151292915Sdim echo "FAIL: Could not delete ...a by writing to ...c" 1>&2 152292915Sdim exit 2 153292915Sdimfi 154292915Sdim 155292915Sdim# XXX: need to add a 'b' partition and check for overlaps. 156292915Sdim 157292915Sdimexit 0 158321369Sdim