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