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