xref: /freebsd/tests/sys/geom/class/geom_subr.sh (revision 96950419f15510287080c557174e0d8409f06956)
109d98641SEnji Cooper#!/bin/sh
209d98641SEnji Cooper
3a9ebbf33SAlan SomersTEST_MDS_FILE="${TMPDIR}/test_mds.$(basename $0)"
4cf551b8aSAlan Somers
509d98641SEnji Cooperdevwait()
609d98641SEnji Cooper{
709d98641SEnji Cooper	while :; do
809d98641SEnji Cooper		if [ -c /dev/${class}/${name} ]; then
909d98641SEnji Cooper			return
1009d98641SEnji Cooper		fi
1109d98641SEnji Cooper		sleep 0.2
1209d98641SEnji Cooper	done
1309d98641SEnji Cooper}
1409d98641SEnji Cooper
1509d98641SEnji Cooperattach_md()
1609d98641SEnji Cooper{
17*96950419SGleb Smirnoff	local _md
18*96950419SGleb Smirnoff	local rv=$1
19*96950419SGleb Smirnoff	shift
2009d98641SEnji Cooper
21ea823622SWarner Losh	[ -c /dev/mdctl ] || atf_skip "no /dev/mdctl to create md devices"
22*96950419SGleb Smirnoff	_md=$(mdconfig -a "$@") || exit
23*96950419SGleb Smirnoff	echo $_md >> $TEST_MDS_FILE || exit
24*96950419SGleb Smirnoff	eval "${rv}='${_md}'"
2509d98641SEnji Cooper}
2609d98641SEnji Cooper
27ca623e07SMark Johnstondetach_md()
28ca623e07SMark Johnston{
29ca623e07SMark Johnston	local test_md unit
30ca623e07SMark Johnston
31ca623e07SMark Johnston	test_md=$1
32ca623e07SMark Johnston	unit=${test_md#md}
33ca623e07SMark Johnston	mdconfig -d -u $unit || exit
34ca623e07SMark Johnston	sed -i '' "/^${test_md}$/d" $TEST_MDS_FILE || exit
35ca623e07SMark Johnston}
36ca623e07SMark Johnston
3709d98641SEnji Coopergeom_test_cleanup()
3809d98641SEnji Cooper{
3909d98641SEnji Cooper	local test_md
4009d98641SEnji Cooper
4109d98641SEnji Cooper	if [ -f "$TEST_MDS_FILE" ]; then
4209d98641SEnji Cooper		while read test_md; do
4309d98641SEnji Cooper			# The "#" tells the TAP parser this is a comment
4409d98641SEnji Cooper			echo "# Removing test memory disk: $test_md"
4509d98641SEnji Cooper			mdconfig -d -u $test_md
4609d98641SEnji Cooper		done < $TEST_MDS_FILE
4709d98641SEnji Cooper		rm -f "$TEST_MDS_FILE"
48cf551b8aSAlan Somers	fi
4909d98641SEnji Cooper}
5009d98641SEnji Cooper
51cf551b8aSAlan Somersgeom_load_class_if_needed()
52cf551b8aSAlan Somers{
53cf551b8aSAlan Somers	local class=$1
54ca623e07SMark Johnston
5509d98641SEnji Cooper	# If the geom class isn't already loaded, try loading it.
5609d98641SEnji Cooper	if ! kldstat -q -m g_${class}; then
5709d98641SEnji Cooper		if ! geom ${class} load; then
58cf551b8aSAlan Somers			echo "could not load module for geom class=${class}"
59cf551b8aSAlan Somers			return 1
60cf551b8aSAlan Somers		fi
61cf551b8aSAlan Somers	fi
62cf551b8aSAlan Somers	return 0
63cf551b8aSAlan Somers}
64cf551b8aSAlan Somers
65cf551b8aSAlan Somersgeom_atf_test_setup()
66cf551b8aSAlan Somers{
67cf551b8aSAlan Somers	if ! error_message=$(geom_load_class_if_needed $class); then
68cf551b8aSAlan Somers		atf_skip "$error_message"
69cf551b8aSAlan Somers	fi
70cf551b8aSAlan Somers}
71cf551b8aSAlan Somers
72cf551b8aSAlan Somersgeom_tap_test_setup()
73cf551b8aSAlan Somers{
74cf551b8aSAlan Somers	if ! error_message=$(geom_load_class_if_needed $class); then
75cf551b8aSAlan Somers		echo "1..0 # SKIP $error_message"
76da611c05SEnji Cooper		exit 0
7709d98641SEnji Cooper	fi
78cf551b8aSAlan Somers}
7909d98641SEnji Cooper
80cf551b8aSAlan Somers: ${ATF_TEST=false}
81cf551b8aSAlan Somersif ! $ATF_TEST; then
82cf551b8aSAlan Somers	geom_tap_test_setup
8309d98641SEnji Cooperfi
84