1272343Sngie#! /usr/bin/atf-sh 2272343Sngie# $NetBSD: t_raid.sh,v 1.12 2013/02/19 21:08:24 joerg Exp $ 3272343Sngie# 4272343Sngie# Copyright (c) 2010 The NetBSD Foundation, Inc. 5272343Sngie# All rights reserved. 6272343Sngie# 7272343Sngie# Redistribution and use in source and binary forms, with or without 8272343Sngie# modification, are permitted provided that the following conditions 9272343Sngie# are met: 10272343Sngie# 1. Redistributions of source code must retain the above copyright 11272343Sngie# notice, this list of conditions and the following disclaimer. 12272343Sngie# 2. Redistributions in binary form must reproduce the above copyright 13272343Sngie# notice, this list of conditions and the following disclaimer in the 14272343Sngie# documentation and/or other materials provided with the distribution. 15272343Sngie# 16272343Sngie# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS 17272343Sngie# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 18272343Sngie# TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 19272343Sngie# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS 20272343Sngie# BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 21272343Sngie# CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 22272343Sngie# SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23272343Sngie# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 24272343Sngie# CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 25272343Sngie# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 26272343Sngie# POSSIBILITY OF SUCH DAMAGE. 27272343Sngie# 28272343Sngie 29272343Sngierawpart=`sysctl -n kern.rawpartition | tr '01234' 'abcde'` 30272343Sngierawraid=/dev/rraid0${rawpart} 31272343Sngieraidserver="rump_server -lrumpvfs -lrumpdev -lrumpdev_disk -lrumpdev_raidframe" 32272343Sngie 33272343Sngiemakecfg() 34272343Sngie{ 35272343Sngie level=${1} 36272343Sngie ncol=${2} 37272343Sngie 38272343Sngie printf "START array\n1 ${ncol} 0\nSTART disks\n" > raid.conf 39272343Sngie diskn=0 40272343Sngie while [ ${ncol} -gt ${diskn} ] ; do 41272343Sngie echo "/disk${diskn}" >> raid.conf 42272343Sngie diskn=$((diskn+1)) 43272343Sngie done 44272343Sngie 45272343Sngie printf "START layout\n32 1 1 ${level}\nSTART queue\nfifo 100\n" \ 46272343Sngie >> raid.conf 47272343Sngie} 48272343Sngie 49272343Sngieatf_test_case smalldisk cleanup 50272343Sngiesmalldisk_head() 51272343Sngie{ 52272343Sngie atf_set "descr" "Checks the raidframe works on small disks " \ 53272343Sngie "(PR kern/44239)" 54272343Sngie atf_set "require.progs" "rump_server" 55272343Sngie} 56272343Sngie 57272343Sngiesmalldisk_body() 58272343Sngie{ 59272343Sngie makecfg 1 2 60272343Sngie export RUMP_SERVER=unix://sock 61272343Sngie atf_check -s exit:0 ${raidserver} \ 62272343Sngie -d key=/disk0,hostpath=disk0.img,size=1m \ 63272343Sngie -d key=/disk1,hostpath=disk1.img,size=1m \ 64272343Sngie ${RUMP_SERVER} 65272343Sngie 66272343Sngie atf_check -s exit:0 rump.raidctl -C raid.conf raid0 67272343Sngie} 68272343Sngie 69272343Sngiesmalldisk_cleanup() 70272343Sngie{ 71272343Sngie export RUMP_SERVER=unix://sock 72272343Sngie rump.halt 73272343Sngie} 74272343Sngie 75272343Sngie 76272343Sngie# make this smaller once 44239 is fixed 77272343Sngieexport RAID_MEDIASIZE=32m 78272343Sngie 79272343Sngieatf_test_case raid1_compfail cleanup 80272343Sngieraid1_compfail_head() 81272343Sngie{ 82272343Sngie atf_set "descr" "Checks that RAID1 works after component failure" 83272343Sngie atf_set "require.progs" "rump_server" 84272343Sngie} 85272343Sngie 86272343Sngieraid1_compfail_body() 87272343Sngie{ 88272343Sngie makecfg 1 2 89272343Sngie export RUMP_SERVER=unix://sock 90272343Sngie atf_check -s exit:0 ${raidserver} \ 91272343Sngie -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE} \ 92272343Sngie -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE} \ 93272343Sngie ${RUMP_SERVER} 94272343Sngie 95272343Sngie atf_check -s exit:0 rump.raidctl -C raid.conf raid0 96272343Sngie atf_check -s exit:0 rump.raidctl -I 12345 raid0 97272343Sngie atf_check -s exit:0 -o ignore rump.raidctl -iv raid0 98272343Sngie 99272343Sngie # put some data there 100272343Sngie atf_check -s exit:0 -e ignore \ 101272343Sngie dd if=$(atf_get_srcdir)/t_raid of=testfile count=4 102272343Sngie atf_check -s exit:0 -e ignore -x \ 103272343Sngie "dd if=testfile | rump.dd of=${rawraid} conv=sync" 104272343Sngie 105272343Sngie # restart server with failed component 106272343Sngie rump.halt 107272343Sngie rm disk1.img # FAIL 108272343Sngie atf_check -s exit:0 ${raidserver} \ 109272343Sngie -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE} \ 110272343Sngie -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE} \ 111272343Sngie ${RUMP_SERVER} 112272343Sngie 113272343Sngie atf_check -s exit:0 rump.raidctl -c raid.conf raid0 114272343Sngie 115272343Sngie # check if we we get what we wrote 116272343Sngie atf_check -s exit:0 -o file:testfile -e ignore \ 117272343Sngie rump.dd if=${rawraid} count=4 118272343Sngie} 119272343Sngie 120272343Sngieraid1_compfail_cleanup() 121272343Sngie{ 122272343Sngie export RUMP_SERVER=unix://sock 123272343Sngie rump.halt 124272343Sngie} 125272343Sngie 126272343Sngie 127272343Sngie 128272343Sngieatf_test_case raid1_comp0fail cleanup 129272343Sngieraid1_comp0fail_head() 130272343Sngie{ 131272343Sngie atf_set "descr" "Checks configuring RAID1 after component 0 fails" \ 132272343Sngie "(PR kern/44251)" 133272343Sngie atf_set "require.progs" "rump_server" 134272343Sngie} 135272343Sngie 136272343Sngieraid1_comp0fail_body() 137272343Sngie{ 138272343Sngie makecfg 1 2 139272343Sngie export RUMP_SERVER=unix://sock 140272343Sngie atf_check -s exit:0 ${raidserver} \ 141272343Sngie -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE} \ 142272343Sngie -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE} \ 143272343Sngie ${RUMP_SERVER} 144272343Sngie 145272343Sngie atf_check -s exit:0 rump.raidctl -C raid.conf raid0 146272343Sngie atf_check -s exit:0 rump.raidctl -I 12345 raid0 147272343Sngie atf_check -s exit:0 -o ignore rump.raidctl -iv raid0 148272343Sngie 149272343Sngie # restart server with failed component 150272343Sngie rump.halt 151272343Sngie rm disk0.img # FAIL 152272343Sngie atf_check -s exit:0 ${raidserver} \ 153272343Sngie -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE} \ 154272343Sngie -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE} \ 155272343Sngie ${RUMP_SERVER} 156272343Sngie 157272343Sngie atf_check -s exit:0 rump.raidctl -c raid.conf raid0 158272343Sngie} 159272343Sngie 160272343Sngieraid1_comp0fail_cleanup() 161272343Sngie{ 162272343Sngie export RUMP_SERVER=unix://sock 163272343Sngie rump.halt 164272343Sngie} 165272343Sngie 166272343Sngieatf_test_case raid1_normal cleanup 167272343Sngieraid1_normal_head() 168272343Sngie{ 169272343Sngie atf_set "descr" "Checks that RAID1 -c configurations work " \ 170272343Sngie "in the normal case" 171272343Sngie atf_set "require.progs" "rump_server" 172272343Sngie} 173272343Sngie 174272343Sngieraid1_normal_body() 175272343Sngie{ 176272343Sngie makecfg 1 2 177272343Sngie export RUMP_SERVER=unix://sock 178272343Sngie atf_check -s exit:0 ${raidserver} \ 179272343Sngie -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE} \ 180272343Sngie -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE} \ 181272343Sngie ${RUMP_SERVER} 182272343Sngie 183272343Sngie atf_check -s exit:0 rump.raidctl -C raid.conf raid0 184272343Sngie atf_check -s exit:0 rump.raidctl -I 12345 raid0 185272343Sngie atf_check -s exit:0 -o ignore rump.raidctl -iv raid0 186272343Sngie 187272343Sngie # put some data there 188272343Sngie atf_check -s exit:0 -e ignore \ 189272343Sngie dd if=$(atf_get_srcdir)/t_raid of=testfile count=4 190272343Sngie atf_check -s exit:0 -e ignore -x \ 191272343Sngie "dd if=testfile | rump.dd of=${rawraid} conv=sync" 192272343Sngie 193272343Sngie # restart server, disks remain normal 194272343Sngie rump.halt 195272343Sngie 196272343Sngie atf_check -s exit:0 ${raidserver} \ 197272343Sngie -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE} \ 198272343Sngie -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE} \ 199272343Sngie ${RUMP_SERVER} 200272343Sngie 201272343Sngie atf_check -s exit:0 rump.raidctl -c raid.conf raid0 202272343Sngie 203272343Sngie # check if we we get what we wrote 204272343Sngie atf_check -s exit:0 -o file:testfile -e ignore \ 205272343Sngie rump.dd if=${rawraid} count=4 206272343Sngie 207272343Sngie} 208272343Sngie 209272343Sngieraid1_normal_cleanup() 210272343Sngie{ 211272343Sngie export RUMP_SERVER=unix://sock 212272343Sngie rump.halt 213272343Sngie} 214272343Sngie 215272343Sngie 216272343Sngieatf_test_case raid5_compfail cleanup 217272343Sngieraid5_compfail_head() 218272343Sngie{ 219272343Sngie atf_set "descr" "Checks that RAID5 works after component failure" 220272343Sngie atf_set "require.progs" "rump_server" 221272343Sngie} 222272343Sngie 223272343Sngieraid5_compfail_body() 224272343Sngie{ 225272343Sngie makecfg 5 3 226272343Sngie export RUMP_SERVER=unix://sock 227272343Sngie atf_check -s exit:0 ${raidserver} \ 228272343Sngie -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE} \ 229272343Sngie -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE} \ 230272343Sngie -d key=/disk2,hostpath=disk2.img,size=${RAID_MEDIASIZE} \ 231272343Sngie ${RUMP_SERVER} 232272343Sngie 233272343Sngie atf_check -s exit:0 rump.raidctl -C raid.conf raid0 234272343Sngie atf_check -s exit:0 rump.raidctl -I 12345 raid0 235272343Sngie atf_check -s exit:0 -o ignore rump.raidctl -iv raid0 236272343Sngie 237272343Sngie # put some data there 238272343Sngie atf_check -s exit:0 -e ignore \ 239272343Sngie dd if=$(atf_get_srcdir)/t_raid of=testfile count=4 240272343Sngie atf_check -s exit:0 -e ignore -x \ 241272343Sngie "dd if=testfile | rump.dd of=${rawraid} conv=sync" 242272343Sngie 243272343Sngie # restart server with failed component 244272343Sngie rump.halt 245272343Sngie rm disk2.img # FAIL 246272343Sngie atf_check -s exit:0 ${raidserver} \ 247272343Sngie -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE} \ 248272343Sngie -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE} \ 249272343Sngie -d key=/disk2,hostpath=disk2.img,size=${RAID_MEDIASIZE} \ 250272343Sngie ${RUMP_SERVER} 251272343Sngie 252272343Sngie atf_check -s exit:0 rump.raidctl -c raid.conf raid0 253272343Sngie 254272343Sngie # check if we we get what we wrote 255272343Sngie atf_check -s exit:0 -o file:testfile -e ignore \ 256272343Sngie rump.dd if=${rawraid} count=4 257272343Sngie} 258272343Sngie 259272343Sngieraid5_compfail_cleanup() 260272343Sngie{ 261272343Sngie export RUMP_SERVER=unix://sock 262272343Sngie rump.halt 263272343Sngie} 264272343Sngie 265272343Sngieatf_test_case raid5_normal cleanup 266272343Sngieraid5_normal_head() 267272343Sngie{ 268272343Sngie atf_set "descr" "Checks that RAID5 works after normal shutdown " \ 269272343Sngie "and 'raidctl -c' startup" 270272343Sngie atf_set "require.progs" "rump_server" 271272343Sngie} 272272343Sngie 273272343Sngieraid5_normal_body() 274272343Sngie{ 275272343Sngie makecfg 5 3 276272343Sngie export RUMP_SERVER=unix://sock 277272343Sngie atf_check -s exit:0 ${raidserver} \ 278272343Sngie -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE} \ 279272343Sngie -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE} \ 280272343Sngie -d key=/disk2,hostpath=disk2.img,size=${RAID_MEDIASIZE} \ 281272343Sngie ${RUMP_SERVER} 282272343Sngie 283272343Sngie atf_check -s exit:0 rump.raidctl -C raid.conf raid0 284272343Sngie atf_check -s exit:0 rump.raidctl -I 12345 raid0 285272343Sngie atf_check -s exit:0 -o ignore rump.raidctl -iv raid0 286272343Sngie 287272343Sngie # put some data there 288272343Sngie atf_check -s exit:0 -e ignore \ 289272343Sngie dd if=$(atf_get_srcdir)/t_raid of=testfile count=4 290272343Sngie atf_check -s exit:0 -e ignore -x \ 291272343Sngie "dd if=testfile | rump.dd of=${rawraid} conv=sync" 292272343Sngie 293272343Sngie # restart server after normal shutdown 294272343Sngie rump.halt 295272343Sngie 296272343Sngie atf_check -s exit:0 ${raidserver} \ 297272343Sngie -d key=/disk0,hostpath=disk0.img,size=${RAID_MEDIASIZE} \ 298272343Sngie -d key=/disk1,hostpath=disk1.img,size=${RAID_MEDIASIZE} \ 299272343Sngie -d key=/disk2,hostpath=disk2.img,size=${RAID_MEDIASIZE} \ 300272343Sngie ${RUMP_SERVER} 301272343Sngie 302272343Sngie atf_check -s exit:0 rump.raidctl -c raid.conf raid0 303272343Sngie 304272343Sngie # check if we we get what we wrote 305272343Sngie atf_check -s exit:0 -o file:testfile -e ignore \ 306272343Sngie rump.dd if=${rawraid} count=4 307272343Sngie} 308272343Sngie 309272343Sngieraid5_normal_cleanup() 310272343Sngie{ 311272343Sngie export RUMP_SERVER=unix://sock 312272343Sngie rump.halt 313272343Sngie} 314272343Sngie 315272343Sngieatf_init_test_cases() 316272343Sngie{ 317272343Sngie atf_add_test_case smalldisk 318272343Sngie atf_add_test_case raid1_normal 319272343Sngie atf_add_test_case raid1_comp0fail 320272343Sngie atf_add_test_case raid1_compfail 321272343Sngie atf_add_test_case raid5_normal 322272343Sngie atf_add_test_case raid5_compfail 323272343Sngie} 324