Path: blob/main/tests/sys/geom/class/gate/ggate_test.sh
39638 views
PIDFILE=ggated.pid1PLAINFILES=plainfiles2CONF=gg.exports34atf_test_case ggatec_trim cleanup5ggatec_trim_head()6{7atf_set "descr" "ggatec survives a trim"8atf_set "require.progs" "ggatec"9atf_set "require.user" "root"10atf_set "timeout" 6011}1213ggatec_trim_body()14{15load_ggate1617port=3308018us=$(alloc_ggate_dev)19work=$(alloc_md)20atf_check -e ignore -o ignore dd if=/dev/random of=/dev/$work bs=1m count=1 conv=notrunc21echo $CONF >> $PLAINFILES22echo "localhost RW /dev/$work" > $CONF23atf_check ggated -p $port -F $PIDFILE $CONF24atf_check ggatec create -p $port -u $us localhost /dev/$work25ggate_dev=/dev/ggate${us}26wait_for_ggate_device ${ggate_dev}2728# ggatec only supports read or write.29atf_check -s not-exit:0 -e ignore -o ignore trim -q -f ${ggate_dev}30}3132ggatec_trim_cleanup()33{34common_cleanup35}363738atf_test_case ggated cleanup39ggated_head()40{41atf_set "descr" "ggated can proxy geoms"42atf_set "require.progs" "ggatec ggated"43atf_set "require.user" "root"44atf_set "timeout" 6045}4647ggated_body()48{49if [ "$(atf_config_get ci false)" = "true" ] && \50[ "$(uname -p)" = "i386" ]; then51atf_skip "https://bugs.freebsd.org/244737"52fi5354load_ggate5556port=3308157us=$(alloc_ggate_dev)58work=$(alloc_md)59src=$(alloc_md)6061atf_check -e ignore -o ignore \62dd if=/dev/random of=/dev/$work bs=1m count=1 conv=notrunc63atf_check -e ignore -o ignore \64dd if=/dev/random of=/dev/$src bs=1m count=1 conv=notrunc6566echo $CONF >> $PLAINFILES67echo "127.0.0.1 RW /dev/$work" > $CONF6869atf_check ggated -p $port -F $PIDFILE $CONF70atf_check ggatec create -p $port -u $us 127.0.0.1 /dev/$work7172ggate_dev=/dev/ggate${us}7374wait_for_ggate_device ${ggate_dev}7576atf_check -e ignore -o ignore \77dd if=/dev/${src} of=${ggate_dev} bs=1m count=1 conv=notrunc7879checksum /dev/$src /dev/$work80}8182ggated_cleanup()83{84common_cleanup85}8687atf_test_case ggatel_file cleanup88ggatel_file_head()89{90atf_set "descr" "ggatel can proxy files"91atf_set "require.progs" "ggatel"92atf_set "require.user" "root"93atf_set "timeout" 1594}9596ggatel_file_body()97{98load_ggate99100us=$(alloc_ggate_dev)101102echo src work >> ${PLAINFILES}103dd if=/dev/random of=work bs=1m count=1104dd if=/dev/random of=src bs=1m count=1105106atf_check ggatel create -u $us work107108ggate_dev=/dev/ggate${us}109110wait_for_ggate_device ${ggate_dev}111112atf_check -e ignore -o ignore \113dd if=src of=${ggate_dev} bs=1m count=1 conv=notrunc114115checksum src work116}117118ggatel_file_cleanup()119{120common_cleanup121}122123atf_test_case ggatel_md cleanup124ggatel_md_head()125{126atf_set "descr" "ggatel can proxy files"127atf_set "require.progs" "ggatel"128atf_set "require.user" "root"129atf_set "timeout" 15130}131132ggatel_md_body()133{134load_ggate135136us=$(alloc_ggate_dev)137work=$(alloc_md)138src=$(alloc_md)139140atf_check -e ignore -o ignore \141dd if=/dev/random of=$work bs=1m count=1 conv=notrunc142atf_check -e ignore -o ignore \143dd if=/dev/random of=$src bs=1m count=1 conv=notrunc144145atf_check ggatel create -u $us /dev/$work146147ggate_dev=/dev/ggate${us}148149wait_for_ggate_device ${ggate_dev}150151atf_check -e ignore -o ignore \152dd if=/dev/$src of=${ggate_dev} bs=1m count=1 conv=notrunc153154checksum /dev/$src /dev/$work155}156157ggatel_md_cleanup()158{159common_cleanup160}161162atf_init_test_cases()163{164atf_add_test_case ggated165atf_add_test_case ggatel_file166atf_add_test_case ggatel_md167atf_add_test_case ggatec_trim168}169170alloc_ggate_dev()171{172local us173174us=0175while [ -c /dev/ggate${us} ]; do176: $(( us += 1 ))177done178echo ${us} > ggate.devs179echo ${us}180}181182alloc_md()183{184local md185186md=$(mdconfig -a -t malloc -s 1M) || \187atf_fail "failed to allocate md device"188echo ${md} >> md.devs189echo ${md}190}191192checksum()193{194local src work195src=$1196work=$2197198src_checksum=$(md5 -q $src)199work_checksum=$(md5 -q $work)200201if [ "$work_checksum" != "$src_checksum" ]; then202atf_fail "work md5 checksum didn't match"203fi204205ggate_checksum=$(md5 -q /dev/ggate${us})206if [ "$ggate_checksum" != "$src_checksum" ]; then207atf_fail "ggate md5 checksum didn't match"208fi209}210211common_cleanup()212{213if [ -f "ggate.devs" ]; then214while read test_ggate; do215ggatec destroy -f -u $test_ggate >/dev/null216done < ggate.devs217rm ggate.devs218fi219220if [ -f "$PIDFILE" ]; then221pkill -F "$PIDFILE"222rm $PIDFILE223fi224225if [ -f "PLAINFILES" ]; then226while read f; do227rm -f ${f}228done < ${PLAINFILES}229rm ${PLAINFILES}230fi231232if [ -f "md.devs" ]; then233while read test_md; do234# ggatec destroy doesn't release the provider235# synchronously, so we may need to retry destroying it.236while ! mdconfig -d -u $test_md; do237sleep 0.1238done239done < md.devs240rm md.devs241fi242true243}244245load_ggate()246{247local class=gate248249# If the geom class isn't already loaded, try loading it.250if ! kldstat -q -m g_${class}; then251if ! geom ${class} load; then252atf_skip "could not load module for geom class=${class}"253fi254fi255}256257# Bug 204616: ggatel(8) creates /dev/ggate* asynchronously if `ggatel create`258# isn't called with `-v`.259wait_for_ggate_device()260{261ggate_device=$1262263while [ ! -c $ggate_device ]; do264sleep 0.5265done266}267268269