Home | History | Annotate | Line # | Download | only in raidframe
t_raid.sh revision 1.11
      1 #! /usr/bin/atf-sh
      2 #	$NetBSD: t_raid.sh,v 1.11 2011/10/15 11:31:40 gson 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 }
     55 
     56 smalldisk_body()
     57 {
     58 	makecfg 1 2
     59 	export RUMP_SERVER=unix://sock
     60 	atf_check -s exit:0 ${raidserver}			\
     61 	    -d key=/disk0,hostpath=disk0.img,size=1m		\
     62 	    -d key=/disk1,hostpath=disk1.img,size=1m		\
     63 	    ${RUMP_SERVER}
     64 
     65 	atf_check -s exit:0 rump.raidctl -C raid.conf raid0
     66 }
     67 
     68 smalldisk_cleanup()
     69 {
     70 	export RUMP_SERVER=unix://sock
     71 	rump.halt
     72 }
     73 
     74 
     75 # make this smaller once 44239 is fixed
     76 export RAID_MEDIASIZE=32m
     77 
     78 atf_test_case raid1_compfail cleanup
     79 raid1_compfail_head()
     80 {
     81 	atf_set "descr" "Checks that RAID1 works after component failure"
     82 }
     83 
     84 raid1_compfail_body()
     85 {
     86 	makecfg 1 2
     87 	export RUMP_SERVER=unix://sock
     88 	atf_check -s exit:0 ${raidserver}				\
     89 	    -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE}	\
     90 	    -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE}	\
     91 	    ${RUMP_SERVER}
     92 
     93 	atf_check -s exit:0 rump.raidctl -C raid.conf raid0
     94 	atf_check -s exit:0 rump.raidctl -I 12345 raid0
     95 	atf_check -s exit:0 -o ignore rump.raidctl -iv raid0
     96 
     97 	# put some data there
     98 	atf_check -s exit:0 -e ignore \
     99 	    dd if=$(atf_get_srcdir)/t_raid of=testfile count=4
    100 	atf_check -s exit:0 -e ignore -x \
    101 	    "dd if=testfile | rump.dd of=${rawraid} conv=sync"
    102 
    103 	# restart server with failed component
    104 	rump.halt
    105 	rm disk1.img # FAIL
    106 	atf_check -s exit:0 ${raidserver}				\
    107 	    -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE}	\
    108 	    -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE}	\
    109 	    ${RUMP_SERVER}
    110 
    111 	atf_check -s exit:0 rump.raidctl -c raid.conf raid0
    112 
    113 	# check if we we get what we wrote
    114 	atf_check -s exit:0 -o file:testfile -e ignore \
    115 	    rump.dd if=${rawraid} count=4
    116 }
    117 
    118 raid1_compfail_cleanup()
    119 {
    120 	export RUMP_SERVER=unix://sock
    121 	rump.halt
    122 }
    123 
    124 
    125 
    126 atf_test_case raid1_comp0fail cleanup
    127 raid1_comp0fail_head()
    128 {
    129 	atf_set "descr" "Checks configuring RAID1 after component 0 fails" \
    130 		"(PR kern/44251)"
    131 }
    132 
    133 raid1_comp0fail_body()
    134 {
    135 	makecfg 1 2
    136 	export RUMP_SERVER=unix://sock
    137 	atf_check -s exit:0 ${raidserver}				\
    138 	    -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE}	\
    139 	    -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE}	\
    140 	    ${RUMP_SERVER}
    141 
    142 	atf_check -s exit:0 rump.raidctl -C raid.conf raid0
    143 	atf_check -s exit:0 rump.raidctl -I 12345 raid0
    144 	atf_check -s exit:0 -o ignore rump.raidctl -iv raid0
    145 
    146 	# restart server with failed component
    147 	rump.halt
    148 	rm disk0.img # FAIL
    149 	atf_check -s exit:0 ${raidserver} 				\
    150 	    -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE}	\
    151 	    -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE}	\
    152 	    ${RUMP_SERVER}
    153 
    154 	atf_check -s exit:0 rump.raidctl -c raid.conf raid0
    155 }
    156 
    157 raid1_comp0fail_cleanup()
    158 {
    159 	export RUMP_SERVER=unix://sock
    160 	rump.halt
    161 }
    162 
    163 atf_test_case raid1_normal cleanup
    164 raid1_normal_head()
    165 {
    166 	atf_set "descr" "Checks that RAID1 -c configurations work " \
    167 		"in the normal case"
    168 }
    169 
    170 raid1_normal_body()
    171 {
    172 	makecfg 1 2
    173 	export RUMP_SERVER=unix://sock
    174         atf_check -s exit:0 ${raidserver}                               \
    175             -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE}     \
    176             -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE}     \
    177             ${RUMP_SERVER}
    178 
    179         atf_check -s exit:0 rump.raidctl -C raid.conf raid0
    180         atf_check -s exit:0 rump.raidctl -I 12345 raid0
    181         atf_check -s exit:0 -o ignore rump.raidctl -iv raid0
    182 
    183         # put some data there
    184         atf_check -s exit:0 -e ignore \
    185             dd if=$(atf_get_srcdir)/t_raid of=testfile count=4
    186         atf_check -s exit:0 -e ignore -x \
    187             "dd if=testfile | rump.dd of=${rawraid} conv=sync"
    188 
    189         # restart server, disks remain normal 
    190         rump.halt
    191 
    192         atf_check -s exit:0 ${raidserver}                               \
    193             -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE}     \
    194             -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE}     \
    195             ${RUMP_SERVER}
    196 
    197         atf_check -s exit:0 rump.raidctl -c raid.conf raid0
    198 
    199         # check if we we get what we wrote
    200         atf_check -s exit:0 -o file:testfile -e ignore \
    201             rump.dd if=${rawraid} count=4
    202 
    203 }
    204 
    205 raid1_normal_cleanup()
    206 {       
    207         export RUMP_SERVER=unix://sock
    208         rump.halt
    209 }
    210 
    211 
    212 atf_test_case raid5_compfail cleanup
    213 raid5_compfail_head()
    214 {
    215 	atf_set "descr" "Checks that RAID5 works after component failure"
    216 }
    217 
    218 raid5_compfail_body()
    219 {
    220 	makecfg 5 3
    221 	export RUMP_SERVER=unix://sock
    222 	atf_check -s exit:0 ${raidserver}				\
    223 	    -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE}	\
    224 	    -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE}	\
    225 	    -d key=/disk2,hostpath=disk2.img,size=${RAID_MEDIASIZE}	\
    226 	    ${RUMP_SERVER}
    227 
    228 	atf_check -s exit:0 rump.raidctl -C raid.conf raid0
    229 	atf_check -s exit:0 rump.raidctl -I 12345 raid0
    230 	atf_check -s exit:0 -o ignore rump.raidctl -iv raid0
    231 
    232 	# put some data there
    233 	atf_check -s exit:0 -e ignore \
    234 	    dd if=$(atf_get_srcdir)/t_raid of=testfile count=4
    235 	atf_check -s exit:0 -e ignore -x \
    236 	    "dd if=testfile | rump.dd of=${rawraid} conv=sync"
    237 
    238 	# restart server with failed component
    239 	rump.halt
    240 	rm disk2.img # FAIL
    241 	atf_check -s exit:0 ${raidserver}				\
    242 	    -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE}	\
    243 	    -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE}	\
    244 	    -d key=/disk2,hostpath=disk2.img,size=${RAID_MEDIASIZE}	\
    245 	    ${RUMP_SERVER}
    246 
    247 	atf_check -s exit:0 rump.raidctl -c raid.conf raid0
    248 
    249 	# check if we we get what we wrote
    250 	atf_check -s exit:0 -o file:testfile -e ignore \
    251 	    rump.dd if=${rawraid} count=4
    252 }
    253 
    254 raid5_compfail_cleanup()
    255 {
    256 	export RUMP_SERVER=unix://sock
    257 	rump.halt
    258 }
    259 
    260 atf_test_case raid5_normal cleanup
    261 raid5_normal_head()
    262 {
    263         atf_set "descr" "Checks that RAID5 works after normal shutdown " \
    264 		"and 'raidctl -c' startup"
    265 }
    266 
    267 raid5_normal_body()
    268 {
    269         makecfg 5 3
    270         export RUMP_SERVER=unix://sock
    271         atf_check -s exit:0 ${raidserver}                               \
    272             -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE}     \
    273             -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE}     \
    274             -d key=/disk2,hostpath=disk2.img,size=${RAID_MEDIASIZE}     \
    275             ${RUMP_SERVER}
    276 
    277         atf_check -s exit:0 rump.raidctl -C raid.conf raid0
    278         atf_check -s exit:0 rump.raidctl -I 12345 raid0
    279         atf_check -s exit:0 -o ignore rump.raidctl -iv raid0
    280 
    281         # put some data there
    282         atf_check -s exit:0 -e ignore \
    283             dd if=$(atf_get_srcdir)/t_raid of=testfile count=4
    284         atf_check -s exit:0 -e ignore -x \
    285             "dd if=testfile | rump.dd of=${rawraid} conv=sync"
    286 
    287         # restart server after normal shutdown
    288         rump.halt
    289 
    290         atf_check -s exit:0 ${raidserver}                               \
    291             -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE}     \
    292             -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE}     \
    293             -d key=/disk2,hostpath=disk2.img,size=${RAID_MEDIASIZE}     \
    294             ${RUMP_SERVER}
    295 
    296         atf_check -s exit:0 rump.raidctl -c raid.conf raid0
    297 
    298         # check if we we get what we wrote
    299         atf_check -s exit:0 -o file:testfile -e ignore \
    300             rump.dd if=${rawraid} count=4
    301 }
    302 
    303 raid5_normal_cleanup()
    304 {
    305         export RUMP_SERVER=unix://sock
    306         rump.halt
    307 }
    308 
    309 atf_init_test_cases()
    310 {
    311 	atf_add_test_case smalldisk
    312 	atf_add_test_case raid1_normal
    313 	atf_add_test_case raid1_comp0fail
    314 	atf_add_test_case raid1_compfail
    315 	atf_add_test_case raid5_normal
    316 	atf_add_test_case raid5_compfail
    317 }
    318