Home | History | Annotate | Line # | Download | only in raidframe
t_raid.sh revision 1.13.4.1
      1 #! /usr/bin/atf-sh
      2 #	$NetBSD: t_raid.sh,v 1.13.4.1 2020/04/13 08:05:22 martin 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\n${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 makecfg_old()
     50 {
     51 	level=${1}
     52 	ncol=${2}
     53 
     54 	printf "START array\n1 ${ncol} 0\nSTART disks\n" > raid.conf
     55 	diskn=0
     56 	while [ ${ncol} -gt ${diskn} ] ; do
     57 		echo "/disk${diskn}" >> raid.conf
     58 		diskn=$((diskn+1))
     59 	done
     60 
     61 	printf "START layout\n32 1 1 ${level}\nSTART queue\nfifo 100\n" \
     62 	    >> raid.conf
     63 }
     64 
     65 atf_test_case smalldisk cleanup
     66 smalldisk_head()
     67 {
     68 	atf_set "descr" "Checks the raidframe works on small disks " \
     69 	    "(PR kern/44239)"
     70 	atf_set "require.progs" "rump_server"
     71 }
     72 
     73 smalldisk_body_backend()
     74 {
     75 	export RUMP_SERVER=unix://sock
     76 	atf_check -s exit:0 ${raidserver}			\
     77 	    -d key=/disk0,hostpath=disk0.img,size=1m		\
     78 	    -d key=/disk1,hostpath=disk1.img,size=1m		\
     79 	    ${RUMP_SERVER}
     80 
     81 	atf_check -s exit:0 rump.raidctl -C raid.conf raid0
     82 }
     83 
     84 smalldisk_body()
     85 {
     86 	makecfg 1 2
     87 	smalldisk_body_backend
     88 }
     89 
     90 smalldisk_cleanup()
     91 {
     92 	export RUMP_SERVER=unix://sock
     93 	rump.halt
     94 }
     95 
     96 # The old configuration test case uses the smalldisk backend
     97 atf_test_case old_numrows_config cleanup
     98 old_numrows_config_head()
     99 {
    100 	atf_set "descr" "Checks the old numRows configuration works"
    101 	atf_set "require.progs" "rump_server"
    102 }
    103 
    104 old_numrows_config_body()
    105 {
    106 	makecfg_old 1 2
    107 	smalldisk_body_backend
    108 }
    109 
    110 old_numrows_config_cleanup()
    111 {
    112 	export RUMP_SERVER=unix://sock
    113 	rump.halt
    114 }
    115 
    116 export RAID_MEDIASIZE=4m
    117 
    118 atf_test_case raid1_compfail cleanup
    119 raid1_compfail_head()
    120 {
    121 	atf_set "descr" "Checks that RAID1 works after component failure"
    122 	atf_set "require.progs" "rump_server"
    123 }
    124 
    125 raid1_compfail_body()
    126 {
    127 	makecfg 1 2
    128 	export RUMP_SERVER=unix://sock
    129 	atf_check -s exit:0 ${raidserver}				\
    130 	    -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE}	\
    131 	    -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE}	\
    132 	    ${RUMP_SERVER}
    133 
    134 	atf_check -s exit:0 rump.raidctl -C raid.conf raid0
    135 	atf_check -s exit:0 rump.raidctl -I 12345 raid0
    136 	atf_check -s exit:0 -o ignore rump.raidctl -iv raid0
    137 
    138 	# put some data there
    139 	atf_check -s exit:0 -e ignore \
    140 	    dd if=$(atf_get_srcdir)/t_raid of=testfile count=4
    141 	atf_check -s exit:0 -e ignore -x \
    142 	    "dd if=testfile | rump.dd of=${rawraid} conv=sync"
    143 
    144 	# restart server with failed component
    145 	rump.halt
    146 	rm disk1.img # FAIL
    147 	atf_check -s exit:0 ${raidserver}				\
    148 	    -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE}	\
    149 	    -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE}	\
    150 	    ${RUMP_SERVER}
    151 
    152 	atf_check -s exit:0 rump.raidctl -c raid.conf raid0
    153 
    154 	# check if we we get what we wrote
    155 	atf_check -s exit:0 -o file:testfile -e ignore \
    156 	    rump.dd if=${rawraid} count=4
    157 }
    158 
    159 raid1_compfail_cleanup()
    160 {
    161 	export RUMP_SERVER=unix://sock
    162 	rump.halt
    163 }
    164 
    165 
    166 
    167 atf_test_case raid1_comp0fail cleanup
    168 raid1_comp0fail_head()
    169 {
    170 	atf_set "descr" "Checks configuring RAID1 after component 0 fails" \
    171 		"(PR kern/44251)"
    172 	atf_set "require.progs" "rump_server"
    173 }
    174 
    175 raid1_comp0fail_body()
    176 {
    177 	makecfg 1 2
    178 	export RUMP_SERVER=unix://sock
    179 	atf_check -s exit:0 ${raidserver}				\
    180 	    -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE}	\
    181 	    -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE}	\
    182 	    ${RUMP_SERVER}
    183 
    184 	atf_check -s exit:0 rump.raidctl -C raid.conf raid0
    185 	atf_check -s exit:0 rump.raidctl -I 12345 raid0
    186 	atf_check -s exit:0 -o ignore rump.raidctl -iv raid0
    187 
    188 	# restart server with failed component
    189 	rump.halt
    190 	rm disk0.img # FAIL
    191 	atf_check -s exit:0 ${raidserver} 				\
    192 	    -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE}	\
    193 	    -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE}	\
    194 	    ${RUMP_SERVER}
    195 
    196 	atf_check -s exit:0 rump.raidctl -c raid.conf raid0
    197 }
    198 
    199 raid1_comp0fail_cleanup()
    200 {
    201 	export RUMP_SERVER=unix://sock
    202 	rump.halt
    203 }
    204 
    205 atf_test_case raid1_normal cleanup
    206 raid1_normal_head()
    207 {
    208 	atf_set "descr" "Checks that RAID1 -c configurations work " \
    209 		"in the normal case"
    210 	atf_set "require.progs" "rump_server"
    211 }
    212 
    213 raid1_normal_body()
    214 {
    215 	makecfg 1 2
    216 	export RUMP_SERVER=unix://sock
    217         atf_check -s exit:0 ${raidserver}                               \
    218             -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE}     \
    219             -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE}     \
    220             ${RUMP_SERVER}
    221 
    222         atf_check -s exit:0 rump.raidctl -C raid.conf raid0
    223         atf_check -s exit:0 rump.raidctl -I 12345 raid0
    224         atf_check -s exit:0 -o ignore rump.raidctl -iv raid0
    225 
    226         # put some data there
    227         atf_check -s exit:0 -e ignore \
    228             dd if=$(atf_get_srcdir)/t_raid of=testfile count=4
    229         atf_check -s exit:0 -e ignore -x \
    230             "dd if=testfile | rump.dd of=${rawraid} conv=sync"
    231 
    232         # restart server, disks remain normal 
    233         rump.halt
    234 
    235         atf_check -s exit:0 ${raidserver}                               \
    236             -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE}     \
    237             -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE}     \
    238             ${RUMP_SERVER}
    239 
    240         atf_check -s exit:0 rump.raidctl -c raid.conf raid0
    241 
    242         # check if we we get what we wrote
    243         atf_check -s exit:0 -o file:testfile -e ignore \
    244             rump.dd if=${rawraid} count=4
    245 
    246 }
    247 
    248 raid1_normal_cleanup()
    249 {       
    250         export RUMP_SERVER=unix://sock
    251         rump.halt
    252 }
    253 
    254 
    255 atf_test_case raid5_compfail cleanup
    256 raid5_compfail_head()
    257 {
    258 	atf_set "descr" "Checks that RAID5 works after component failure"
    259 	atf_set "require.progs" "rump_server"
    260 }
    261 
    262 raid5_compfail_body()
    263 {
    264 	makecfg 5 3
    265 	export RUMP_SERVER=unix://sock
    266 	atf_check -s exit:0 ${raidserver}				\
    267 	    -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE}	\
    268 	    -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE}	\
    269 	    -d key=/disk2,hostpath=disk2.img,size=${RAID_MEDIASIZE}	\
    270 	    ${RUMP_SERVER}
    271 
    272 	atf_check -s exit:0 rump.raidctl -C raid.conf raid0
    273 	atf_check -s exit:0 rump.raidctl -I 12345 raid0
    274 	atf_check -s exit:0 -o ignore rump.raidctl -iv raid0
    275 
    276 	# put some data there
    277 	atf_check -s exit:0 -e ignore \
    278 	    dd if=$(atf_get_srcdir)/t_raid of=testfile count=4
    279 	atf_check -s exit:0 -e ignore -x \
    280 	    "dd if=testfile | rump.dd of=${rawraid} conv=sync"
    281 
    282 	# restart server with failed component
    283 	rump.halt
    284 	rm disk2.img # FAIL
    285 	atf_check -s exit:0 ${raidserver}				\
    286 	    -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE}	\
    287 	    -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE}	\
    288 	    -d key=/disk2,hostpath=disk2.img,size=${RAID_MEDIASIZE}	\
    289 	    ${RUMP_SERVER}
    290 
    291 	atf_check -s exit:0 rump.raidctl -c raid.conf raid0
    292 
    293 	# check if we we get what we wrote
    294 	atf_check -s exit:0 -o file:testfile -e ignore \
    295 	    rump.dd if=${rawraid} count=4
    296 }
    297 
    298 raid5_compfail_cleanup()
    299 {
    300 	export RUMP_SERVER=unix://sock
    301 	rump.halt
    302 }
    303 
    304 atf_test_case raid5_normal cleanup
    305 raid5_normal_head()
    306 {
    307         atf_set "descr" "Checks that RAID5 works after normal shutdown " \
    308 		"and 'raidctl -c' startup"
    309 	atf_set "require.progs" "rump_server"
    310 }
    311 
    312 raid5_normal_body()
    313 {
    314         makecfg 5 3
    315         export RUMP_SERVER=unix://sock
    316         atf_check -s exit:0 ${raidserver}                               \
    317             -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE}     \
    318             -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE}     \
    319             -d key=/disk2,hostpath=disk2.img,size=${RAID_MEDIASIZE}     \
    320             ${RUMP_SERVER}
    321 
    322         atf_check -s exit:0 rump.raidctl -C raid.conf raid0
    323         atf_check -s exit:0 rump.raidctl -I 12345 raid0
    324         atf_check -s exit:0 -o ignore rump.raidctl -iv raid0
    325 
    326         # put some data there
    327         atf_check -s exit:0 -e ignore \
    328             dd if=$(atf_get_srcdir)/t_raid of=testfile count=4
    329         atf_check -s exit:0 -e ignore -x \
    330             "dd if=testfile | rump.dd of=${rawraid} conv=sync"
    331 
    332         # restart server after normal shutdown
    333         rump.halt
    334 
    335         atf_check -s exit:0 ${raidserver}                               \
    336             -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE}     \
    337             -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE}     \
    338             -d key=/disk2,hostpath=disk2.img,size=${RAID_MEDIASIZE}     \
    339             ${RUMP_SERVER}
    340 
    341         atf_check -s exit:0 rump.raidctl -c raid.conf raid0
    342 
    343         # check if we we get what we wrote
    344         atf_check -s exit:0 -o file:testfile -e ignore \
    345             rump.dd if=${rawraid} count=4
    346 }
    347 
    348 raid5_normal_cleanup()
    349 {
    350         export RUMP_SERVER=unix://sock
    351         rump.halt
    352 }
    353 
    354 atf_init_test_cases()
    355 {
    356 	atf_add_test_case smalldisk
    357 	atf_add_test_case old_numrows_config
    358 	atf_add_test_case raid1_normal
    359 	atf_add_test_case raid1_comp0fail
    360 	atf_add_test_case raid1_compfail
    361 	atf_add_test_case raid5_normal
    362 	atf_add_test_case raid5_compfail
    363 }
    364