]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - tests/sys/geom/class/geom_subr.sh
Unbreak geli/gmirror testcases if their geom classes cannot be loaded
[FreeBSD/FreeBSD.git] / tests / sys / geom / class / geom_subr.sh
1 #!/bin/sh
2 # $FreeBSD$
3
4 # NOTE: existence is sanity-checked in `geom_verify_temp_mds_file_existence(..)`
5 TEST_MDS_FILE="$(mktemp test_mds.${0##*/}.XXXXXXXX)"
6
7 devwait()
8 {
9         while :; do
10                 if [ -c /dev/${class}/${name} ]; then
11                         return
12                 fi
13                 sleep 0.2
14         done
15 }
16
17 attach_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
26 detach_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
36 geom_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
50 geom_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
58 geom_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
72 geom_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
82 geom_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}
95 if ! $ATF_TEST; then
96         geom_tap_test_setup
97 fi