diff options
Diffstat (limited to 'tests/sys/geom/class/geom_subr.sh')
-rw-r--r-- | tests/sys/geom/class/geom_subr.sh | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/tests/sys/geom/class/geom_subr.sh b/tests/sys/geom/class/geom_subr.sh new file mode 100644 index 000000000000..8e3b12d5f620 --- /dev/null +++ b/tests/sys/geom/class/geom_subr.sh @@ -0,0 +1,83 @@ +#!/bin/sh + +TEST_MDS_FILE="${TMPDIR}/test_mds.$(basename $0)" + +devwait() +{ + while :; do + if [ -c /dev/${class}/${name} ]; then + return + fi + sleep 0.2 + done +} + +attach_md() +{ + local _md + local rv=$1 + shift + + [ -c /dev/mdctl ] || atf_skip "no /dev/mdctl to create md devices" + _md=$(mdconfig -a "$@") || exit + echo $_md >> $TEST_MDS_FILE || exit + eval "${rv}='${_md}'" +} + +detach_md() +{ + local test_md unit + + test_md=$1 + unit=${test_md#md} + mdconfig -d -u $unit || exit + sed -i '' "/^${test_md}$/d" $TEST_MDS_FILE || exit +} + +geom_test_cleanup() +{ + local test_md + + if [ -f "$TEST_MDS_FILE" ]; then + while read test_md; do + # The "#" tells the TAP parser this is a comment + echo "# Removing test memory disk: $test_md" + mdconfig -d -u $test_md + done < $TEST_MDS_FILE + rm -f "$TEST_MDS_FILE" + fi +} + +geom_load_class_if_needed() +{ + local class=$1 + + # If the geom class isn't already loaded, try loading it. + if ! kldstat -q -m g_${class}; then + if ! geom ${class} load; then + echo "could not load module for geom class=${class}" + return 1 + fi + fi + return 0 +} + +geom_atf_test_setup() +{ + if ! error_message=$(geom_load_class_if_needed $class); then + atf_skip "$error_message" + fi +} + +geom_tap_test_setup() +{ + if ! error_message=$(geom_load_class_if_needed $class); then + echo "1..0 # SKIP $error_message" + exit 0 + fi +} + +: ${ATF_TEST=false} +if ! $ATF_TEST; then + geom_tap_test_setup +fi |