xref: /freebsd/contrib/netbsd-tests/dev/raidframe/t_raid.sh (revision 9268022b74279434ed6300244e3f977e56a8ceb5)
1*57718be8SEnji Cooper#! /usr/bin/atf-sh
2*57718be8SEnji Cooper#	$NetBSD: t_raid.sh,v 1.12 2013/02/19 21:08:24 joerg Exp $
3*57718be8SEnji Cooper#
4*57718be8SEnji Cooper# Copyright (c) 2010 The NetBSD Foundation, Inc.
5*57718be8SEnji Cooper# All rights reserved.
6*57718be8SEnji Cooper#
7*57718be8SEnji Cooper# Redistribution and use in source and binary forms, with or without
8*57718be8SEnji Cooper# modification, are permitted provided that the following conditions
9*57718be8SEnji Cooper# are met:
10*57718be8SEnji Cooper# 1. Redistributions of source code must retain the above copyright
11*57718be8SEnji Cooper#    notice, this list of conditions and the following disclaimer.
12*57718be8SEnji Cooper# 2. Redistributions in binary form must reproduce the above copyright
13*57718be8SEnji Cooper#    notice, this list of conditions and the following disclaimer in the
14*57718be8SEnji Cooper#    documentation and/or other materials provided with the distribution.
15*57718be8SEnji Cooper#
16*57718be8SEnji Cooper# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
17*57718be8SEnji Cooper# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
18*57718be8SEnji Cooper# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19*57718be8SEnji Cooper# PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
20*57718be8SEnji Cooper# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21*57718be8SEnji Cooper# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22*57718be8SEnji Cooper# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23*57718be8SEnji Cooper# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24*57718be8SEnji Cooper# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25*57718be8SEnji Cooper# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26*57718be8SEnji Cooper# POSSIBILITY OF SUCH DAMAGE.
27*57718be8SEnji Cooper#
28*57718be8SEnji Cooper
29*57718be8SEnji Cooperrawpart=`sysctl -n kern.rawpartition | tr '01234' 'abcde'`
30*57718be8SEnji Cooperrawraid=/dev/rraid0${rawpart}
31*57718be8SEnji Cooperraidserver="rump_server -lrumpvfs -lrumpdev -lrumpdev_disk -lrumpdev_raidframe"
32*57718be8SEnji Cooper
33*57718be8SEnji Coopermakecfg()
34*57718be8SEnji Cooper{
35*57718be8SEnji Cooper	level=${1}
36*57718be8SEnji Cooper	ncol=${2}
37*57718be8SEnji Cooper
38*57718be8SEnji Cooper	printf "START array\n1 ${ncol} 0\nSTART disks\n" > raid.conf
39*57718be8SEnji Cooper	diskn=0
40*57718be8SEnji Cooper	while [ ${ncol} -gt ${diskn} ] ; do
41*57718be8SEnji Cooper		echo "/disk${diskn}" >> raid.conf
42*57718be8SEnji Cooper		diskn=$((diskn+1))
43*57718be8SEnji Cooper	done
44*57718be8SEnji Cooper
45*57718be8SEnji Cooper	printf "START layout\n32 1 1 ${level}\nSTART queue\nfifo 100\n" \
46*57718be8SEnji Cooper	    >> raid.conf
47*57718be8SEnji Cooper}
48*57718be8SEnji Cooper
49*57718be8SEnji Cooperatf_test_case smalldisk cleanup
50*57718be8SEnji Coopersmalldisk_head()
51*57718be8SEnji Cooper{
52*57718be8SEnji Cooper	atf_set "descr" "Checks the raidframe works on small disks " \
53*57718be8SEnji Cooper	    "(PR kern/44239)"
54*57718be8SEnji Cooper	atf_set "require.progs" "rump_server"
55*57718be8SEnji Cooper}
56*57718be8SEnji Cooper
57*57718be8SEnji Coopersmalldisk_body()
58*57718be8SEnji Cooper{
59*57718be8SEnji Cooper	makecfg 1 2
60*57718be8SEnji Cooper	export RUMP_SERVER=unix://sock
61*57718be8SEnji Cooper	atf_check -s exit:0 ${raidserver}			\
62*57718be8SEnji Cooper	    -d key=/disk0,hostpath=disk0.img,size=1m		\
63*57718be8SEnji Cooper	    -d key=/disk1,hostpath=disk1.img,size=1m		\
64*57718be8SEnji Cooper	    ${RUMP_SERVER}
65*57718be8SEnji Cooper
66*57718be8SEnji Cooper	atf_check -s exit:0 rump.raidctl -C raid.conf raid0
67*57718be8SEnji Cooper}
68*57718be8SEnji Cooper
69*57718be8SEnji Coopersmalldisk_cleanup()
70*57718be8SEnji Cooper{
71*57718be8SEnji Cooper	export RUMP_SERVER=unix://sock
72*57718be8SEnji Cooper	rump.halt
73*57718be8SEnji Cooper}
74*57718be8SEnji Cooper
75*57718be8SEnji Cooper
76*57718be8SEnji Cooper# make this smaller once 44239 is fixed
77*57718be8SEnji Cooperexport RAID_MEDIASIZE=32m
78*57718be8SEnji Cooper
79*57718be8SEnji Cooperatf_test_case raid1_compfail cleanup
80*57718be8SEnji Cooperraid1_compfail_head()
81*57718be8SEnji Cooper{
82*57718be8SEnji Cooper	atf_set "descr" "Checks that RAID1 works after component failure"
83*57718be8SEnji Cooper	atf_set "require.progs" "rump_server"
84*57718be8SEnji Cooper}
85*57718be8SEnji Cooper
86*57718be8SEnji Cooperraid1_compfail_body()
87*57718be8SEnji Cooper{
88*57718be8SEnji Cooper	makecfg 1 2
89*57718be8SEnji Cooper	export RUMP_SERVER=unix://sock
90*57718be8SEnji Cooper	atf_check -s exit:0 ${raidserver}				\
91*57718be8SEnji Cooper	    -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE}	\
92*57718be8SEnji Cooper	    -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE}	\
93*57718be8SEnji Cooper	    ${RUMP_SERVER}
94*57718be8SEnji Cooper
95*57718be8SEnji Cooper	atf_check -s exit:0 rump.raidctl -C raid.conf raid0
96*57718be8SEnji Cooper	atf_check -s exit:0 rump.raidctl -I 12345 raid0
97*57718be8SEnji Cooper	atf_check -s exit:0 -o ignore rump.raidctl -iv raid0
98*57718be8SEnji Cooper
99*57718be8SEnji Cooper	# put some data there
100*57718be8SEnji Cooper	atf_check -s exit:0 -e ignore \
101*57718be8SEnji Cooper	    dd if=$(atf_get_srcdir)/t_raid of=testfile count=4
102*57718be8SEnji Cooper	atf_check -s exit:0 -e ignore -x \
103*57718be8SEnji Cooper	    "dd if=testfile | rump.dd of=${rawraid} conv=sync"
104*57718be8SEnji Cooper
105*57718be8SEnji Cooper	# restart server with failed component
106*57718be8SEnji Cooper	rump.halt
107*57718be8SEnji Cooper	rm disk1.img # FAIL
108*57718be8SEnji Cooper	atf_check -s exit:0 ${raidserver}				\
109*57718be8SEnji Cooper	    -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE}	\
110*57718be8SEnji Cooper	    -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE}	\
111*57718be8SEnji Cooper	    ${RUMP_SERVER}
112*57718be8SEnji Cooper
113*57718be8SEnji Cooper	atf_check -s exit:0 rump.raidctl -c raid.conf raid0
114*57718be8SEnji Cooper
115*57718be8SEnji Cooper	# check if we we get what we wrote
116*57718be8SEnji Cooper	atf_check -s exit:0 -o file:testfile -e ignore \
117*57718be8SEnji Cooper	    rump.dd if=${rawraid} count=4
118*57718be8SEnji Cooper}
119*57718be8SEnji Cooper
120*57718be8SEnji Cooperraid1_compfail_cleanup()
121*57718be8SEnji Cooper{
122*57718be8SEnji Cooper	export RUMP_SERVER=unix://sock
123*57718be8SEnji Cooper	rump.halt
124*57718be8SEnji Cooper}
125*57718be8SEnji Cooper
126*57718be8SEnji Cooper
127*57718be8SEnji Cooper
128*57718be8SEnji Cooperatf_test_case raid1_comp0fail cleanup
129*57718be8SEnji Cooperraid1_comp0fail_head()
130*57718be8SEnji Cooper{
131*57718be8SEnji Cooper	atf_set "descr" "Checks configuring RAID1 after component 0 fails" \
132*57718be8SEnji Cooper		"(PR kern/44251)"
133*57718be8SEnji Cooper	atf_set "require.progs" "rump_server"
134*57718be8SEnji Cooper}
135*57718be8SEnji Cooper
136*57718be8SEnji Cooperraid1_comp0fail_body()
137*57718be8SEnji Cooper{
138*57718be8SEnji Cooper	makecfg 1 2
139*57718be8SEnji Cooper	export RUMP_SERVER=unix://sock
140*57718be8SEnji Cooper	atf_check -s exit:0 ${raidserver}				\
141*57718be8SEnji Cooper	    -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE}	\
142*57718be8SEnji Cooper	    -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE}	\
143*57718be8SEnji Cooper	    ${RUMP_SERVER}
144*57718be8SEnji Cooper
145*57718be8SEnji Cooper	atf_check -s exit:0 rump.raidctl -C raid.conf raid0
146*57718be8SEnji Cooper	atf_check -s exit:0 rump.raidctl -I 12345 raid0
147*57718be8SEnji Cooper	atf_check -s exit:0 -o ignore rump.raidctl -iv raid0
148*57718be8SEnji Cooper
149*57718be8SEnji Cooper	# restart server with failed component
150*57718be8SEnji Cooper	rump.halt
151*57718be8SEnji Cooper	rm disk0.img # FAIL
152*57718be8SEnji Cooper	atf_check -s exit:0 ${raidserver} 				\
153*57718be8SEnji Cooper	    -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE}	\
154*57718be8SEnji Cooper	    -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE}	\
155*57718be8SEnji Cooper	    ${RUMP_SERVER}
156*57718be8SEnji Cooper
157*57718be8SEnji Cooper	atf_check -s exit:0 rump.raidctl -c raid.conf raid0
158*57718be8SEnji Cooper}
159*57718be8SEnji Cooper
160*57718be8SEnji Cooperraid1_comp0fail_cleanup()
161*57718be8SEnji Cooper{
162*57718be8SEnji Cooper	export RUMP_SERVER=unix://sock
163*57718be8SEnji Cooper	rump.halt
164*57718be8SEnji Cooper}
165*57718be8SEnji Cooper
166*57718be8SEnji Cooperatf_test_case raid1_normal cleanup
167*57718be8SEnji Cooperraid1_normal_head()
168*57718be8SEnji Cooper{
169*57718be8SEnji Cooper	atf_set "descr" "Checks that RAID1 -c configurations work " \
170*57718be8SEnji Cooper		"in the normal case"
171*57718be8SEnji Cooper	atf_set "require.progs" "rump_server"
172*57718be8SEnji Cooper}
173*57718be8SEnji Cooper
174*57718be8SEnji Cooperraid1_normal_body()
175*57718be8SEnji Cooper{
176*57718be8SEnji Cooper	makecfg 1 2
177*57718be8SEnji Cooper	export RUMP_SERVER=unix://sock
178*57718be8SEnji Cooper        atf_check -s exit:0 ${raidserver}                               \
179*57718be8SEnji Cooper            -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE}     \
180*57718be8SEnji Cooper            -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE}     \
181*57718be8SEnji Cooper            ${RUMP_SERVER}
182*57718be8SEnji Cooper
183*57718be8SEnji Cooper        atf_check -s exit:0 rump.raidctl -C raid.conf raid0
184*57718be8SEnji Cooper        atf_check -s exit:0 rump.raidctl -I 12345 raid0
185*57718be8SEnji Cooper        atf_check -s exit:0 -o ignore rump.raidctl -iv raid0
186*57718be8SEnji Cooper
187*57718be8SEnji Cooper        # put some data there
188*57718be8SEnji Cooper        atf_check -s exit:0 -e ignore \
189*57718be8SEnji Cooper            dd if=$(atf_get_srcdir)/t_raid of=testfile count=4
190*57718be8SEnji Cooper        atf_check -s exit:0 -e ignore -x \
191*57718be8SEnji Cooper            "dd if=testfile | rump.dd of=${rawraid} conv=sync"
192*57718be8SEnji Cooper
193*57718be8SEnji Cooper        # restart server, disks remain normal
194*57718be8SEnji Cooper        rump.halt
195*57718be8SEnji Cooper
196*57718be8SEnji Cooper        atf_check -s exit:0 ${raidserver}                               \
197*57718be8SEnji Cooper            -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE}     \
198*57718be8SEnji Cooper            -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE}     \
199*57718be8SEnji Cooper            ${RUMP_SERVER}
200*57718be8SEnji Cooper
201*57718be8SEnji Cooper        atf_check -s exit:0 rump.raidctl -c raid.conf raid0
202*57718be8SEnji Cooper
203*57718be8SEnji Cooper        # check if we we get what we wrote
204*57718be8SEnji Cooper        atf_check -s exit:0 -o file:testfile -e ignore \
205*57718be8SEnji Cooper            rump.dd if=${rawraid} count=4
206*57718be8SEnji Cooper
207*57718be8SEnji Cooper}
208*57718be8SEnji Cooper
209*57718be8SEnji Cooperraid1_normal_cleanup()
210*57718be8SEnji Cooper{
211*57718be8SEnji Cooper        export RUMP_SERVER=unix://sock
212*57718be8SEnji Cooper        rump.halt
213*57718be8SEnji Cooper}
214*57718be8SEnji Cooper
215*57718be8SEnji Cooper
216*57718be8SEnji Cooperatf_test_case raid5_compfail cleanup
217*57718be8SEnji Cooperraid5_compfail_head()
218*57718be8SEnji Cooper{
219*57718be8SEnji Cooper	atf_set "descr" "Checks that RAID5 works after component failure"
220*57718be8SEnji Cooper	atf_set "require.progs" "rump_server"
221*57718be8SEnji Cooper}
222*57718be8SEnji Cooper
223*57718be8SEnji Cooperraid5_compfail_body()
224*57718be8SEnji Cooper{
225*57718be8SEnji Cooper	makecfg 5 3
226*57718be8SEnji Cooper	export RUMP_SERVER=unix://sock
227*57718be8SEnji Cooper	atf_check -s exit:0 ${raidserver}				\
228*57718be8SEnji Cooper	    -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE}	\
229*57718be8SEnji Cooper	    -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE}	\
230*57718be8SEnji Cooper	    -d key=/disk2,hostpath=disk2.img,size=${RAID_MEDIASIZE}	\
231*57718be8SEnji Cooper	    ${RUMP_SERVER}
232*57718be8SEnji Cooper
233*57718be8SEnji Cooper	atf_check -s exit:0 rump.raidctl -C raid.conf raid0
234*57718be8SEnji Cooper	atf_check -s exit:0 rump.raidctl -I 12345 raid0
235*57718be8SEnji Cooper	atf_check -s exit:0 -o ignore rump.raidctl -iv raid0
236*57718be8SEnji Cooper
237*57718be8SEnji Cooper	# put some data there
238*57718be8SEnji Cooper	atf_check -s exit:0 -e ignore \
239*57718be8SEnji Cooper	    dd if=$(atf_get_srcdir)/t_raid of=testfile count=4
240*57718be8SEnji Cooper	atf_check -s exit:0 -e ignore -x \
241*57718be8SEnji Cooper	    "dd if=testfile | rump.dd of=${rawraid} conv=sync"
242*57718be8SEnji Cooper
243*57718be8SEnji Cooper	# restart server with failed component
244*57718be8SEnji Cooper	rump.halt
245*57718be8SEnji Cooper	rm disk2.img # FAIL
246*57718be8SEnji Cooper	atf_check -s exit:0 ${raidserver}				\
247*57718be8SEnji Cooper	    -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE}	\
248*57718be8SEnji Cooper	    -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE}	\
249*57718be8SEnji Cooper	    -d key=/disk2,hostpath=disk2.img,size=${RAID_MEDIASIZE}	\
250*57718be8SEnji Cooper	    ${RUMP_SERVER}
251*57718be8SEnji Cooper
252*57718be8SEnji Cooper	atf_check -s exit:0 rump.raidctl -c raid.conf raid0
253*57718be8SEnji Cooper
254*57718be8SEnji Cooper	# check if we we get what we wrote
255*57718be8SEnji Cooper	atf_check -s exit:0 -o file:testfile -e ignore \
256*57718be8SEnji Cooper	    rump.dd if=${rawraid} count=4
257*57718be8SEnji Cooper}
258*57718be8SEnji Cooper
259*57718be8SEnji Cooperraid5_compfail_cleanup()
260*57718be8SEnji Cooper{
261*57718be8SEnji Cooper	export RUMP_SERVER=unix://sock
262*57718be8SEnji Cooper	rump.halt
263*57718be8SEnji Cooper}
264*57718be8SEnji Cooper
265*57718be8SEnji Cooperatf_test_case raid5_normal cleanup
266*57718be8SEnji Cooperraid5_normal_head()
267*57718be8SEnji Cooper{
268*57718be8SEnji Cooper        atf_set "descr" "Checks that RAID5 works after normal shutdown " \
269*57718be8SEnji Cooper		"and 'raidctl -c' startup"
270*57718be8SEnji Cooper	atf_set "require.progs" "rump_server"
271*57718be8SEnji Cooper}
272*57718be8SEnji Cooper
273*57718be8SEnji Cooperraid5_normal_body()
274*57718be8SEnji Cooper{
275*57718be8SEnji Cooper        makecfg 5 3
276*57718be8SEnji Cooper        export RUMP_SERVER=unix://sock
277*57718be8SEnji Cooper        atf_check -s exit:0 ${raidserver}                               \
278*57718be8SEnji Cooper            -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE}     \
279*57718be8SEnji Cooper            -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE}     \
280*57718be8SEnji Cooper            -d key=/disk2,hostpath=disk2.img,size=${RAID_MEDIASIZE}     \
281*57718be8SEnji Cooper            ${RUMP_SERVER}
282*57718be8SEnji Cooper
283*57718be8SEnji Cooper        atf_check -s exit:0 rump.raidctl -C raid.conf raid0
284*57718be8SEnji Cooper        atf_check -s exit:0 rump.raidctl -I 12345 raid0
285*57718be8SEnji Cooper        atf_check -s exit:0 -o ignore rump.raidctl -iv raid0
286*57718be8SEnji Cooper
287*57718be8SEnji Cooper        # put some data there
288*57718be8SEnji Cooper        atf_check -s exit:0 -e ignore \
289*57718be8SEnji Cooper            dd if=$(atf_get_srcdir)/t_raid of=testfile count=4
290*57718be8SEnji Cooper        atf_check -s exit:0 -e ignore -x \
291*57718be8SEnji Cooper            "dd if=testfile | rump.dd of=${rawraid} conv=sync"
292*57718be8SEnji Cooper
293*57718be8SEnji Cooper        # restart server after normal shutdown
294*57718be8SEnji Cooper        rump.halt
295*57718be8SEnji Cooper
296*57718be8SEnji Cooper        atf_check -s exit:0 ${raidserver}                               \
297*57718be8SEnji Cooper            -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE}     \
298*57718be8SEnji Cooper            -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE}     \
299*57718be8SEnji Cooper            -d key=/disk2,hostpath=disk2.img,size=${RAID_MEDIASIZE}     \
300*57718be8SEnji Cooper            ${RUMP_SERVER}
301*57718be8SEnji Cooper
302*57718be8SEnji Cooper        atf_check -s exit:0 rump.raidctl -c raid.conf raid0
303*57718be8SEnji Cooper
304*57718be8SEnji Cooper        # check if we we get what we wrote
305*57718be8SEnji Cooper        atf_check -s exit:0 -o file:testfile -e ignore \
306*57718be8SEnji Cooper            rump.dd if=${rawraid} count=4
307*57718be8SEnji Cooper}
308*57718be8SEnji Cooper
309*57718be8SEnji Cooperraid5_normal_cleanup()
310*57718be8SEnji Cooper{
311*57718be8SEnji Cooper        export RUMP_SERVER=unix://sock
312*57718be8SEnji Cooper        rump.halt
313*57718be8SEnji Cooper}
314*57718be8SEnji Cooper
315*57718be8SEnji Cooperatf_init_test_cases()
316*57718be8SEnji Cooper{
317*57718be8SEnji Cooper	atf_add_test_case smalldisk
318*57718be8SEnji Cooper	atf_add_test_case raid1_normal
319*57718be8SEnji Cooper	atf_add_test_case raid1_comp0fail
320*57718be8SEnji Cooper	atf_add_test_case raid1_compfail
321*57718be8SEnji Cooper	atf_add_test_case raid5_normal
322*57718be8SEnji Cooper	atf_add_test_case raid5_compfail
323*57718be8SEnji Cooper}
324