xref: /freebsd/tests/sys/geom/class/geom_subr.sh (revision a9ebbf33ea849dab97f039bdec0fa0f7edefbac5)
109d98641SEnji Cooper#!/bin/sh
209d98641SEnji Cooper# $FreeBSD$
309d98641SEnji Cooper
4*a9ebbf33SAlan SomersTEST_MDS_FILE="${TMPDIR}/test_mds.$(basename $0)"
5cf551b8aSAlan Somers
609d98641SEnji Cooperdevwait()
709d98641SEnji Cooper{
809d98641SEnji Cooper	while :; do
909d98641SEnji Cooper		if [ -c /dev/${class}/${name} ]; then
1009d98641SEnji Cooper			return
1109d98641SEnji Cooper		fi
1209d98641SEnji Cooper		sleep 0.2
1309d98641SEnji Cooper	done
1409d98641SEnji Cooper}
1509d98641SEnji Cooper
1609d98641SEnji Cooperattach_md()
1709d98641SEnji Cooper{
1809d98641SEnji Cooper	local test_md
1909d98641SEnji Cooper
2009d98641SEnji Cooper	test_md=$(mdconfig -a "$@") || exit
2109d98641SEnji Cooper	echo $test_md >> $TEST_MDS_FILE || exit
2209d98641SEnji Cooper	echo $test_md
2309d98641SEnji Cooper}
2409d98641SEnji Cooper
25ca623e07SMark Johnstondetach_md()
26ca623e07SMark Johnston{
27ca623e07SMark Johnston	local test_md unit
28ca623e07SMark Johnston
29ca623e07SMark Johnston	test_md=$1
30ca623e07SMark Johnston	unit=${test_md#md}
31ca623e07SMark Johnston	mdconfig -d -u $unit || exit
32ca623e07SMark Johnston	sed -i '' "/^${test_md}$/d" $TEST_MDS_FILE || exit
33ca623e07SMark Johnston}
34ca623e07SMark Johnston
3509d98641SEnji Coopergeom_test_cleanup()
3609d98641SEnji Cooper{
3709d98641SEnji Cooper	local test_md
3809d98641SEnji Cooper
3909d98641SEnji Cooper	if [ -f "$TEST_MDS_FILE" ]; then
4009d98641SEnji Cooper		while read test_md; do
4109d98641SEnji Cooper			# The "#" tells the TAP parser this is a comment
4209d98641SEnji Cooper			echo "# Removing test memory disk: $test_md"
4309d98641SEnji Cooper			mdconfig -d -u $test_md
4409d98641SEnji Cooper		done < $TEST_MDS_FILE
4509d98641SEnji Cooper		rm -f "$TEST_MDS_FILE"
46cf551b8aSAlan Somers	fi
4709d98641SEnji Cooper}
4809d98641SEnji Cooper
49cf551b8aSAlan Somersgeom_load_class_if_needed()
50cf551b8aSAlan Somers{
51cf551b8aSAlan Somers	local class=$1
52ca623e07SMark Johnston
5309d98641SEnji Cooper	# If the geom class isn't already loaded, try loading it.
5409d98641SEnji Cooper	if ! kldstat -q -m g_${class}; then
5509d98641SEnji Cooper		if ! geom ${class} load; then
56cf551b8aSAlan Somers			echo "could not load module for geom class=${class}"
57cf551b8aSAlan Somers			return 1
58cf551b8aSAlan Somers		fi
59cf551b8aSAlan Somers	fi
60cf551b8aSAlan Somers	return 0
61cf551b8aSAlan Somers}
62cf551b8aSAlan Somers
63cf551b8aSAlan Somersgeom_atf_test_setup()
64cf551b8aSAlan Somers{
65cf551b8aSAlan Somers	if ! error_message=$(geom_load_class_if_needed $class); then
66cf551b8aSAlan Somers		atf_skip "$error_message"
67cf551b8aSAlan Somers	fi
68cf551b8aSAlan Somers}
69cf551b8aSAlan Somers
70cf551b8aSAlan Somersgeom_tap_test_setup()
71cf551b8aSAlan Somers{
72cf551b8aSAlan Somers	if ! error_message=$(geom_load_class_if_needed $class); then
73cf551b8aSAlan Somers		echo "1..0 # SKIP $error_message"
74da611c05SEnji Cooper		exit 0
7509d98641SEnji Cooper	fi
76cf551b8aSAlan Somers}
7709d98641SEnji Cooper
78cf551b8aSAlan Somers: ${ATF_TEST=false}
79cf551b8aSAlan Somersif ! $ATF_TEST; then
80cf551b8aSAlan Somers	geom_tap_test_setup
8109d98641SEnji Cooperfi
82