xref: /freebsd/tests/sys/geom/class/geom_subr.sh (revision 037479ff5ee18977b1c48e1e59770aad2f200a5a)
1#!/bin/sh
2# $FreeBSD$
3
4# NOTE: existence is sanity-checked in `geom_verify_temp_mds_file_existence(..)`
5TEST_MDS_FILE="$(mktemp test_mds.${0##*/}.XXXXXXXX)"
6
7devwait()
8{
9	while :; do
10		if [ -c /dev/${class}/${name} ]; then
11			return
12		fi
13		sleep 0.2
14	done
15}
16
17attach_md()
18{
19	local test_md
20
21	test_md=$(mdconfig -a "$@") || exit
22	echo $test_md >> $TEST_MDS_FILE || exit
23	echo $test_md
24}
25
26detach_md()
27{
28	local test_md unit
29
30	test_md=$1
31	unit=${test_md#md}
32	mdconfig -d -u $unit || exit
33	sed -i '' "/^${test_md}$/d" $TEST_MDS_FILE || exit
34}
35
36geom_test_cleanup()
37{
38	local test_md
39
40	if [ -f "$TEST_MDS_FILE" ]; then
41		while read test_md; do
42			# The "#" tells the TAP parser this is a comment
43			echo "# Removing test memory disk: $test_md"
44			mdconfig -d -u $test_md
45		done < $TEST_MDS_FILE
46		rm -f "$TEST_MDS_FILE"
47	fi
48}
49
50geom_verify_temp_mds_file_existence()
51{
52	if [ ! -f $TEST_MDS_FILE ]; then
53		echo "test md(4) devices file creation unsuccessful"
54		return 1
55	fi
56}
57
58geom_load_class_if_needed()
59{
60	local class=$1
61
62	# If the geom class isn't already loaded, try loading it.
63	if ! kldstat -q -m g_${class}; then
64		if ! geom ${class} load; then
65			echo "could not load module for geom class=${class}"
66			return 1
67		fi
68	fi
69	return 0
70}
71
72geom_atf_test_setup()
73{
74	if ! error_message=$(geom_verify_temp_mds_file_existence); then
75		atf_skip "$error_message"
76	fi
77	if ! error_message=$(geom_load_class_if_needed $class); then
78		atf_skip "$error_message"
79	fi
80}
81
82geom_tap_test_setup()
83{
84	if ! error_message=$(geom_verify_temp_mds_file_existence); then
85		echo "1..0 # SKIP $error_message"
86		exit 1
87	fi
88	if ! error_message=$(geom_load_class_if_needed $class); then
89		echo "1..0 # SKIP $error_message"
90		exit 0
91	fi
92}
93
94: ${ATF_TEST=false}
95if ! $ATF_TEST; then
96	geom_tap_test_setup
97fi
98