Home | History | Annotate | Line # | Download | only in raidframe
t_raid.sh revision 1.12
      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 }
    324