1311893Sasomers# $FreeBSD: stable/11/tests/sys/geom/class/gate/ggate_test.sh 361128 2020-05-17 02:40:49Z asomers $ 2311893Sasomers 3311893SasomersPIDFILE=ggated.pid 4311893SasomersPLAINFILES=plainfiles 5311893SasomersPORT=33080 6311893SasomersCONF=gg.exports 7311893Sasomers 8311893Sasomersatf_test_case ggated cleanup 9311893Sasomersggated_head() 10311893Sasomers{ 11311893Sasomers atf_set "descr" "ggated can proxy geoms" 12311893Sasomers atf_set "require.progs" "ggatec ggated" 13311893Sasomers atf_set "require.user" "root" 14311893Sasomers atf_set "timeout" 60 15311893Sasomers} 16311893Sasomers 17311893Sasomersggated_body() 18311893Sasomers{ 19323300Sngie load_ggate 20323300Sngie 21311893Sasomers us=$(alloc_ggate_dev) 22311893Sasomers work=$(alloc_md) 23311893Sasomers src=$(alloc_md) 24311893Sasomers 25313753Sasomers atf_check -e ignore -o ignore \ 26313753Sasomers dd if=/dev/random of=/dev/$work bs=1m count=1 conv=notrunc 27313753Sasomers atf_check -e ignore -o ignore \ 28313753Sasomers dd if=/dev/random of=/dev/$src bs=1m count=1 conv=notrunc 29311893Sasomers 30311893Sasomers echo $CONF >> $PLAINFILES 31311893Sasomers echo "127.0.0.1 RW /dev/$work" > $CONF 32311893Sasomers 33311893Sasomers atf_check ggated -p $PORT -F $PIDFILE $CONF 34313753Sasomers atf_check ggatec create -p $PORT -u $us 127.0.0.1 /dev/$work 35311893Sasomers 36313753Sasomers ggate_dev=/dev/ggate${us} 37311893Sasomers 38313753Sasomers wait_for_ggate_device ${ggate_dev} 39313753Sasomers 40313753Sasomers atf_check -e ignore -o ignore \ 41313753Sasomers dd if=/dev/${src} of=${ggate_dev} bs=1m count=1 conv=notrunc 42313753Sasomers 43311893Sasomers checksum /dev/$src /dev/$work 44311893Sasomers} 45311893Sasomers 46311893Sasomersggated_cleanup() 47311893Sasomers{ 48311893Sasomers common_cleanup 49311893Sasomers} 50311893Sasomers 51311893Sasomersatf_test_case ggatel_file cleanup 52311893Sasomersggatel_file_head() 53311893Sasomers{ 54311893Sasomers atf_set "descr" "ggatel can proxy files" 55311893Sasomers atf_set "require.progs" "ggatel" 56311893Sasomers atf_set "require.user" "root" 57311893Sasomers atf_set "timeout" 15 58311893Sasomers} 59311893Sasomers 60311893Sasomersggatel_file_body() 61311893Sasomers{ 62323300Sngie load_ggate 63323300Sngie 64311893Sasomers us=$(alloc_ggate_dev) 65311893Sasomers 66311893Sasomers echo src work >> ${PLAINFILES} 67311893Sasomers dd if=/dev/random of=work bs=1m count=1 68311893Sasomers dd if=/dev/random of=src bs=1m count=1 69311893Sasomers 70311893Sasomers atf_check ggatel create -u $us work 71311893Sasomers 72313753Sasomers ggate_dev=/dev/ggate${us} 73311893Sasomers 74313753Sasomers wait_for_ggate_device ${ggate_dev} 75313753Sasomers 76313753Sasomers atf_check -e ignore -o ignore \ 77313753Sasomers dd if=src of=${ggate_dev} bs=1m count=1 conv=notrunc 78313753Sasomers 79311893Sasomers checksum src work 80311893Sasomers} 81311893Sasomers 82311893Sasomersggatel_file_cleanup() 83311893Sasomers{ 84311893Sasomers common_cleanup 85311893Sasomers} 86311893Sasomers 87311893Sasomersatf_test_case ggatel_md cleanup 88311893Sasomersggatel_md_head() 89311893Sasomers{ 90311893Sasomers atf_set "descr" "ggatel can proxy files" 91311893Sasomers atf_set "require.progs" "ggatel" 92311893Sasomers atf_set "require.user" "root" 93311893Sasomers atf_set "timeout" 15 94311893Sasomers} 95311893Sasomers 96311893Sasomersggatel_md_body() 97311893Sasomers{ 98323300Sngie load_ggate 99323300Sngie 100311893Sasomers us=$(alloc_ggate_dev) 101311893Sasomers work=$(alloc_md) 102311893Sasomers src=$(alloc_md) 103311893Sasomers 104313753Sasomers atf_check -e ignore -o ignore \ 105313753Sasomers dd if=/dev/random of=$work bs=1m count=1 conv=notrunc 106313753Sasomers atf_check -e ignore -o ignore \ 107313753Sasomers dd if=/dev/random of=$src bs=1m count=1 conv=notrunc 108311893Sasomers 109311893Sasomers atf_check ggatel create -u $us /dev/$work 110311893Sasomers 111313753Sasomers ggate_dev=/dev/ggate${us} 112311893Sasomers 113313753Sasomers wait_for_ggate_device ${ggate_dev} 114313753Sasomers 115313753Sasomers atf_check -e ignore -o ignore \ 116313753Sasomers dd if=/dev/$src of=${ggate_dev} bs=1m count=1 conv=notrunc 117313753Sasomers 118311893Sasomers checksum /dev/$src /dev/$work 119311893Sasomers} 120311893Sasomers 121311893Sasomersggatel_md_cleanup() 122311893Sasomers{ 123311893Sasomers common_cleanup 124311893Sasomers} 125311893Sasomers 126311893Sasomersatf_init_test_cases() 127311893Sasomers{ 128311893Sasomers atf_add_test_case ggated 129311893Sasomers atf_add_test_case ggatel_file 130311893Sasomers atf_add_test_case ggatel_md 131311893Sasomers} 132311893Sasomers 133311893Sasomersalloc_ggate_dev() 134311893Sasomers{ 135311893Sasomers local us 136311893Sasomers 137311893Sasomers us=0 138311893Sasomers while [ -c /dev/ggate${us} ]; do 139311893Sasomers : $(( us += 1 )) 140311893Sasomers done 141311893Sasomers echo ${us} > ggate.devs 142311893Sasomers echo ${us} 143311893Sasomers} 144311893Sasomers 145311893Sasomersalloc_md() 146311893Sasomers{ 147311893Sasomers local md 148311893Sasomers 149311893Sasomers md=$(mdconfig -a -t malloc -s 1M) || \ 150311893Sasomers atf_fail "failed to allocate md device" 151311893Sasomers echo ${md} >> md.devs 152311893Sasomers echo ${md} 153311893Sasomers} 154311893Sasomers 155311893Sasomerschecksum() 156311893Sasomers{ 157311893Sasomers local src work 158311893Sasomers src=$1 159311893Sasomers work=$2 160311893Sasomers 161311893Sasomers src_checksum=$(md5 -q $src) 162311893Sasomers work_checksum=$(md5 -q $work) 163311893Sasomers 164311893Sasomers if [ "$work_checksum" != "$src_checksum" ]; then 165311893Sasomers atf_fail "work md5 checksum didn't match" 166311893Sasomers fi 167311893Sasomers 168311893Sasomers ggate_checksum=$(md5 -q /dev/ggate${us}) 169311893Sasomers if [ "$ggate_checksum" != "$src_checksum" ]; then 170311893Sasomers atf_fail "ggate md5 checksum didn't match" 171311893Sasomers fi 172311893Sasomers} 173311893Sasomers 174311893Sasomerscommon_cleanup() 175311893Sasomers{ 176311893Sasomers if [ -f "ggate.devs" ]; then 177311893Sasomers while read test_ggate; do 178311893Sasomers ggatec destroy -f -u $test_ggate >/dev/null 179311893Sasomers done < ggate.devs 180311893Sasomers rm ggate.devs 181311893Sasomers fi 182311893Sasomers 183311893Sasomers if [ -f "$PIDFILE" ]; then 184311893Sasomers pkill -F "$PIDFILE" 185311893Sasomers rm $PIDFILE 186311893Sasomers fi 187311893Sasomers 188311893Sasomers if [ -f "PLAINFILES" ]; then 189311893Sasomers while read f; do 190311893Sasomers rm -f ${f} 191311893Sasomers done < ${PLAINFILES} 192311893Sasomers rm ${PLAINFILES} 193311893Sasomers fi 194311893Sasomers 195311893Sasomers if [ -f "md.devs" ]; then 196311893Sasomers while read test_md; do 197361128Sasomers # ggatec destroy doesn't release the provider 198361128Sasomers # synchronously, so we may need to retry destroying it. 199361128Sasomers while ! mdconfig -d -u $test_md; do 200361128Sasomers sleep 0.1 201361128Sasomers done 202311893Sasomers done < md.devs 203311893Sasomers rm md.devs 204311893Sasomers fi 205311893Sasomers true 206311893Sasomers} 207313753Sasomers 208323300Sngieload_ggate() 209323300Sngie{ 210323300Sngie local class=gate 211323300Sngie 212323300Sngie # If the geom class isn't already loaded, try loading it. 213323300Sngie if ! kldstat -q -m g_${class}; then 214323300Sngie if ! geom ${class} load; then 215323300Sngie atf_skip "could not load module for geom class=${class}" 216323300Sngie fi 217323300Sngie fi 218323300Sngie} 219323300Sngie 220313753Sasomers# Bug 204616: ggatel(8) creates /dev/ggate* asynchronously if `ggatel create` 221313753Sasomers# isn't called with `-v`. 222313753Sasomerswait_for_ggate_device() 223313753Sasomers{ 224313753Sasomers ggate_device=$1 225313753Sasomers 226313753Sasomers while [ ! -c $ggate_device ]; do 227313753Sasomers sleep 0.5 228313753Sasomers done 229313753Sasomers} 230