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