1113822Sphk#!/bin/sh 2113822Sphk# $FreeBSD$ 3113822Sphk 4113822SphkTMP=/tmp/$$. 5113822Sphkset -e 6113822SphkMD=`mdconfig -a -t malloc -s 2m` 7113822Sphktrap "exec 7</dev/null; rm -f ${TMP}* ; mdconfig -d -u ${MD}" EXIT INT TERM 8113822Sphk 9113877Sphk./sunlabel -r -w $MD auto 10113822Sphk 11113822Sphkdd if=/dev/$MD of=${TMP}i0 count=16 > /dev/null 2>&1 12113822Sphk./sunlabel $MD > ${TMP}l0 13113822Sphk 14113822Sphksed ' 15113822Sphk/ c:/{ 16113822Sphkp 17113822Sphks/c:/a:/ 18113822Sphks/3969/1024/ 19113822Sphk} 20113822Sphk' ${TMP}l0 > ${TMP}l1 21113822Sphk 22113822Sphk./sunlabel -R $MD ${TMP}l1 23113877Sphkif [ -c /dev/${MD}a ] ; then 24113877Sphk echo "PASS: Created a: partition" 1>&2 25113877Sphkelse 26113877Sphk echo "FAIL: Did not create a: partition" 1>&2 27113877Sphk exit 2 28113877Sphkfi 29113877Sphk 30113877Sphk# Spoil and rediscover 31113877Sphk 32113877Sphktrue > /dev/${MD} 33113877Sphkif [ -c /dev/${MD}a ] ; then 34113877Sphk echo "PASS: Recreated a: partition after spoilage" 1>&2 35113877Sphkelse 36113877Sphk echo "FAIL: Did not recreate a: partition after spoilage" 1>&2 37113877Sphk exit 2 38113877Sphkfi 39113877Sphk 40113822Sphkdd if=/dev/$MD of=${TMP}i1 count=16 > /dev/null 2>&1 41113822Sphksed ' 42113822Sphk/ c:/{ 43113822Sphkp 44113822Sphks/c:/a:/ 45113822Sphks/3969/2048/ 46113822Sphk} 47113822Sphk' ${TMP}l0 > ${TMP}l2 48113822Sphk 49113822Sphk./sunlabel -R $MD ${TMP}l2 50113822Sphkdd if=/dev/$MD of=${TMP}i2 count=16 > /dev/null 2>&1 51113822Sphk 52113822Sphkexec 7< /dev/${MD}a 53113822Sphk 54113822Sphkfor t in a c 55113822Sphkdo 56113822Sphk if dd if=${TMP}i2 of=/dev/${MD}$t 2>/dev/null ; then 57113822Sphk echo "PASS: Could rewrite same label to ...$t while ...a open" 1>&2 58113822Sphk else 59113822Sphk echo "FAIL: Could not rewrite same label to ...$t while ...a open" 1>&2 60113822Sphk exit 2 61113822Sphk fi 62113822Sphk 63113822Sphk if dd if=${TMP}i1 of=/dev/${MD}$t 2>/dev/null ; then 64113822Sphk echo "FAIL: Could label with smaller ...a to ...$t while ...a open" 1>&2 65113822Sphk exit 2 66113822Sphk else 67113822Sphk echo "PASS: Could not label with smaller ...a to ...$t while ...a open" 1>&2 68113822Sphk fi 69113822Sphk 70113822Sphk if dd if=${TMP}i0 of=/dev/${MD}$t 2>/dev/null ; then 71113822Sphk echo "FAIL: Could write label missing ...a to ...$t while ...a open" 1>&2 72113822Sphk exit 2 73113822Sphk else 74113822Sphk echo "PASS: Could not write label missing ...a to ...$t while ...a open" 1>&2 75113822Sphk fi 76113822Sphkdone 77113822Sphk 78113822Sphkexec 7< /dev/null 79113822Sphk 80113822Sphkif dd if=${TMP}i0 of=/dev/${MD}c 2>/dev/null ; then 81113822Sphk echo "PASS: Could write missing ...a label to ...c" 1>&2 82113822Sphkelse 83113822Sphk echo "FAIL: Could not write missing ...a label to ...c" 1>&2 84113822Sphk exit 2 85113822Sphkfi 86113822Sphk 87113822Sphkif dd if=${TMP}i2 of=/dev/${MD}c 2>/dev/null ; then 88113822Sphk echo "PASS: Could write large ...a label to ...c" 1>&2 89113822Sphkelse 90113822Sphk echo "FAIL: Could not write large ...a label to ...c" 1>&2 91113822Sphk exit 2 92113822Sphkfi 93113822Sphk 94113822Sphkif dd if=${TMP}i1 of=/dev/${MD}c 2>/dev/null ; then 95113822Sphk echo "PASS: Could write small ...a label to ...c" 1>&2 96113822Sphkelse 97113822Sphk echo "FAIL: Could not write small ...a label to ...c" 1>&2 98113822Sphk exit 2 99113822Sphkfi 100113822Sphk 101113822Sphkif dd if=${TMP}i2 of=/dev/${MD}a 2>/dev/null ; then 102113822Sphk echo "PASS: Could increase size of ...a by writing to ...a" 1>&2 103113822Sphkelse 104113822Sphk echo "FAIL: Could not increase size of ...a by writing to ...a" 1>&2 105113822Sphk exit 2 106113822Sphkfi 107113822Sphk 108113822Sphkif dd if=${TMP}i1 of=/dev/${MD}a 2>/dev/null ; then 109113822Sphk echo "FAIL: Could decrease size of ...a by writing to ...a" 1>&2 110113822Sphk exit 2 111113822Sphkelse 112113822Sphk echo "PASS: Could not decrease size of ...a by writing to ...a" 1>&2 113113822Sphkfi 114113822Sphk 115113822Sphkif dd if=${TMP}i0 of=/dev/${MD}a 2>/dev/null ; then 116113822Sphk echo "FAIL: Could delete ...a by writing to ...a" 1>&2 117113822Sphk exit 2 118113822Sphkelse 119113822Sphk echo "PASS: Could not delete ...a by writing to ...a" 1>&2 120113822Sphkfi 121113822Sphk 122113897Sphkif ./sunlabel -B -b ${TMP}i0 ${MD} ; then 123113897Sphk if [ ! -c /dev/${MD}a ] ; then 124113897Sphk echo "FAILED: Writing bootcode killed ...a" 1>&2 125113897Sphk exit 2 126113897Sphk else 127113897Sphk echo "PASS: Could write bootcode while closed" 1>&2 128113897Sphk fi 129113897Sphkelse 130113897Sphk echo "FAILED: Could not write bootcode while closed" 1>&2 131113897Sphk exit 2 132113897Sphkfi 133113897Sphk 134113897Sphkexec 7> /dev/${MD}c 135113897Sphkif ktrace ./sunlabel -B -b ${TMP}i0 ${MD} ; then 136113897Sphk if [ ! -c /dev/${MD}a ] ; then 137113897Sphk echo "FAILED: Writing bootcode killed ...a" 1>&2 138113897Sphk exit 2 139113897Sphk else 140113897Sphk echo "PASS: Could write bootcode while open" 1>&2 141113897Sphk fi 142113897Sphkelse 143113897Sphk echo "FAILED: Could not write bootcode while open" 1>&2 144113897Sphk exit 2 145113897Sphkfi 146113897Sphkexec 7> /dev/null 147113897Sphk 148113822Sphkif dd if=${TMP}i0 of=/dev/${MD}c 2>/dev/null ; then 149113822Sphk echo "PASS: Could delete ...a by writing to ...c" 1>&2 150113822Sphkelse 151113822Sphk echo "FAIL: Could not delete ...a by writing to ...c" 1>&2 152113822Sphk exit 2 153113822Sphkfi 154113822Sphk 155113822Sphk# XXX: need to add a 'b' partition and check for overlaps. 156113822Sphk 157113822Sphkexit 0 158