1# vim: filetype=sh
2# Common routines for replacement tests.
3
4# $FreeBSD$
5
6function check_vdev_action # <action> <expect> <opt> <disk1> [disk2]
7{
8	typeset action=$1
9	typeset expect=$2
10	typeset opt=$3
11	typeset disk1="$4"
12	typeset disk2="$5"
13
14	busy_path $TESTDIR
15	$expect $ZPOOL $action $opt $TESTPOOL $disk1 $disk2
16	reap_children
17	log_must $ZPOOL export $TESTPOOL
18	log_must $ZPOOL import $TESTPOOL
19	log_must $ZFS umount $TESTPOOL/$TESTFS
20	log_must $ZDB -cdui $TESTPOOL/$TESTFS
21	log_must $ZFS mount $TESTPOOL/$TESTFS
22}
23
24function pool_action # <tvd_type> <action> <actionexpect> <existexpect>
25{
26	typeset tvd_type=$1
27	typeset action=$2
28	typeset actionexpect=$3
29	typeset existexpect=$4
30
31	typeset disk=${disk_array[3]}
32	typeset short=${disk##/dev/}
33
34	for opt in "" "-f"; do
35		[ "$action" = "detach" -a "$opt" = "-f" ] && continue
36		create_pool $TESTPOOL $tvd_type ${disk_array[@]:0:3}
37		log_must $ZFS create $TESTPOOL/$TESTFS
38		log_must $ZFS set mountpoint=$TESTDIR $TESTPOOL/$TESTFS
39		check_vdev_action $action $actionexpect "$opt" \
40			${disk_array[0]} $disk
41
42		$existexpect eval "$ZPOOL iostat -v $TESTPOOL | $GREP -q $short"
43		destroy_pool $TESTPOOL
44	done
45}
46
47function replacement_cleanup
48{
49	poolexists $TESTPOOL && log_must $ZPOOL status $TESTPOOL
50	reap_children
51}
52