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